[backfire] remove unused kernel config, files & patches in 10.03
authornico <nico@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 3 Apr 2010 01:57:27 +0000 (01:57 +0000)
committernico <nico@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sat, 3 Apr 2010 01:57:27 +0000 (01:57 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@20666 3c298f89-4303-0410-b956-a3cf2f4a3e73

549 files changed:
target/linux/ar71xx/config-2.6.33 [deleted file]
target/linux/ar71xx/config-2.6.34 [deleted file]
target/linux/ar71xx/patches-2.6.33/001-ar71xx_core.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/002-ar71xx_pci.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/003-ar71xx_usb_host.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/004-ar71xx_spi_controller.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/005-ar71xx_mac_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/006-ar71xx_wdt_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/007-ar91xx_flash_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/101-ksz8041_phy_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/102-mtd_m25p80_add_myloader_parser.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/104-mtd_m25p80_add_redboot_parser.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/107-mtd-SST39VF6401B-support.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/108-mtd_fix_cfi_cmdset_0002_status_check.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/109-mtd-wrt160nl-trx-parser.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/110-usb-ehci-add-war-for-synopsys-hc-bug.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/111-mtd-cfi_cmdset_0002-force-word-write.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/120-dsa-trailer-tag-validation-fix.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/121-dsa-add-88e6063-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/122-dsa-add-qinq-tagging-format.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/123-dsa-add-ar7240-built-in-switch-support.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/140-redboot_partition_scan.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/200-rb4xx_nand_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/201-ap83_spi_controller.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/202-spi_vsc7385_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/203-pb44_spi_controller.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/205-wndr3700-usb-led-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/206-nxp-74hc153-gpio-chip-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/207-rb750-led-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/208-rb750-nand-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/300-mips_fw_myloader.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/400-mips-multi-machine-update.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/901-get_c0_compare_irq_function.patch [deleted file]
target/linux/ar71xx/patches-2.6.33/902-mips_clocksource_init_war.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/001-ar71xx_core.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/002-ar71xx_pci.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/003-ar71xx_usb_host.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/004-ar71xx_spi_controller.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/005-ar71xx_mac_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/006-ar71xx_wdt_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/007-ar91xx_flash_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/101-ksz8041_phy_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/102-mtd_m25p80_add_myloader_parser.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/104-mtd_m25p80_add_redboot_parser.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/107-mtd-SST39VF6401B-support.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/108-mtd_fix_cfi_cmdset_0002_status_check.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/109-mtd-wrt160nl-trx-parser.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/110-usb-ehci-add-war-for-synopsys-hc-bug.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/111-mtd-cfi_cmdset_0002-force-word-write.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/120-dsa-trailer-tag-validation-fix.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/121-dsa-add-88e6063-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/122-dsa-add-qinq-tagging-format.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/123-dsa-add-ar7240-built-in-switch-support.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/140-redboot_partition_scan.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/200-rb4xx_nand_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/201-ap83_spi_controller.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/202-spi_vsc7385_driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/203-pb44_spi_controller.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/205-wndr3700-usb-led-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/206-nxp-74hc153-gpio-chip-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/207-rb750-led-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/208-rb750-nand-driver.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/300-mips_fw_myloader.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/901-get_c0_compare_irq_function.patch [deleted file]
target/linux/ar71xx/patches-2.6.34/902-mips_clocksource_init_war.patch [deleted file]
target/linux/atheros/config-2.6.33 [deleted file]
target/linux/atheros/patches-2.6.33/001-get_c0_compare_int_fix.patch [deleted file]
target/linux/atheros/patches-2.6.33/002-mips_clocksource_init_war.patch [deleted file]
target/linux/atheros/patches-2.6.33/100-board.patch [deleted file]
target/linux/atheros/patches-2.6.33/101-early-printk-support.patch [deleted file]
target/linux/atheros/patches-2.6.33/105-ar2315_pci.patch [deleted file]
target/linux/atheros/patches-2.6.33/110-ar2313_ethernet.patch [deleted file]
target/linux/atheros/patches-2.6.33/120-spiflash.patch [deleted file]
target/linux/atheros/patches-2.6.33/130-watchdog.patch [deleted file]
target/linux/atheros/patches-2.6.33/140-redboot_partition_scan.patch [deleted file]
target/linux/atheros/patches-2.6.33/141-redboot_various_erase_size_fix.patch [deleted file]
target/linux/atheros/patches-2.6.33/200-ar2313_enable_mvswitch.patch [deleted file]
target/linux/atheros/patches-2.6.33/210-reset_button.patch [deleted file]
target/linux/atheros/patches-2.6.33/220-enet_micrel_workaround.patch [deleted file]
target/linux/brcm47xx/config-2.6.33 [deleted file]
target/linux/brcm47xx/patches-2.6.33/110-flash_map.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/130-remove_scache.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/150-cpu_fixes.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/160-kmap_coherent.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/170-128MB_ram_bugfix.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/180-ssb_extif_interrupt.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/210-b44_phy_fix.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/220-bcm5354.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/250-ohci-ssb-usb2.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/260-ohci-set-dma-mask.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/270-ehci-ssb.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/275-usb2-bcm5354-init.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/280-activate_ssb_support_in_usb.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/300-fork_cacheflush.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/301-kmod-fuse-dcache-bug-r4k.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/310-no_highpage.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/400-arch-bcm47xx.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/601-mips-remove-pci-collision-check.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/700-ssb-gigabit-ethernet-driver.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/800-fix_cfe_detection.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/812-disable_wgt634u_crap.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/813-use_netdev_alloc_skb.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/900-disable_early_printk.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/920-cache-wround.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/930-bcm47xx-pci-iomem.patch [deleted file]
target/linux/brcm47xx/patches-2.6.33/940-bcm47xx-yenta.patch [deleted file]
target/linux/brcm63xx/config-2.6.33 [deleted file]
target/linux/brcm63xx/patches-2.6.33/007-usb-ohci-support.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/008-usb-ehci-support.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/009-fix-double-gpio-registration.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/010-add_bcm63xx_ohci_controller.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/011-add_bcm63xx_ehci_controller.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/012-mips_add_readl_writel_be_accessors.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/020-watchdog.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/040-bcm963xx_flashmap.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/070_bcm63xx_enet_vlan_incoming_fixed.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/100-reset_buttons.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/110-gpiodev.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/120-board_rta1025w_16.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/130-board_DWVS0.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/140-new_bcm96348gw_leds.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/150-alice_gate2_leds.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/160-fix_gpio_count.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/170-board_livebox.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/180-udc_preliminary_support.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/190-typo_cpu_features_override.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/210-init_gpio_out_low_high_current_value_at_boot.patch [deleted file]
target/linux/brcm63xx/patches-2.6.33/220-board-D4PW.patch [deleted file]
target/linux/generic-2.6/config-2.6.25 [deleted file]
target/linux/generic-2.6/config-2.6.31 [deleted file]
target/linux/generic-2.6/config-2.6.33 [deleted file]
target/linux/generic-2.6/config-2.6.34 [deleted file]
target/linux/generic-2.6/files-2.6.25/drivers/char/gpio_dev.c [deleted file]
target/linux/generic-2.6/files-2.6.25/drivers/input/misc/gpio_buttons.c [deleted file]
target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-default-on.c [deleted file]
target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-morse.c [deleted file]
target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-netdev.c [deleted file]
target/linux/generic-2.6/patches-2.6.25/001-squashfs.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/002-lzma_decompress.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/003-squashfs_lzma.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/004-extra_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/005-squashfs_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/006-gcc4_inline_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/007-samsung_flash.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/009-revert_intel_flash_breakage.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/010-disable_old_squashfs_compatibility.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/011-mips_boot.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/024-mips_disable_fpu.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/060-block2mtd_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/065-rootfs_split.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/070-redboot_space.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/080-mtd_plat_nand_chip_fixup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/100-netfilter_layer7_2.21.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/101-netfilter_layer7_pktmatch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/180-netfilter_depends.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/190-netfilter_rtsp.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/200-sched_esfq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/204-jffs2_eofdetect.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/207-powerpc_asm_segment_h.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/208-rtl8110sb_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/209-mini_fo.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/210-mini_fo_2.6.25_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/211-mini_fo_2.6.25_dentry_open_war.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/213-kobject_uevent.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/220-sound_kconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/30-fix_conflicting_getline.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/400-ledtrig_morse.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/402-ledtrig_default_on.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/403-ds1672_detect.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/410-gpio_buttons.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/420-gpiodev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/510-yaffs_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/512-yaffs_2.6.25_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/600-phy_extension.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/700-powerpc_git.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/801-usb_serial_endpoint_size.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/840-unable_to_open_console.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/850-jffs2_erase_progress_indicator.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/900-headers_type_and_time.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/902-darwin_scripts_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/903-hostap_txpower.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/903-stddef_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/904-ls_time_locale.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/905-i386_build.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/906-msdosfs_header.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/910-m25p80_redboot_partitions.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/921-gpio_spi_driver.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/922-gpiommc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/923-gpiommc-configfs-locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/930-ppc_big_endian_io_memory_accessors.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/940-arm_mach_types.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/960-backport_gpiolib_better_rmmod_infrastructure.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/961-backport_gpio_define_gpio_valid.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/963-backport_gpio_chip_reserve.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/964-backport_gpiolib_fix_off_by_one_errors.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/971-ocf_20080917.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/972-ocf_compile_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/981-backport_usb_serial_sierrawireless_ids.patch [deleted file]
target/linux/generic-2.6/patches-2.6.25/999-use_preinit_as_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/001-squashfs_move_zlib_decomp.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/002-squashfs_factor_out_remaining_zlib.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/003-squashfs_add_decompressor_framework.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/004-squashfs_add_decompressor_lzma_lzo.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/005-squashfs_extra_parameter.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/006-squashfs_add_lzma.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/007-squashfs_make_lzma_available.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/011-mips_boot.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/012-extra_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/013-gcc4_inline_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/014-samsung_flash [deleted file]
target/linux/generic-2.6/patches-2.6.31/020-mips_multi_machine_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/021-mips_image_cmdline_hack.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/022-mips_use_generic_thread_info_allocator.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/025-mips_disable_fpu.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/027-mips_module_reloc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/028-module_exports.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/029-arm_module_unresolved_weak_sym.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/030-pci_disable_common_quirks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/031-ppc_gcc_build_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/032-mips_vmlinux_lds.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/049-byteshift_h_fix_usage_for_compressed_kernels.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/050-lzo_compressed_kernels.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/051-lzo_compressed_kernel_for_arm.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/052-lzo_compressed_kernel_for_x86.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/053-lzo_compression_for_initramfs.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/055-lzma_arm_kernel.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/060-block2mtd_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/065-rootfs_split.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/066-block2mtd_probe.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/070-redboot_space.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/071-redboot_boardconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/080-mtd_plat_nand_chip_fixup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/081-mtd_myloader_partition_parser.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/082-mtd_info_move_forward_decl.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/090-mtd_fix_nand_correct_data_return_code.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/100-netfilter_layer7_2.21.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/101-netfilter_layer7_pktmatch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/110-netfilter_match_speedup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/150-netfilter_imq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/180-netfilter_depends.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/190-netfilter_rtsp.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/200-sched_esfq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/201-jhash3.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/202-mips_mem_functions_performance.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/203-slab_maxsize.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/204-jffs2_eofdetect.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/205-skb_padding.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/207-powerpc_asm_segment_h.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/209-mini_fo.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/210-mini_fo_2.6.25_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/211-mini_fo_2.6.25_dentry_open_war.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/212-mini_fo_2.6.26_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/213-mini_fo_2.6.27_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/214-mini_fo_2.6.29.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/215-mini_fo_2.6.30.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/216-mini_fo_locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/219-kobject_uevent.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/220-sound_kconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/221-binfmt_elf_gcc4.1.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/222-partial_eraseblock_write.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/240-packet_socket_type.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/250-pppoe_header_pad.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/260-extend_pfifo_fast.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/270-sched_bfs.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/400-ledtrig_morse.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/402-ledtrig_netdev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/410-gpio_buttons.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/420-gpiodev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/430-scsi_header_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/510-yaffs_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/511-yaffs-cvs-2009-04-24.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/600-phy_extension.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/620-phy_adm6996.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/630-phy_packets.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/640-br2684_backport_routed.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/650-swconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/660-phy_mvswitch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/670-phy_ip175c.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/680-phy_ar8216.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/690-phy_rtl8306.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/691-phy_rtl8366.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/700-rtc7301.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/750-glamo-headers.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/780-fix-race-in-snd_soc_jack_add_gpios.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/801-usb_serial_endpoint_size.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/840-unable_to_open_console.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/902-darwin_scripts_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/903-hostap_txpower.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/903-stddef_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/905-i386_build.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/920-01-hotpluggable-spi-gpio.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/920-04-spi-gpio-implement-spi-delay.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/921-gpio_spi_driver.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/922-gpiommc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/923-gpiommc-configfs-locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/924-cs5535_gpio.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/925-modify-i2c-gpio-initcall-level.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/940-wireless_mesh_header.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/941-ssb_update.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/951-revert_gcc4_4_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/970-ocf_kbuild_integration.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/971-ocf_20080917.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/972-ocf_compile_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/973-ocf_2.6.27_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/974-ssb_b43_default_on.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/977-textsearch_kconfig_hacks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/978-lib80211_kconfig_hacks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/979-crypto_add_kconfig_prompts.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/980-vm_exports.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/985-cris-headers.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/991-ppc4xx_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/998-openwrt_lzma_options.patch [deleted file]
target/linux/generic-2.6/patches-2.6.31/999-use_preinit_as_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/001-squashfs_move_zlib_decomp.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/002-squashfs_factor_out_remaining_zlib.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/003-squashfs_add_decompressor_framework.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/004-squashfs_add_decompressor_lzma_lzo.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/005-squashfs_extra_parameter.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/006-squashfs_add_lzma.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/007-squashfs_make_lzma_available.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/011-mips_boot.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/012-extra_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/013-gcc4_inline_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/014-samsung_flash [deleted file]
target/linux/generic-2.6/patches-2.6.33/020-mips_multi_machine_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/021-mips_image_cmdline_hack.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/022-mips_use_generic_thread_info_allocator.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/025-mips_disable_fpu.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/027-mips_module_reloc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/028-module_exports.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/029-arm_module_unresolved_weak_sym.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/030-pci_disable_common_quirks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/031-ppc_gcc_build_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/060-block2mtd_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/065-rootfs_split.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/066-block2mtd_probe.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/070-redboot_space.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/071-redboot_boardconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/080-mtd_plat_nand_chip_fixup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/081-mtd_myloader_partition_parser.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/082-mtd_info_move_forward_decl.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/083-mtd_fix_nand_correct_data_return_code.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/084-mtd_m25p80_add_pm25lv_flash_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/085-mtd_m25p80_add_en25pxx_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/086-mtd_m25p80_add_xxxs33b_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/087-mtd-m25p80-add-w25q32-chip-support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/100-netfilter_layer7_2.21.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/101-netfilter_layer7_pktmatch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/110-netfilter_match_speedup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/150-netfilter_imq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/180-netfilter_depends.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/190-netfilter_rtsp.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/200-sched_esfq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/201-jhash3.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/202-mips_mem_functions_performance.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/203-slab_maxsize.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/204-jffs2_eofdetect.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/205-skb_padding.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/207-powerpc_asm_segment_h.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/208-mips_oprofile_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/209-mini_fo.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/210-mini_fo_2.6.25_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/211-mini_fo_2.6.25_dentry_open_war.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/212-mini_fo_2.6.26_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/213-mini_fo_2.6.27_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/214-mini_fo_2.6.29.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/215-mini_fo_2.6.30.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/216-mini_fo_locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/219-kobject_uevent.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/220-sound_kconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/221-binfmt_elf_gcc4.1.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/222-partial_eraseblock_write.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/240-packet_socket_type.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/250-pppoe_header_pad.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/260-crypto_optional_tests.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/400-ledtrig_morse.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/402-ledtrig_netdev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/410-gpio_buttons.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/420-gpiodev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/430-scsi_header_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/510-yaffs_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/511-yaffs-cvs-2009-04-24.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/600-phy_extension.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/620-phy_adm6996.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/630-phy_packets.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/650-swconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/651-swconfig-2.6.32-fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/660-phy_mvswitch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/670-phy_ip175c.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/680-phy_ar8216.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/690-phy_rtl8306.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/691-phy_rtl8366.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/700-rtc7301.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/750-glamo-headers.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/801-usb_serial_endpoint_size.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/840-unable_to_open_console.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/902-darwin_scripts_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/903-hostap_txpower.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/903-stddef_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/905-i386_build.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/920-01-hotpluggable-spi-gpio.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/920-04-spi-gpio-implement-spi-delay.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/921-gpio_spi_driver.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/922-gpiommc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/923-gpiommc-configfs-locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/924-cs5535_gpio.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/925-modify-i2c-gpio-initcall-level.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/940-wireless_mesh_header.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/951-revert_gcc4_4_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/970-ocf_kbuild_integration.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/971-ocf_20080917.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/972-ocf_compile_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/973-ocf_2.6.27_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/974-ssb_b43_default_on.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/977-textsearch_kconfig_hacks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/978-lib80211_kconfig_hacks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/979-crypto_add_kconfig_prompts.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/980-vm_exports.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/981-wireless_ext_kconfig_hack.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/985-cris-headers.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/991-ppc4xx_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/997-lzo_decompressor_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/998-openwrt_lzma_options.patch [deleted file]
target/linux/generic-2.6/patches-2.6.33/999-use_preinit_as_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/006-squashfs_add_lzma.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/007-squashfs_make_lzma_available.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/011-mips_boot.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/012-extra_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/013-gcc4_inline_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/014-samsung_flash [deleted file]
target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/021-mips_image_cmdline_hack.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/022-mips_use_generic_thread_info_allocator.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/025-mips_disable_fpu.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/027-mips_module_reloc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/028-module_exports.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/029-arm_module_unresolved_weak_sym.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/030-pci_disable_common_quirks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/031-ppc_gcc_build_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/060-block2mtd_init.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/065-rootfs_split.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/066-block2mtd_probe.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/070-redboot_space.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/071-redboot_boardconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/080-mtd_plat_nand_chip_fixup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/081-mtd_myloader_partition_parser.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/082-mtd_info_move_forward_decl.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/083-mtd_fix_nand_correct_data_return_code.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/084-mtd_m25p80_add_pm25lv_flash_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/085-mtd_m25p80_add_en25pxx_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/086-mtd_m25p80_add_xxxs33b_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/087-mtd-m25p80-add-w25q32-chip-support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/100-netfilter_layer7_2.21.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/101-netfilter_layer7_pktmatch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/110-netfilter_match_speedup.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/150-netfilter_imq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/180-netfilter_depends.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/190-netfilter_rtsp.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/200-sched_esfq.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/201-jhash3.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/202-mips_mem_functions_performance.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/203-slab_maxsize.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/204-jffs2_eofdetect.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/205-skb_padding.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/207-powerpc_asm_segment_h.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/208-mips_oprofile_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/209-mini_fo.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/210-mini_fo_2.6.25_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/211-mini_fo_2.6.25_dentry_open_war.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/212-mini_fo_2.6.26_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/213-mini_fo_2.6.27_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/214-mini_fo_2.6.29.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/215-mini_fo_2.6.30.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/216-mini_fo_locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/219-kobject_uevent.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/220-sound_kconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/221-binfmt_elf_gcc4.1.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/222-partial_eraseblock_write.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/240-packet_socket_type.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/250-pppoe_header_pad.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/260-crypto_optional_tests.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/400-ledtrig_morse.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/402-ledtrig_netdev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/410-gpio_buttons.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/420-gpiodev.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/430-scsi_header_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/510-yaffs_support.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/511-yaffs-cvs-2009-04-24.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/600-phy_extension.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/620-phy_adm6996.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/630-phy_packets.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/650-swconfig.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/651-swconfig-2.6.32-fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/660-phy_mvswitch.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/670-phy_ip175c.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/680-phy_ar8216.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/690-phy_rtl8306.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/691-phy_rtl8366.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/700-rtc7301.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/750-glamo-headers.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/801-usb_serial_endpoint_size.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/840-unable_to_open_console.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/902-darwin_scripts_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/903-hostap_txpower.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/903-stddef_include.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/905-i386_build.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/920-01-hotpluggable-spi-gpio.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/920-04-spi-gpio-implement-spi-delay.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/921-gpio_spi_driver.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/922-gpiommc.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/923-gpiommc-configfs-locking.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/924-cs5535_gpio.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/925-modify-i2c-gpio-initcall-level.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/940-wireless_mesh_header.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/951-revert_gcc4_4_fixes.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/970-ocf_kbuild_integration.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/971-ocf_20080917.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/972-ocf_compile_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/973-ocf_2.6.27_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/974-ssb_b43_default_on.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/977-textsearch_kconfig_hacks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/978-lib80211_kconfig_hacks.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/979-crypto_add_kconfig_prompts.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/980-vm_exports.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/981-wireless_ext_kconfig_hack.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/985-cris-headers.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/991-ppc4xx_optimization.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/997-lzo_decompressor_fix.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/998-openwrt_lzma_options.patch [deleted file]
target/linux/generic-2.6/patches-2.6.34/999-use_preinit_as_init.patch [deleted file]
target/linux/rb532/config-2.6.33 [deleted file]
target/linux/rb532/config-2.6.34 [deleted file]
target/linux/rb532/patches-2.6.33/001-cmdline_hack.patch [deleted file]
target/linux/rb532/patches-2.6.33/002-rb532_nand_fixup.patch [deleted file]
target/linux/rb532/patches-2.6.34/001-cmdline_hack.patch [deleted file]
target/linux/rb532/patches-2.6.34/002-rb532_nand_fixup.patch [deleted file]
target/linux/uml/patches-2.6.33/001-gcc4_unit_at_a_time_i386_fix.patch [deleted file]
target/linux/uml/patches-2.6.33/002-gcc4_unfortify_source.patch [deleted file]
target/linux/uml/patches-2.6.33/003-fix_text_section.patch [deleted file]
target/linux/uml/patches-2.6.33/901-lib_zlib_deflate_visible.patch [deleted file]
target/linux/uml/patches-2.6.34/001-gcc4_unit_at_a_time_i386_fix.patch [deleted file]
target/linux/uml/patches-2.6.34/002-gcc4_unfortify_source.patch [deleted file]
target/linux/uml/patches-2.6.34/003-fix_text_section.patch [deleted file]
target/linux/uml/patches-2.6.34/901-lib_zlib_deflate_visible.patch [deleted file]

diff --git a/target/linux/ar71xx/config-2.6.33 b/target/linux/ar71xx/config-2.6.33
deleted file mode 100644 (file)
index 1c29cc9..0000000
+++ /dev/null
@@ -1,291 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-CONFIG_AG71XX=y
-CONFIG_AG71XX_AR8216_SUPPORT=y
-# CONFIG_AG71XX_DEBUG is not set
-# CONFIG_AG71XX_DEBUG_FS is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-CONFIG_AR71XX_DEV_AP91_ETH=y
-CONFIG_AR71XX_DEV_AP91_PCI=y
-CONFIG_AR71XX_DEV_AP94_PCI=y
-CONFIG_AR71XX_DEV_AR913X_WMAC=y
-CONFIG_AR71XX_DEV_DSA=y
-CONFIG_AR71XX_DEV_GPIO_BUTTONS=y
-CONFIG_AR71XX_DEV_LEDS_GPIO=y
-CONFIG_AR71XX_DEV_M25P80=y
-CONFIG_AR71XX_DEV_PB42_PCI=y
-CONFIG_AR71XX_DEV_PB9X_PCI=y
-CONFIG_AR71XX_DEV_USB=y
-CONFIG_AR71XX_MACH_AP81=y
-CONFIG_AR71XX_MACH_AP83=y
-CONFIG_AR71XX_MACH_AW_NR580=y
-CONFIG_AR71XX_MACH_DIR_600_A1=y
-CONFIG_AR71XX_MACH_DIR_615_C1=y
-CONFIG_AR71XX_MACH_DIR_825_B1=y
-CONFIG_AR71XX_MACH_MZK_W04NU=y
-CONFIG_AR71XX_MACH_MZK_W300NH=y
-CONFIG_AR71XX_MACH_PB42=y
-CONFIG_AR71XX_MACH_PB44=y
-CONFIG_AR71XX_MACH_PB92=y
-CONFIG_AR71XX_MACH_RB4XX=y
-CONFIG_AR71XX_MACH_RB750=y
-CONFIG_AR71XX_MACH_TEW_632BRP=y
-CONFIG_AR71XX_MACH_TL_WR1043ND=y
-CONFIG_AR71XX_MACH_TL_WR741ND=y
-CONFIG_AR71XX_MACH_TL_WR841N_V1=y
-CONFIG_AR71XX_MACH_TL_WR941ND=y
-CONFIG_AR71XX_MACH_UBNT=y
-CONFIG_AR71XX_MACH_WNDR3700=y
-CONFIG_AR71XX_MACH_WNR2000=y
-CONFIG_AR71XX_MACH_WP543=y
-CONFIG_AR71XX_MACH_WRT160NL=y
-CONFIG_AR71XX_MACH_WRT400N=y
-CONFIG_AR71XX_MACH_WZR_HP_G300NH=y
-CONFIG_AR71XX_NVRAM=y
-CONFIG_AR71XX_WDT=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ATHEROS_AR71XX=y
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CMDLINE="rootfstype=squashfs,yaffs,jffs2 noinitrd console=ttyS0,115200"
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-CONFIG_CPU_BIG_ENDIAN=y
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-# CONFIG_CPU_LITTLE_ENDIAN is not set
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-# CONFIG_CPU_MIPS32_R1 is not set
-CONFIG_CPU_MIPS32_R2=y
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR2=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-CONFIG_DECOMPRESS_LZMA=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-CONFIG_EARLY_PRINTK=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIOLIB=y
-CONFIG_GPIO_NXP_74HC153=y
-CONFIG_GPIO_PCF857X=y
-CONFIG_GPIO_SYSFS=y
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HW_HAS_PCI=y
-# CONFIG_HW_RANDOM is not set
-CONFIG_I2C=y
-CONFIG_I2C_ALGOBIT=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_GPIO=y
-CONFIG_ICPLUS_PHY=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
-CONFIG_INITRAMFS_ROOT_GID=0
-CONFIG_INITRAMFS_ROOT_UID=0
-CONFIG_INITRAMFS_SOURCE="../../root"
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_IRQ_CPU=y
-# CONFIG_LEDS_GPIO is not set
-# CONFIG_LEDS_RB750 is not set
-# CONFIG_LEDS_WNDR3700_USB is not set
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_M25PXX_USE_FAST_READ is not set
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-CONFIG_MICREL_PHY=y
-# CONFIG_MIKROTIK_RB532 is not set
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-CONFIG_MIPS_MACHINE=y
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MTD_AR91XX_FLASH=y
-# CONFIG_MTD_CFI_INTELEXT is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_JEDECPROBE=y
-CONFIG_MTD_M25P80=y
-CONFIG_MTD_MYLOADER_PARTS=y
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_RB4XX=y
-CONFIG_MTD_NAND_RB750=y
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-2
-CONFIG_MTD_REDBOOT_PARTS=y
-CONFIG_MTD_WRT160NL_PARTS=y
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_MYLOADER=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_AR7240=y
-CONFIG_NET_DSA_MV88E6060=y
-CONFIG_NET_DSA_MV88E6063=y
-# CONFIG_NET_DSA_MV88E6123_61_65 is not set
-# CONFIG_NET_DSA_MV88E6131 is not set
-# CONFIG_NET_DSA_MV88E6XXX is not set
-# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
-# CONFIG_NET_DSA_TAG_DSA is not set
-# CONFIG_NET_DSA_TAG_EDSA is not set
-CONFIG_NET_DSA_TAG_QINQ=y
-CONFIG_NET_DSA_TAG_TRAILER=y
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PCI=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PHYLIB=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POWERTV is not set
-CONFIG_RTL8306_PHY=y
-CONFIG_RTL8366RB_PHY=y
-CONFIG_RTL8366S_PHY=y
-CONFIG_RTL8366_SMI=y
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-CONFIG_SERIAL_8250_NR_UARTS=1
-CONFIG_SERIAL_8250_RUNTIME_UARTS=1
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-CONFIG_SPI=y
-CONFIG_SPI_AP83=y
-CONFIG_SPI_AR71XX=y
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_GPIO=y
-CONFIG_SPI_MASTER=y
-CONFIG_SPI_PB44=y
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_VSC7385 is not set
-CONFIG_SWCONFIG=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_HAS_CPU_MIPS32_R2=y
-CONFIG_SYS_HAS_EARLY_PRINTK=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-# CONFIG_TC35815 is not set
-# CONFIG_TINY_RCU is not set
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_TREE_RCU=y
-CONFIG_USB_SUPPORT=y
-CONFIG_YAFFS_9BYTE_TAGS=y
-CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED=y
-CONFIG_YAFFS_AUTO_YAFFS2=y
-# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
-# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
-CONFIG_YAFFS_FS=y
-CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
-CONFIG_YAFFS_YAFFS1=y
-CONFIG_YAFFS_YAFFS2=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/ar71xx/config-2.6.34 b/target/linux/ar71xx/config-2.6.34
deleted file mode 100644 (file)
index 888a0e4..0000000
+++ /dev/null
@@ -1,316 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-CONFIG_AG71XX=y
-CONFIG_AG71XX_AR8216_SUPPORT=y
-# CONFIG_AG71XX_DEBUG is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-CONFIG_AR71XX_DEV_AP91_ETH=y
-CONFIG_AR71XX_DEV_AP91_PCI=y
-CONFIG_AR71XX_DEV_AP94_PCI=y
-CONFIG_AR71XX_DEV_AR913X_WMAC=y
-CONFIG_AR71XX_DEV_DSA=y
-CONFIG_AR71XX_DEV_GPIO_BUTTONS=y
-CONFIG_AR71XX_DEV_LEDS_GPIO=y
-CONFIG_AR71XX_DEV_M25P80=y
-CONFIG_AR71XX_DEV_PB42_PCI=y
-CONFIG_AR71XX_DEV_PB9X_PCI=y
-CONFIG_AR71XX_DEV_USB=y
-CONFIG_AR71XX_MACH_AP81=y
-CONFIG_AR71XX_MACH_AP83=y
-CONFIG_AR71XX_MACH_AW_NR580=y
-CONFIG_AR71XX_MACH_DIR_600_A1=y
-CONFIG_AR71XX_MACH_DIR_615_C1=y
-CONFIG_AR71XX_MACH_DIR_825_B1=y
-CONFIG_AR71XX_MACH_MZK_W04NU=y
-CONFIG_AR71XX_MACH_MZK_W300NH=y
-CONFIG_AR71XX_MACH_PB42=y
-CONFIG_AR71XX_MACH_PB44=y
-CONFIG_AR71XX_MACH_PB92=y
-CONFIG_AR71XX_MACH_RB4XX=y
-CONFIG_AR71XX_MACH_RB750=y
-CONFIG_AR71XX_MACH_TEW_632BRP=y
-CONFIG_AR71XX_MACH_TL_WR1043ND=y
-CONFIG_AR71XX_MACH_TL_WR741ND=y
-CONFIG_AR71XX_MACH_TL_WR841N_V1=y
-CONFIG_AR71XX_MACH_TL_WR941ND=y
-CONFIG_AR71XX_MACH_UBNT=y
-CONFIG_AR71XX_MACH_WNDR3700=y
-CONFIG_AR71XX_MACH_WNR2000=y
-CONFIG_AR71XX_MACH_WP543=y
-CONFIG_AR71XX_MACH_WRT160NL=y
-CONFIG_AR71XX_MACH_WRT400N=y
-CONFIG_AR71XX_MACH_WZR_HP_G300NH=y
-CONFIG_AR71XX_NVRAM=y
-CONFIG_AR71XX_WDT=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ATHEROS_AR71XX=y
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-CONFIG_BRIDGE=m
-CONFIG_BRIDGE_IGMP_SNOOPING=y
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CMDLINE="rootfstype=squashfs,yaffs,jffs2 noinitrd console=ttyS0,115200"
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-CONFIG_CPU_BIG_ENDIAN=y
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-# CONFIG_CPU_LITTLE_ENDIAN is not set
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-# CONFIG_CPU_MIPS32_R1 is not set
-CONFIG_CPU_MIPS32_R2=y
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR2=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-# CONFIG_CRYSTALHD is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-# CONFIG_DEBUG_FS is not set
-CONFIG_DECOMPRESS_LZMA=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-# CONFIG_DT3155 is not set
-CONFIG_EARLY_PRINTK=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_IT8761E is not set
-# CONFIG_GPIO_MAX7300 is not set
-CONFIG_GPIO_NXP_74HC153=y
-CONFIG_GPIO_PCF857X=y
-# CONFIG_GPIO_SCH is not set
-CONFIG_GPIO_SYSFS=y
-# CONFIG_HAMRADIO is not set
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_HTC_I2CPLD is not set
-CONFIG_HW_HAS_PCI=y
-# CONFIG_HW_RANDOM is not set
-CONFIG_I2C=y
-CONFIG_I2C_ALGOBIT=y
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_GPIO=y
-# CONFIG_I2C_SMBUS is not set
-# CONFIG_I2C_XILINX is not set
-CONFIG_ICPLUS_PHY=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
-CONFIG_INITRAMFS_ROOT_GID=0
-CONFIG_INITRAMFS_ROOT_UID=0
-CONFIG_INITRAMFS_SOURCE="../../root"
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_IRQ_CPU=y
-# CONFIG_KSZ884X_PCI is not set
-# CONFIG_LEDS_GPIO is not set
-# CONFIG_LEDS_RB750 is not set
-# CONFIG_LEDS_WNDR3700_USB is not set
-CONFIG_LLC=m
-# CONFIG_LOGFS is not set
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_LPC_SCH is not set
-# CONFIG_M25PXX_USE_FAST_READ is not set
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_MAX63XX_WATCHDOG is not set
-# CONFIG_MFD_88PM860X is not set
-# CONFIG_MFD_MAX8925 is not set
-# CONFIG_MFD_TIMBERDALE is not set
-# CONFIG_MFD_WM8994 is not set
-CONFIG_MICREL_PHY=y
-# CONFIG_MIKROTIK_RB532 is not set
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-CONFIG_MIPS_MACHINE=y
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MTD_AR91XX_FLASH=y
-# CONFIG_MTD_CFI_INTELEXT is not set
-CONFIG_MTD_CMDLINE_PARTS=y
-CONFIG_MTD_JEDECPROBE=y
-CONFIG_MTD_M25P80=y
-CONFIG_MTD_MYLOADER_PARTS=y
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_RB4XX=y
-CONFIG_MTD_NAND_RB750=y
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-2
-CONFIG_MTD_REDBOOT_PARTS=y
-CONFIG_MTD_WRT160NL_PARTS=y
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_MYLOADER=y
-CONFIG_NET_DSA=y
-CONFIG_NET_DSA_AR7240=y
-CONFIG_NET_DSA_MV88E6060=y
-CONFIG_NET_DSA_MV88E6063=y
-# CONFIG_NET_DSA_MV88E6123_61_65 is not set
-# CONFIG_NET_DSA_MV88E6131 is not set
-# CONFIG_NET_DSA_MV88E6XXX is not set
-# CONFIG_NET_DSA_MV88E6XXX_NEED_PPU is not set
-# CONFIG_NET_DSA_TAG_DSA is not set
-# CONFIG_NET_DSA_TAG_EDSA is not set
-CONFIG_NET_DSA_TAG_QINQ=y
-CONFIG_NET_DSA_TAG_TRAILER=y
-CONFIG_NO_HZ=y
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PHYLIB=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POWERTV is not set
-CONFIG_RTL8306_PHY=y
-CONFIG_RTL8366RB_PHY=y
-CONFIG_RTL8366S_PHY=y
-CONFIG_RTL8366_SMI=y
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-CONFIG_SERIAL_8250_NR_UARTS=1
-CONFIG_SERIAL_8250_RUNTIME_UARTS=1
-# CONFIG_SERIAL_TIMBERDALE is not set
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-CONFIG_SPI=y
-CONFIG_SPI_AP83=y
-CONFIG_SPI_AR71XX=y
-CONFIG_SPI_BITBANG=y
-CONFIG_SPI_GPIO=y
-CONFIG_SPI_MASTER=y
-CONFIG_SPI_PB44=y
-# CONFIG_SPI_SPIDEV is not set
-# CONFIG_SPI_VSC7385 is not set
-CONFIG_STP=m
-# CONFIG_SWAP is not set
-CONFIG_SWCONFIG=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_HAS_CPU_MIPS32_R2=y
-CONFIG_SYS_HAS_EARLY_PRINTK=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-# CONFIG_TC35815 is not set
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_VLAN_8021Q=m
-CONFIG_YAFFS_9BYTE_TAGS=y
-CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED=y
-CONFIG_YAFFS_AUTO_YAFFS2=y
-# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
-# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
-CONFIG_YAFFS_FS=y
-CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
-CONFIG_YAFFS_YAFFS1=y
-CONFIG_YAFFS_YAFFS2=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/ar71xx/patches-2.6.33/001-ar71xx_core.patch b/target/linux/ar71xx/patches-2.6.33/001-ar71xx_core.patch
deleted file mode 100644 (file)
index 5073652..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -166,6 +166,13 @@ ifeq (,$(findstring march=octeon, $(cfla
- cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -Wa,-march=octeon
- endif
-+#
-+# Atheros AR71xx
-+#
-+core-$(CONFIG_ATHEROS_AR71XX) += arch/mips/ar71xx/
-+cflags-$(CONFIG_ATHEROS_AR71XX)       += -I$(srctree)/arch/mips/include/asm/mach-ar71xx
-+load-$(CONFIG_ATHEROS_AR71XX) += 0xffffffff80060000
-+
- cflags-$(CONFIG_CPU_R4000_WORKAROUNDS)        += $(call cc-option,-mfix-r4000,)
- cflags-$(CONFIG_CPU_R4400_WORKAROUNDS)        += $(call cc-option,-mfix-r4400,)
- cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS)        += $(call cc-option,-mno-daddi,)
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -48,6 +48,23 @@ config AR7
-         Support for the Texas Instruments AR7 System-on-a-Chip
-         family: TNETD7100, 7200 and 7300.
-+config ATHEROS_AR71XX
-+      bool "Atheros AR71xx based boards"
-+      select CEVT_R4K
-+      select CSRC_R4K
-+      select DMA_NONCOHERENT
-+      select HW_HAS_PCI
-+      select IRQ_CPU
-+      select ARCH_REQUIRE_GPIOLIB
-+      select SYS_HAS_CPU_MIPS32_R1
-+      select SYS_HAS_CPU_MIPS32_R2
-+      select SYS_SUPPORTS_32BIT_KERNEL
-+      select SYS_SUPPORTS_BIG_ENDIAN
-+      select SYS_HAS_EARLY_PRINTK
-+      select MIPS_MACHINE
-+      help
-+        Support for Atheros AR71xx based boards.
-+
- config BCM47XX
-       bool "BCM47XX based boards"
-       select CEVT_R4K
-@@ -682,6 +699,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
- endchoice
- source "arch/mips/alchemy/Kconfig"
-+source "arch/mips/ar71xx/Kconfig"
- source "arch/mips/bcm63xx/Kconfig"
- source "arch/mips/jazz/Kconfig"
- source "arch/mips/lasat/Kconfig"
diff --git a/target/linux/ar71xx/patches-2.6.33/002-ar71xx_pci.patch b/target/linux/ar71xx/patches-2.6.33/002-ar71xx_pci.patch
deleted file mode 100644 (file)
index 3facce9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/mips/pci/Makefile
-+++ b/arch/mips/pci/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_PCI_TX4927)     += ops-tx4927.o
- obj-$(CONFIG_BCM47XX)         += pci-bcm47xx.o
- obj-$(CONFIG_BCM63XX)         += pci-bcm63xx.o fixup-bcm63xx.o \
-                                       ops-bcm63xx.o
-+obj-$(CONFIG_ATHEROS_AR71XX)  += pci-ar71xx.o pci-ar724x.o
- #
- # These are still pretty much in the old state, watch, go blind.
diff --git a/target/linux/ar71xx/patches-2.6.33/003-ar71xx_usb_host.patch b/target/linux/ar71xx/patches-2.6.33/003-ar71xx_usb_host.patch
deleted file mode 100644 (file)
index 238a79c..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/drivers/usb/host/Kconfig
-+++ b/drivers/usb/host/Kconfig
-@@ -109,6 +109,13 @@ config XPS_USB_HCD_XILINX
-               support both high speed and full speed devices, or high speed
-               devices only.
-+config USB_EHCI_AR71XX
-+      bool "USB EHCI support for AR71xx"
-+      depends on USB_EHCI_HCD && ATHEROS_AR71XX
-+      default y
-+      help
-+        Support for Atheros AR71xx built-in EHCI controller
-+
- config USB_EHCI_FSL
-       bool "Support for Freescale on-chip EHCI USB controller"
-       depends on USB_EHCI_HCD && FSL_SOC
-@@ -207,6 +214,13 @@ config USB_OHCI_HCD
-         To compile this driver as a module, choose M here: the
-         module will be called ohci-hcd.
-+config USB_OHCI_AR71XX
-+      bool "USB OHCI support for Atheros AR71xx"
-+      depends on USB_OHCI_HCD && ATHEROS_AR71XX
-+      default y
-+      help
-+        Support for Atheros AR71xx built-in OHCI controller
-+
- config USB_OHCI_HCD_PPC_SOC
-       bool "OHCI support for on-chip PPC USB controller"
-       depends on USB_OHCI_HCD && (STB03xxx || PPC_MPC52xx)
---- a/drivers/usb/host/ehci-hcd.c
-+++ b/drivers/usb/host/ehci-hcd.c
-@@ -1158,6 +1158,11 @@ MODULE_LICENSE ("GPL");
- #define       PLATFORM_DRIVER         ehci_atmel_driver
- #endif
-+#ifdef CONFIG_USB_EHCI_AR71XX
-+#include "ehci-ar71xx.c"
-+#define PLATFORM_DRIVER               ehci_ar71xx_driver
-+#endif
-+
- #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
-     !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
- #error "missing bus glue for ehci-hcd"
---- a/drivers/usb/host/ohci-hcd.c
-+++ b/drivers/usb/host/ohci-hcd.c
-@@ -1085,6 +1085,11 @@ MODULE_LICENSE ("GPL");
- #define TMIO_OHCI_DRIVER      ohci_hcd_tmio_driver
- #endif
-+#ifdef CONFIG_USB_OHCI_AR71XX
-+#include "ohci-ar71xx.c"
-+#define PLATFORM_DRIVER               ohci_hcd_ar71xx_driver
-+#endif
-+
- #if   !defined(PCI_DRIVER) &&         \
-       !defined(PLATFORM_DRIVER) &&    \
-       !defined(OF_PLATFORM_DRIVER) && \
diff --git a/target/linux/ar71xx/patches-2.6.33/004-ar71xx_spi_controller.patch b/target/linux/ar71xx/patches-2.6.33/004-ar71xx_spi_controller.patch
deleted file mode 100644 (file)
index 9c196e0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -53,6 +53,13 @@ if SPI_MASTER
- comment "SPI Master Controller Drivers"
-+config SPI_AR71XX
-+      tristate "Atheros AR71xx SPI Controller"
-+      depends on SPI_MASTER && ATHEROS_AR71XX
-+      select SPI_BITBANG
-+      help
-+        This is the SPI contoller driver for Atheros AR71xx.
-+
- config SPI_ATMEL
-       tristate "Atmel SPI Controller"
-       depends on (ARCH_AT91 || AVR32)
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -11,6 +11,7 @@ endif
- obj-$(CONFIG_SPI_MASTER)              += spi.o
- # SPI master controller drivers (bus)
-+obj-$(CONFIG_SPI_AR71XX)              += ar71xx_spi.o
- obj-$(CONFIG_SPI_ATMEL)                       += atmel_spi.o
- obj-$(CONFIG_SPI_BFIN)                        += spi_bfin5xx.o
- obj-$(CONFIG_SPI_BITBANG)             += spi_bitbang.o
diff --git a/target/linux/ar71xx/patches-2.6.33/005-ar71xx_mac_driver.patch b/target/linux/ar71xx/patches-2.6.33/005-ar71xx_mac_driver.patch
deleted file mode 100644 (file)
index 3721a9b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -2128,6 +2128,8 @@ config ACENIC_OMIT_TIGON_I
-         The safe and default value for this is N.
-+source drivers/net/ag71xx/Kconfig
-+
- config DL2K
-       tristate "DL2000/TC902x-based Gigabit Ethernet support"
-       depends on PCI
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -106,6 +106,7 @@ obj-$(CONFIG_STMMAC_ETH) += stmmac/
- # end link order section
- #
-+obj-$(CONFIG_AG71XX) += ag71xx/
- obj-$(CONFIG_SUNDANCE) += sundance.o
- obj-$(CONFIG_HAMACHI) += hamachi.o
- obj-$(CONFIG_NET) += Space.o loopback.o
diff --git a/target/linux/ar71xx/patches-2.6.33/006-ar71xx_wdt_driver.patch b/target/linux/ar71xx/patches-2.6.33/006-ar71xx_wdt_driver.patch
deleted file mode 100644 (file)
index d71a11b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/watchdog/Kconfig
-+++ b/drivers/watchdog/Kconfig
-@@ -840,6 +840,13 @@ config TXX9_WDT
-       help
-         Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
-+config AR71XX_WDT
-+      tristate "Atheros AR71xx Watchdog Timer"
-+      depends on ATHEROS_AR71XX
-+      help
-+        Hardware driver for the built-in watchdog timer on the Atheros
-+        AR71xx SoCs.
-+
- # PARISC Architecture
- # POWERPC Architecture
---- a/drivers/watchdog/Makefile
-+++ b/drivers/watchdog/Makefile
-@@ -112,6 +112,7 @@ obj-$(CONFIG_PNX833X_WDT) += pnx833x_wdt
- obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
- obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
- obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
-+obj-$(CONFIG_AR71XX_WDT) += ar71xx_wdt.o
- # PARISC Architecture
diff --git a/target/linux/ar71xx/patches-2.6.33/007-ar91xx_flash_driver.patch b/target/linux/ar71xx/patches-2.6.33/007-ar91xx_flash_driver.patch
deleted file mode 100644 (file)
index 127db55..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/mtd/maps/Kconfig
-+++ b/drivers/mtd/maps/Kconfig
-@@ -257,6 +257,13 @@ config MTD_ALCHEMY
-       help
-         Flash memory access on AMD Alchemy Pb/Db/RDK Reference Boards
-+config MTD_AR91XX_FLASH
-+      tristate "Atheros AR91xx parallel flash support"
-+      depends on ATHEROS_AR71XX
-+      select MTD_COMPLEX_MAPPINGS
-+      help
-+        Parallel flash driver for the Atheros AR91xx based boards.
-+
- config MTD_DILNETPC
-       tristate "CFI Flash device mapped on DIL/Net PC"
-       depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT && BROKEN
---- a/drivers/mtd/maps/Makefile
-+++ b/drivers/mtd/maps/Makefile
-@@ -41,6 +41,7 @@ obj-$(CONFIG_MTD_DBOX2)              += dbox2-flash.
- obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o
- obj-$(CONFIG_MTD_PCI)         += pci.o
- obj-$(CONFIG_MTD_ALCHEMY)       += alchemy-flash.o
-+obj-$(CONFIG_MTD_AR91XX_FLASH)        += ar91xx_flash.o
- obj-$(CONFIG_MTD_AUTCPU12)    += autcpu12-nvram.o
- obj-$(CONFIG_MTD_EDB7312)     += edb7312.o
- obj-$(CONFIG_MTD_IMPA7)               += impa7.o
diff --git a/target/linux/ar71xx/patches-2.6.33/101-ksz8041_phy_driver.patch b/target/linux/ar71xx/patches-2.6.33/101-ksz8041_phy_driver.patch
deleted file mode 100644 (file)
index 5036046..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -114,6 +114,11 @@ config RTL8306_PHY
-       tristate "Driver for Realtek RTL8306S switches"
-       select SWCONFIG
-+config MICREL_PHY
-+      tristate "Drivers for Micrel/Kendin PHYs"
-+      ---help---
-+        Currently has a driver for the KSZ8041
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_RTL8366_SMI)    += rtl8366_smi
- obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
- obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
-+obj-$(CONFIG_MICREL)          += micrel.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
- obj-$(CONFIG_MDIO_GPIO)               += mdio-gpio.o
diff --git a/target/linux/ar71xx/patches-2.6.33/102-mtd_m25p80_add_myloader_parser.patch b/target/linux/ar71xx/patches-2.6.33/102-mtd_m25p80_add_myloader_parser.patch
deleted file mode 100644 (file)
index 45f743e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -922,6 +922,16 @@ static int __devinit m25p_probe(struct s
-                                       part_probes, &parts, 0);
-               }
-+#ifdef CONFIG_MTD_MYLOADER_PARTS
-+              if (nr_parts <= 0) {
-+                      static const char *part_probes[]
-+                                      = { "MyLoader", NULL, };
-+
-+                      nr_parts = parse_mtd_partitions(&flash->mtd,
-+                                      part_probes, &parts, 0);
-+              }
-+#endif
-+
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
diff --git a/target/linux/ar71xx/patches-2.6.33/104-mtd_m25p80_add_redboot_parser.patch b/target/linux/ar71xx/patches-2.6.33/104-mtd_m25p80_add_redboot_parser.patch
deleted file mode 100644 (file)
index 43fe987..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -932,6 +932,15 @@ static int __devinit m25p_probe(struct s
-               }
- #endif
-+#ifdef CONFIG_MTD_REDBOOT_PARTS
-+              if (nr_parts <= 0) {
-+                      static const char *part_probes[]
-+                                      = { "RedBoot", NULL, };
-+
-+                      nr_parts = parse_mtd_partitions(&flash->mtd,
-+                                      part_probes, &parts, 0);
-+              }
-+#endif
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
diff --git a/target/linux/ar71xx/patches-2.6.33/107-mtd-SST39VF6401B-support.patch b/target/linux/ar71xx/patches-2.6.33/107-mtd-SST39VF6401B-support.patch
deleted file mode 100644 (file)
index 2fdfcb7..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/drivers/mtd/chips/jedec_probe.c
-+++ b/drivers/mtd/chips/jedec_probe.c
-@@ -166,6 +166,7 @@
- #define SST39LF160    0x2782
- #define SST39VF1601   0x234b
- #define SST39VF3201   0x235b
-+#define SST39VF6401B  0x236d
- #define SST39LF512    0x00D4
- #define SST39LF010    0x00D5
- #define SST39LF020    0x00D6
-@@ -1556,6 +1557,18 @@ static const struct amd_flash_info jedec
-                       ERASEINFO(0x10000,64),
-               }
-       }, {
-+              .mfr_id         = MANUFACTURER_SST,
-+              .dev_id         = SST39VF6401B,
-+              .name           = "SST 39VF6401B",
-+              .devtypes       = CFI_DEVICETYPE_X16,
-+              .uaddr          = MTD_UADDR_0xAAAA_0x5555,
-+              .dev_size       = SIZE_8MiB,
-+              .cmd_set        = P_ID_AMD_STD,
-+              .nr_regions     = 1,
-+              .regions        = {
-+                      ERASEINFO(0x10000,128)
-+              }
-+      }, {
-               .mfr_id         = MANUFACTURER_ST,
-               .dev_id         = M29F800AB,
-               .name           = "ST M29F800AB",
diff --git a/target/linux/ar71xx/patches-2.6.33/108-mtd_fix_cfi_cmdset_0002_status_check.patch b/target/linux/ar71xx/patches-2.6.33/108-mtd_fix_cfi_cmdset_0002_status_check.patch
deleted file mode 100644 (file)
index e0676ca..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -1130,8 +1130,8 @@ static int __xipram do_write_oneword(str
-                       break;
-               }
--              if (chip_ready(map, adr))
--                      break;
-+              if (chip_good(map, adr, datum))
-+                      goto enable_xip;
-               /* Latency issues. Drop the lock, wait a while and retry */
-               UDELAY(map, chip, adr, 1);
-@@ -1147,6 +1147,8 @@ static int __xipram do_write_oneword(str
-               ret = -EIO;
-       }
-+
-+ enable_xip:
-       xip_enable(map, chip, adr);
-  op_done:
-       chip->state = FL_READY;
-@@ -1493,7 +1495,6 @@ static int cfi_amdstd_write_buffers(stru
-       return 0;
- }
--
- /*
-  * Handle devices with one erase region, that only implement
-  * the chip erase command.
-@@ -1557,8 +1558,8 @@ static int __xipram do_erase_chip(struct
-                       chip->erase_suspended = 0;
-               }
--              if (chip_ready(map, adr))
--                      break;
-+              if (chip_good(map, adr, map_word_ff(map)))
-+                      goto op_done;
-               if (time_after(jiffies, timeo)) {
-                       printk(KERN_WARNING "MTD %s(): software timeout\n",
-@@ -1578,6 +1579,7 @@ static int __xipram do_erase_chip(struct
-               ret = -EIO;
-       }
-+ op_done:
-       chip->state = FL_READY;
-       xip_enable(map, chip, adr);
-       put_chip(map, chip, adr);
-@@ -1645,9 +1647,9 @@ static int __xipram do_erase_oneblock(st
-                       chip->erase_suspended = 0;
-               }
--              if (chip_ready(map, adr)) {
-+              if (chip_good(map, adr, map_word_ff(map))) {
-                       xip_enable(map, chip, adr);
--                      break;
-+                      goto op_done;
-               }
-               if (time_after(jiffies, timeo)) {
-@@ -1669,6 +1671,7 @@ static int __xipram do_erase_oneblock(st
-               ret = -EIO;
-       }
-+ op_done:
-       chip->state = FL_READY;
-       put_chip(map, chip, adr);
-       spin_unlock(chip->mutex);
diff --git a/target/linux/ar71xx/patches-2.6.33/109-mtd-wrt160nl-trx-parser.patch b/target/linux/ar71xx/patches-2.6.33/109-mtd-wrt160nl-trx-parser.patch
deleted file mode 100644 (file)
index 037795b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -941,6 +941,16 @@ static int __devinit m25p_probe(struct s
-                                       part_probes, &parts, 0);
-               }
- #endif
-+
-+#ifdef CONFIG_MTD_WRT160NL_PARTS
-+              if (nr_parts <= 0) {
-+                      static const char *part_probes[]
-+                                      = { "wrt160nl", NULL, };
-+
-+                      nr_parts = parse_mtd_partitions(&flash->mtd,
-+                                      part_probes, &parts, 0);
-+              }
-+#endif
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -181,6 +181,12 @@ config MTD_AR7_PARTS
-       ---help---
-         TI AR7 partitioning support
-+config MTD_WRT160NL_PARTS
-+      tristate "Linksys WRT160NL partitioning support"
-+      depends on MTD_PARTITIONS && AR71XX_MACH_WRT160NL
-+      ---help---
-+         Linksys WRT160NL partitioning support
-+
- config MTD_MYLOADER_PARTS
-       tristate "MyLoader partition parsing"
-       depends on MTD_PARTITIONS && (ADM5120 || ATHEROS_AR231X || ATHEROS_AR71XX)
---- a/drivers/mtd/Makefile
-+++ b/drivers/mtd/Makefile
-@@ -12,6 +12,7 @@ obj-$(CONFIG_MTD_REDBOOT_PARTS) += redbo
- obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o
- obj-$(CONFIG_MTD_AFS_PARTS)   += afs.o
- obj-$(CONFIG_MTD_AR7_PARTS)   += ar7part.o
-+obj-$(CONFIG_MTD_WRT160NL_PARTS) += wrt160nl_part.o
- obj-$(CONFIG_MTD_OF_PARTS)      += ofpart.o
- obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
diff --git a/target/linux/ar71xx/patches-2.6.33/110-usb-ehci-add-war-for-synopsys-hc-bug.patch b/target/linux/ar71xx/patches-2.6.33/110-usb-ehci-add-war-for-synopsys-hc-bug.patch
deleted file mode 100644 (file)
index 076c39e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/usb/host/ehci-q.c
-+++ b/drivers/usb/host/ehci-q.c
-@@ -1194,6 +1194,9 @@ static void end_unlink_async (struct ehc
-               ehci->reclaim = NULL;
-               start_unlink_async (ehci, next);
-       }
-+
-+      if (ehci->has_synopsys_hc_bug)
-+              writel((u32)ehci->async->qh_dma, &ehci->regs->async_next);
- }
- /* makes sure the async qh will become idle */
---- a/drivers/usb/host/ehci.h
-+++ b/drivers/usb/host/ehci.h
-@@ -129,6 +129,7 @@ struct ehci_hcd {                  /* one per controlle
-       unsigned                has_amcc_usb23:1;
-       unsigned                need_io_watchdog:1;
-       unsigned                broken_periodic:1;
-+      unsigned                has_synopsys_hc_bug:1; /* Synopsys HC */
-       /* required for usb32 quirk */
-       #define OHCI_CTRL_HCFS          (3 << 6)
diff --git a/target/linux/ar71xx/patches-2.6.33/111-mtd-cfi_cmdset_0002-force-word-write.patch b/target/linux/ar71xx/patches-2.6.33/111-mtd-cfi_cmdset_0002-force-word-write.patch
deleted file mode 100644 (file)
index 3215a7d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -39,7 +39,7 @@
- #include <linux/mtd/xip.h>
- #define AMD_BOOTLOC_BUG
--#define FORCE_WORD_WRITE 0
-+#define FORCE_WORD_WRITE 1
- #define MAX_WORD_RETRIES 3
-@@ -55,7 +55,9 @@
- static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
- static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-+#if !FORCE_WORD_WRITE
- static int cfi_amdstd_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-+#endif
- static int cfi_amdstd_erase_chip(struct mtd_info *, struct erase_info *);
- static int cfi_amdstd_erase_varsize(struct mtd_info *, struct erase_info *);
- static void cfi_amdstd_sync (struct mtd_info *);
-@@ -190,6 +192,7 @@ static void fixup_amd_bootblock(struct m
- }
- #endif
-+#if !FORCE_WORD_WRITE
- static void fixup_use_write_buffers(struct mtd_info *mtd, void *param)
- {
-       struct map_info *map = mtd->priv;
-@@ -199,6 +202,7 @@ static void fixup_use_write_buffers(stru
-               mtd->write = cfi_amdstd_write_buffers;
-       }
- }
-+#endif /* !FORCE_WORD_WRITE */
- /* Atmel chips don't use the same PRI format as AMD chips */
- static void fixup_convert_atmel_pri(struct mtd_info *mtd, void *param)
-@@ -1304,6 +1308,7 @@ static int cfi_amdstd_write_words(struct
- /*
-  * FIXME: interleaved mode not tested, and probably not supported!
-  */
-+#if !FORCE_WORD_WRITE
- static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
-                                   unsigned long adr, const u_char *buf,
-                                   int len)
-@@ -1415,7 +1420,6 @@ static int __xipram do_write_buffer(stru
-       return ret;
- }
--
- static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
-                                   size_t *retlen, const u_char *buf)
- {
-@@ -1494,6 +1498,7 @@ static int cfi_amdstd_write_buffers(stru
-       return 0;
- }
-+#endif /* !FORCE_WORD_WRITE */
- /*
-  * Handle devices with one erase region, that only implement
diff --git a/target/linux/ar71xx/patches-2.6.33/120-dsa-trailer-tag-validation-fix.patch b/target/linux/ar71xx/patches-2.6.33/120-dsa-trailer-tag-validation-fix.patch
deleted file mode 100644 (file)
index b58aeed..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/net/dsa/tag_trailer.c
-+++ b/net/dsa/tag_trailer.c
-@@ -86,7 +86,7 @@ static int trailer_rcv(struct sk_buff *s
-       trailer = skb_tail_pointer(skb) - 4;
-       if (trailer[0] != 0x80 || (trailer[1] & 0xf8) != 0x00 ||
--          (trailer[3] & 0xef) != 0x00 || trailer[3] != 0x00)
-+          (trailer[2] & 0xef) != 0x00 || (trailer[3] & 0xfe) != 0x00)
-               goto out_drop;
-       source_port = trailer[1] & 7;
diff --git a/target/linux/ar71xx/patches-2.6.33/121-dsa-add-88e6063-driver.patch b/target/linux/ar71xx/patches-2.6.33/121-dsa-add-88e6063-driver.patch
deleted file mode 100644 (file)
index 1a11a69..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/net/dsa/Kconfig
-+++ b/net/dsa/Kconfig
-@@ -36,6 +36,13 @@ config NET_DSA_MV88E6060
-         This enables support for the Marvell 88E6060 ethernet switch
-         chip.
-+config NET_DSA_MV88E6063
-+      bool "Marvell 88E6063 ethernet switch chip support"
-+      select NET_DSA_TAG_TRAILER
-+      ---help---
-+        This enables support for the Marvell 88E6063 ethernet switch
-+        chip
-+
- config NET_DSA_MV88E6XXX_NEED_PPU
-       bool
-       default n
---- a/net/dsa/Makefile
-+++ b/net/dsa/Makefile
-@@ -6,6 +6,7 @@ obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag
- # switch drivers
- obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx.o
- obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
-+obj-$(CONFIG_NET_DSA_MV88E6063) += mv88e6063.o
- obj-$(CONFIG_NET_DSA_MV88E6123_61_65) += mv88e6123_61_65.o
- obj-$(CONFIG_NET_DSA_MV88E6131) += mv88e6131.o
diff --git a/target/linux/ar71xx/patches-2.6.33/122-dsa-add-qinq-tagging-format.patch b/target/linux/ar71xx/patches-2.6.33/122-dsa-add-qinq-tagging-format.patch
deleted file mode 100644 (file)
index dc03fd6..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
---- a/include/linux/if_ether.h
-+++ b/include/linux/if_ether.h
-@@ -81,6 +81,7 @@
- #define ETH_P_1588    0x88F7          /* IEEE 1588 Timesync */
- #define ETH_P_FCOE    0x8906          /* Fibre Channel over Ethernet  */
- #define ETH_P_FIP     0x8914          /* FCoE Initialization Protocol */
-+#define ETH_P_QINQ    0x9100          /* QinQ VLAN Stacking Protocol */
- #define ETH_P_EDSA    0xDADA          /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
- /*
---- a/net/dsa/dsa_priv.h
-+++ b/net/dsa/dsa_priv.h
-@@ -174,6 +174,9 @@ netdev_tx_t dsa_xmit(struct sk_buff *skb
- /* tag_edsa.c */
- netdev_tx_t edsa_xmit(struct sk_buff *skb, struct net_device *dev);
-+/* tag_qinq.c */
-+netdev_tx_t qinq_xmit(struct sk_buff *skb, struct net_device *dev);
-+
- /* tag_trailer.c */
- netdev_tx_t trailer_xmit(struct sk_buff *skb, struct net_device *dev);
---- a/net/dsa/Kconfig
-+++ b/net/dsa/Kconfig
-@@ -23,6 +23,10 @@ config NET_DSA_TAG_TRAILER
-       bool
-       default n
-+config NET_DSA_TAG_QINQ
-+      bool
-+      default y
-+
- # switch drivers
- config NET_DSA_MV88E6XXX
---- a/net/dsa/Makefile
-+++ b/net/dsa/Makefile
-@@ -1,6 +1,7 @@
- # tagging formats
- obj-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o
- obj-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o
-+obj-$(CONFIG_NET_DSA_TAG_QINQ) += tag_qinq.o
- obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
- # switch drivers
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -321,6 +321,19 @@ static const struct net_device_ops edsa_
-       .ndo_do_ioctl           = dsa_slave_ioctl,
- };
- #endif
-+#ifdef CONFIG_NET_DSA_TAG_QINQ
-+static const struct net_device_ops qinq_netdev_ops = {
-+      .ndo_init               = dsa_slave_init,
-+      .ndo_open               = dsa_slave_open,
-+      .ndo_stop               = dsa_slave_close,
-+      .ndo_start_xmit         = qinq_xmit,
-+      .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
-+      .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
-+      .ndo_set_multicast_list = dsa_slave_set_rx_mode,
-+      .ndo_set_mac_address    = dsa_slave_set_mac_address,
-+      .ndo_do_ioctl           = dsa_slave_ioctl,
-+};
-+#endif
- #ifdef CONFIG_NET_DSA_TAG_TRAILER
- static const struct net_device_ops trailer_netdev_ops = {
-       .ndo_init               = dsa_slave_init,
-@@ -366,6 +379,11 @@ dsa_slave_create(struct dsa_switch *ds, 
-               slave_dev->netdev_ops = &edsa_netdev_ops;
-               break;
- #endif
-+#ifdef CONFIG_NET_DSA_TAG_QINQ
-+      case htons(ETH_P_QINQ):
-+              slave_dev->netdev_ops = &qinq_netdev_ops;
-+              break;
-+#endif
- #ifdef CONFIG_NET_DSA_TAG_TRAILER
-       case htons(ETH_P_TRAILER):
-               slave_dev->netdev_ops = &trailer_netdev_ops;
diff --git a/target/linux/ar71xx/patches-2.6.33/123-dsa-add-ar7240-built-in-switch-support.patch b/target/linux/ar71xx/patches-2.6.33/123-dsa-add-ar7240-built-in-switch-support.patch
deleted file mode 100644 (file)
index 50e6e5d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/net/dsa/Kconfig
-+++ b/net/dsa/Kconfig
-@@ -29,6 +29,15 @@ config NET_DSA_TAG_QINQ
- # switch drivers
-+config NET_DSA_AR7240
-+      bool "Atheros AR7240 built-in ethernet switch support"
-+      depends on ATHEROS_AR71XX
-+      default n
-+      select NET_DSA_TAG_QINQ
-+      ---help---
-+        This enables support for the built-in ethernet switch of the
-+        Atheros AR7240 SoC.
-+
- config NET_DSA_MV88E6XXX
-       bool
-       default n
---- a/net/dsa/Makefile
-+++ b/net/dsa/Makefile
-@@ -5,6 +5,7 @@ obj-$(CONFIG_NET_DSA_TAG_QINQ) += tag_qi
- obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
- # switch drivers
-+obj-$(CONFIG_NET_DSA_AR7240) += ar7240.o
- obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx.o
- obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
- obj-$(CONFIG_NET_DSA_MV88E6063) += mv88e6063.o
diff --git a/target/linux/ar71xx/patches-2.6.33/140-redboot_partition_scan.patch b/target/linux/ar71xx/patches-2.6.33/140-redboot_partition_scan.patch
deleted file mode 100644 (file)
index 289d4eb..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -60,31 +60,32 @@ static int parse_redboot_partitions(stru
-       static char nullstring[] = "unallocated";
- #endif
-+      buf = vmalloc(master->erasesize);
-+      if (!buf)
-+              return -ENOMEM;
-+
-+ restart:
-       if ( directory < 0 ) {
-               offset = master->size + directory * master->erasesize;
--              while (master->block_isbad && 
-+              while (master->block_isbad &&
-                      master->block_isbad(master, offset)) {
-                       if (!offset) {
-                       nogood:
-                               printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
-+                              vfree(buf);
-                               return -EIO;
-                       }
-                       offset -= master->erasesize;
-               }
-       } else {
-               offset = directory * master->erasesize;
--              while (master->block_isbad && 
-+              while (master->block_isbad &&
-                      master->block_isbad(master, offset)) {
-                       offset += master->erasesize;
-                       if (offset == master->size)
-                               goto nogood;
-               }
-       }
--      buf = vmalloc(master->erasesize);
--
--      if (!buf)
--              return -ENOMEM;
--
-       printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
-              master->name, offset);
-@@ -156,6 +157,11 @@ static int parse_redboot_partitions(stru
-       }
-       if (i == numslots) {
-               /* Didn't find it */
-+              if (offset + master->erasesize < master->size) {
-+                      /* not at the end of the flash yet, maybe next block :) */
-+                      directory++;
-+                      goto restart;
-+              }
-               printk(KERN_NOTICE "No RedBoot partition table detected in %s\n",
-                      master->name);
-               ret = 0;
diff --git a/target/linux/ar71xx/patches-2.6.33/200-rb4xx_nand_driver.patch b/target/linux/ar71xx/patches-2.6.33/200-rb4xx_nand_driver.patch
deleted file mode 100644 (file)
index 1e64e0a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/mtd/nand/Kconfig
-+++ b/drivers/mtd/nand/Kconfig
-@@ -488,4 +488,8 @@ config MTD_NAND_W90P910
-         This enables the driver for the NAND Flash on evaluation board based
-         on w90p910.
-+config MTD_NAND_RB4XX
-+      tristate "NAND flash driver for RouterBoard 4xx series"
-+      depends on MTD_NAND && AR71XX_MACH_RB4XX
-+
- endif # MTD_NAND
---- a/drivers/mtd/nand/Makefile
-+++ b/drivers/mtd/nand/Makefile
-@@ -30,6 +30,7 @@ obj-$(CONFIG_MTD_NAND_CM_X270)               += cmx27
- obj-$(CONFIG_MTD_NAND_PXA3xx)         += pxa3xx_nand.o
- obj-$(CONFIG_MTD_NAND_TMIO)           += tmio_nand.o
- obj-$(CONFIG_MTD_NAND_PLATFORM)               += plat_nand.o
-+obj-$(CONFIG_MTD_NAND_RB4XX)          += rb4xx_nand.o
- obj-$(CONFIG_MTD_ALAUDA)              += alauda.o
- obj-$(CONFIG_MTD_NAND_PASEMI)         += pasemi_nand.o
- obj-$(CONFIG_MTD_NAND_ORION)          += orion_nand.o
diff --git a/target/linux/ar71xx/patches-2.6.33/201-ap83_spi_controller.patch b/target/linux/ar71xx/patches-2.6.33/201-ap83_spi_controller.patch
deleted file mode 100644 (file)
index a8e889a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -11,6 +11,7 @@ endif
- obj-$(CONFIG_SPI_MASTER)              += spi.o
- # SPI master controller drivers (bus)
-+obj-$(CONFIG_SPI_AP83)                        += ap83_spi.o
- obj-$(CONFIG_SPI_AR71XX)              += ar71xx_spi.o
- obj-$(CONFIG_SPI_ATMEL)                       += atmel_spi.o
- obj-$(CONFIG_SPI_BFIN)                        += spi_bfin5xx.o
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -53,6 +53,14 @@ if SPI_MASTER
- comment "SPI Master Controller Drivers"
-+config SPI_AP83
-+      tristate "Atheros AP83 specific SPI Controller"
-+      depends on SPI_MASTER && AR71XX_MACH_AP83
-+      select SPI_BITBANG
-+      help
-+        This is a specific SPI controller driver for the Atheros AP83
-+        reference board.
-+
- config SPI_AR71XX
-       tristate "Atheros AR71xx SPI Controller"
-       depends on SPI_MASTER && ATHEROS_AR71XX
diff --git a/target/linux/ar71xx/patches-2.6.33/202-spi_vsc7385_driver.patch b/target/linux/ar71xx/patches-2.6.33/202-spi_vsc7385_driver.patch
deleted file mode 100644 (file)
index 487785a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -365,6 +365,11 @@ config SPI_TLE62X0
-         sysfs interface, with each line presented as a kind of GPIO
-         exposing both switch control and diagnostic feedback.
-+config SPI_VSC7385
-+      tristate "Vitesse VSC7385 ethernet switch driver"
-+      help
-+        SPI driver for the Vitesse VSC7385 ethernet switch.
-+
- #
- # Add new SPI protocol masters in alphabetical order above this line
- #
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -54,6 +54,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ)
- # SPI protocol drivers (device/link on bus)
- obj-$(CONFIG_SPI_SPIDEV)      += spidev.o
-+obj-$(CONFIG_SPI_VSC7385)     += spi_vsc7385.o
- obj-$(CONFIG_SPI_TLE62X0)     += tle62x0.o
- #     ... add above this line ...
diff --git a/target/linux/ar71xx/patches-2.6.33/203-pb44_spi_controller.patch b/target/linux/ar71xx/patches-2.6.33/203-pb44_spi_controller.patch
deleted file mode 100644 (file)
index 2a6edeb..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -68,6 +68,14 @@ config SPI_AR71XX
-       help
-         This is the SPI contoller driver for Atheros AR71xx.
-+config SPI_PB44
-+      tristate "Atheros PB44 board specific SPI controller"
-+      depends on SPI_MASTER && AR71XX_MACH_PB44
-+      select SPI_BITBANG
-+      help
-+        This is a specific SPI controller driver for the Atheros PB44
-+        reference board.
-+
- config SPI_ATMEL
-       tristate "Atmel SPI Controller"
-       depends on (ARCH_AT91 || AVR32)
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_SPI_GPIO)                       += spi_gpio.o
- obj-$(CONFIG_SPI_GPIO_OLD)            += spi_gpio_old.o
- obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
- obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
-+obj-$(CONFIG_SPI_PB44)                        += pb44_spi.o
- obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
- obj-$(CONFIG_SPI_OMAP_UWIRE)          += omap_uwire.o
- obj-$(CONFIG_SPI_OMAP24XX)            += omap2_mcspi.o
diff --git a/target/linux/ar71xx/patches-2.6.33/205-wndr3700-usb-led-driver.patch b/target/linux/ar71xx/patches-2.6.33/205-wndr3700-usb-led-driver.patch
deleted file mode 100644 (file)
index d2fbc9c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -269,6 +269,13 @@ config LEDS_ADP5520
-         To compile this driver as a module, choose M here: the module will
-         be called leds-adp5520.
-+config LEDS_WNDR3700_USB
-+      tristate "NETGEAR WNDR3700 USB LED driver"
-+      depends on LEDS_CLASS && AR71XX_MACH_WNDR3700
-+      help
-+        This option enables support for the USB LED found on the
-+        NETGEAR WNDR3700 board.
-+
- comment "LED Triggers"
- config LEDS_TRIGGERS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_LEDS_DA903X)            += leds-da903
- obj-$(CONFIG_LEDS_WM831X_STATUS)      += leds-wm831x-status.o
- obj-$(CONFIG_LEDS_WM8350)             += leds-wm8350.o
- obj-$(CONFIG_LEDS_PWM)                        += leds-pwm.o
-+obj-${CONFIG_LEDS_WNDR3700_USB}               += leds-wndr3700-usb.o
- obj-$(CONFIG_LEDS_REGULATOR)          += leds-regulator.o
- obj-$(CONFIG_LEDS_INTEL_SS4200)               += leds-ss4200.o
- obj-$(CONFIG_LEDS_LT3593)             += leds-lt3593.o
diff --git a/target/linux/ar71xx/patches-2.6.33/206-nxp-74hc153-gpio-chip-driver.patch b/target/linux/ar71xx/patches-2.6.33/206-nxp-74hc153-gpio-chip-driver.patch
deleted file mode 100644 (file)
index 575f7bb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/gpio/Kconfig
-+++ b/drivers/gpio/Kconfig
-@@ -255,4 +255,12 @@ config GPIO_UCB1400
-         To compile this driver as a module, choose M here: the
-         module will be called ucb1400_gpio.
-+comment "Other GPIO expanders"
-+
-+config GPIO_NXP_74HC153
-+      tristate "NXP 74HC153 Dual 4-input multiplexer"
-+      help
-+        Platform driver for NXP 74HC153 Dual 4-input Multiplexer. This
-+        provides a GPIO interface supporting inputs.
-+
- endif
---- a/drivers/gpio/Makefile
-+++ b/drivers/gpio/Makefile
-@@ -11,6 +11,7 @@ obj-$(CONFIG_GPIO_MAX7301)   += max7301.o
- obj-$(CONFIG_GPIO_MAX732X)    += max732x.o
- obj-$(CONFIG_GPIO_MC33880)    += mc33880.o
- obj-$(CONFIG_GPIO_MCP23S08)   += mcp23s08.o
-+obj-$(CONFIG_GPIO_NXP_74HC153)        += nxp_74hc153.o
- obj-$(CONFIG_GPIO_PCA953X)    += pca953x.o
- obj-$(CONFIG_GPIO_PCF857X)    += pcf857x.o
- obj-$(CONFIG_GPIO_PL061)      += pl061.o
diff --git a/target/linux/ar71xx/patches-2.6.33/207-rb750-led-driver.patch b/target/linux/ar71xx/patches-2.6.33/207-rb750-led-driver.patch
deleted file mode 100644 (file)
index 500604f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -276,6 +276,10 @@ config LEDS_WNDR3700_USB
-         This option enables support for the USB LED found on the
-         NETGEAR WNDR3700 board.
-+config LEDS_RB750
-+      tristate "LED driver for the Mikrotik RouterBOARD 750"
-+      depends on LEDS_CLASS && AR71XX_MACH_RB750
-+
- comment "LED Triggers"
- config LEDS_TRIGGERS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_LEDS_REGULATOR)         += leds-re
- obj-$(CONFIG_LEDS_INTEL_SS4200)               += leds-ss4200.o
- obj-$(CONFIG_LEDS_LT3593)             += leds-lt3593.o
- obj-$(CONFIG_LEDS_ADP5520)            += leds-adp5520.o
-+obj-$(CONFIG_LEDS_RB750)              += leds-rb750.o
- # LED SPI Drivers
- obj-$(CONFIG_LEDS_DAC124S085)         += leds-dac124s085.o
diff --git a/target/linux/ar71xx/patches-2.6.33/208-rb750-nand-driver.patch b/target/linux/ar71xx/patches-2.6.33/208-rb750-nand-driver.patch
deleted file mode 100644 (file)
index 3766a1c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/mtd/nand/Kconfig
-+++ b/drivers/mtd/nand/Kconfig
-@@ -492,4 +492,8 @@ config MTD_NAND_RB4XX
-       tristate "NAND flash driver for RouterBoard 4xx series"
-       depends on MTD_NAND && AR71XX_MACH_RB4XX
-+config MTD_NAND_RB750
-+      tristate "NAND flash driver for the RouterBoard 750"
-+      depends on MTD_NAND && AR71XX_MACH_RB750
-+
- endif # MTD_NAND
---- a/drivers/mtd/nand/Makefile
-+++ b/drivers/mtd/nand/Makefile
-@@ -31,6 +31,7 @@ obj-$(CONFIG_MTD_NAND_PXA3xx)                += pxa3xx
- obj-$(CONFIG_MTD_NAND_TMIO)           += tmio_nand.o
- obj-$(CONFIG_MTD_NAND_PLATFORM)               += plat_nand.o
- obj-$(CONFIG_MTD_NAND_RB4XX)          += rb4xx_nand.o
-+obj-$(CONFIG_MTD_NAND_RB750)          += rb750_nand.o
- obj-$(CONFIG_MTD_ALAUDA)              += alauda.o
- obj-$(CONFIG_MTD_NAND_PASEMI)         += pasemi_nand.o
- obj-$(CONFIG_MTD_NAND_ORION)          += orion_nand.o
diff --git a/target/linux/ar71xx/patches-2.6.33/300-mips_fw_myloader.patch b/target/linux/ar71xx/patches-2.6.33/300-mips_fw_myloader.patch
deleted file mode 100644 (file)
index 48d0de8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -190,6 +190,7 @@ endif
- #
- libs-$(CONFIG_ARC)            += arch/mips/fw/arc/
- libs-$(CONFIG_CFE)            += arch/mips/fw/cfe/
-+libs-$(CONFIG_MYLOADER)               += arch/mips/fw/myloader/
- libs-$(CONFIG_SNIPROM)                += arch/mips/fw/sni/
- libs-y                                += arch/mips/fw/lib/
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -877,6 +877,9 @@ config MIPS_NILE4
- config MIPS_DISABLE_OBSOLETE_IDE
-       bool
-+config MYLOADER
-+      bool
-+
- config SYNC_R4K
-       bool
diff --git a/target/linux/ar71xx/patches-2.6.33/400-mips-multi-machine-update.patch b/target/linux/ar71xx/patches-2.6.33/400-mips-multi-machine-update.patch
deleted file mode 100644 (file)
index d635879..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
---- a/arch/mips/kernel/mips_machine.c
-+++ b/arch/mips/kernel/mips_machine.c
-@@ -7,12 +7,13 @@
-  *
-  */
- #include <linux/mm.h>
-+#include <linux/string.h>
- #include <asm/mips_machine.h>
--#include <asm/bootinfo.h>
- static struct list_head mips_machines __initdata =
-               LIST_HEAD_INIT(mips_machines);
-+static char *mips_machid __initdata;
- char *mips_machine_name = "Unknown";
-@@ -55,20 +56,65 @@ void __init mips_machine_set_name(char *
-       }
- }
--void __init mips_machine_setup(unsigned long machtype)
-+void __init mips_machine_setup(void)
- {
-       struct mips_machine *mach;
--      mach = mips_machine_find(machtype);
-+      mach = mips_machine_find(mips_machtype);
-       if (!mach) {
--              printk(KERN_ALERT "MIPS: no machine registered for "
--                      "machtype %lu\n", machtype);
-+              printk(KERN_WARNING "MIPS: no machine registered for "
-+                      "machtype %lu\n", mips_machtype);
-               return;
-       }
-       mips_machine_set_name(mach->mach_name);
--      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
-+      printk(KERN_NOTICE "MIPS: machine is %s\n", mips_machine_name);
-       if (mach->mach_setup)
-               mach->mach_setup();
- }
-+
-+int __init mips_machtype_setup(char *id)
-+{
-+      if (mips_machid == NULL)
-+              mips_machid = id;
-+
-+      return 1;
-+}
-+
-+__setup("machtype=", mips_machtype_setup);
-+
-+static int __init mips_machtype_init(void)
-+{
-+      struct list_head *this;
-+      struct mips_machine *mach;
-+
-+      if (mips_machid == NULL)
-+              return 0;
-+
-+      list_for_each(this, &mips_machines) {
-+              mach = list_entry(this, struct mips_machine, list);
-+              if (mach->mach_id == NULL)
-+                      continue;
-+
-+              if (strcmp(mach->mach_id, mips_machid) == 0) {
-+                      mips_machtype = mach->mach_type;
-+                      return 0;
-+              }
-+      }
-+
-+      printk(KERN_WARNING
-+             "MIPS: no machine found for id: '%s', registered machines:\n",
-+             mips_machid);
-+      printk(KERN_WARNING "%32s %s\n", "id", "name");
-+
-+      list_for_each(this, &mips_machines) {
-+              mach = list_entry(this, struct mips_machine, list);
-+              printk(KERN_WARNING "%32s %s\n",
-+                     mach->mach_id ? mach->mach_id : "", mach->mach_name);
-+      }
-+
-+      return 0;
-+}
-+
-+core_initcall(mips_machtype_init);
---- a/arch/mips/include/asm/mips_machine.h
-+++ b/arch/mips/include/asm/mips_machine.h
-@@ -13,25 +13,33 @@
- #include <linux/init.h>
- #include <linux/list.h>
-+#include <asm/bootinfo.h>
-+
- struct mips_machine {
-       unsigned long           mach_type;
--      void                    (*mach_setup)(void);
-+      char                    *mach_id;
-       char                    *mach_name;
-+      void                    (*mach_setup)(void);
-       struct list_head        list;
- };
- void mips_machine_register(struct mips_machine *) __init;
--void mips_machine_setup(unsigned long machtype) __init;
-+void mips_machine_setup(void) __init;
-+int  mips_machtype_setup(char *id) __init;
- void mips_machine_set_name(char *name) __init;
- extern char *mips_machine_name;
--#define MIPS_MACHINE(_type, _name, _setup)                    \
--static char machine_name_##_type[] __initdata = _name;                \
-+#define MIPS_MACHINE(_type, _id, _name, _setup)               \
-+static const char machine_name_##_type[] __initconst          \
-+                      __aligned(1) = _name;                   \
-+static const char machine_id_##_type[] __initconst            \
-+                      __aligned(1) = _id;                     \
- static struct mips_machine machine_##_type __initdata =               \
- {                                                             \
-       .mach_type      = _type,                                \
--      .mach_name      = machine_name_##_type,                 \
-+      .mach_id        = (char *) machine_id_##_type,          \
-+      .mach_name      = (char *) machine_name_##_type,        \
-       .mach_setup     = _setup,                               \
- };                                                            \
-                                                               \
-@@ -44,4 +52,3 @@ static int __init register_machine_##_ty
- pure_initcall(register_machine_##_type)
- #endif /* __ASM_MIPS_MACHINE_H */
--
diff --git a/target/linux/ar71xx/patches-2.6.33/901-get_c0_compare_irq_function.patch b/target/linux/ar71xx/patches-2.6.33/901-get_c0_compare_irq_function.patch
deleted file mode 100644 (file)
index 596e669..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/arch/mips/kernel/traps.c
-+++ b/arch/mips/kernel/traps.c
-@@ -50,6 +50,7 @@
- #include <asm/types.h>
- #include <asm/stacktrace.h>
- #include <asm/irq.h>
-+#include <asm/time.h>
- extern void check_wait(void);
- extern asmlinkage void r4k_wait(void);
-@@ -1496,6 +1497,8 @@ void __cpuinit per_cpu_trap_init(void)
-       if (cpu_has_mips_r2) {
-               cp0_compare_irq_shift = CAUSEB_TI - CAUSEB_IP;
-               cp0_compare_irq = (read_c0_intctl() >> INTCTLB_IPTI) & 7;
-+              if (get_c0_compare_irq)
-+                      cp0_compare_irq = get_c0_compare_irq();
-               cp0_perfcount_irq = (read_c0_intctl() >> INTCTLB_IPPCI) & 7;
-               if (cp0_perfcount_irq == cp0_compare_irq)
-                       cp0_perfcount_irq = -1;
---- a/arch/mips/include/asm/time.h
-+++ b/arch/mips/include/asm/time.h
-@@ -52,6 +52,7 @@ extern int (*perf_irq)(void);
-  */
- #ifdef CONFIG_CEVT_R4K_LIB
- extern unsigned int __weak get_c0_compare_int(void);
-+extern unsigned int __weak get_c0_compare_irq(void);
- extern int r4k_clockevent_init(void);
- #endif
diff --git a/target/linux/ar71xx/patches-2.6.33/902-mips_clocksource_init_war.patch b/target/linux/ar71xx/patches-2.6.33/902-mips_clocksource_init_war.patch
deleted file mode 100644 (file)
index 1ce4380..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/arch/mips/kernel/cevt-r4k.c
-+++ b/arch/mips/kernel/cevt-r4k.c
-@@ -16,6 +16,22 @@
- #include <asm/cevt-r4k.h>
- /*
-+ * Compare interrupt can be routed and latched outside the core,
-+ * so a single execution hazard barrier may not be enough to give
-+ * it time to clear as seen in the Cause register.  4 time the
-+ * pipeline depth seems reasonably conservative, and empirically
-+ * works better in configurations with high CPU/bus clock ratios.
-+ */
-+
-+#define compare_change_hazard() \
-+      do { \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+      } while (0)
-+
-+/*
-  * The SMTC Kernel for the 34K, 1004K, et. al. replaces several
-  * of these routines with SMTC-specific variants.
-  */
-@@ -31,6 +47,7 @@ static int mips_next_event(unsigned long
-       cnt = read_c0_count();
-       cnt += delta;
-       write_c0_compare(cnt);
-+      compare_change_hazard();
-       res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0;
-       return res;
- }
-@@ -100,22 +117,6 @@ static int c0_compare_int_pending(void)
-       return (read_c0_cause() >> cp0_compare_irq_shift) & (1ul << CAUSEB_IP);
- }
--/*
-- * Compare interrupt can be routed and latched outside the core,
-- * so a single execution hazard barrier may not be enough to give
-- * it time to clear as seen in the Cause register.  4 time the
-- * pipeline depth seems reasonably conservative, and empirically
-- * works better in configurations with high CPU/bus clock ratios.
-- */
--
--#define compare_change_hazard() \
--      do { \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--      } while (0)
--
- int c0_compare_int_usable(void)
- {
-       unsigned int delta;
diff --git a/target/linux/ar71xx/patches-2.6.34/001-ar71xx_core.patch b/target/linux/ar71xx/patches-2.6.34/001-ar71xx_core.patch
deleted file mode 100644 (file)
index 5073652..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -166,6 +166,13 @@ ifeq (,$(findstring march=octeon, $(cfla
- cflags-$(CONFIG_CPU_CAVIUM_OCTEON) += -Wa,-march=octeon
- endif
-+#
-+# Atheros AR71xx
-+#
-+core-$(CONFIG_ATHEROS_AR71XX) += arch/mips/ar71xx/
-+cflags-$(CONFIG_ATHEROS_AR71XX)       += -I$(srctree)/arch/mips/include/asm/mach-ar71xx
-+load-$(CONFIG_ATHEROS_AR71XX) += 0xffffffff80060000
-+
- cflags-$(CONFIG_CPU_R4000_WORKAROUNDS)        += $(call cc-option,-mfix-r4000,)
- cflags-$(CONFIG_CPU_R4400_WORKAROUNDS)        += $(call cc-option,-mfix-r4400,)
- cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS)        += $(call cc-option,-mno-daddi,)
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -48,6 +48,23 @@ config AR7
-         Support for the Texas Instruments AR7 System-on-a-Chip
-         family: TNETD7100, 7200 and 7300.
-+config ATHEROS_AR71XX
-+      bool "Atheros AR71xx based boards"
-+      select CEVT_R4K
-+      select CSRC_R4K
-+      select DMA_NONCOHERENT
-+      select HW_HAS_PCI
-+      select IRQ_CPU
-+      select ARCH_REQUIRE_GPIOLIB
-+      select SYS_HAS_CPU_MIPS32_R1
-+      select SYS_HAS_CPU_MIPS32_R2
-+      select SYS_SUPPORTS_32BIT_KERNEL
-+      select SYS_SUPPORTS_BIG_ENDIAN
-+      select SYS_HAS_EARLY_PRINTK
-+      select MIPS_MACHINE
-+      help
-+        Support for Atheros AR71xx based boards.
-+
- config BCM47XX
-       bool "BCM47XX based boards"
-       select CEVT_R4K
-@@ -682,6 +699,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
- endchoice
- source "arch/mips/alchemy/Kconfig"
-+source "arch/mips/ar71xx/Kconfig"
- source "arch/mips/bcm63xx/Kconfig"
- source "arch/mips/jazz/Kconfig"
- source "arch/mips/lasat/Kconfig"
diff --git a/target/linux/ar71xx/patches-2.6.34/002-ar71xx_pci.patch b/target/linux/ar71xx/patches-2.6.34/002-ar71xx_pci.patch
deleted file mode 100644 (file)
index 3facce9..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/mips/pci/Makefile
-+++ b/arch/mips/pci/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_PCI_TX4927)     += ops-tx4927.o
- obj-$(CONFIG_BCM47XX)         += pci-bcm47xx.o
- obj-$(CONFIG_BCM63XX)         += pci-bcm63xx.o fixup-bcm63xx.o \
-                                       ops-bcm63xx.o
-+obj-$(CONFIG_ATHEROS_AR71XX)  += pci-ar71xx.o pci-ar724x.o
- #
- # These are still pretty much in the old state, watch, go blind.
diff --git a/target/linux/ar71xx/patches-2.6.34/003-ar71xx_usb_host.patch b/target/linux/ar71xx/patches-2.6.34/003-ar71xx_usb_host.patch
deleted file mode 100644 (file)
index 238a79c..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
---- a/drivers/usb/host/Kconfig
-+++ b/drivers/usb/host/Kconfig
-@@ -109,6 +109,13 @@ config XPS_USB_HCD_XILINX
-               support both high speed and full speed devices, or high speed
-               devices only.
-+config USB_EHCI_AR71XX
-+      bool "USB EHCI support for AR71xx"
-+      depends on USB_EHCI_HCD && ATHEROS_AR71XX
-+      default y
-+      help
-+        Support for Atheros AR71xx built-in EHCI controller
-+
- config USB_EHCI_FSL
-       bool "Support for Freescale on-chip EHCI USB controller"
-       depends on USB_EHCI_HCD && FSL_SOC
-@@ -207,6 +214,13 @@ config USB_OHCI_HCD
-         To compile this driver as a module, choose M here: the
-         module will be called ohci-hcd.
-+config USB_OHCI_AR71XX
-+      bool "USB OHCI support for Atheros AR71xx"
-+      depends on USB_OHCI_HCD && ATHEROS_AR71XX
-+      default y
-+      help
-+        Support for Atheros AR71xx built-in OHCI controller
-+
- config USB_OHCI_HCD_PPC_SOC
-       bool "OHCI support for on-chip PPC USB controller"
-       depends on USB_OHCI_HCD && (STB03xxx || PPC_MPC52xx)
---- a/drivers/usb/host/ehci-hcd.c
-+++ b/drivers/usb/host/ehci-hcd.c
-@@ -1158,6 +1158,11 @@ MODULE_LICENSE ("GPL");
- #define       PLATFORM_DRIVER         ehci_atmel_driver
- #endif
-+#ifdef CONFIG_USB_EHCI_AR71XX
-+#include "ehci-ar71xx.c"
-+#define PLATFORM_DRIVER               ehci_ar71xx_driver
-+#endif
-+
- #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
-     !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
- #error "missing bus glue for ehci-hcd"
---- a/drivers/usb/host/ohci-hcd.c
-+++ b/drivers/usb/host/ohci-hcd.c
-@@ -1085,6 +1085,11 @@ MODULE_LICENSE ("GPL");
- #define TMIO_OHCI_DRIVER      ohci_hcd_tmio_driver
- #endif
-+#ifdef CONFIG_USB_OHCI_AR71XX
-+#include "ohci-ar71xx.c"
-+#define PLATFORM_DRIVER               ohci_hcd_ar71xx_driver
-+#endif
-+
- #if   !defined(PCI_DRIVER) &&         \
-       !defined(PLATFORM_DRIVER) &&    \
-       !defined(OF_PLATFORM_DRIVER) && \
diff --git a/target/linux/ar71xx/patches-2.6.34/004-ar71xx_spi_controller.patch b/target/linux/ar71xx/patches-2.6.34/004-ar71xx_spi_controller.patch
deleted file mode 100644 (file)
index 9c196e0..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -53,6 +53,13 @@ if SPI_MASTER
- comment "SPI Master Controller Drivers"
-+config SPI_AR71XX
-+      tristate "Atheros AR71xx SPI Controller"
-+      depends on SPI_MASTER && ATHEROS_AR71XX
-+      select SPI_BITBANG
-+      help
-+        This is the SPI contoller driver for Atheros AR71xx.
-+
- config SPI_ATMEL
-       tristate "Atmel SPI Controller"
-       depends on (ARCH_AT91 || AVR32)
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -11,6 +11,7 @@ endif
- obj-$(CONFIG_SPI_MASTER)              += spi.o
- # SPI master controller drivers (bus)
-+obj-$(CONFIG_SPI_AR71XX)              += ar71xx_spi.o
- obj-$(CONFIG_SPI_ATMEL)                       += atmel_spi.o
- obj-$(CONFIG_SPI_BFIN)                        += spi_bfin5xx.o
- obj-$(CONFIG_SPI_BITBANG)             += spi_bitbang.o
diff --git a/target/linux/ar71xx/patches-2.6.34/005-ar71xx_mac_driver.patch b/target/linux/ar71xx/patches-2.6.34/005-ar71xx_mac_driver.patch
deleted file mode 100644 (file)
index 3721a9b..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -2128,6 +2128,8 @@ config ACENIC_OMIT_TIGON_I
-         The safe and default value for this is N.
-+source drivers/net/ag71xx/Kconfig
-+
- config DL2K
-       tristate "DL2000/TC902x-based Gigabit Ethernet support"
-       depends on PCI
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -106,6 +106,7 @@ obj-$(CONFIG_STMMAC_ETH) += stmmac/
- # end link order section
- #
-+obj-$(CONFIG_AG71XX) += ag71xx/
- obj-$(CONFIG_SUNDANCE) += sundance.o
- obj-$(CONFIG_HAMACHI) += hamachi.o
- obj-$(CONFIG_NET) += Space.o loopback.o
diff --git a/target/linux/ar71xx/patches-2.6.34/006-ar71xx_wdt_driver.patch b/target/linux/ar71xx/patches-2.6.34/006-ar71xx_wdt_driver.patch
deleted file mode 100644 (file)
index d71a11b..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/watchdog/Kconfig
-+++ b/drivers/watchdog/Kconfig
-@@ -840,6 +840,13 @@ config TXX9_WDT
-       help
-         Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
-+config AR71XX_WDT
-+      tristate "Atheros AR71xx Watchdog Timer"
-+      depends on ATHEROS_AR71XX
-+      help
-+        Hardware driver for the built-in watchdog timer on the Atheros
-+        AR71xx SoCs.
-+
- # PARISC Architecture
- # POWERPC Architecture
---- a/drivers/watchdog/Makefile
-+++ b/drivers/watchdog/Makefile
-@@ -112,6 +112,7 @@ obj-$(CONFIG_PNX833X_WDT) += pnx833x_wdt
- obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
- obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
- obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
-+obj-$(CONFIG_AR71XX_WDT) += ar71xx_wdt.o
- # PARISC Architecture
diff --git a/target/linux/ar71xx/patches-2.6.34/007-ar91xx_flash_driver.patch b/target/linux/ar71xx/patches-2.6.34/007-ar91xx_flash_driver.patch
deleted file mode 100644 (file)
index 5dbdd29..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/mtd/maps/Kconfig
-+++ b/drivers/mtd/maps/Kconfig
-@@ -257,6 +257,13 @@ config MTD_ALCHEMY
-       help
-         Flash memory access on AMD Alchemy Pb/Db/RDK Reference Boards
-+config MTD_AR91XX_FLASH
-+      tristate "Atheros AR91xx parallel flash support"
-+      depends on ATHEROS_AR71XX
-+      select MTD_COMPLEX_MAPPINGS
-+      help
-+        Parallel flash driver for the Atheros AR91xx based boards.
-+
- config MTD_DILNETPC
-       tristate "CFI Flash device mapped on DIL/Net PC"
-       depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT && BROKEN
---- a/drivers/mtd/maps/Makefile
-+++ b/drivers/mtd/maps/Makefile
-@@ -40,6 +40,7 @@
- obj-$(CONFIG_MTD_DBOX2)               += dbox2-flash.o
- obj-$(CONFIG_MTD_SOLUTIONENGINE)+= solutionengine.o
- obj-$(CONFIG_MTD_PCI)         += pci.o
-+obj-$(CONFIG_MTD_AR91XX_FLASH)        += ar91xx_flash.o
- obj-$(CONFIG_MTD_AUTCPU12)    += autcpu12-nvram.o
- obj-$(CONFIG_MTD_EDB7312)     += edb7312.o
- obj-$(CONFIG_MTD_IMPA7)               += impa7.o
diff --git a/target/linux/ar71xx/patches-2.6.34/101-ksz8041_phy_driver.patch b/target/linux/ar71xx/patches-2.6.34/101-ksz8041_phy_driver.patch
deleted file mode 100644 (file)
index 5036046..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -114,6 +114,11 @@ config RTL8306_PHY
-       tristate "Driver for Realtek RTL8306S switches"
-       select SWCONFIG
-+config MICREL_PHY
-+      tristate "Drivers for Micrel/Kendin PHYs"
-+      ---help---
-+        Currently has a driver for the KSZ8041
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_RTL8366_SMI)    += rtl8366_smi
- obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
- obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
-+obj-$(CONFIG_MICREL)          += micrel.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
- obj-$(CONFIG_MDIO_GPIO)               += mdio-gpio.o
diff --git a/target/linux/ar71xx/patches-2.6.34/102-mtd_m25p80_add_myloader_parser.patch b/target/linux/ar71xx/patches-2.6.34/102-mtd_m25p80_add_myloader_parser.patch
deleted file mode 100644 (file)
index 45f743e..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -922,6 +922,16 @@ static int __devinit m25p_probe(struct s
-                                       part_probes, &parts, 0);
-               }
-+#ifdef CONFIG_MTD_MYLOADER_PARTS
-+              if (nr_parts <= 0) {
-+                      static const char *part_probes[]
-+                                      = { "MyLoader", NULL, };
-+
-+                      nr_parts = parse_mtd_partitions(&flash->mtd,
-+                                      part_probes, &parts, 0);
-+              }
-+#endif
-+
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
diff --git a/target/linux/ar71xx/patches-2.6.34/104-mtd_m25p80_add_redboot_parser.patch b/target/linux/ar71xx/patches-2.6.34/104-mtd_m25p80_add_redboot_parser.patch
deleted file mode 100644 (file)
index 43fe987..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -932,6 +932,15 @@ static int __devinit m25p_probe(struct s
-               }
- #endif
-+#ifdef CONFIG_MTD_REDBOOT_PARTS
-+              if (nr_parts <= 0) {
-+                      static const char *part_probes[]
-+                                      = { "RedBoot", NULL, };
-+
-+                      nr_parts = parse_mtd_partitions(&flash->mtd,
-+                                      part_probes, &parts, 0);
-+              }
-+#endif
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
diff --git a/target/linux/ar71xx/patches-2.6.34/107-mtd-SST39VF6401B-support.patch b/target/linux/ar71xx/patches-2.6.34/107-mtd-SST39VF6401B-support.patch
deleted file mode 100644 (file)
index 2fdfcb7..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/drivers/mtd/chips/jedec_probe.c
-+++ b/drivers/mtd/chips/jedec_probe.c
-@@ -166,6 +166,7 @@
- #define SST39LF160    0x2782
- #define SST39VF1601   0x234b
- #define SST39VF3201   0x235b
-+#define SST39VF6401B  0x236d
- #define SST39LF512    0x00D4
- #define SST39LF010    0x00D5
- #define SST39LF020    0x00D6
-@@ -1556,6 +1557,18 @@ static const struct amd_flash_info jedec
-                       ERASEINFO(0x10000,64),
-               }
-       }, {
-+              .mfr_id         = MANUFACTURER_SST,
-+              .dev_id         = SST39VF6401B,
-+              .name           = "SST 39VF6401B",
-+              .devtypes       = CFI_DEVICETYPE_X16,
-+              .uaddr          = MTD_UADDR_0xAAAA_0x5555,
-+              .dev_size       = SIZE_8MiB,
-+              .cmd_set        = P_ID_AMD_STD,
-+              .nr_regions     = 1,
-+              .regions        = {
-+                      ERASEINFO(0x10000,128)
-+              }
-+      }, {
-               .mfr_id         = MANUFACTURER_ST,
-               .dev_id         = M29F800AB,
-               .name           = "ST M29F800AB",
diff --git a/target/linux/ar71xx/patches-2.6.34/108-mtd_fix_cfi_cmdset_0002_status_check.patch b/target/linux/ar71xx/patches-2.6.34/108-mtd_fix_cfi_cmdset_0002_status_check.patch
deleted file mode 100644 (file)
index e0676ca..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -1130,8 +1130,8 @@ static int __xipram do_write_oneword(str
-                       break;
-               }
--              if (chip_ready(map, adr))
--                      break;
-+              if (chip_good(map, adr, datum))
-+                      goto enable_xip;
-               /* Latency issues. Drop the lock, wait a while and retry */
-               UDELAY(map, chip, adr, 1);
-@@ -1147,6 +1147,8 @@ static int __xipram do_write_oneword(str
-               ret = -EIO;
-       }
-+
-+ enable_xip:
-       xip_enable(map, chip, adr);
-  op_done:
-       chip->state = FL_READY;
-@@ -1493,7 +1495,6 @@ static int cfi_amdstd_write_buffers(stru
-       return 0;
- }
--
- /*
-  * Handle devices with one erase region, that only implement
-  * the chip erase command.
-@@ -1557,8 +1558,8 @@ static int __xipram do_erase_chip(struct
-                       chip->erase_suspended = 0;
-               }
--              if (chip_ready(map, adr))
--                      break;
-+              if (chip_good(map, adr, map_word_ff(map)))
-+                      goto op_done;
-               if (time_after(jiffies, timeo)) {
-                       printk(KERN_WARNING "MTD %s(): software timeout\n",
-@@ -1578,6 +1579,7 @@ static int __xipram do_erase_chip(struct
-               ret = -EIO;
-       }
-+ op_done:
-       chip->state = FL_READY;
-       xip_enable(map, chip, adr);
-       put_chip(map, chip, adr);
-@@ -1645,9 +1647,9 @@ static int __xipram do_erase_oneblock(st
-                       chip->erase_suspended = 0;
-               }
--              if (chip_ready(map, adr)) {
-+              if (chip_good(map, adr, map_word_ff(map))) {
-                       xip_enable(map, chip, adr);
--                      break;
-+                      goto op_done;
-               }
-               if (time_after(jiffies, timeo)) {
-@@ -1669,6 +1671,7 @@ static int __xipram do_erase_oneblock(st
-               ret = -EIO;
-       }
-+ op_done:
-       chip->state = FL_READY;
-       put_chip(map, chip, adr);
-       spin_unlock(chip->mutex);
diff --git a/target/linux/ar71xx/patches-2.6.34/109-mtd-wrt160nl-trx-parser.patch b/target/linux/ar71xx/patches-2.6.34/109-mtd-wrt160nl-trx-parser.patch
deleted file mode 100644 (file)
index 037795b..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -941,6 +941,16 @@ static int __devinit m25p_probe(struct s
-                                       part_probes, &parts, 0);
-               }
- #endif
-+
-+#ifdef CONFIG_MTD_WRT160NL_PARTS
-+              if (nr_parts <= 0) {
-+                      static const char *part_probes[]
-+                                      = { "wrt160nl", NULL, };
-+
-+                      nr_parts = parse_mtd_partitions(&flash->mtd,
-+                                      part_probes, &parts, 0);
-+              }
-+#endif
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
-                       nr_parts = data->nr_parts;
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -181,6 +181,12 @@ config MTD_AR7_PARTS
-       ---help---
-         TI AR7 partitioning support
-+config MTD_WRT160NL_PARTS
-+      tristate "Linksys WRT160NL partitioning support"
-+      depends on MTD_PARTITIONS && AR71XX_MACH_WRT160NL
-+      ---help---
-+         Linksys WRT160NL partitioning support
-+
- config MTD_MYLOADER_PARTS
-       tristate "MyLoader partition parsing"
-       depends on MTD_PARTITIONS && (ADM5120 || ATHEROS_AR231X || ATHEROS_AR71XX)
---- a/drivers/mtd/Makefile
-+++ b/drivers/mtd/Makefile
-@@ -12,6 +12,7 @@ obj-$(CONFIG_MTD_REDBOOT_PARTS) += redbo
- obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.o
- obj-$(CONFIG_MTD_AFS_PARTS)   += afs.o
- obj-$(CONFIG_MTD_AR7_PARTS)   += ar7part.o
-+obj-$(CONFIG_MTD_WRT160NL_PARTS) += wrt160nl_part.o
- obj-$(CONFIG_MTD_OF_PARTS)      += ofpart.o
- obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
diff --git a/target/linux/ar71xx/patches-2.6.34/110-usb-ehci-add-war-for-synopsys-hc-bug.patch b/target/linux/ar71xx/patches-2.6.34/110-usb-ehci-add-war-for-synopsys-hc-bug.patch
deleted file mode 100644 (file)
index 076c39e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/usb/host/ehci-q.c
-+++ b/drivers/usb/host/ehci-q.c
-@@ -1194,6 +1194,9 @@ static void end_unlink_async (struct ehc
-               ehci->reclaim = NULL;
-               start_unlink_async (ehci, next);
-       }
-+
-+      if (ehci->has_synopsys_hc_bug)
-+              writel((u32)ehci->async->qh_dma, &ehci->regs->async_next);
- }
- /* makes sure the async qh will become idle */
---- a/drivers/usb/host/ehci.h
-+++ b/drivers/usb/host/ehci.h
-@@ -129,6 +129,7 @@ struct ehci_hcd {                  /* one per controlle
-       unsigned                has_amcc_usb23:1;
-       unsigned                need_io_watchdog:1;
-       unsigned                broken_periodic:1;
-+      unsigned                has_synopsys_hc_bug:1; /* Synopsys HC */
-       /* required for usb32 quirk */
-       #define OHCI_CTRL_HCFS          (3 << 6)
diff --git a/target/linux/ar71xx/patches-2.6.34/111-mtd-cfi_cmdset_0002-force-word-write.patch b/target/linux/ar71xx/patches-2.6.34/111-mtd-cfi_cmdset_0002-force-word-write.patch
deleted file mode 100644 (file)
index 3215a7d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -39,7 +39,7 @@
- #include <linux/mtd/xip.h>
- #define AMD_BOOTLOC_BUG
--#define FORCE_WORD_WRITE 0
-+#define FORCE_WORD_WRITE 1
- #define MAX_WORD_RETRIES 3
-@@ -55,7 +55,9 @@
- static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
- static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-+#if !FORCE_WORD_WRITE
- static int cfi_amdstd_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-+#endif
- static int cfi_amdstd_erase_chip(struct mtd_info *, struct erase_info *);
- static int cfi_amdstd_erase_varsize(struct mtd_info *, struct erase_info *);
- static void cfi_amdstd_sync (struct mtd_info *);
-@@ -190,6 +192,7 @@ static void fixup_amd_bootblock(struct m
- }
- #endif
-+#if !FORCE_WORD_WRITE
- static void fixup_use_write_buffers(struct mtd_info *mtd, void *param)
- {
-       struct map_info *map = mtd->priv;
-@@ -199,6 +202,7 @@ static void fixup_use_write_buffers(stru
-               mtd->write = cfi_amdstd_write_buffers;
-       }
- }
-+#endif /* !FORCE_WORD_WRITE */
- /* Atmel chips don't use the same PRI format as AMD chips */
- static void fixup_convert_atmel_pri(struct mtd_info *mtd, void *param)
-@@ -1304,6 +1308,7 @@ static int cfi_amdstd_write_words(struct
- /*
-  * FIXME: interleaved mode not tested, and probably not supported!
-  */
-+#if !FORCE_WORD_WRITE
- static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip,
-                                   unsigned long adr, const u_char *buf,
-                                   int len)
-@@ -1415,7 +1420,6 @@ static int __xipram do_write_buffer(stru
-       return ret;
- }
--
- static int cfi_amdstd_write_buffers(struct mtd_info *mtd, loff_t to, size_t len,
-                                   size_t *retlen, const u_char *buf)
- {
-@@ -1494,6 +1498,7 @@ static int cfi_amdstd_write_buffers(stru
-       return 0;
- }
-+#endif /* !FORCE_WORD_WRITE */
- /*
-  * Handle devices with one erase region, that only implement
diff --git a/target/linux/ar71xx/patches-2.6.34/120-dsa-trailer-tag-validation-fix.patch b/target/linux/ar71xx/patches-2.6.34/120-dsa-trailer-tag-validation-fix.patch
deleted file mode 100644 (file)
index b58aeed..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/net/dsa/tag_trailer.c
-+++ b/net/dsa/tag_trailer.c
-@@ -86,7 +86,7 @@ static int trailer_rcv(struct sk_buff *s
-       trailer = skb_tail_pointer(skb) - 4;
-       if (trailer[0] != 0x80 || (trailer[1] & 0xf8) != 0x00 ||
--          (trailer[3] & 0xef) != 0x00 || trailer[3] != 0x00)
-+          (trailer[2] & 0xef) != 0x00 || (trailer[3] & 0xfe) != 0x00)
-               goto out_drop;
-       source_port = trailer[1] & 7;
diff --git a/target/linux/ar71xx/patches-2.6.34/121-dsa-add-88e6063-driver.patch b/target/linux/ar71xx/patches-2.6.34/121-dsa-add-88e6063-driver.patch
deleted file mode 100644 (file)
index 1a11a69..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/net/dsa/Kconfig
-+++ b/net/dsa/Kconfig
-@@ -36,6 +36,13 @@ config NET_DSA_MV88E6060
-         This enables support for the Marvell 88E6060 ethernet switch
-         chip.
-+config NET_DSA_MV88E6063
-+      bool "Marvell 88E6063 ethernet switch chip support"
-+      select NET_DSA_TAG_TRAILER
-+      ---help---
-+        This enables support for the Marvell 88E6063 ethernet switch
-+        chip
-+
- config NET_DSA_MV88E6XXX_NEED_PPU
-       bool
-       default n
---- a/net/dsa/Makefile
-+++ b/net/dsa/Makefile
-@@ -6,6 +6,7 @@ obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag
- # switch drivers
- obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx.o
- obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
-+obj-$(CONFIG_NET_DSA_MV88E6063) += mv88e6063.o
- obj-$(CONFIG_NET_DSA_MV88E6123_61_65) += mv88e6123_61_65.o
- obj-$(CONFIG_NET_DSA_MV88E6131) += mv88e6131.o
diff --git a/target/linux/ar71xx/patches-2.6.34/122-dsa-add-qinq-tagging-format.patch b/target/linux/ar71xx/patches-2.6.34/122-dsa-add-qinq-tagging-format.patch
deleted file mode 100644 (file)
index dc03fd6..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
---- a/include/linux/if_ether.h
-+++ b/include/linux/if_ether.h
-@@ -81,6 +81,7 @@
- #define ETH_P_1588    0x88F7          /* IEEE 1588 Timesync */
- #define ETH_P_FCOE    0x8906          /* Fibre Channel over Ethernet  */
- #define ETH_P_FIP     0x8914          /* FCoE Initialization Protocol */
-+#define ETH_P_QINQ    0x9100          /* QinQ VLAN Stacking Protocol */
- #define ETH_P_EDSA    0xDADA          /* Ethertype DSA [ NOT AN OFFICIALLY REGISTERED ID ] */
- /*
---- a/net/dsa/dsa_priv.h
-+++ b/net/dsa/dsa_priv.h
-@@ -174,6 +174,9 @@ netdev_tx_t dsa_xmit(struct sk_buff *skb
- /* tag_edsa.c */
- netdev_tx_t edsa_xmit(struct sk_buff *skb, struct net_device *dev);
-+/* tag_qinq.c */
-+netdev_tx_t qinq_xmit(struct sk_buff *skb, struct net_device *dev);
-+
- /* tag_trailer.c */
- netdev_tx_t trailer_xmit(struct sk_buff *skb, struct net_device *dev);
---- a/net/dsa/Kconfig
-+++ b/net/dsa/Kconfig
-@@ -23,6 +23,10 @@ config NET_DSA_TAG_TRAILER
-       bool
-       default n
-+config NET_DSA_TAG_QINQ
-+      bool
-+      default y
-+
- # switch drivers
- config NET_DSA_MV88E6XXX
---- a/net/dsa/Makefile
-+++ b/net/dsa/Makefile
-@@ -1,6 +1,7 @@
- # tagging formats
- obj-$(CONFIG_NET_DSA_TAG_DSA) += tag_dsa.o
- obj-$(CONFIG_NET_DSA_TAG_EDSA) += tag_edsa.o
-+obj-$(CONFIG_NET_DSA_TAG_QINQ) += tag_qinq.o
- obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
- # switch drivers
---- a/net/dsa/slave.c
-+++ b/net/dsa/slave.c
-@@ -321,6 +321,19 @@ static const struct net_device_ops edsa_
-       .ndo_do_ioctl           = dsa_slave_ioctl,
- };
- #endif
-+#ifdef CONFIG_NET_DSA_TAG_QINQ
-+static const struct net_device_ops qinq_netdev_ops = {
-+      .ndo_init               = dsa_slave_init,
-+      .ndo_open               = dsa_slave_open,
-+      .ndo_stop               = dsa_slave_close,
-+      .ndo_start_xmit         = qinq_xmit,
-+      .ndo_change_rx_flags    = dsa_slave_change_rx_flags,
-+      .ndo_set_rx_mode        = dsa_slave_set_rx_mode,
-+      .ndo_set_multicast_list = dsa_slave_set_rx_mode,
-+      .ndo_set_mac_address    = dsa_slave_set_mac_address,
-+      .ndo_do_ioctl           = dsa_slave_ioctl,
-+};
-+#endif
- #ifdef CONFIG_NET_DSA_TAG_TRAILER
- static const struct net_device_ops trailer_netdev_ops = {
-       .ndo_init               = dsa_slave_init,
-@@ -366,6 +379,11 @@ dsa_slave_create(struct dsa_switch *ds, 
-               slave_dev->netdev_ops = &edsa_netdev_ops;
-               break;
- #endif
-+#ifdef CONFIG_NET_DSA_TAG_QINQ
-+      case htons(ETH_P_QINQ):
-+              slave_dev->netdev_ops = &qinq_netdev_ops;
-+              break;
-+#endif
- #ifdef CONFIG_NET_DSA_TAG_TRAILER
-       case htons(ETH_P_TRAILER):
-               slave_dev->netdev_ops = &trailer_netdev_ops;
diff --git a/target/linux/ar71xx/patches-2.6.34/123-dsa-add-ar7240-built-in-switch-support.patch b/target/linux/ar71xx/patches-2.6.34/123-dsa-add-ar7240-built-in-switch-support.patch
deleted file mode 100644 (file)
index 50e6e5d..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/net/dsa/Kconfig
-+++ b/net/dsa/Kconfig
-@@ -29,6 +29,15 @@ config NET_DSA_TAG_QINQ
- # switch drivers
-+config NET_DSA_AR7240
-+      bool "Atheros AR7240 built-in ethernet switch support"
-+      depends on ATHEROS_AR71XX
-+      default n
-+      select NET_DSA_TAG_QINQ
-+      ---help---
-+        This enables support for the built-in ethernet switch of the
-+        Atheros AR7240 SoC.
-+
- config NET_DSA_MV88E6XXX
-       bool
-       default n
---- a/net/dsa/Makefile
-+++ b/net/dsa/Makefile
-@@ -5,6 +5,7 @@ obj-$(CONFIG_NET_DSA_TAG_QINQ) += tag_qi
- obj-$(CONFIG_NET_DSA_TAG_TRAILER) += tag_trailer.o
- # switch drivers
-+obj-$(CONFIG_NET_DSA_AR7240) += ar7240.o
- obj-$(CONFIG_NET_DSA_MV88E6XXX) += mv88e6xxx.o
- obj-$(CONFIG_NET_DSA_MV88E6060) += mv88e6060.o
- obj-$(CONFIG_NET_DSA_MV88E6063) += mv88e6063.o
diff --git a/target/linux/ar71xx/patches-2.6.34/140-redboot_partition_scan.patch b/target/linux/ar71xx/patches-2.6.34/140-redboot_partition_scan.patch
deleted file mode 100644 (file)
index 289d4eb..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -60,31 +60,32 @@ static int parse_redboot_partitions(stru
-       static char nullstring[] = "unallocated";
- #endif
-+      buf = vmalloc(master->erasesize);
-+      if (!buf)
-+              return -ENOMEM;
-+
-+ restart:
-       if ( directory < 0 ) {
-               offset = master->size + directory * master->erasesize;
--              while (master->block_isbad && 
-+              while (master->block_isbad &&
-                      master->block_isbad(master, offset)) {
-                       if (!offset) {
-                       nogood:
-                               printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
-+                              vfree(buf);
-                               return -EIO;
-                       }
-                       offset -= master->erasesize;
-               }
-       } else {
-               offset = directory * master->erasesize;
--              while (master->block_isbad && 
-+              while (master->block_isbad &&
-                      master->block_isbad(master, offset)) {
-                       offset += master->erasesize;
-                       if (offset == master->size)
-                               goto nogood;
-               }
-       }
--      buf = vmalloc(master->erasesize);
--
--      if (!buf)
--              return -ENOMEM;
--
-       printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
-              master->name, offset);
-@@ -156,6 +157,11 @@ static int parse_redboot_partitions(stru
-       }
-       if (i == numslots) {
-               /* Didn't find it */
-+              if (offset + master->erasesize < master->size) {
-+                      /* not at the end of the flash yet, maybe next block :) */
-+                      directory++;
-+                      goto restart;
-+              }
-               printk(KERN_NOTICE "No RedBoot partition table detected in %s\n",
-                      master->name);
-               ret = 0;
diff --git a/target/linux/ar71xx/patches-2.6.34/200-rb4xx_nand_driver.patch b/target/linux/ar71xx/patches-2.6.34/200-rb4xx_nand_driver.patch
deleted file mode 100644 (file)
index 1e64e0a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/mtd/nand/Kconfig
-+++ b/drivers/mtd/nand/Kconfig
-@@ -488,4 +488,8 @@ config MTD_NAND_W90P910
-         This enables the driver for the NAND Flash on evaluation board based
-         on w90p910.
-+config MTD_NAND_RB4XX
-+      tristate "NAND flash driver for RouterBoard 4xx series"
-+      depends on MTD_NAND && AR71XX_MACH_RB4XX
-+
- endif # MTD_NAND
---- a/drivers/mtd/nand/Makefile
-+++ b/drivers/mtd/nand/Makefile
-@@ -30,6 +30,7 @@ obj-$(CONFIG_MTD_NAND_CM_X270)               += cmx27
- obj-$(CONFIG_MTD_NAND_PXA3xx)         += pxa3xx_nand.o
- obj-$(CONFIG_MTD_NAND_TMIO)           += tmio_nand.o
- obj-$(CONFIG_MTD_NAND_PLATFORM)               += plat_nand.o
-+obj-$(CONFIG_MTD_NAND_RB4XX)          += rb4xx_nand.o
- obj-$(CONFIG_MTD_ALAUDA)              += alauda.o
- obj-$(CONFIG_MTD_NAND_PASEMI)         += pasemi_nand.o
- obj-$(CONFIG_MTD_NAND_ORION)          += orion_nand.o
diff --git a/target/linux/ar71xx/patches-2.6.34/201-ap83_spi_controller.patch b/target/linux/ar71xx/patches-2.6.34/201-ap83_spi_controller.patch
deleted file mode 100644 (file)
index a8e889a..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -11,6 +11,7 @@ endif
- obj-$(CONFIG_SPI_MASTER)              += spi.o
- # SPI master controller drivers (bus)
-+obj-$(CONFIG_SPI_AP83)                        += ap83_spi.o
- obj-$(CONFIG_SPI_AR71XX)              += ar71xx_spi.o
- obj-$(CONFIG_SPI_ATMEL)                       += atmel_spi.o
- obj-$(CONFIG_SPI_BFIN)                        += spi_bfin5xx.o
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -53,6 +53,14 @@ if SPI_MASTER
- comment "SPI Master Controller Drivers"
-+config SPI_AP83
-+      tristate "Atheros AP83 specific SPI Controller"
-+      depends on SPI_MASTER && AR71XX_MACH_AP83
-+      select SPI_BITBANG
-+      help
-+        This is a specific SPI controller driver for the Atheros AP83
-+        reference board.
-+
- config SPI_AR71XX
-       tristate "Atheros AR71xx SPI Controller"
-       depends on SPI_MASTER && ATHEROS_AR71XX
diff --git a/target/linux/ar71xx/patches-2.6.34/202-spi_vsc7385_driver.patch b/target/linux/ar71xx/patches-2.6.34/202-spi_vsc7385_driver.patch
deleted file mode 100644 (file)
index 487785a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -365,6 +365,11 @@ config SPI_TLE62X0
-         sysfs interface, with each line presented as a kind of GPIO
-         exposing both switch control and diagnostic feedback.
-+config SPI_VSC7385
-+      tristate "Vitesse VSC7385 ethernet switch driver"
-+      help
-+        SPI driver for the Vitesse VSC7385 ethernet switch.
-+
- #
- # Add new SPI protocol masters in alphabetical order above this line
- #
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -54,6 +54,7 @@ spi_s3c24xx_hw-$(CONFIG_SPI_S3C24XX_FIQ)
- # SPI protocol drivers (device/link on bus)
- obj-$(CONFIG_SPI_SPIDEV)      += spidev.o
-+obj-$(CONFIG_SPI_VSC7385)     += spi_vsc7385.o
- obj-$(CONFIG_SPI_TLE62X0)     += tle62x0.o
- #     ... add above this line ...
diff --git a/target/linux/ar71xx/patches-2.6.34/203-pb44_spi_controller.patch b/target/linux/ar71xx/patches-2.6.34/203-pb44_spi_controller.patch
deleted file mode 100644 (file)
index 2a6edeb..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -68,6 +68,14 @@ config SPI_AR71XX
-       help
-         This is the SPI contoller driver for Atheros AR71xx.
-+config SPI_PB44
-+      tristate "Atheros PB44 board specific SPI controller"
-+      depends on SPI_MASTER && AR71XX_MACH_PB44
-+      select SPI_BITBANG
-+      help
-+        This is a specific SPI controller driver for the Atheros PB44
-+        reference board.
-+
- config SPI_ATMEL
-       tristate "Atmel SPI Controller"
-       depends on (ARCH_AT91 || AVR32)
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_SPI_GPIO)                       += spi_gpio.o
- obj-$(CONFIG_SPI_GPIO_OLD)            += spi_gpio_old.o
- obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
- obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
-+obj-$(CONFIG_SPI_PB44)                        += pb44_spi.o
- obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
- obj-$(CONFIG_SPI_OMAP_UWIRE)          += omap_uwire.o
- obj-$(CONFIG_SPI_OMAP24XX)            += omap2_mcspi.o
diff --git a/target/linux/ar71xx/patches-2.6.34/205-wndr3700-usb-led-driver.patch b/target/linux/ar71xx/patches-2.6.34/205-wndr3700-usb-led-driver.patch
deleted file mode 100644 (file)
index d2fbc9c..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -269,6 +269,13 @@ config LEDS_ADP5520
-         To compile this driver as a module, choose M here: the module will
-         be called leds-adp5520.
-+config LEDS_WNDR3700_USB
-+      tristate "NETGEAR WNDR3700 USB LED driver"
-+      depends on LEDS_CLASS && AR71XX_MACH_WNDR3700
-+      help
-+        This option enables support for the USB LED found on the
-+        NETGEAR WNDR3700 board.
-+
- comment "LED Triggers"
- config LEDS_TRIGGERS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_LEDS_DA903X)            += leds-da903
- obj-$(CONFIG_LEDS_WM831X_STATUS)      += leds-wm831x-status.o
- obj-$(CONFIG_LEDS_WM8350)             += leds-wm8350.o
- obj-$(CONFIG_LEDS_PWM)                        += leds-pwm.o
-+obj-${CONFIG_LEDS_WNDR3700_USB}               += leds-wndr3700-usb.o
- obj-$(CONFIG_LEDS_REGULATOR)          += leds-regulator.o
- obj-$(CONFIG_LEDS_INTEL_SS4200)               += leds-ss4200.o
- obj-$(CONFIG_LEDS_LT3593)             += leds-lt3593.o
diff --git a/target/linux/ar71xx/patches-2.6.34/206-nxp-74hc153-gpio-chip-driver.patch b/target/linux/ar71xx/patches-2.6.34/206-nxp-74hc153-gpio-chip-driver.patch
deleted file mode 100644 (file)
index 575f7bb..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/gpio/Kconfig
-+++ b/drivers/gpio/Kconfig
-@@ -255,4 +255,12 @@ config GPIO_UCB1400
-         To compile this driver as a module, choose M here: the
-         module will be called ucb1400_gpio.
-+comment "Other GPIO expanders"
-+
-+config GPIO_NXP_74HC153
-+      tristate "NXP 74HC153 Dual 4-input multiplexer"
-+      help
-+        Platform driver for NXP 74HC153 Dual 4-input Multiplexer. This
-+        provides a GPIO interface supporting inputs.
-+
- endif
---- a/drivers/gpio/Makefile
-+++ b/drivers/gpio/Makefile
-@@ -11,6 +11,7 @@ obj-$(CONFIG_GPIO_MAX7301)   += max7301.o
- obj-$(CONFIG_GPIO_MAX732X)    += max732x.o
- obj-$(CONFIG_GPIO_MC33880)    += mc33880.o
- obj-$(CONFIG_GPIO_MCP23S08)   += mcp23s08.o
-+obj-$(CONFIG_GPIO_NXP_74HC153)        += nxp_74hc153.o
- obj-$(CONFIG_GPIO_PCA953X)    += pca953x.o
- obj-$(CONFIG_GPIO_PCF857X)    += pcf857x.o
- obj-$(CONFIG_GPIO_PL061)      += pl061.o
diff --git a/target/linux/ar71xx/patches-2.6.34/207-rb750-led-driver.patch b/target/linux/ar71xx/patches-2.6.34/207-rb750-led-driver.patch
deleted file mode 100644 (file)
index 500604f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -276,6 +276,10 @@ config LEDS_WNDR3700_USB
-         This option enables support for the USB LED found on the
-         NETGEAR WNDR3700 board.
-+config LEDS_RB750
-+      tristate "LED driver for the Mikrotik RouterBOARD 750"
-+      depends on LEDS_CLASS && AR71XX_MACH_RB750
-+
- comment "LED Triggers"
- config LEDS_TRIGGERS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_LEDS_REGULATOR)         += leds-re
- obj-$(CONFIG_LEDS_INTEL_SS4200)               += leds-ss4200.o
- obj-$(CONFIG_LEDS_LT3593)             += leds-lt3593.o
- obj-$(CONFIG_LEDS_ADP5520)            += leds-adp5520.o
-+obj-$(CONFIG_LEDS_RB750)              += leds-rb750.o
- # LED SPI Drivers
- obj-$(CONFIG_LEDS_DAC124S085)         += leds-dac124s085.o
diff --git a/target/linux/ar71xx/patches-2.6.34/208-rb750-nand-driver.patch b/target/linux/ar71xx/patches-2.6.34/208-rb750-nand-driver.patch
deleted file mode 100644 (file)
index 3766a1c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/mtd/nand/Kconfig
-+++ b/drivers/mtd/nand/Kconfig
-@@ -492,4 +492,8 @@ config MTD_NAND_RB4XX
-       tristate "NAND flash driver for RouterBoard 4xx series"
-       depends on MTD_NAND && AR71XX_MACH_RB4XX
-+config MTD_NAND_RB750
-+      tristate "NAND flash driver for the RouterBoard 750"
-+      depends on MTD_NAND && AR71XX_MACH_RB750
-+
- endif # MTD_NAND
---- a/drivers/mtd/nand/Makefile
-+++ b/drivers/mtd/nand/Makefile
-@@ -31,6 +31,7 @@ obj-$(CONFIG_MTD_NAND_PXA3xx)                += pxa3xx
- obj-$(CONFIG_MTD_NAND_TMIO)           += tmio_nand.o
- obj-$(CONFIG_MTD_NAND_PLATFORM)               += plat_nand.o
- obj-$(CONFIG_MTD_NAND_RB4XX)          += rb4xx_nand.o
-+obj-$(CONFIG_MTD_NAND_RB750)          += rb750_nand.o
- obj-$(CONFIG_MTD_ALAUDA)              += alauda.o
- obj-$(CONFIG_MTD_NAND_PASEMI)         += pasemi_nand.o
- obj-$(CONFIG_MTD_NAND_ORION)          += orion_nand.o
diff --git a/target/linux/ar71xx/patches-2.6.34/300-mips_fw_myloader.patch b/target/linux/ar71xx/patches-2.6.34/300-mips_fw_myloader.patch
deleted file mode 100644 (file)
index 0d8f132..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -188,6 +188,7 @@ endif
- #
- libs-$(CONFIG_ARC)            += arch/mips/fw/arc/
- libs-$(CONFIG_CFE)            += arch/mips/fw/cfe/
-+libs-$(CONFIG_MYLOADER)               += arch/mips/fw/myloader/
- libs-$(CONFIG_SNIPROM)                += arch/mips/fw/sni/
- libs-y                                += arch/mips/fw/lib/
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -877,6 +877,9 @@ config MIPS_NILE4
- config MIPS_DISABLE_OBSOLETE_IDE
-       bool
-+config MYLOADER
-+      bool
-+
- config SYNC_R4K
-       bool
diff --git a/target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch b/target/linux/ar71xx/patches-2.6.34/400-mips-multi-machine-update.patch
deleted file mode 100644 (file)
index d635879..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
---- a/arch/mips/kernel/mips_machine.c
-+++ b/arch/mips/kernel/mips_machine.c
-@@ -7,12 +7,13 @@
-  *
-  */
- #include <linux/mm.h>
-+#include <linux/string.h>
- #include <asm/mips_machine.h>
--#include <asm/bootinfo.h>
- static struct list_head mips_machines __initdata =
-               LIST_HEAD_INIT(mips_machines);
-+static char *mips_machid __initdata;
- char *mips_machine_name = "Unknown";
-@@ -55,20 +56,65 @@ void __init mips_machine_set_name(char *
-       }
- }
--void __init mips_machine_setup(unsigned long machtype)
-+void __init mips_machine_setup(void)
- {
-       struct mips_machine *mach;
--      mach = mips_machine_find(machtype);
-+      mach = mips_machine_find(mips_machtype);
-       if (!mach) {
--              printk(KERN_ALERT "MIPS: no machine registered for "
--                      "machtype %lu\n", machtype);
-+              printk(KERN_WARNING "MIPS: no machine registered for "
-+                      "machtype %lu\n", mips_machtype);
-               return;
-       }
-       mips_machine_set_name(mach->mach_name);
--      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
-+      printk(KERN_NOTICE "MIPS: machine is %s\n", mips_machine_name);
-       if (mach->mach_setup)
-               mach->mach_setup();
- }
-+
-+int __init mips_machtype_setup(char *id)
-+{
-+      if (mips_machid == NULL)
-+              mips_machid = id;
-+
-+      return 1;
-+}
-+
-+__setup("machtype=", mips_machtype_setup);
-+
-+static int __init mips_machtype_init(void)
-+{
-+      struct list_head *this;
-+      struct mips_machine *mach;
-+
-+      if (mips_machid == NULL)
-+              return 0;
-+
-+      list_for_each(this, &mips_machines) {
-+              mach = list_entry(this, struct mips_machine, list);
-+              if (mach->mach_id == NULL)
-+                      continue;
-+
-+              if (strcmp(mach->mach_id, mips_machid) == 0) {
-+                      mips_machtype = mach->mach_type;
-+                      return 0;
-+              }
-+      }
-+
-+      printk(KERN_WARNING
-+             "MIPS: no machine found for id: '%s', registered machines:\n",
-+             mips_machid);
-+      printk(KERN_WARNING "%32s %s\n", "id", "name");
-+
-+      list_for_each(this, &mips_machines) {
-+              mach = list_entry(this, struct mips_machine, list);
-+              printk(KERN_WARNING "%32s %s\n",
-+                     mach->mach_id ? mach->mach_id : "", mach->mach_name);
-+      }
-+
-+      return 0;
-+}
-+
-+core_initcall(mips_machtype_init);
---- a/arch/mips/include/asm/mips_machine.h
-+++ b/arch/mips/include/asm/mips_machine.h
-@@ -13,25 +13,33 @@
- #include <linux/init.h>
- #include <linux/list.h>
-+#include <asm/bootinfo.h>
-+
- struct mips_machine {
-       unsigned long           mach_type;
--      void                    (*mach_setup)(void);
-+      char                    *mach_id;
-       char                    *mach_name;
-+      void                    (*mach_setup)(void);
-       struct list_head        list;
- };
- void mips_machine_register(struct mips_machine *) __init;
--void mips_machine_setup(unsigned long machtype) __init;
-+void mips_machine_setup(void) __init;
-+int  mips_machtype_setup(char *id) __init;
- void mips_machine_set_name(char *name) __init;
- extern char *mips_machine_name;
--#define MIPS_MACHINE(_type, _name, _setup)                    \
--static char machine_name_##_type[] __initdata = _name;                \
-+#define MIPS_MACHINE(_type, _id, _name, _setup)               \
-+static const char machine_name_##_type[] __initconst          \
-+                      __aligned(1) = _name;                   \
-+static const char machine_id_##_type[] __initconst            \
-+                      __aligned(1) = _id;                     \
- static struct mips_machine machine_##_type __initdata =               \
- {                                                             \
-       .mach_type      = _type,                                \
--      .mach_name      = machine_name_##_type,                 \
-+      .mach_id        = (char *) machine_id_##_type,          \
-+      .mach_name      = (char *) machine_name_##_type,        \
-       .mach_setup     = _setup,                               \
- };                                                            \
-                                                               \
-@@ -44,4 +52,3 @@ static int __init register_machine_##_ty
- pure_initcall(register_machine_##_type)
- #endif /* __ASM_MIPS_MACHINE_H */
--
diff --git a/target/linux/ar71xx/patches-2.6.34/901-get_c0_compare_irq_function.patch b/target/linux/ar71xx/patches-2.6.34/901-get_c0_compare_irq_function.patch
deleted file mode 100644 (file)
index c10f4ef..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/arch/mips/kernel/traps.c
-+++ b/arch/mips/kernel/traps.c
-@@ -51,6 +51,7 @@
- #include <asm/stacktrace.h>
- #include <asm/irq.h>
- #include <asm/uasm.h>
-+#include <asm/time.h>
- extern void check_wait(void);
- extern asmlinkage void r4k_wait(void);
-@@ -1501,6 +1502,8 @@
-       if (cpu_has_mips_r2) {
-               cp0_compare_irq_shift = CAUSEB_TI - CAUSEB_IP;
-               cp0_compare_irq = (read_c0_intctl() >> INTCTLB_IPTI) & 7;
-+              if (get_c0_compare_irq)
-+                      cp0_compare_irq = get_c0_compare_irq();
-               cp0_perfcount_irq = (read_c0_intctl() >> INTCTLB_IPPCI) & 7;
-               if (cp0_perfcount_irq == cp0_compare_irq)
-                       cp0_perfcount_irq = -1;
---- a/arch/mips/include/asm/time.h
-+++ b/arch/mips/include/asm/time.h
-@@ -52,6 +52,7 @@ extern int (*perf_irq)(void);
-  */
- #ifdef CONFIG_CEVT_R4K_LIB
- extern unsigned int __weak get_c0_compare_int(void);
-+extern unsigned int __weak get_c0_compare_irq(void);
- extern int r4k_clockevent_init(void);
- #endif
diff --git a/target/linux/ar71xx/patches-2.6.34/902-mips_clocksource_init_war.patch b/target/linux/ar71xx/patches-2.6.34/902-mips_clocksource_init_war.patch
deleted file mode 100644 (file)
index 1ce4380..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/arch/mips/kernel/cevt-r4k.c
-+++ b/arch/mips/kernel/cevt-r4k.c
-@@ -16,6 +16,22 @@
- #include <asm/cevt-r4k.h>
- /*
-+ * Compare interrupt can be routed and latched outside the core,
-+ * so a single execution hazard barrier may not be enough to give
-+ * it time to clear as seen in the Cause register.  4 time the
-+ * pipeline depth seems reasonably conservative, and empirically
-+ * works better in configurations with high CPU/bus clock ratios.
-+ */
-+
-+#define compare_change_hazard() \
-+      do { \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+      } while (0)
-+
-+/*
-  * The SMTC Kernel for the 34K, 1004K, et. al. replaces several
-  * of these routines with SMTC-specific variants.
-  */
-@@ -31,6 +47,7 @@ static int mips_next_event(unsigned long
-       cnt = read_c0_count();
-       cnt += delta;
-       write_c0_compare(cnt);
-+      compare_change_hazard();
-       res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0;
-       return res;
- }
-@@ -100,22 +117,6 @@ static int c0_compare_int_pending(void)
-       return (read_c0_cause() >> cp0_compare_irq_shift) & (1ul << CAUSEB_IP);
- }
--/*
-- * Compare interrupt can be routed and latched outside the core,
-- * so a single execution hazard barrier may not be enough to give
-- * it time to clear as seen in the Cause register.  4 time the
-- * pipeline depth seems reasonably conservative, and empirically
-- * works better in configurations with high CPU/bus clock ratios.
-- */
--
--#define compare_change_hazard() \
--      do { \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--      } while (0)
--
- int c0_compare_int_usable(void)
- {
-       unsigned int delta;
diff --git a/target/linux/atheros/config-2.6.33 b/target/linux/atheros/config-2.6.33
deleted file mode 100644 (file)
index 24ded44..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-CONFIG_ADM6996_PHY=y
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-CONFIG_AR231X_ETHERNET=y
-# CONFIG_AR7 is not set
-CONFIG_AR8216_PHY=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ATHEROS_AR2315=y
-CONFIG_ATHEROS_AR2315_PCI=y
-CONFIG_ATHEROS_AR231X=y
-CONFIG_ATHEROS_AR5312=y
-CONFIG_ATHEROS_WDT=y
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_BUG is not set
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CMDLINE="console=ttyS0,9600 rootfstype=squashfs,jffs2"
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-CONFIG_CPU_BIG_ENDIAN=y
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-# CONFIG_CPU_LITTLE_ENDIAN is not set
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPS32_R1=y
-# CONFIG_CPU_MIPS32_R2 is not set
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR1=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-CONFIG_DECOMPRESS_LZMA=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-CONFIG_EARLY_PRINTK=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIO_DEVICE=y
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HW_HAS_PCI=y
-CONFIG_HW_RANDOM=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_IP175C_PHY=y
-CONFIG_IRQ_CPU=y
-# CONFIG_LEDS_GPIO is not set
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_MIKROTIK_RB532 is not set
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-# CONFIG_MIPS_MACHINE is not set
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MTD_AR2315=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_GEOMETRY is not set
-# CONFIG_MTD_CFI_INTELEXT is not set
-CONFIG_MTD_MYLOADER_PARTS=y
-CONFIG_MTD_PHYSMAP=y
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-3
-CONFIG_MTD_REDBOOT_PARTS=y
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_MVSWITCH_PHY=y
-# CONFIG_NET_PCI is not set
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PCI=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PHYLIB=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POWERTV is not set
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-CONFIG_SERIAL_8250_NR_UARTS=1
-CONFIG_SERIAL_8250_RUNTIME_UARTS=1
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SWAP is not set
-CONFIG_SWCONFIG=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_HAS_EARLY_PRINTK=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_USB_SUPPORT=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/atheros/patches-2.6.33/001-get_c0_compare_int_fix.patch b/target/linux/atheros/patches-2.6.33/001-get_c0_compare_int_fix.patch
deleted file mode 100644 (file)
index 43da96c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-Fix the usage of get_c0_compare_int: override cp0_compare_irq if the returned
-value is in the MIPS CPU IRQ range to ensure that c0_compare_int_usable()
-still works.
-
-Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-
---- a/arch/mips/kernel/cevt-r4k.c
-+++ b/arch/mips/kernel/cevt-r4k.c
-@@ -168,20 +168,23 @@ int __cpuinit r4k_clockevent_init(void)
-       struct clock_event_device *cd;
-       unsigned int irq;
--      if (!cpu_has_counter || !mips_hpt_frequency)
--              return -ENXIO;
--
--      if (!c0_compare_int_usable())
--              return -ENXIO;
--
-       /*
-        * With vectored interrupts things are getting platform specific.
-        * get_c0_compare_int is a hook to allow a platform to return the
-        * interrupt number of it's liking.
-        */
-       irq = MIPS_CPU_IRQ_BASE + cp0_compare_irq;
--      if (get_c0_compare_int)
-+      if (get_c0_compare_int) {
-               irq = get_c0_compare_int();
-+              if ((irq >= MIPS_CPU_IRQ_BASE) && (irq < MIPS_CPU_IRQ_BASE + 8))
-+                      cp0_compare_irq = irq - MIPS_CPU_IRQ_BASE;
-+      }
-+
-+      if (!cpu_has_counter || !mips_hpt_frequency)
-+              return -ENXIO;
-+
-+      if (!c0_compare_int_usable())
-+              return -ENXIO;
-       cd = &per_cpu(mips_clockevent_device, cpu);
diff --git a/target/linux/atheros/patches-2.6.33/002-mips_clocksource_init_war.patch b/target/linux/atheros/patches-2.6.33/002-mips_clocksource_init_war.patch
deleted file mode 100644 (file)
index 1ce4380..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/arch/mips/kernel/cevt-r4k.c
-+++ b/arch/mips/kernel/cevt-r4k.c
-@@ -16,6 +16,22 @@
- #include <asm/cevt-r4k.h>
- /*
-+ * Compare interrupt can be routed and latched outside the core,
-+ * so a single execution hazard barrier may not be enough to give
-+ * it time to clear as seen in the Cause register.  4 time the
-+ * pipeline depth seems reasonably conservative, and empirically
-+ * works better in configurations with high CPU/bus clock ratios.
-+ */
-+
-+#define compare_change_hazard() \
-+      do { \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+              irq_disable_hazard(); \
-+      } while (0)
-+
-+/*
-  * The SMTC Kernel for the 34K, 1004K, et. al. replaces several
-  * of these routines with SMTC-specific variants.
-  */
-@@ -31,6 +47,7 @@ static int mips_next_event(unsigned long
-       cnt = read_c0_count();
-       cnt += delta;
-       write_c0_compare(cnt);
-+      compare_change_hazard();
-       res = ((int)(read_c0_count() - cnt) > 0) ? -ETIME : 0;
-       return res;
- }
-@@ -100,22 +117,6 @@ static int c0_compare_int_pending(void)
-       return (read_c0_cause() >> cp0_compare_irq_shift) & (1ul << CAUSEB_IP);
- }
--/*
-- * Compare interrupt can be routed and latched outside the core,
-- * so a single execution hazard barrier may not be enough to give
-- * it time to clear as seen in the Cause register.  4 time the
-- * pipeline depth seems reasonably conservative, and empirically
-- * works better in configurations with high CPU/bus clock ratios.
-- */
--
--#define compare_change_hazard() \
--      do { \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--              irq_disable_hazard(); \
--      } while (0)
--
- int c0_compare_int_usable(void)
- {
-       unsigned int delta;
diff --git a/target/linux/atheros/patches-2.6.33/100-board.patch b/target/linux/atheros/patches-2.6.33/100-board.patch
deleted file mode 100644 (file)
index 8ecce33..0000000
+++ /dev/null
@@ -1,3124 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -84,6 +84,19 @@ config BCM63XX
-       help
-        Support for BCM63XX based boards
-+config ATHEROS_AR231X
-+      bool "Atheros 231x/531x SoC support"
-+      select CEVT_R4K
-+      select CSRC_R4K
-+      select DMA_NONCOHERENT
-+      select IRQ_CPU
-+      select SYS_HAS_CPU_MIPS32_R1
-+      select SYS_SUPPORTS_BIG_ENDIAN
-+      select SYS_SUPPORTS_32BIT_KERNEL
-+      select GENERIC_GPIO
-+      help
-+        Support for AR231x and AR531x based boards
-+
- config MIPS_COBALT
-       bool "Cobalt Server"
-       select CEVT_R4K
-@@ -681,6 +694,7 @@ config CAVIUM_OCTEON_REFERENCE_BOARD
- endchoice
-+source "arch/mips/ar231x/Kconfig"
- source "arch/mips/alchemy/Kconfig"
- source "arch/mips/bcm63xx/Kconfig"
- source "arch/mips/jazz/Kconfig"
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -310,6 +310,13 @@ cflags-$(CONFIG_SOC_AU1X00)       += -I$(srctr
- #
-+# Atheros AR5312/AR2312 WiSoC
-+#
-+core-$(CONFIG_ATHEROS_AR231X)         += arch/mips/ar231x/
-+cflags-$(CONFIG_ATHEROS_AR231X)       += -I$(srctree)/arch/mips/include/asm/mach-ar231x
-+load-$(CONFIG_ATHEROS_AR231X)         += 0xffffffff80041000
-+
-+#
- # Cobalt Server
- #
- core-$(CONFIG_MIPS_COBALT)    += arch/mips/cobalt/
---- /dev/null
-+++ b/arch/mips/ar231x/Kconfig
-@@ -0,0 +1,17 @@
-+config ATHEROS_AR5312
-+      bool "Atheros 5312/2312+ support"
-+      depends on ATHEROS_AR231X
-+      default y
-+
-+config ATHEROS_AR2315
-+      bool "Atheros 2315+ support"
-+      depends on ATHEROS_AR231X
-+      select DMA_NONCOHERENT
-+      select CEVT_R4K
-+      select CSRC_R4K
-+      select IRQ_CPU
-+      select SYS_HAS_CPU_MIPS32_R1
-+      select SYS_SUPPORTS_32BIT_KERNEL
-+      select SYS_SUPPORTS_BIG_ENDIAN
-+      select GENERIC_GPIO
-+      default y
---- /dev/null
-+++ b/arch/mips/ar231x/Makefile
-@@ -0,0 +1,13 @@
-+#
-+# This file is subject to the terms and conditions of the GNU General Public
-+# License.  See the file "COPYING" in the main directory of this archive
-+# for more details.
-+#
-+# Copyright (C) 2006 FON Technology, SL.
-+# Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+# Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+#
-+
-+obj-y += board.o prom.o devices.o
-+obj-$(CONFIG_ATHEROS_AR5312) += ar5312.o
-+obj-$(CONFIG_ATHEROS_AR2315) += ar2315.o
---- /dev/null
-+++ b/arch/mips/ar231x/board.c
-@@ -0,0 +1,251 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2003 Atheros Communications, Inc.,  All Rights Reserved.
-+ * Copyright (C) 2006 FON Technology, SL.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+ */
-+
-+#include <generated/autoconf.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/platform_device.h>
-+#include <linux/kernel.h>
-+#include <linux/random.h>
-+#include <linux/etherdevice.h>
-+#include <asm/irq_cpu.h>
-+#include <asm/reboot.h>
-+#include <asm/io.h>
-+
-+#include <ar231x_platform.h>
-+#include "devices.h"
-+#include "ar5312.h"
-+#include "ar2315.h"
-+
-+void (*ar231x_irq_dispatch)(void);
-+
-+static inline bool
-+check_radio_magic(u8 *addr)
-+{
-+      addr += 0x7a; /* offset for flash magic */
-+      if ((addr[0] == 0x5a) && (addr[1] == 0xa5)) {
-+              return 1;
-+      }
-+      return 0;
-+}
-+
-+static inline bool
-+check_board_data(u8 *flash_limit, u8 *addr, bool broken)
-+{
-+      /* config magic found */
-+      if (*((u32 *)addr) == AR531X_BD_MAGIC)
-+              return 1;
-+
-+      if (!broken)
-+              return 0;
-+
-+      if (check_radio_magic(addr + 0xf8))
-+              ar231x_board.radio = addr + 0xf8;
-+      if ((addr < flash_limit + 0x10000) &&
-+           check_radio_magic(addr + 0x10000))
-+              ar231x_board.radio = addr + 0x10000;
-+
-+      if (ar231x_board.radio) {
-+              /* broken board data detected, use radio data to find the offset,
-+               * user will fix this */
-+              return 1;
-+      }
-+      return 0;
-+}
-+
-+static u8 *
-+find_board_config(u8 *flash_limit, bool broken)
-+{
-+      u8 *addr;
-+      int found = 0;
-+
-+      for (addr = flash_limit - 0x1000;
-+              addr >= flash_limit - 0x30000;
-+              addr -= 0x1000) {
-+
-+              if (check_board_data(flash_limit, addr, broken)) {
-+                      found = 1;
-+                      break;
-+              }
-+      }
-+
-+      if (!found)
-+              addr = NULL;
-+
-+      return addr;
-+}
-+
-+static u8 *
-+find_radio_config(u8 *flash_limit, u8 *board_config)
-+{
-+      int found;
-+      u8 *radio_config;
-+
-+      /*
-+       * Now find the start of Radio Configuration data, using heuristics:
-+       * Search forward from Board Configuration data by 0x1000 bytes
-+       * at a time until we find non-0xffffffff.
-+       */
-+      found = 0;
-+      for (radio_config = board_config + 0x1000;
-+           (radio_config < flash_limit);
-+           radio_config += 0x1000) {
-+              if ((*(u32 *)radio_config != 0xffffffff) &&
-+                  check_radio_magic(radio_config)) {
-+                      found = 1;
-+                      break;
-+              }
-+      }
-+
-+      /* AR2316 relocates radio config to new location */
-+      if (!found) {
-+          for (radio_config = board_config + 0xf8;
-+                      (radio_config < flash_limit - 0x1000 + 0xf8);
-+                       radio_config += 0x1000) {
-+                      if ((*(u32 *)radio_config != 0xffffffff) &&
-+                              check_radio_magic(radio_config)) {
-+                              found = 1;
-+                              break;
-+                      }
-+          }
-+      }
-+
-+      if (!found) {
-+              printk("Could not find Radio Configuration data\n");
-+              radio_config = 0;
-+      }
-+
-+      return (u8 *) radio_config;
-+}
-+
-+int __init
-+ar231x_find_config(u8 *flash_limit)
-+{
-+      struct ar231x_boarddata *config;
-+      unsigned int rcfg_size;
-+      int broken_boarddata = 0;
-+      u8 *bcfg, *rcfg;
-+      u8 *board_data;
-+      u8 *radio_data;
-+      u32 offset;
-+
-+      ar231x_board.config = NULL;
-+      ar231x_board.radio = NULL;
-+      /* Copy the board and radio data to RAM, because accessing the mapped
-+       * memory of the flash directly after booting is not safe */
-+
-+      /* Try to find valid board and radio data */
-+      bcfg = find_board_config(flash_limit, false);
-+
-+      /* If that fails, try to at least find valid radio data */
-+      if (!bcfg) {
-+              bcfg = find_board_config(flash_limit, true);
-+              broken_boarddata = 1;
-+      }
-+
-+      if (!bcfg) {
-+              printk(KERN_WARNING "WARNING: No board configuration data found!\n");
-+              return -ENODEV;
-+      }
-+
-+      board_data = kzalloc(BOARD_CONFIG_BUFSZ, GFP_KERNEL);
-+      ar231x_board.config = (struct ar231x_boarddata *) board_data;
-+      memcpy(board_data, bcfg, 0x100);
-+      if (broken_boarddata) {
-+              printk(KERN_WARNING "WARNING: broken board data detected\n");
-+              config = ar231x_board.config;
-+              if (!memcmp(config->enet0_mac, "\x00\x00\x00\x00\x00\x00", 6)) {
-+                      printk(KERN_INFO "Fixing up empty mac addresses\n");
-+                      config->resetConfigGpio = 0xffff;
-+                      config->sysLedGpio = 0xffff;
-+                      random_ether_addr(config->wlan0_mac);
-+                      config->wlan0_mac[0] &= ~0x06;
-+                      random_ether_addr(config->enet0_mac);
-+                      random_ether_addr(config->enet1_mac);
-+              }
-+      }
-+
-+
-+      /* Radio config starts 0x100 bytes after board config, regardless
-+       * of what the physical layout on the flash chip looks like */
-+
-+      if (ar231x_board.radio)
-+              rcfg = (u8 *) ar231x_board.radio;
-+      else
-+              rcfg = find_radio_config(flash_limit, bcfg);
-+
-+      if (!rcfg)
-+              return -ENODEV;
-+
-+      radio_data = board_data + 0x100 + ((rcfg - bcfg) & 0xfff);
-+      ar231x_board.radio = radio_data;
-+      offset = radio_data - board_data;
-+      printk(KERN_INFO "Radio config found at offset 0x%x(0x%x)\n", rcfg - bcfg, offset);
-+      rcfg_size = BOARD_CONFIG_BUFSZ - offset;
-+      memcpy(radio_data, rcfg, rcfg_size);
-+
-+      return 0;
-+}
-+
-+static void
-+ar231x_halt(void)
-+{
-+      local_irq_disable();
-+      while (1);
-+}
-+
-+void __init
-+plat_mem_setup(void)
-+{
-+      _machine_halt = ar231x_halt;
-+      pm_power_off = ar231x_halt;
-+
-+      ar5312_plat_setup();
-+      ar2315_plat_setup();
-+
-+      /* Disable data watchpoints */
-+      write_c0_watchlo0(0);
-+}
-+
-+
-+asmlinkage void
-+plat_irq_dispatch(void)
-+{
-+      ar231x_irq_dispatch();
-+}
-+
-+void __init
-+plat_time_init(void)
-+{
-+      ar5312_time_init();
-+      ar2315_time_init();
-+}
-+
-+unsigned int __cpuinit
-+get_c0_compare_int(void)
-+{
-+      return CP0_LEGACY_COMPARE_IRQ;
-+}
-+
-+void __init
-+arch_init_irq(void)
-+{
-+      clear_c0_status(ST0_IM);
-+      mips_cpu_irq_init();
-+
-+      /* Initialize interrupt controllers */
-+      ar5312_irq_init();
-+      ar2315_irq_init();
-+}
-+
-+
---- /dev/null
-+++ b/arch/mips/ar231x/prom.c
-@@ -0,0 +1,37 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright MontaVista Software Inc
-+ * Copyright (C) 2003 Atheros Communications, Inc.,  All Rights Reserved.
-+ * Copyright (C) 2006 FON Technology, SL.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
-+ */
-+
-+/*
-+ * Prom setup file for ar531x
-+ */
-+
-+#include <linux/init.h>
-+#include <generated/autoconf.h>
-+#include <linux/kernel.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/bootmem.h>
-+
-+#include <asm/bootinfo.h>
-+#include <asm/addrspace.h>
-+#include "ar5312.h"
-+#include "ar2315.h"
-+
-+void __init prom_init(void)
-+{
-+      ar5312_prom_init();
-+      ar2315_prom_init();
-+}
-+
-+void __init prom_free_prom_memory(void)
-+{
-+}
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/ar231x_platform.h
-@@ -0,0 +1,83 @@
-+#ifndef __AR531X_PLATFORM_H
-+#define __AR531X_PLATFORM_H
-+
-+/*
-+ * This is board-specific data that is stored in a "fixed" location in flash.
-+ * It is shared across operating systems, so it should not be changed lightly.
-+ * The main reason we need it is in order to extract the ethernet MAC
-+ * address(es).
-+ */
-+struct ar231x_boarddata {
-+    u32 magic;                       /* board data is valid */
-+#define AR531X_BD_MAGIC 0x35333131   /* "5311", for all 531x platforms */
-+    u16 cksum;                       /* checksum (starting with BD_REV 2) */
-+    u16 rev;                         /* revision of this struct */
-+#define BD_REV  4
-+    char boardName[64];            /* Name of board */
-+    u16 major;                       /* Board major number */
-+    u16 minor;                       /* Board minor number */
-+    u32 flags;                      /* Board configuration */
-+#define BD_ENET0        0x00000001   /* ENET0 is stuffed */
-+#define BD_ENET1        0x00000002   /* ENET1 is stuffed */
-+#define BD_UART1        0x00000004   /* UART1 is stuffed */
-+#define BD_UART0        0x00000008   /* UART0 is stuffed (dma) */
-+#define BD_RSTFACTORY   0x00000010   /* Reset factory defaults stuffed */
-+#define BD_SYSLED       0x00000020   /* System LED stuffed */
-+#define BD_EXTUARTCLK   0x00000040   /* External UART clock */
-+#define BD_CPUFREQ      0x00000080   /* cpu freq is valid in nvram */
-+#define BD_SYSFREQ      0x00000100   /* sys freq is set in nvram */
-+#define BD_WLAN0        0x00000200   /* Enable WLAN0 */
-+#define BD_MEMCAP       0x00000400   /* CAP SDRAM @ memCap for testing */
-+#define BD_DISWATCHDOG  0x00000800   /* disable system watchdog */
-+#define BD_WLAN1        0x00001000   /* Enable WLAN1 (ar5212) */
-+#define BD_ISCASPER     0x00002000   /* FLAG for AR2312 */
-+#define BD_WLAN0_2G_EN  0x00004000   /* FLAG for radio0_2G */
-+#define BD_WLAN0_5G_EN  0x00008000   /* FLAG for radio0_2G */
-+#define BD_WLAN1_2G_EN  0x00020000   /* FLAG for radio0_2G */
-+#define BD_WLAN1_5G_EN  0x00040000   /* FLAG for radio0_2G */
-+    u16 resetConfigGpio;             /* Reset factory GPIO pin */
-+    u16 sysLedGpio;                  /* System LED GPIO pin */
-+
-+    u32 cpuFreq;                     /* CPU core frequency in Hz */
-+    u32 sysFreq;                     /* System frequency in Hz */
-+    u32 cntFreq;                     /* Calculated C0_COUNT frequency */
-+
-+    u8  wlan0_mac[6];
-+    u8  enet0_mac[6];
-+    u8  enet1_mac[6];
-+
-+    u16 pciId;                       /* Pseudo PCIID for common code */
-+    u16 memCap;                      /* cap bank1 in MB */
-+
-+    /* version 3 */
-+    u8  wlan1_mac[6];                 /* (ar5212) */
-+};
-+
-+#define BOARD_CONFIG_BUFSZ            0x1000
-+
-+/*
-+ * Platform device information for the Wireless MAC
-+ */
-+struct ar231x_board_config {
-+      u16 devid;
-+
-+      /* board config data */
-+      struct ar231x_boarddata *config;
-+
-+      /* radio calibration data */
-+      const char *radio;
-+};
-+
-+/*
-+ * Platform device information for the Ethernet MAC
-+ */
-+struct ar231x_eth {
-+      u32 reset_base;
-+      u32 reset_mac;
-+      u32 reset_phy;
-+      u32 phy_base;
-+      struct ar231x_board_config *config;
-+      char *macaddr;
-+};
-+
-+#endif /* __AR531X_PLATFORM_H */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/cpu-feature-overrides.h
-@@ -0,0 +1,84 @@
-+/*
-+ *  Atheros SoC specific CPU feature overrides
-+ *
-+ *  Copyright (C) 2008 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  This file was derived from: include/asm-mips/cpu-features.h
-+ *    Copyright (C) 2003, 2004 Ralf Baechle
-+ *    Copyright (C) 2004 Maciej W. Rozycki
-+ *
-+ *  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.
-+ *
-+ */
-+#ifndef __ASM_MACH_ATHEROS_CPU_FEATURE_OVERRIDES_H
-+#define __ASM_MACH_ATHEROS_CPU_FEATURE_OVERRIDES_H
-+
-+/*
-+ * The ATHEROS SoCs have MIPS 4Kc/4KEc core.
-+ */
-+#define cpu_has_tlb                   1
-+#define cpu_has_4kex                  1
-+#define cpu_has_3k_cache              0
-+#define cpu_has_4k_cache              1
-+#define cpu_has_tx39_cache            0
-+#define cpu_has_sb1_cache             0
-+#define cpu_has_fpu                   0
-+#define cpu_has_32fpr                 0
-+#define cpu_has_counter                       1
-+/* #define cpu_has_watch              ? */
-+/* #define cpu_has_divec              ? */
-+/* #define cpu_has_vce                        ? */
-+/* #define cpu_has_cache_cdex_p               ? */
-+/* #define cpu_has_cache_cdex_s               ? */
-+/* #define cpu_has_prefetch           ? */
-+/* #define cpu_has_mcheck             ? */
-+#define cpu_has_ejtag                 1
-+
-+#if !defined(CONFIG_ATHEROS_AR5312)
-+#  define cpu_has_llsc                        1
-+#else
-+/*
-+ * The MIPS 4Kc V0.9 core in the AR5312/AR2312 have problems with the
-+ * ll/sc instructions.
-+ */
-+#  define cpu_has_llsc                        0
-+#endif
-+
-+#define cpu_has_mips16                        0
-+#define cpu_has_mdmx                  0
-+#define cpu_has_mips3d                        0
-+#define cpu_has_smartmips             0
-+
-+/* #define cpu_has_vtag_icache                ? */
-+/* #define cpu_has_dc_aliases         ? */
-+/* #define cpu_has_ic_fills_f_dc      ? */
-+/* #define cpu_has_pindexed_dcache    ? */
-+
-+/* #define cpu_icache_snoops_remote_store     ? */
-+
-+#define cpu_has_mips32r1              1
-+
-+#if !defined(CONFIG_ATHEROS_AR5312)
-+#  define cpu_has_mips32r2            1
-+#endif
-+
-+#define cpu_has_mips64r1              0
-+#define cpu_has_mips64r2              0
-+
-+#define cpu_has_dsp                   0
-+#define cpu_has_mipsmt                        0
-+
-+/* #define cpu_has_nofpuex            ? */
-+#define cpu_has_64bits                        0
-+#define cpu_has_64bit_zero_reg                0
-+#define cpu_has_64bit_gp_regs         0
-+#define cpu_has_64bit_addresses               0
-+
-+/* #define cpu_has_inclusive_pcaches  ? */
-+
-+/* #define cpu_dcache_line_size()     ? */
-+/* #define cpu_icache_line_size()     ? */
-+
-+#endif /* __ASM_MACH_ATHEROS_CPU_FEATURE_OVERRIDES_H */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/dma-coherence.h
-@@ -0,0 +1,64 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2006  Ralf Baechle <ralf@linux-mips.org>
-+ * Copyright (C) 2007  Felix Fietkau <nbd@openwrt.org>
-+ *
-+ */
-+#ifndef __ASM_MACH_GENERIC_DMA_COHERENCE_H
-+#define __ASM_MACH_GENERIC_DMA_COHERENCE_H
-+
-+#define PCI_DMA_OFFSET        0x20000000
-+
-+struct device;
-+
-+static dma_addr_t plat_map_dma_mem(struct device *dev, void *addr, size_t size)
-+{
-+      return virt_to_phys(addr) + (dev != NULL ? PCI_DMA_OFFSET : 0);
-+}
-+
-+static dma_addr_t plat_map_dma_mem_page(struct device *dev, struct page *page)
-+{
-+      return page_to_phys(page) + (dev != NULL ? PCI_DMA_OFFSET : 0);
-+}
-+
-+static inline unsigned long plat_dma_addr_to_phys(struct device *dev,
-+      dma_addr_t dma_addr)
-+{
-+      return (dma_addr > PCI_DMA_OFFSET ? dma_addr - PCI_DMA_OFFSET : dma_addr);
-+}
-+
-+static inline void plat_unmap_dma_mem(struct device *dev, dma_addr_t dma_addr,
-+      size_t size, enum dma_data_direction direction)
-+{
-+}
-+
-+static inline int plat_dma_supported(struct device *dev, u64 mask)
-+{
-+      return 1;
-+}
-+
-+static inline void plat_extra_sync_for_device(struct device *dev)
-+{
-+      return;
-+}
-+
-+static inline int plat_dma_mapping_error(struct device *dev,
-+                                       dma_addr_t dma_addr)
-+{
-+      return 0;
-+}
-+
-+static inline int plat_device_is_coherent(struct device *dev)
-+{
-+#ifdef CONFIG_DMA_COHERENT
-+      return 1;
-+#endif
-+#ifdef CONFIG_DMA_NONCOHERENT
-+      return 0;
-+#endif
-+}
-+
-+#endif /* __ASM_MACH_GENERIC_DMA_COHERENCE_H */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/gpio.h
-@@ -0,0 +1,79 @@
-+#ifndef _ATHEROS_GPIO_H_
-+#define _ATHEROS_GPIO_H_
-+
-+#include <ar231x.h>
-+
-+struct ar231x_gpiodev {
-+      u32 valid_mask;
-+      u32 (*get_output)(void);
-+      u32 (*set_output)(u32 mask, u32 val);
-+      u32 (*get)(void);
-+      u32 (*set)(u32 mask, u32 val);
-+};
-+
-+extern const struct ar231x_gpiodev *ar231x_gpiodev;
-+
-+/*
-+ * Wrappers for the generic GPIO layer
-+ */
-+
-+static inline int gpio_direction_input(unsigned gpio) {
-+      u32 mask = 1 << gpio;
-+
-+      if (!(ar231x_gpiodev->valid_mask & mask))
-+              return -ENXIO;
-+
-+      ar231x_gpiodev->set_output(mask, 0);
-+      return 0;
-+}
-+
-+static inline void gpio_set_value(unsigned gpio, int value) {
-+      u32 mask = 1 << gpio;
-+
-+      if (!(ar231x_gpiodev->valid_mask & mask))
-+              return;
-+
-+      ar231x_gpiodev->set(mask, (!!value) * mask);
-+}
-+
-+static inline int gpio_direction_output(unsigned gpio, int value) {
-+      u32 mask = 1 << gpio;
-+
-+      if (!(ar231x_gpiodev->valid_mask & mask))
-+              return -ENXIO;
-+
-+      ar231x_gpiodev->set_output(mask, mask);
-+      ar231x_gpiodev->set(mask, (!!value) * mask);
-+      return 0;
-+}
-+
-+/* Reads the gpio pin.  Unchecked function */
-+static inline int gpio_get_value(unsigned gpio) {
-+      u32 mask = 1 << gpio;
-+
-+      if (!(ar231x_gpiodev->valid_mask & mask))
-+              return 0;
-+
-+      return !!(ar231x_gpiodev->get() & mask);
-+}
-+
-+static inline int gpio_request(unsigned gpio, const char *label) {
-+      return 0;
-+}
-+
-+static inline void gpio_free(unsigned gpio) {
-+}
-+
-+/* Returns IRQ to attach for gpio.  Unchecked function */
-+static inline int gpio_to_irq(unsigned gpio) {
-+      return AR531X_GPIO_IRQ(gpio);
-+}
-+
-+/* Returns gpio for IRQ attached.  Unchecked function */
-+static inline int irq_to_gpio(unsigned irq) {
-+      return (irq - (AR531X_GPIO_IRQ(0)));
-+}
-+
-+#include <asm-generic/gpio.h> /* cansleep wrappers */
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/reset.h
-@@ -0,0 +1,6 @@
-+#ifndef __AR531X_RESET_H
-+#define __AR531X_RESET_H
-+
-+void ar531x_disable_reset_button(void);
-+
-+#endif /* __AR531X_RESET_H */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/war.h
-@@ -0,0 +1,25 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2008 Felix Fietkau <nbd@openwrt.org>
-+ */
-+#ifndef __ASM_MIPS_MACH_ATHEROS_WAR_H
-+#define __ASM_MIPS_MACH_ATHEROS_WAR_H
-+
-+#define R4600_V1_INDEX_ICACHEOP_WAR   0
-+#define R4600_V1_HIT_CACHEOP_WAR      0
-+#define R4600_V2_HIT_CACHEOP_WAR      0
-+#define R5432_CP0_INTERRUPT_WAR               0
-+#define BCM1250_M3_WAR                        0
-+#define SIBYTE_1956_WAR                       0
-+#define MIPS4K_ICACHE_REFILL_WAR      0
-+#define MIPS_CACHE_SYNC_WAR           0
-+#define TX49XX_ICACHE_INDEX_INV_WAR   0
-+#define RM9000_CDEX_SMP_WAR           0
-+#define ICACHE_REFILLS_WORKAROUND_WAR 0
-+#define R10000_LLSC_WAR                       0
-+#define MIPS34K_MISSED_ITLB_WAR               0
-+
-+#endif /* __ASM_MIPS_MACH_ATHEROS_WAR_H */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/ar2315_regs.h
-@@ -0,0 +1,580 @@
-+/*
-+ * Register definitions for AR2315+
-+ *
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2003 Atheros Communications, Inc.,  All Rights Reserved.
-+ * Copyright (C) 2006 FON Technology, SL.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2008 Felix Fietkau <nbd@openwrt.org>
-+ */
-+
-+#ifndef __AR2315_REG_H
-+#define __AR2315_REG_H
-+
-+/*
-+ * IRQs
-+ */
-+#define AR2315_IRQ_MISC_INTRS   MIPS_CPU_IRQ_BASE+2 /* C0_CAUSE: 0x0400 */
-+#define AR2315_IRQ_WLAN0_INTRS  MIPS_CPU_IRQ_BASE+3 /* C0_CAUSE: 0x0800 */
-+#define AR2315_IRQ_ENET0_INTRS  MIPS_CPU_IRQ_BASE+4 /* C0_CAUSE: 0x1000 */
-+#define AR2315_IRQ_LCBUS_PCI    MIPS_CPU_IRQ_BASE+5 /* C0_CAUSE: 0x2000 */
-+#define AR2315_IRQ_WLAN0_POLL   MIPS_CPU_IRQ_BASE+6 /* C0_CAUSE: 0x4000 */
-+
-+/*
-+ * Address map
-+ */
-+#define AR2315_SPI_READ         0x08000000      /* SPI FLASH */
-+#define AR2315_WLAN0            0xB0000000      /* Wireless MMR */
-+#define AR2315_PCI              0xB0100000      /* PCI MMR */
-+#define AR2315_SDRAMCTL         0xB0300000      /* SDRAM MMR */
-+#define AR2315_LOCAL            0xB0400000      /* LOCAL BUS MMR */
-+#define AR2315_ENET0            0xB0500000      /* ETHERNET MMR */
-+#define AR2315_DSLBASE          0xB1000000      /* RESET CONTROL MMR */
-+#define AR2315_UART0            0xB1100003      /* UART MMR */
-+#define AR2315_SPI              0xB1300000      /* SPI FLASH MMR */
-+#define AR2315_PCIEXT           0x80000000      /* pci external */
-+
-+/*
-+ * Reset Register
-+ */
-+#define AR2315_COLD_RESET       (AR2315_DSLBASE + 0x0000)
-+
-+#define AR2315_RESET_COLD_AHB              0x00000001
-+#define AR2315_RESET_COLD_APB              0x00000002
-+#define AR2315_RESET_COLD_CPU              0x00000004
-+#define AR2315_RESET_COLD_CPUWARM          0x00000008
-+#define AR2315_RESET_SYSTEM                (RESET_COLD_CPU | RESET_COLD_APB | RESET_COLD_AHB)      /* full system */
-+#define AR2317_RESET_SYSTEM                0x00000010
-+
-+
-+#define AR2315_RESET            (AR2315_DSLBASE + 0x0004)
-+
-+#define AR2315_RESET_WARM_WLAN0_MAC        0x00000001      /* warm reset WLAN0 MAC */
-+#define AR2315_RESET_WARM_WLAN0_BB         0x00000002      /* warm reset WLAN0 BaseBand */
-+#define AR2315_RESET_MPEGTS_RSVD           0x00000004      /* warm reset MPEG-TS */
-+#define AR2315_RESET_PCIDMA                0x00000008      /* warm reset PCI ahb/dma */
-+#define AR2315_RESET_MEMCTL                0x00000010      /* warm reset memory controller */
-+#define AR2315_RESET_LOCAL                 0x00000020      /* warm reset local bus */
-+#define AR2315_RESET_I2C_RSVD              0x00000040      /* warm reset I2C bus */
-+#define AR2315_RESET_SPI                   0x00000080      /* warm reset SPI interface */
-+#define AR2315_RESET_UART0                 0x00000100      /* warm reset UART0 */
-+#define AR2315_RESET_IR_RSVD               0x00000200      /* warm reset IR interface */
-+#define AR2315_RESET_EPHY0                 0x00000400      /* cold reset ENET0 phy */
-+#define AR2315_RESET_ENET0                 0x00000800      /* cold reset ENET0 mac */
-+
-+/*
-+ * AHB master arbitration control
-+ */
-+#define AR2315_AHB_ARB_CTL      (AR2315_DSLBASE + 0x0008)
-+
-+#define AR2315_ARB_CPU                     0x00000001      /* CPU, default */
-+#define AR2315_ARB_WLAN                    0x00000002      /* WLAN */
-+#define AR2315_ARB_MPEGTS_RSVD             0x00000004      /* MPEG-TS */
-+#define AR2315_ARB_LOCAL                   0x00000008      /* LOCAL */
-+#define AR2315_ARB_PCI                     0x00000010      /* PCI */
-+#define AR2315_ARB_ETHERNET                0x00000020      /* Ethernet */
-+#define AR2315_ARB_RETRY                   0x00000100      /* retry policy, debug only */
-+
-+/*
-+ * Config Register
-+ */
-+#define AR2315_ENDIAN_CTL       (AR2315_DSLBASE + 0x000c)
-+
-+#define AR2315_CONFIG_AHB                  0x00000001      /* EC - AHB bridge endianess */
-+#define AR2315_CONFIG_WLAN                 0x00000002      /* WLAN byteswap */
-+#define AR2315_CONFIG_MPEGTS_RSVD          0x00000004      /* MPEG-TS byteswap */
-+#define AR2315_CONFIG_PCI                  0x00000008      /* PCI byteswap */
-+#define AR2315_CONFIG_MEMCTL               0x00000010      /* Memory controller endianess */
-+#define AR2315_CONFIG_LOCAL                0x00000020      /* Local bus byteswap */
-+#define AR2315_CONFIG_ETHERNET             0x00000040      /* Ethernet byteswap */
-+
-+#define AR2315_CONFIG_MERGE                0x00000200      /* CPU write buffer merge */
-+#define AR2315_CONFIG_CPU                  0x00000400      /* CPU big endian */
-+#define AR2315_CONFIG_PCIAHB               0x00000800
-+#define AR2315_CONFIG_PCIAHB_BRIDGE        0x00001000
-+#define AR2315_CONFIG_SPI                  0x00008000      /* SPI byteswap */
-+#define AR2315_CONFIG_CPU_DRAM             0x00010000
-+#define AR2315_CONFIG_CPU_PCI              0x00020000
-+#define AR2315_CONFIG_CPU_MMR              0x00040000
-+#define AR2315_CONFIG_BIG                  0x00000400
-+
-+
-+/*
-+ * NMI control
-+ */
-+#define AR2315_NMI_CTL          (AR2315_DSLBASE + 0x0010)
-+
-+#define AR2315_NMI_EN  1
-+
-+/*
-+ * Revision Register - Initial value is 0x3010 (WMAC 3.0, AR531X 1.0).
-+ */
-+#define AR2315_SREV             (AR2315_DSLBASE + 0x0014)
-+
-+#define AR2315_REV_MAJ                     0x00f0
-+#define AR2315_REV_MAJ_S                   4
-+#define AR2315_REV_MIN                     0x000f
-+#define AR2315_REV_MIN_S                   0
-+#define AR2315_REV_CHIP                    (AR2315_REV_MAJ|AR2315_REV_MIN)
-+
-+/*
-+ * Interface Enable
-+ */
-+#define AR2315_IF_CTL           (AR2315_DSLBASE + 0x0018)
-+
-+#define AR2315_IF_MASK                     0x00000007
-+#define AR2315_IF_DISABLED                 0
-+#define AR2315_IF_PCI                      1
-+#define AR2315_IF_TS_LOCAL                 2
-+#define AR2315_IF_ALL                      3   /* only for emulation with separate pins */
-+#define AR2315_IF_LOCAL_HOST               0x00000008
-+#define AR2315_IF_PCI_HOST                 0x00000010
-+#define AR2315_IF_PCI_INTR                 0x00000020
-+#define AR2315_IF_PCI_CLK_MASK             0x00030000
-+#define AR2315_IF_PCI_CLK_INPUT            0
-+#define AR2315_IF_PCI_CLK_OUTPUT_LOW       1
-+#define AR2315_IF_PCI_CLK_OUTPUT_CLK       2
-+#define AR2315_IF_PCI_CLK_OUTPUT_HIGH      3
-+#define AR2315_IF_PCI_CLK_SHIFT            16
-+
-+/*
-+ * APB Interrupt control
-+ */
-+
-+#define AR2315_ISR              (AR2315_DSLBASE + 0x0020)
-+#define AR2315_IMR              (AR2315_DSLBASE + 0x0024)
-+#define AR2315_GISR             (AR2315_DSLBASE + 0x0028)
-+
-+#define AR2315_ISR_UART0                   0x0001           /* high speed UART */
-+#define AR2315_ISR_I2C_RSVD                0x0002           /* I2C bus */
-+#define AR2315_ISR_SPI                     0x0004           /* SPI bus */
-+#define AR2315_ISR_AHB                     0x0008           /* AHB error */
-+#define AR2315_ISR_APB                     0x0010           /* APB error */
-+#define AR2315_ISR_TIMER                   0x0020           /* timer */
-+#define AR2315_ISR_GPIO                    0x0040           /* GPIO */
-+#define AR2315_ISR_WD                      0x0080           /* watchdog */
-+#define AR2315_ISR_IR_RSVD                 0x0100           /* IR */
-+
-+#define AR2315_GISR_MISC                   0x0001
-+#define AR2315_GISR_WLAN0                  0x0002
-+#define AR2315_GISR_MPEGTS_RSVD            0x0004
-+#define AR2315_GISR_LOCALPCI               0x0008
-+#define AR2315_GISR_WMACPOLL               0x0010
-+#define AR2315_GISR_TIMER                  0x0020
-+#define AR2315_GISR_ETHERNET               0x0040
-+
-+/*
-+ * Interrupt routing from IO to the processor IP bits
-+ * Define our inter mask and level
-+ */
-+#define AR2315_INTR_MISCIO      SR_IBIT3
-+#define AR2315_INTR_WLAN0       SR_IBIT4
-+#define AR2315_INTR_ENET0       SR_IBIT5
-+#define AR2315_INTR_LOCALPCI    SR_IBIT6
-+#define AR2315_INTR_WMACPOLL    SR_IBIT7
-+#define AR2315_INTR_COMPARE     SR_IBIT8
-+
-+/*
-+ * Timers
-+ */
-+#define AR2315_TIMER            (AR2315_DSLBASE + 0x0030)
-+#define AR2315_RELOAD           (AR2315_DSLBASE + 0x0034)
-+#define AR2315_WD               (AR2315_DSLBASE + 0x0038)
-+#define AR2315_WDC              (AR2315_DSLBASE + 0x003c)
-+
-+#define AR2315_WDC_IGNORE_EXPIRATION       0x00000000
-+#define AR2315_WDC_NMI                     0x00000001               /* NMI on watchdog */
-+#define AR2315_WDC_RESET                   0x00000002               /* reset on watchdog */
-+
-+/*
-+ * CPU Performance Counters
-+ */
-+#define AR2315_PERFCNT0         (AR2315_DSLBASE + 0x0048)
-+#define AR2315_PERFCNT1         (AR2315_DSLBASE + 0x004c)
-+
-+#define AR2315_PERF0_DATAHIT                0x0001  /* Count Data Cache Hits */
-+#define AR2315_PERF0_DATAMISS               0x0002  /* Count Data Cache Misses */
-+#define AR2315_PERF0_INSTHIT                0x0004  /* Count Instruction Cache Hits */
-+#define AR2315_PERF0_INSTMISS               0x0008  /* Count Instruction Cache Misses */
-+#define AR2315_PERF0_ACTIVE                 0x0010  /* Count Active Processor Cycles */
-+#define AR2315_PERF0_WBHIT                  0x0020  /* Count CPU Write Buffer Hits */
-+#define AR2315_PERF0_WBMISS                 0x0040  /* Count CPU Write Buffer Misses */
-+
-+#define AR2315_PERF1_EB_ARDY                0x0001  /* Count EB_ARdy signal */
-+#define AR2315_PERF1_EB_AVALID              0x0002  /* Count EB_AValid signal */
-+#define AR2315_PERF1_EB_WDRDY               0x0004  /* Count EB_WDRdy signal */
-+#define AR2315_PERF1_EB_RDVAL               0x0008  /* Count EB_RdVal signal */
-+#define AR2315_PERF1_VRADDR                 0x0010  /* Count valid read address cycles */
-+#define AR2315_PERF1_VWADDR                 0x0020  /* Count valid write address cycles */
-+#define AR2315_PERF1_VWDATA                 0x0040  /* Count valid write data cycles */
-+
-+/*
-+ * AHB Error Reporting.
-+ */
-+#define AR2315_AHB_ERR0         (AR2315_DSLBASE + 0x0050)  /* error  */
-+#define AR2315_AHB_ERR1         (AR2315_DSLBASE + 0x0054)  /* haddr  */
-+#define AR2315_AHB_ERR2         (AR2315_DSLBASE + 0x0058)  /* hwdata */
-+#define AR2315_AHB_ERR3         (AR2315_DSLBASE + 0x005c)  /* hrdata */
-+#define AR2315_AHB_ERR4         (AR2315_DSLBASE + 0x0060)  /* status */
-+
-+#define AHB_ERROR_DET               1   /* AHB Error has been detected,          */
-+                                        /* write 1 to clear all bits in ERR0     */
-+#define AHB_ERROR_OVR               2   /* AHB Error overflow has been detected  */
-+#define AHB_ERROR_WDT               4   /* AHB Error due to wdt instead of hresp */
-+
-+#define AR2315_PROCERR_HMAST               0x0000000f
-+#define AR2315_PROCERR_HMAST_DFLT          0
-+#define AR2315_PROCERR_HMAST_WMAC          1
-+#define AR2315_PROCERR_HMAST_ENET          2
-+#define AR2315_PROCERR_HMAST_PCIENDPT      3
-+#define AR2315_PROCERR_HMAST_LOCAL         4
-+#define AR2315_PROCERR_HMAST_CPU           5
-+#define AR2315_PROCERR_HMAST_PCITGT        6
-+
-+#define AR2315_PROCERR_HMAST_S             0
-+#define AR2315_PROCERR_HWRITE              0x00000010
-+#define AR2315_PROCERR_HSIZE               0x00000060
-+#define AR2315_PROCERR_HSIZE_S             5
-+#define AR2315_PROCERR_HTRANS              0x00000180
-+#define AR2315_PROCERR_HTRANS_S            7
-+#define AR2315_PROCERR_HBURST              0x00000e00
-+#define AR2315_PROCERR_HBURST_S            9
-+
-+/*
-+ * Clock Control
-+ */
-+#define AR2315_PLLC_CTL         (AR2315_DSLBASE + 0x0064)
-+#define AR2315_PLLV_CTL         (AR2315_DSLBASE + 0x0068)
-+#define AR2315_CPUCLK           (AR2315_DSLBASE + 0x006c)
-+#define AR2315_AMBACLK          (AR2315_DSLBASE + 0x0070)
-+#define AR2315_SYNCCLK          (AR2315_DSLBASE + 0x0074)
-+#define AR2315_DSL_SLEEP_CTL    (AR2315_DSLBASE + 0x0080)
-+#define AR2315_DSL_SLEEP_DUR    (AR2315_DSLBASE + 0x0084)
-+
-+/* PLLc Control fields */
-+#define PLLC_REF_DIV_M              0x00000003
-+#define PLLC_REF_DIV_S              0
-+#define PLLC_FDBACK_DIV_M           0x0000007C
-+#define PLLC_FDBACK_DIV_S           2
-+#define PLLC_ADD_FDBACK_DIV_M       0x00000080
-+#define PLLC_ADD_FDBACK_DIV_S       7
-+#define PLLC_CLKC_DIV_M             0x0001c000
-+#define PLLC_CLKC_DIV_S             14
-+#define PLLC_CLKM_DIV_M             0x00700000
-+#define PLLC_CLKM_DIV_S             20
-+
-+/* CPU CLK Control fields */
-+#define CPUCLK_CLK_SEL_M            0x00000003
-+#define CPUCLK_CLK_SEL_S            0
-+#define CPUCLK_CLK_DIV_M            0x0000000c
-+#define CPUCLK_CLK_DIV_S            2
-+
-+/* AMBA CLK Control fields */
-+#define AMBACLK_CLK_SEL_M           0x00000003
-+#define AMBACLK_CLK_SEL_S           0
-+#define AMBACLK_CLK_DIV_M           0x0000000c
-+#define AMBACLK_CLK_DIV_S           2
-+
-+/*
-+ * GPIO
-+ */
-+#define AR2315_GPIO_DI          (AR2315_DSLBASE + 0x0088)
-+#define AR2315_GPIO_DO          (AR2315_DSLBASE + 0x0090)
-+#define AR2315_GPIO_CR          (AR2315_DSLBASE + 0x0098)
-+#define AR2315_GPIO_INT         (AR2315_DSLBASE + 0x00a0)
-+
-+#define AR2315_GPIO_CR_M(x)                (1 << (x))                  /* mask for i/o */
-+#define AR2315_GPIO_CR_O(x)                (1 << (x))                  /* output */
-+#define AR2315_GPIO_CR_I(x)                (0)                         /* input */
-+
-+#define AR2315_GPIO_INT_S(x)               (x)                         /* interrupt enable */
-+#define AR2315_GPIO_INT_M                  (0x3F)                      /* mask for int */
-+#define AR2315_GPIO_INT_LVL(x)             ((x) << 6)                  /* interrupt level */
-+#define AR2315_GPIO_INT_LVL_M              ((0x3) << 6)                /* mask for int level */
-+
-+#define AR2315_GPIO_INT_MAX_Y                         1   /* Maximum value of Y for AR5313_GPIO_INT_* macros */
-+#define AR2315_GPIO_INT_LVL_OFF                               0   /* Triggerring off */
-+#define AR2315_GPIO_INT_LVL_LOW                               1   /* Low Level Triggered */
-+#define AR2315_GPIO_INT_LVL_HIGH                      2   /* High Level Triggered */
-+#define AR2315_GPIO_INT_LVL_EDGE                      3   /* Edge Triggered */
-+
-+#define AR2315_RESET_GPIO       5
-+#define AR2315_NUM_GPIO         22
-+
-+/*
-+ *  PCI Clock Control
-+ */
-+#define AR2315_PCICLK           (AR2315_DSLBASE + 0x00a4)
-+
-+#define AR2315_PCICLK_INPUT_M              0x3
-+#define AR2315_PCICLK_INPUT_S              0
-+
-+#define AR2315_PCICLK_PLLC_CLKM            0
-+#define AR2315_PCICLK_PLLC_CLKM1           1
-+#define AR2315_PCICLK_PLLC_CLKC            2
-+#define AR2315_PCICLK_REF_CLK              3
-+
-+#define AR2315_PCICLK_DIV_M                0xc
-+#define AR2315_PCICLK_DIV_S                2
-+
-+#define AR2315_PCICLK_IN_FREQ              0
-+#define AR2315_PCICLK_IN_FREQ_DIV_6        1
-+#define AR2315_PCICLK_IN_FREQ_DIV_8        2
-+#define AR2315_PCICLK_IN_FREQ_DIV_10       3
-+
-+/*
-+ * Observation Control Register
-+ */
-+#define AR2315_OCR              (AR2315_DSLBASE + 0x00b0)
-+#define OCR_GPIO0_IRIN              0x0040
-+#define OCR_GPIO1_IROUT             0x0080
-+#define OCR_GPIO3_RXCLR             0x0200
-+
-+/*
-+ *  General Clock Control
-+ */
-+
-+#define AR2315_MISCCLK          (AR2315_DSLBASE + 0x00b4)
-+#define MISCCLK_PLLBYPASS_EN        0x00000001
-+#define MISCCLK_PROCREFCLK          0x00000002
-+
-+/*
-+ * SDRAM Controller
-+ *   - No read or write buffers are included.
-+ */
-+#define AR2315_MEM_CFG          (AR2315_SDRAMCTL + 0x00)
-+#define AR2315_MEM_CTRL         (AR2315_SDRAMCTL + 0x0c)
-+#define AR2315_MEM_REF          (AR2315_SDRAMCTL + 0x10)
-+
-+#define SDRAM_DATA_WIDTH_M          0x00006000
-+#define SDRAM_DATA_WIDTH_S          13
-+
-+#define SDRAM_COL_WIDTH_M           0x00001E00
-+#define SDRAM_COL_WIDTH_S           9
-+
-+#define SDRAM_ROW_WIDTH_M           0x000001E0
-+#define SDRAM_ROW_WIDTH_S           5
-+
-+#define SDRAM_BANKADDR_BITS_M       0x00000018
-+#define SDRAM_BANKADDR_BITS_S       3
-+
-+/*
-+ * SPI Flash Interface Registers
-+ */
-+
-+#define AR2315_SPI_CTL      (AR2315_SPI + 0x00)
-+#define AR2315_SPI_OPCODE   (AR2315_SPI + 0x04)
-+#define AR2315_SPI_DATA     (AR2315_SPI + 0x08)
-+
-+#define SPI_CTL_START           0x00000100
-+#define SPI_CTL_BUSY            0x00010000
-+#define SPI_CTL_TXCNT_MASK      0x0000000f
-+#define SPI_CTL_RXCNT_MASK      0x000000f0
-+#define SPI_CTL_TX_RX_CNT_MASK  0x000000ff
-+#define SPI_CTL_SIZE_MASK       0x00060000
-+
-+#define SPI_CTL_CLK_SEL_MASK    0x03000000
-+#define SPI_OPCODE_MASK         0x000000ff
-+
-+/*
-+ * PCI Bus Interface Registers
-+ */
-+#define AR2315_PCI_1MS_REG      (AR2315_PCI + 0x0008)
-+#define AR2315_PCI_1MS_MASK     0x3FFFF         /* # of AHB clk cycles in 1ms */
-+
-+#define AR2315_PCI_MISC_CONFIG  (AR2315_PCI + 0x000c)
-+#define AR2315_PCIMISC_TXD_EN   0x00000001      /* Enable TXD for fragments */
-+#define AR2315_PCIMISC_CFG_SEL  0x00000002      /* mem or config cycles */
-+#define AR2315_PCIMISC_GIG_MASK 0x0000000C      /* bits 31-30 for pci req */
-+#define AR2315_PCIMISC_RST_MODE 0x00000030
-+#define AR2315_PCIRST_INPUT     0x00000000      /* 4:5=0 rst is input */
-+#define AR2315_PCIRST_LOW       0x00000010      /* 4:5=1 rst to GND */
-+#define AR2315_PCIRST_HIGH      0x00000020      /* 4:5=2 rst to VDD */
-+#define AR2315_PCIGRANT_EN      0x00000000      /* 6:7=0 early grant en */
-+#define AR2315_PCIGRANT_FRAME   0x00000040      /* 6:7=1 grant waits 4 frame */
-+#define AR2315_PCIGRANT_IDLE    0x00000080      /* 6:7=2 grant waits 4 idle */
-+#define AR2315_PCIGRANT_GAP     0x00000000      /* 6:7=2 grant waits 4 idle */
-+#define AR2315_PCICACHE_DIS     0x00001000      /* PCI external access cache disable */
-+
-+#define AR2315_PCI_OUT_TSTAMP   (AR2315_PCI + 0x0010)
-+
-+#define AR2315_PCI_UNCACHE_CFG  (AR2315_PCI + 0x0014)
-+
-+#define AR2315_PCI_IN_EN        (AR2315_PCI + 0x0100)
-+#define AR2315_PCI_IN_EN0       0x01            /* Enable chain 0 */
-+#define AR2315_PCI_IN_EN1       0x02            /* Enable chain 1 */
-+#define AR2315_PCI_IN_EN2       0x04            /* Enable chain 2 */
-+#define AR2315_PCI_IN_EN3       0x08            /* Enable chain 3 */
-+
-+#define AR2315_PCI_IN_DIS       (AR2315_PCI + 0x0104)
-+#define AR2315_PCI_IN_DIS0      0x01            /* Disable chain 0 */
-+#define AR2315_PCI_IN_DIS1      0x02            /* Disable chain 1 */
-+#define AR2315_PCI_IN_DIS2      0x04            /* Disable chain 2 */
-+#define AR2315_PCI_IN_DIS3      0x08            /* Disable chain 3 */
-+
-+#define AR2315_PCI_IN_PTR       (AR2315_PCI + 0x0200)
-+
-+#define AR2315_PCI_OUT_EN       (AR2315_PCI + 0x0400)
-+#define AR2315_PCI_OUT_EN0      0x01            /* Enable chain 0 */
-+
-+#define AR2315_PCI_OUT_DIS      (AR2315_PCI + 0x0404)
-+#define AR2315_PCI_OUT_DIS0     0x01            /* Disable chain 0 */
-+
-+#define AR2315_PCI_OUT_PTR      (AR2315_PCI + 0x0408)
-+
-+#define AR2315_PCI_INT_STATUS   (AR2315_PCI + 0x0500)   /* write one to clr */
-+#define AR2315_PCI_TXINT        0x00000001      /* Desc In Completed */
-+#define AR2315_PCI_TXOK         0x00000002      /* Desc In OK */
-+#define AR2315_PCI_TXERR        0x00000004      /* Desc In ERR */
-+#define AR2315_PCI_TXEOL        0x00000008      /* Desc In End-of-List */
-+#define AR2315_PCI_RXINT        0x00000010      /* Desc Out Completed */
-+#define AR2315_PCI_RXOK         0x00000020      /* Desc Out OK */
-+#define AR2315_PCI_RXERR        0x00000040      /* Desc Out ERR */
-+#define AR2315_PCI_RXEOL        0x00000080      /* Desc Out EOL */
-+#define AR2315_PCI_TXOOD        0x00000200      /* Desc In Out-of-Desc */
-+#define AR2315_PCI_MASK         0x0000FFFF      /* Desc Mask */
-+#define AR2315_PCI_EXT_INT      0x02000000
-+#define AR2315_PCI_ABORT_INT    0x04000000
-+
-+#define AR2315_PCI_INT_MASK     (AR2315_PCI + 0x0504)   /* same as INT_STATUS */
-+
-+#define AR2315_PCI_INTEN_REG    (AR2315_PCI + 0x0508)
-+#define AR2315_PCI_INT_DISABLE  0x00            /* disable pci interrupts */
-+#define AR2315_PCI_INT_ENABLE   0x01            /* enable pci interrupts */
-+
-+#define AR2315_PCI_HOST_IN_EN   (AR2315_PCI + 0x0800)
-+#define AR2315_PCI_HOST_IN_DIS  (AR2315_PCI + 0x0804)
-+#define AR2315_PCI_HOST_IN_PTR  (AR2315_PCI + 0x0810)
-+#define AR2315_PCI_HOST_OUT_EN  (AR2315_PCI + 0x0900)
-+#define AR2315_PCI_HOST_OUT_DIS (AR2315_PCI + 0x0904)
-+#define AR2315_PCI_HOST_OUT_PTR (AR2315_PCI + 0x0908)
-+
-+
-+/*
-+ * Local Bus Interface Registers
-+ */
-+#define AR2315_LB_CONFIG        (AR2315_LOCAL + 0x0000)
-+#define AR2315_LBCONF_OE        0x00000001      /* =1 OE is low-true */
-+#define AR2315_LBCONF_CS0       0x00000002      /* =1 first CS is low-true */
-+#define AR2315_LBCONF_CS1       0x00000004      /* =1 2nd CS is low-true */
-+#define AR2315_LBCONF_RDY       0x00000008      /* =1 RDY is low-true */
-+#define AR2315_LBCONF_WE        0x00000010      /* =1 Write En is low-true */
-+#define AR2315_LBCONF_WAIT      0x00000020      /* =1 WAIT is low-true */
-+#define AR2315_LBCONF_ADS       0x00000040      /* =1 Adr Strobe is low-true */
-+#define AR2315_LBCONF_MOT       0x00000080      /* =0 Intel, =1 Motorola */
-+#define AR2315_LBCONF_8CS       0x00000100      /* =1 8 bits CS, 0= 16bits */
-+#define AR2315_LBCONF_8DS       0x00000200      /* =1 8 bits Data S, 0=16bits */
-+#define AR2315_LBCONF_ADS_EN    0x00000400      /* =1 Enable ADS */
-+#define AR2315_LBCONF_ADR_OE    0x00000800      /* =1 Adr cap on OE, WE or DS */
-+#define AR2315_LBCONF_ADDT_MUX  0x00001000      /* =1 Adr and Data share bus */
-+#define AR2315_LBCONF_DATA_OE   0x00002000      /* =1 Data cap on OE, WE, DS */
-+#define AR2315_LBCONF_16DATA    0x00004000      /* =1 Data is 16 bits wide */
-+#define AR2315_LBCONF_SWAPDT    0x00008000      /* =1 Byte swap data */
-+#define AR2315_LBCONF_SYNC      0x00010000      /* =1 Bus synchronous to clk */
-+#define AR2315_LBCONF_INT       0x00020000      /* =1 Intr is low true */
-+#define AR2315_LBCONF_INT_CTR0  0x00000000      /* GND high-Z, Vdd is high-Z */
-+#define AR2315_LBCONF_INT_CTR1  0x00040000      /* GND drive, Vdd is high-Z */
-+#define AR2315_LBCONF_INT_CTR2  0x00080000      /* GND high-Z, Vdd drive */
-+#define AR2315_LBCONF_INT_CTR3  0x000C0000      /* GND drive, Vdd drive */
-+#define AR2315_LBCONF_RDY_WAIT  0x00100000      /* =1 RDY is negative of WAIT */
-+#define AR2315_LBCONF_INT_PULSE 0x00200000      /* =1 Interrupt is a pulse */
-+#define AR2315_LBCONF_ENABLE    0x00400000      /* =1 Falcon respond to LB */
-+
-+#define AR2315_LB_CLKSEL        (AR2315_LOCAL + 0x0004)
-+#define AR2315_LBCLK_EXT        0x0001          /* use external clk for lb */
-+
-+#define AR2315_LB_1MS           (AR2315_LOCAL + 0x0008)
-+#define AR2315_LB1MS_MASK       0x3FFFF         /* # of AHB clk cycles in 1ms */
-+
-+#define AR2315_LB_MISCCFG       (AR2315_LOCAL + 0x000C)
-+#define AR2315_LBM_TXD_EN       0x00000001      /* Enable TXD for fragments */
-+#define AR2315_LBM_RX_INTEN     0x00000002      /* Enable LB ints on RX ready */
-+#define AR2315_LBM_MBOXWR_INTEN 0x00000004      /* Enable LB ints on mbox wr */
-+#define AR2315_LBM_MBOXRD_INTEN 0x00000008      /* Enable LB ints on mbox rd */
-+#define AR2315_LMB_DESCSWAP_EN  0x00000010      /* Byte swap desc enable */
-+#define AR2315_LBM_TIMEOUT_MASK 0x00FFFF80
-+#define AR2315_LBM_TIMEOUT_SHFT 7
-+#define AR2315_LBM_PORTMUX      0x07000000
-+
-+
-+#define AR2315_LB_RXTSOFF       (AR2315_LOCAL + 0x0010)
-+
-+#define AR2315_LB_TX_CHAIN_EN   (AR2315_LOCAL + 0x0100)
-+#define AR2315_LB_TXEN_0        0x01
-+#define AR2315_LB_TXEN_1        0x02
-+#define AR2315_LB_TXEN_2        0x04
-+#define AR2315_LB_TXEN_3        0x08
-+
-+#define AR2315_LB_TX_CHAIN_DIS  (AR2315_LOCAL + 0x0104)
-+#define AR2315_LB_TX_DESC_PTR   (AR2315_LOCAL + 0x0200)
-+
-+#define AR2315_LB_RX_CHAIN_EN   (AR2315_LOCAL + 0x0400)
-+#define AR2315_LB_RXEN          0x01
-+
-+#define AR2315_LB_RX_CHAIN_DIS  (AR2315_LOCAL + 0x0404)
-+#define AR2315_LB_RX_DESC_PTR   (AR2315_LOCAL + 0x0408)
-+
-+#define AR2315_LB_INT_STATUS    (AR2315_LOCAL + 0x0500)
-+#define AR2315_INT_TX_DESC      0x0001
-+#define AR2315_INT_TX_OK        0x0002
-+#define AR2315_INT_TX_ERR       0x0004
-+#define AR2315_INT_TX_EOF       0x0008
-+#define AR2315_INT_RX_DESC      0x0010
-+#define AR2315_INT_RX_OK        0x0020
-+#define AR2315_INT_RX_ERR       0x0040
-+#define AR2315_INT_RX_EOF       0x0080
-+#define AR2315_INT_TX_TRUNC     0x0100
-+#define AR2315_INT_TX_STARVE    0x0200
-+#define AR2315_INT_LB_TIMEOUT   0x0400
-+#define AR2315_INT_LB_ERR       0x0800
-+#define AR2315_INT_MBOX_WR      0x1000
-+#define AR2315_INT_MBOX_RD      0x2000
-+
-+/* Bit definitions for INT MASK are the same as INT_STATUS */
-+#define AR2315_LB_INT_MASK      (AR2315_LOCAL + 0x0504)
-+
-+#define AR2315_LB_INT_EN        (AR2315_LOCAL + 0x0508)
-+#define AR2315_LB_MBOX          (AR2315_LOCAL + 0x0600)
-+
-+/*
-+ * IR Interface Registers
-+ */
-+#define AR2315_IR_PKTDATA                   (AR2315_IR + 0x0000)
-+
-+#define AR2315_IR_PKTLEN                    (AR2315_IR + 0x07fc) /* 0 - 63 */
-+
-+#define AR2315_IR_CONTROL                   (AR2315_IR + 0x0800)
-+#define AR2315_IRCTL_TX                     0x00000000  /* use as tranmitter */
-+#define AR2315_IRCTL_RX                     0x00000001  /* use as receiver   */
-+#define AR2315_IRCTL_SAMPLECLK_MASK         0x00003ffe  /* Sample clk divisor mask */
-+#define AR2315_IRCTL_SAMPLECLK_SHFT                  1
-+#define AR2315_IRCTL_OUTPUTCLK_MASK         0x03ffc000  /* Output clk divisor mask */
-+#define AR2315_IRCTL_OUTPUTCLK_SHFT                 14
-+
-+#define AR2315_IR_STATUS                    (AR2315_IR + 0x0804)
-+#define AR2315_IRSTS_RX                     0x00000001  /* receive in progress */
-+#define AR2315_IRSTS_TX                     0x00000002  /* transmit in progress */
-+
-+#define AR2315_IR_CONFIG                    (AR2315_IR + 0x0808)
-+#define AR2315_IRCFG_INVIN                  0x00000001  /* invert input polarity */
-+#define AR2315_IRCFG_INVOUT                 0x00000002  /* invert output polarity */
-+#define AR2315_IRCFG_SEQ_START_WIN_SEL      0x00000004  /* 1 => 28, 0 => 7 */
-+#define AR2315_IRCFG_SEQ_START_THRESH       0x000000f0  /*  */
-+#define AR2315_IRCFG_SEQ_END_UNIT_SEL       0x00000100  /*  */
-+#define AR2315_IRCFG_SEQ_END_UNIT_THRESH    0x00007e00  /*  */
-+#define AR2315_IRCFG_SEQ_END_WIN_SEL        0x00008000  /*  */
-+#define AR2315_IRCFG_SEQ_END_WIN_THRESH     0x001f0000  /*  */
-+#define AR2315_IRCFG_NUM_BACKOFF_WORDS      0x01e00000  /*  */
-+
-+#define HOST_PCI_DEV_ID         3
-+#define HOST_PCI_MBAR0          0x10000000
-+#define HOST_PCI_MBAR1          0x20000000
-+#define HOST_PCI_MBAR2          0x30000000
-+
-+#define HOST_PCI_SDRAM_BASEADDR HOST_PCI_MBAR1
-+#define PCI_DEVICE_MEM_SPACE    0x800000
-+
-+#endif /* __AR2315_REG_H */
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/ar5312_regs.h
-@@ -0,0 +1,236 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2003 Atheros Communications, Inc.,  All Rights Reserved.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
-+ */
-+
-+#ifndef AR5312_H
-+#define AR5312_H
-+
-+#include <asm/addrspace.h>
-+
-+/*
-+ * IRQs
-+ */
-+
-+#define AR5312_IRQ_WLAN0_INTRS  MIPS_CPU_IRQ_BASE+2 /* C0_CAUSE: 0x0400 */
-+#define AR5312_IRQ_ENET0_INTRS  MIPS_CPU_IRQ_BASE+3 /* C0_CAUSE: 0x0800 */
-+#define AR5312_IRQ_ENET1_INTRS  MIPS_CPU_IRQ_BASE+4 /* C0_CAUSE: 0x1000 */
-+#define AR5312_IRQ_WLAN1_INTRS  MIPS_CPU_IRQ_BASE+5 /* C0_CAUSE: 0x2000 */
-+#define AR5312_IRQ_MISC_INTRS   MIPS_CPU_IRQ_BASE+6 /* C0_CAUSE: 0x4000 */
-+
-+
-+/* Address Map */
-+#define AR531X_WLAN0            0x18000000
-+#define AR531X_WLAN1            0x18500000
-+#define AR531X_ENET0            0x18100000
-+#define AR531X_ENET1            0x18200000
-+#define AR531X_SDRAMCTL         0x18300000
-+#define AR531X_FLASHCTL         0x18400000
-+#define AR531X_APBBASE                0x1c000000
-+#define AR531X_FLASH            0x1e000000
-+#define AR531X_UART0            0xbc000003      /* UART MMR */
-+
-+/*
-+ * AR531X_NUM_ENET_MAC defines the number of ethernet MACs that
-+ * should be considered available.  The AR5312 supports 2 enet MACS,
-+ * even though many reference boards only actually use 1 of them
-+ * (i.e. Only MAC 0 is actually connected to an enet PHY or PHY switch.
-+ * The AR2312 supports 1 enet MAC.
-+ */
-+#define AR531X_NUM_ENET_MAC             2
-+
-+/*
-+ * Need these defines to determine true number of ethernet MACs
-+ */
-+#define AR5212_AR5312_REV2      0x0052          /* AR5312 WMAC (AP31) */
-+#define AR5212_AR5312_REV7      0x0057          /* AR5312 WMAC (AP30-040) */
-+#define AR5212_AR2313_REV8      0x0058          /* AR2313 WMAC (AP43-030) */
-+#define AR531X_RADIO_MASK_OFF  0xc8
-+#define AR531X_RADIO0_MASK     0x0003
-+#define AR531X_RADIO1_MASK     0x000c
-+#define AR531X_RADIO1_S        2
-+
-+/*
-+ * AR531X_NUM_WMAC defines the number of Wireless MACs that\
-+ * should be considered available.
-+ */
-+#define AR531X_NUM_WMAC                 2
-+
-+/* Reset/Timer Block Address Map */
-+#define AR531X_RESETTMR               (AR531X_APBBASE  + 0x3000)
-+#define AR531X_TIMER          (AR531X_RESETTMR + 0x0000) /* countdown timer */
-+#define AR531X_WD_CTRL          (AR531X_RESETTMR + 0x0008) /* watchdog cntrl */
-+#define AR531X_WD_TIMER         (AR531X_RESETTMR + 0x000c) /* watchdog timer */
-+#define AR531X_ISR            (AR531X_RESETTMR + 0x0010) /* Intr Status Reg */
-+#define AR531X_IMR            (AR531X_RESETTMR + 0x0014) /* Intr Mask Reg */
-+#define AR531X_RESET          (AR531X_RESETTMR + 0x0020)
-+#define AR5312_CLOCKCTL1      (AR531X_RESETTMR + 0x0064)
-+#define AR5312_SCRATCH        (AR531X_RESETTMR + 0x006c)
-+#define AR531X_PROCADDR               (AR531X_RESETTMR + 0x0070)
-+#define AR531X_PROC1          (AR531X_RESETTMR + 0x0074)
-+#define AR531X_DMAADDR                (AR531X_RESETTMR + 0x0078)
-+#define AR531X_DMA1           (AR531X_RESETTMR + 0x007c)
-+#define AR531X_ENABLE           (AR531X_RESETTMR + 0x0080) /* interface enb */
-+#define AR531X_REV            (AR531X_RESETTMR + 0x0090) /* revision */
-+
-+/* AR531X_WD_CTRL register bit field definitions */
-+#define AR531X_WD_CTRL_IGNORE_EXPIRATION 0x0000
-+#define AR531X_WD_CTRL_NMI               0x0001
-+#define AR531X_WD_CTRL_RESET             0x0002
-+
-+/* AR531X_ISR register bit field definitions */
-+#define AR531X_ISR_NONE               0x0000
-+#define AR531X_ISR_TIMER      0x0001
-+#define AR531X_ISR_AHBPROC    0x0002
-+#define AR531X_ISR_AHBDMA     0x0004
-+#define AR531X_ISR_GPIO               0x0008
-+#define AR531X_ISR_UART0      0x0010
-+#define AR531X_ISR_UART0DMA   0x0020
-+#define AR531X_ISR_WD         0x0040
-+#define AR531X_ISR_LOCAL      0x0080
-+
-+/* AR531X_RESET register bit field definitions */
-+#define AR531X_RESET_SYSTEM     0x00000001  /* cold reset full system */
-+#define AR531X_RESET_PROC       0x00000002  /* cold reset MIPS core */
-+#define AR531X_RESET_WLAN0      0x00000004  /* cold reset WLAN MAC and BB */
-+#define AR531X_RESET_EPHY0      0x00000008  /* cold reset ENET0 phy */
-+#define AR531X_RESET_EPHY1      0x00000010  /* cold reset ENET1 phy */
-+#define AR531X_RESET_ENET0      0x00000020  /* cold reset ENET0 mac */
-+#define AR531X_RESET_ENET1      0x00000040  /* cold reset ENET1 mac */
-+#define AR531X_RESET_UART0      0x00000100  /* cold reset UART0 (high speed) */
-+#define AR531X_RESET_WLAN1      0x00000200  /* cold reset WLAN MAC/BB */
-+#define AR531X_RESET_APB        0x00000400  /* cold reset APB (ar5312) */
-+#define AR531X_RESET_WARM_PROC  0x00001000  /* warm reset MIPS core */
-+#define AR531X_RESET_WARM_WLAN0_MAC 0x00002000  /* warm reset WLAN0 MAC */
-+#define AR531X_RESET_WARM_WLAN0_BB  0x00004000  /* warm reset WLAN0 BaseBand */
-+#define AR531X_RESET_NMI        0x00010000  /* send an NMI to the processor */
-+#define AR531X_RESET_WARM_WLAN1_MAC 0x00020000  /* warm reset WLAN1 mac */
-+#define AR531X_RESET_WARM_WLAN1_BB  0x00040000  /* warm reset WLAN1 baseband */
-+#define AR531X_RESET_LOCAL_BUS  0x00080000  /* reset local bus */
-+#define AR531X_RESET_WDOG       0x00100000  /* last reset was a watchdog */
-+
-+#define AR531X_RESET_WMAC0_BITS \
-+        AR531X_RESET_WLAN0 |\
-+        AR531X_RESET_WARM_WLAN0_MAC |\
-+        AR531X_RESET_WARM_WLAN0_BB
-+
-+#define AR531X_RESERT_WMAC1_BITS \
-+        AR531X_RESET_WLAN1 |\
-+        AR531X_RESET_WARM_WLAN1_MAC |\
-+        AR531X_RESET_WARM_WLAN1_BB
-+
-+/* AR5312_CLOCKCTL1 register bit field definitions */
-+#define AR5312_CLOCKCTL1_PREDIVIDE_MASK    0x00000030
-+#define AR5312_CLOCKCTL1_PREDIVIDE_SHIFT            4
-+#define AR5312_CLOCKCTL1_MULTIPLIER_MASK   0x00001f00
-+#define AR5312_CLOCKCTL1_MULTIPLIER_SHIFT           8
-+#define AR5312_CLOCKCTL1_DOUBLER_MASK      0x00010000
-+
-+/* Valid for AR5312 and AR2312 */
-+#define AR5312_CLOCKCTL1_PREDIVIDE_MASK    0x00000030
-+#define AR5312_CLOCKCTL1_PREDIVIDE_SHIFT            4
-+#define AR5312_CLOCKCTL1_MULTIPLIER_MASK   0x00001f00
-+#define AR5312_CLOCKCTL1_MULTIPLIER_SHIFT           8
-+#define AR5312_CLOCKCTL1_DOUBLER_MASK      0x00010000
-+
-+/* Valid for AR2313 */
-+#define AR2313_CLOCKCTL1_PREDIVIDE_MASK    0x00003000
-+#define AR2313_CLOCKCTL1_PREDIVIDE_SHIFT           12
-+#define AR2313_CLOCKCTL1_MULTIPLIER_MASK   0x001f0000
-+#define AR2313_CLOCKCTL1_MULTIPLIER_SHIFT          16
-+#define AR2313_CLOCKCTL1_DOUBLER_MASK      0x00000000
-+
-+
-+/* AR531X_ENABLE register bit field definitions */
-+#define AR531X_ENABLE_WLAN0              0x0001
-+#define AR531X_ENABLE_ENET0              0x0002
-+#define AR531X_ENABLE_ENET1              0x0004
-+#define AR531X_ENABLE_UART_AND_WLAN1_PIO 0x0008   /* UART, and WLAN1 PIOs */
-+#define AR531X_ENABLE_WLAN1_DMA          0x0010   /* WLAN1 DMAs */
-+#define AR531X_ENABLE_WLAN1 \
-+            (AR531X_ENABLE_UART_AND_WLAN1_PIO | AR531X_ENABLE_WLAN1_DMA)
-+
-+/* AR531X_REV register bit field definitions */
-+#define AR531X_REV_WMAC_MAJ    0xf000
-+#define AR531X_REV_WMAC_MAJ_S  12
-+#define AR531X_REV_WMAC_MIN    0x0f00
-+#define AR531X_REV_WMAC_MIN_S  8
-+#define AR531X_REV_MAJ         0x00f0
-+#define AR531X_REV_MAJ_S       4
-+#define AR531X_REV_MIN         0x000f
-+#define AR531X_REV_MIN_S       0
-+#define AR531X_REV_CHIP        (AR531X_REV_MAJ|AR531X_REV_MIN)
-+
-+/* Major revision numbers, bits 7..4 of Revision ID register */
-+#define AR531X_REV_MAJ_AR5312          0x4
-+#define AR531X_REV_MAJ_AR2313          0x5
-+
-+/* Minor revision numbers, bits 3..0 of Revision ID register */
-+#define AR5312_REV_MIN_DUAL     0x0     /* Dual WLAN version */
-+#define AR5312_REV_MIN_SINGLE   0x1     /* Single WLAN version */
-+
-+/* AR531X_FLASHCTL register bit field definitions */
-+#define FLASHCTL_IDCY   0x0000000f      /* Idle cycle turn around time */
-+#define FLASHCTL_IDCY_S 0
-+#define FLASHCTL_WST1   0x000003e0      /* Wait state 1 */
-+#define FLASHCTL_WST1_S 5
-+#define FLASHCTL_RBLE   0x00000400      /* Read byte lane enable */
-+#define FLASHCTL_WST2   0x0000f800      /* Wait state 2 */
-+#define FLASHCTL_WST2_S 11
-+#define FLASHCTL_AC     0x00070000      /* Flash address check (added) */
-+#define FLASHCTL_AC_S   16
-+#define FLASHCTL_AC_128K 0x00000000
-+#define FLASHCTL_AC_256K 0x00010000
-+#define FLASHCTL_AC_512K 0x00020000
-+#define FLASHCTL_AC_1M   0x00030000
-+#define FLASHCTL_AC_2M   0x00040000
-+#define FLASHCTL_AC_4M   0x00050000
-+#define FLASHCTL_AC_8M   0x00060000
-+#define FLASHCTL_AC_RES  0x00070000     /* 16MB is not supported */
-+#define FLASHCTL_E      0x00080000      /* Flash bank enable (added) */
-+#define FLASHCTL_BUSERR 0x01000000      /* Bus transfer error status flag */
-+#define FLASHCTL_WPERR  0x02000000      /* Write protect error status flag */
-+#define FLASHCTL_WP     0x04000000      /* Write protect */
-+#define FLASHCTL_BM     0x08000000      /* Burst mode */
-+#define FLASHCTL_MW     0x30000000      /* Memory width */
-+#define FLASHCTL_MWx8   0x00000000      /* Memory width x8 */
-+#define FLASHCTL_MWx16  0x10000000      /* Memory width x16 */
-+#define FLASHCTL_MWx32  0x20000000      /* Memory width x32 (not supported) */
-+#define FLASHCTL_ATNR   0x00000000      /* Access type == no retry */
-+#define FLASHCTL_ATR    0x80000000      /* Access type == retry every */
-+#define FLASHCTL_ATR4   0xc0000000      /* Access type == retry every 4 */
-+
-+/* ARM Flash Controller -- 3 flash banks with either x8 or x16 devices.  */
-+#define AR531X_FLASHCTL0        (AR531X_FLASHCTL + 0x00)
-+#define AR531X_FLASHCTL1        (AR531X_FLASHCTL + 0x04)
-+#define AR531X_FLASHCTL2        (AR531X_FLASHCTL + 0x08)
-+
-+/* ARM SDRAM Controller -- just enough to determine memory size */
-+#define AR531X_MEM_CFG1 (AR531X_SDRAMCTL + 0x04)
-+#define MEM_CFG1_AC0    0x00000700      /* bank 0: SDRAM addr check (added) */
-+#define MEM_CFG1_AC0_S  8
-+#define MEM_CFG1_AC1    0x00007000      /* bank 1: SDRAM addr check (added) */
-+#define MEM_CFG1_AC1_S  12
-+
-+/* GPIO Address Map */
-+#define AR531X_GPIO         (AR531X_APBBASE  + 0x2000)
-+#define AR531X_GPIO_DO      (AR531X_GPIO + 0x00)        /* output register */
-+#define AR531X_GPIO_DI      (AR531X_GPIO + 0x04)        /* intput register */
-+#define AR531X_GPIO_CR      (AR531X_GPIO + 0x08)        /* control register */
-+
-+/* GPIO Control Register bit field definitions */
-+#define AR531X_GPIO_CR_M(x)    (1 << (x))                      /* mask for i/o */
-+#define AR531X_GPIO_CR_O(x)    (0 << (x))                      /* mask for output */
-+#define AR531X_GPIO_CR_I(x)    (1 << (x))                      /* mask for input */
-+#define AR531X_GPIO_CR_INT(x)  (1 << ((x)+8))                  /* mask for interrupt */
-+#define AR531X_GPIO_CR_UART(x) (1 << ((x)+16))                 /* uart multiplex */
-+#define AR531X_NUM_GPIO               8
-+
-+
-+#endif
-+
---- /dev/null
-+++ b/arch/mips/ar231x/ar5312.c
-@@ -0,0 +1,547 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2003 Atheros Communications, Inc.,  All Rights Reserved.
-+ * Copyright (C) 2006 FON Technology, SL.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+ */
-+
-+/*
-+ * Platform devices for Atheros SoCs
-+ */
-+
-+#include <generated/autoconf.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/platform_device.h>
-+#include <linux/kernel.h>
-+#include <linux/reboot.h>
-+#include <linux/leds.h>
-+#include <asm/bootinfo.h>
-+#include <asm/reboot.h>
-+#include <asm/time.h>
-+#include <asm/irq.h>
-+#include <asm/io.h>
-+#include <gpio.h>
-+
-+#include <ar231x_platform.h>
-+#include <ar5312_regs.h>
-+#include <ar231x.h>
-+#include "devices.h"
-+#include "ar5312.h"
-+
-+static void
-+ar5312_misc_irq_dispatch(void)
-+{
-+      unsigned int ar231x_misc_intrs = ar231x_read_reg(AR531X_ISR) & ar231x_read_reg(AR531X_IMR);
-+
-+      if (ar231x_misc_intrs & AR531X_ISR_TIMER) {
-+              do_IRQ(AR531X_MISC_IRQ_TIMER);
-+              (void)ar231x_read_reg(AR531X_TIMER);
-+      } else if (ar231x_misc_intrs & AR531X_ISR_AHBPROC)
-+              do_IRQ(AR531X_MISC_IRQ_AHB_PROC);
-+      else if ((ar231x_misc_intrs & AR531X_ISR_UART0))
-+              do_IRQ(AR531X_MISC_IRQ_UART0);
-+      else if (ar231x_misc_intrs & AR531X_ISR_WD)
-+              do_IRQ(AR531X_MISC_IRQ_WATCHDOG);
-+      else
-+              do_IRQ(AR531X_MISC_IRQ_NONE);
-+}
-+
-+static asmlinkage void
-+ar5312_irq_dispatch(void)
-+{
-+      int pending = read_c0_status() & read_c0_cause();
-+
-+      if (pending & CAUSEF_IP2)
-+              do_IRQ(AR5312_IRQ_WLAN0_INTRS);
-+      else if (pending & CAUSEF_IP3)
-+              do_IRQ(AR5312_IRQ_ENET0_INTRS);
-+      else if (pending & CAUSEF_IP4)
-+              do_IRQ(AR5312_IRQ_ENET1_INTRS);
-+      else if (pending & CAUSEF_IP5)
-+              do_IRQ(AR5312_IRQ_WLAN1_INTRS);
-+      else if (pending & CAUSEF_IP6)
-+              ar5312_misc_irq_dispatch();
-+      else if (pending & CAUSEF_IP7)
-+              do_IRQ(AR531X_IRQ_CPU_CLOCK);
-+}
-+
-+
-+/* Enable the specified AR531X_MISC_IRQ interrupt */
-+static void
-+ar5312_misc_intr_enable(unsigned int irq)
-+{
-+      unsigned int imr;
-+
-+      imr = ar231x_read_reg(AR531X_IMR);
-+      imr |= (1 << (irq - AR531X_MISC_IRQ_BASE - 1));
-+      ar231x_write_reg(AR531X_IMR, imr);
-+}
-+
-+/* Disable the specified AR531X_MISC_IRQ interrupt */
-+static void
-+ar5312_misc_intr_disable(unsigned int irq)
-+{
-+      unsigned int imr;
-+
-+      imr = ar231x_read_reg(AR531X_IMR);
-+      imr &= ~(1 << (irq - AR531X_MISC_IRQ_BASE - 1));
-+      ar231x_write_reg(AR531X_IMR, imr);
-+      ar231x_read_reg(AR531X_IMR); /* flush write buffer */
-+}
-+
-+static void
-+ar5312_misc_intr_end(unsigned int irq)
-+{
-+      if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-+              ar5312_misc_intr_enable(irq);
-+}
-+
-+static struct irq_chip ar5312_misc_intr_controller = {
-+      .name     = "AR5312-MISC",
-+      .disable  = ar5312_misc_intr_disable,
-+      .ack      = ar5312_misc_intr_disable,
-+      .mask_ack = ar5312_misc_intr_disable,
-+      .mask     = ar5312_misc_intr_disable,
-+      .unmask   = ar5312_misc_intr_enable,
-+      .end      = ar5312_misc_intr_end,
-+};
-+
-+
-+static irqreturn_t ar5312_ahb_proc_handler(int cpl, void *dev_id)
-+{
-+      u32 proc1 = ar231x_read_reg(AR531X_PROC1);
-+      u32 procAddr = ar231x_read_reg(AR531X_PROCADDR); /* clears error state */
-+      u32 dma1 = ar231x_read_reg(AR531X_DMA1);
-+      u32 dmaAddr = ar231x_read_reg(AR531X_DMAADDR);   /* clears error state */
-+
-+      printk("AHB interrupt: PROCADDR=0x%8.8x  PROC1=0x%8.8x  DMAADDR=0x%8.8x  DMA1=0x%8.8x\n",
-+                      procAddr, proc1, dmaAddr, dma1);
-+
-+      machine_restart("AHB error"); /* Catastrophic failure */
-+      return IRQ_HANDLED;
-+}
-+
-+
-+static struct irqaction ar5312_ahb_proc_interrupt  = {
-+      .handler = ar5312_ahb_proc_handler,
-+      .flags   = IRQF_DISABLED,
-+      .name    = "ar5312_ahb_proc_interrupt",
-+};
-+
-+
-+static struct irqaction cascade  = {
-+      .handler = no_action,
-+      .flags   = IRQF_DISABLED,
-+      .name    = "cascade",
-+};
-+
-+void __init ar5312_irq_init(void)
-+{
-+      int i;
-+
-+      if (!is_5312())
-+              return;
-+
-+      ar231x_irq_dispatch = ar5312_irq_dispatch;
-+      for (i = 0; i < AR531X_MISC_IRQ_COUNT; i++) {
-+              int irq = AR531X_MISC_IRQ_BASE + i;
-+              set_irq_chip_and_handler(irq, &ar5312_misc_intr_controller,
-+                      handle_level_irq);
-+      }
-+      setup_irq(AR531X_MISC_IRQ_AHB_PROC, &ar5312_ahb_proc_interrupt);
-+      setup_irq(AR5312_IRQ_MISC_INTRS, &cascade);
-+}
-+
-+const struct ar231x_gpiodev ar5312_gpiodev;
-+
-+static u32
-+ar5312_gpio_get_output(void)
-+{
-+      u32 reg;
-+      reg = ~(ar231x_read_reg(AR531X_GPIO_CR));
-+      reg &= ar5312_gpiodev.valid_mask;
-+      return reg;
-+}
-+
-+static u32
-+ar5312_gpio_set_output(u32 mask, u32 val)
-+{
-+      u32 reg;
-+
-+      reg = ar231x_read_reg(AR531X_GPIO_CR);
-+      reg |= mask;
-+      reg &= ~val;
-+      ar231x_write_reg(AR531X_GPIO_CR, reg);
-+      return reg;
-+}
-+
-+static u32
-+ar5312_gpio_get(void)
-+{
-+      u32 reg;
-+      reg = ar231x_read_reg(AR531X_GPIO_DI);
-+      reg &= ar5312_gpiodev.valid_mask;
-+      return reg;
-+}
-+
-+static u32
-+ar5312_gpio_set(u32 mask, u32 value)
-+{
-+      u32 reg;
-+      reg = ar231x_read_reg(AR531X_GPIO_DO);
-+      reg &= ~mask;
-+      reg |= value;
-+      ar231x_write_reg(AR531X_GPIO_DO, reg);
-+      return reg;
-+}
-+
-+const struct ar231x_gpiodev ar5312_gpiodev = {
-+      .valid_mask = (1 << 8) - 1,
-+      .get_output = ar5312_gpio_get_output,
-+      .set_output = ar5312_gpio_set_output,
-+      .get = ar5312_gpio_get,
-+      .set = ar5312_gpio_set,
-+};
-+
-+static struct physmap_flash_data ar5312_flash_data = {
-+      .width = 2,
-+};
-+
-+static struct resource ar5312_flash_resource = {
-+      .start = AR531X_FLASH,
-+      .end = AR531X_FLASH + 0x800000 - 1,
-+      .flags = IORESOURCE_MEM,
-+};
-+
-+static struct ar231x_eth ar5312_eth0_data = {
-+      .reset_base = AR531X_RESET,
-+      .reset_mac = AR531X_RESET_ENET0,
-+      .reset_phy = AR531X_RESET_EPHY0,
-+      .phy_base = KSEG1ADDR(AR531X_ENET0),
-+      .config = &ar231x_board,
-+};
-+
-+static struct ar231x_eth ar5312_eth1_data = {
-+      .reset_base = AR531X_RESET,
-+      .reset_mac = AR531X_RESET_ENET1,
-+      .reset_phy = AR531X_RESET_EPHY1,
-+      .phy_base = KSEG1ADDR(AR531X_ENET1),
-+      .config = &ar231x_board,
-+};
-+
-+static struct platform_device ar5312_physmap_flash = {
-+      .name = "physmap-flash",
-+      .id = 0,
-+      .dev.platform_data = &ar5312_flash_data,
-+      .resource = &ar5312_flash_resource,
-+      .num_resources = 1,
-+};
-+
-+#ifdef CONFIG_LEDS_GPIO
-+static struct gpio_led ar5312_leds[] = {
-+      { .name = "wlan", .gpio = 0, .active_low = 1, },
-+};
-+
-+static const struct gpio_led_platform_data ar5312_led_data = {
-+      .num_leds = ARRAY_SIZE(ar5312_leds),
-+      .leds = (void *) ar5312_leds,
-+};
-+
-+static struct platform_device ar5312_gpio_leds = {
-+      .name = "leds-gpio",
-+      .id = -1,
-+      .dev.platform_data = (void *) &ar5312_led_data,
-+};
-+#endif
-+
-+/*
-+ * NB: This mapping size is larger than the actual flash size,
-+ * but this shouldn't be a problem here, because the flash
-+ * will simply be mapped multiple times.
-+ */
-+static char __init *ar5312_flash_limit(void)
-+{
-+      u32 ctl;
-+      /*
-+       * Configure flash bank 0.
-+       * Assume 8M window size. Flash will be aliased if it's smaller
-+       */
-+      ctl = FLASHCTL_E |
-+              FLASHCTL_AC_8M |
-+              FLASHCTL_RBLE |
-+              (0x01 << FLASHCTL_IDCY_S) |
-+              (0x07 << FLASHCTL_WST1_S) |
-+              (0x07 << FLASHCTL_WST2_S) |
-+              (ar231x_read_reg(AR531X_FLASHCTL0) & FLASHCTL_MW);
-+
-+      ar231x_write_reg(AR531X_FLASHCTL0, ctl);
-+
-+      /* Disable other flash banks */
-+      ar231x_write_reg(AR531X_FLASHCTL1,
-+              ar231x_read_reg(AR531X_FLASHCTL1) & ~(FLASHCTL_E | FLASHCTL_AC));
-+
-+      ar231x_write_reg(AR531X_FLASHCTL2,
-+              ar231x_read_reg(AR531X_FLASHCTL2) & ~(FLASHCTL_E | FLASHCTL_AC));
-+
-+      return (char *) KSEG1ADDR(AR531X_FLASH + 0x800000);
-+}
-+
-+int __init ar5312_init_devices(void)
-+{
-+      struct ar231x_boarddata *config;
-+      u32 fctl = 0;
-+      const u8 *radio;
-+      u8 *c;
-+
-+      if (!is_5312())
-+              return 0;
-+
-+      /* Locate board/radio config data */
-+      ar231x_find_config(ar5312_flash_limit());
-+      config = ar231x_board.config;
-+
-+
-+      /*
-+       * Chip IDs and hardware detection for some Atheros
-+       * models are really broken!
-+       *
-+       * Atheros uses a disabled WMAC0 and Silicon ID of AR5312
-+       * as indication for AR2312, which is otherwise
-+       * indistinguishable from the real AR5312.
-+       */
-+      if (ar231x_board.radio) {
-+              radio = ar231x_board.radio + AR531X_RADIO_MASK_OFF;
-+              if ((*((const u32 *) radio) & AR531X_RADIO0_MASK) == 0)
-+                      config->flags |= BD_ISCASPER;
-+      } else
-+              radio = NULL;
-+
-+      /* AR2313 has CPU minor rev. 10 */
-+      if ((current_cpu_data.processor_id & 0xff) == 0x0a)
-+              ar231x_devtype = DEV_TYPE_AR2313;
-+
-+      /* AR2312 shares the same Silicon ID as AR5312 */
-+      else if (config->flags & BD_ISCASPER)
-+              ar231x_devtype = DEV_TYPE_AR2312;
-+
-+      /* Everything else is probably AR5312 or compatible */
-+      else
-+              ar231x_devtype = DEV_TYPE_AR5312;
-+
-+      /* fixup flash width */
-+      fctl = ar231x_read_reg(AR531X_FLASHCTL) & FLASHCTL_MW;
-+      switch (fctl) {
-+      case FLASHCTL_MWx16:
-+              ar5312_flash_data.width = 2;
-+              break;
-+      case FLASHCTL_MWx8:
-+      default:
-+              ar5312_flash_data.width = 1;
-+              break;
-+      }
-+
-+      platform_device_register(&ar5312_physmap_flash);
-+
-+#ifdef CONFIG_LEDS_GPIO
-+      ar5312_leds[0].gpio = config->sysLedGpio;
-+      platform_device_register(&ar5312_gpio_leds);
-+#endif
-+
-+      /* Fix up MAC addresses if necessary */
-+      if (!memcmp(config->enet0_mac, "\xff\xff\xff\xff\xff\xff", 6))
-+              memcpy(config->enet0_mac, config->enet1_mac, 6);
-+
-+      /* If ENET0 and ENET1 have the same mac address,
-+       * increment the one from ENET1 */
-+      if (memcmp(config->enet0_mac, config->enet1_mac, 6) == 0) {
-+              c = config->enet1_mac + 5;
-+              while ((c >= config->enet1_mac) && !(++(*c)))
-+                      c--;
-+      }
-+
-+      switch(ar231x_devtype) {
-+      case DEV_TYPE_AR5312:
-+              ar5312_eth0_data.macaddr = config->enet0_mac;
-+              ar231x_add_ethernet(0, KSEG1ADDR(AR531X_ENET0),
-+                      AR5312_IRQ_ENET0_INTRS, &ar5312_eth0_data);
-+
-+              ar5312_eth1_data.macaddr = config->enet1_mac;
-+              ar231x_add_ethernet(1, KSEG1ADDR(AR531X_ENET1),
-+                      AR5312_IRQ_ENET1_INTRS, &ar5312_eth1_data);
-+
-+              if (!ar231x_board.radio)
-+                      return 0;
-+
-+              if (*((u32 *) radio) & AR531X_RADIO0_MASK)
-+                      ar231x_add_wmac(0, AR531X_WLAN0,
-+                              AR5312_IRQ_WLAN0_INTRS);
-+
-+              break;
-+      /*
-+       * AR2312/3 ethernet uses the PHY of ENET0, but the MAC
-+       * of ENET1. Atheros calls it 'twisted' for a reason :)
-+       */
-+      case DEV_TYPE_AR2312:
-+      case DEV_TYPE_AR2313:
-+              ar5312_eth1_data.phy_base = ar5312_eth0_data.phy_base;
-+              ar5312_eth1_data.reset_phy = ar5312_eth0_data.reset_phy;
-+              ar5312_eth1_data.macaddr = config->enet0_mac;
-+              ar231x_add_ethernet(0, KSEG1ADDR(AR531X_ENET1),
-+                      AR5312_IRQ_ENET1_INTRS, &ar5312_eth1_data);
-+
-+              if (!ar231x_board.radio)
-+                      return 0;
-+              break;
-+      default:
-+              break;
-+      }
-+
-+      if (*((u32 *) radio) & AR531X_RADIO1_MASK)
-+              ar231x_add_wmac(1, AR531X_WLAN1,
-+                      AR5312_IRQ_WLAN1_INTRS);
-+
-+      return 0;
-+}
-+
-+
-+static void ar5312_restart(char *command)
-+{
-+      /* reset the system */
-+      local_irq_disable();
-+      while(1) {
-+              ar231x_write_reg(AR531X_RESET, AR531X_RESET_SYSTEM);
-+      }
-+}
-+
-+
-+/*
-+ * This table is indexed by bits 5..4 of the CLOCKCTL1 register
-+ * to determine the predevisor value.
-+ */
-+static int __initdata CLOCKCTL1_PREDIVIDE_TABLE[4] = { 1, 2, 4, 5 };
-+
-+
-+static int __init
-+ar5312_cpu_frequency(void)
-+{
-+      unsigned int result;
-+      unsigned int predivide_mask, predivide_shift;
-+      unsigned int multiplier_mask, multiplier_shift;
-+      unsigned int clockCtl1, preDivideSelect, preDivisor, multiplier;
-+      unsigned int doubler_mask;
-+      u16 devid;
-+
-+      /* Trust the bootrom's idea of cpu frequency. */
-+      if ((result = ar231x_read_reg(AR5312_SCRATCH)))
-+              return result;
-+
-+      devid = ar231x_read_reg(AR531X_REV);
-+      devid &= AR531X_REV_MAJ;
-+      devid >>= AR531X_REV_MAJ_S;
-+      if (devid == AR531X_REV_MAJ_AR2313) {
-+              predivide_mask = AR2313_CLOCKCTL1_PREDIVIDE_MASK;
-+              predivide_shift = AR2313_CLOCKCTL1_PREDIVIDE_SHIFT;
-+              multiplier_mask = AR2313_CLOCKCTL1_MULTIPLIER_MASK;
-+              multiplier_shift = AR2313_CLOCKCTL1_MULTIPLIER_SHIFT;
-+              doubler_mask = AR2313_CLOCKCTL1_DOUBLER_MASK;
-+      } else { /* AR5312 and AR2312 */
-+              predivide_mask = AR5312_CLOCKCTL1_PREDIVIDE_MASK;
-+              predivide_shift = AR5312_CLOCKCTL1_PREDIVIDE_SHIFT;
-+              multiplier_mask = AR5312_CLOCKCTL1_MULTIPLIER_MASK;
-+              multiplier_shift = AR5312_CLOCKCTL1_MULTIPLIER_SHIFT;
-+              doubler_mask = AR5312_CLOCKCTL1_DOUBLER_MASK;
-+      }
-+
-+      /*
-+       * Clocking is derived from a fixed 40MHz input clock.
-+       *
-+       *  cpuFreq = InputClock * MULT (where MULT is PLL multiplier)
-+       *  sysFreq = cpuFreq / 4          (used for APB clock, serial,
-+       *                                                         flash, Timer, Watchdog Timer)
-+       *
-+       *  cntFreq = cpuFreq / 2          (use for CPU count/compare)
-+       *
-+       * So, for example, with a PLL multiplier of 5, we have
-+       *
-+       *  cpuFreq = 200MHz
-+       *  sysFreq = 50MHz
-+       *  cntFreq = 100MHz
-+       *
-+       * We compute the CPU frequency, based on PLL settings.
-+       */
-+
-+      clockCtl1 = ar231x_read_reg(AR5312_CLOCKCTL1);
-+      preDivideSelect = (clockCtl1 & predivide_mask) >> predivide_shift;
-+      preDivisor = CLOCKCTL1_PREDIVIDE_TABLE[preDivideSelect];
-+      multiplier = (clockCtl1 & multiplier_mask) >> multiplier_shift;
-+
-+      if (clockCtl1 & doubler_mask) {
-+              multiplier = multiplier << 1;
-+      }
-+      return (40000000 / preDivisor) * multiplier;
-+}
-+
-+static inline int
-+ar5312_sys_frequency(void)
-+{
-+      return ar5312_cpu_frequency() / 4;
-+}
-+
-+void __init
-+ar5312_time_init(void)
-+{
-+      if (!is_5312())
-+              return;
-+
-+      mips_hpt_frequency = ar5312_cpu_frequency() / 2;
-+}
-+
-+
-+void __init
-+ar5312_prom_init(void)
-+{
-+      u32 memsize, memcfg, bank0AC, bank1AC;
-+      u32 devid;
-+
-+      if (!is_5312())
-+              return;
-+
-+      /* Detect memory size */
-+      memcfg = ar231x_read_reg(AR531X_MEM_CFG1);
-+      bank0AC = (memcfg & MEM_CFG1_AC0) >> MEM_CFG1_AC0_S;
-+      bank1AC = (memcfg & MEM_CFG1_AC1) >> MEM_CFG1_AC1_S;
-+      memsize = (bank0AC ? (1 << (bank0AC+1)) : 0)
-+              + (bank1AC ? (1 << (bank1AC+1)) : 0);
-+      memsize <<= 20;
-+      add_memory_region(0, memsize, BOOT_MEM_RAM);
-+
-+      devid = ar231x_read_reg(AR531X_REV);
-+      devid >>= AR531X_REV_WMAC_MIN_S;
-+      devid &= AR531X_REV_CHIP;
-+      ar231x_board.devid = (u16) devid;
-+      ar231x_gpiodev = &ar5312_gpiodev;
-+}
-+
-+void __init
-+ar5312_plat_setup(void)
-+{
-+      if (!is_5312())
-+              return;
-+
-+      /* Clear any lingering AHB errors */
-+      ar231x_read_reg(AR531X_PROCADDR);
-+      ar231x_read_reg(AR531X_DMAADDR);
-+      ar231x_write_reg(AR531X_WD_CTRL, AR531X_WD_CTRL_IGNORE_EXPIRATION);
-+
-+      _machine_restart = ar5312_restart;
-+      ar231x_serial_setup(KSEG1ADDR(AR531X_UART0), ar5312_sys_frequency());
-+}
-+
---- /dev/null
-+++ b/arch/mips/ar231x/ar2315.c
-@@ -0,0 +1,658 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2003 Atheros Communications, Inc.,  All Rights Reserved.
-+ * Copyright (C) 2006 FON Technology, SL.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
-+ */
-+
-+/*
-+ * Platform devices for Atheros SoCs
-+ */
-+
-+#include <generated/autoconf.h>
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/types.h>
-+#include <linux/string.h>
-+#include <linux/platform_device.h>
-+#include <linux/kernel.h>
-+#include <linux/reboot.h>
-+#include <linux/delay.h>
-+#include <linux/leds.h>
-+#include <asm/bootinfo.h>
-+#include <asm/reboot.h>
-+#include <asm/time.h>
-+#include <asm/irq.h>
-+#include <asm/io.h>
-+#include <asm/gpio.h>
-+
-+#include <ar231x_platform.h>
-+#include <ar2315_regs.h>
-+#include <ar231x.h>
-+#include "devices.h"
-+#include "ar2315.h"
-+
-+static u32 gpiointmask = 0, gpiointval = 0;
-+
-+static inline void ar2315_gpio_irq(void)
-+{
-+      u32 pend;
-+      int bit = -1;
-+
-+      /* only do one gpio interrupt at a time */
-+      pend = (ar231x_read_reg(AR2315_GPIO_DI) ^ gpiointval) & gpiointmask;
-+
-+      if (pend) {
-+              bit = fls(pend) - 1;
-+              pend &= ~(1 << bit);
-+              gpiointval ^= (1 << bit);
-+      }
-+
-+      if (!pend)
-+              ar231x_write_reg(AR2315_ISR, AR2315_ISR_GPIO);
-+
-+      /* Enable interrupt with edge detection */
-+      if ((ar231x_read_reg(AR2315_GPIO_CR) & AR2315_GPIO_CR_M(bit)) != AR2315_GPIO_CR_I(bit))
-+              return;
-+
-+      if (bit >= 0)
-+              do_IRQ(AR531X_GPIO_IRQ_BASE + bit);
-+}
-+
-+
-+/*
-+ * Called when an interrupt is received, this function
-+ * determines exactly which interrupt it was, and it
-+ * invokes the appropriate handler.
-+ *
-+ * Implicitly, we also define interrupt priority by
-+ * choosing which to dispatch first.
-+ */
-+static asmlinkage void
-+ar2315_irq_dispatch(void)
-+{
-+      int pending = read_c0_status() & read_c0_cause();
-+
-+      if (pending & CAUSEF_IP3)
-+              do_IRQ(AR2315_IRQ_WLAN0_INTRS);
-+      else if (pending & CAUSEF_IP4)
-+              do_IRQ(AR2315_IRQ_ENET0_INTRS);
-+      else if (pending & CAUSEF_IP2) {
-+              unsigned int misc_intr = ar231x_read_reg(AR2315_ISR) & ar231x_read_reg(AR2315_IMR);
-+
-+              if (misc_intr & AR2315_ISR_SPI)
-+                      do_IRQ(AR531X_MISC_IRQ_SPI);
-+              else if (misc_intr & AR2315_ISR_TIMER)
-+                      do_IRQ(AR531X_MISC_IRQ_TIMER);
-+              else if (misc_intr & AR2315_ISR_AHB)
-+                      do_IRQ(AR531X_MISC_IRQ_AHB_PROC);
-+              else if (misc_intr & AR2315_ISR_GPIO)
-+                      ar2315_gpio_irq();
-+              else if (misc_intr & AR2315_ISR_UART0)
-+                      do_IRQ(AR531X_MISC_IRQ_UART0);
-+              else if (misc_intr & AR2315_ISR_WD)
-+                      do_IRQ(AR531X_MISC_IRQ_WATCHDOG);
-+              else
-+                      do_IRQ(AR531X_MISC_IRQ_NONE);
-+      } else if (pending & CAUSEF_IP7)
-+              do_IRQ(AR531X_IRQ_CPU_CLOCK);
-+}
-+
-+static void ar2315_set_gpiointmask(int gpio, int level)
-+{
-+      u32 reg;
-+
-+      reg = ar231x_read_reg(AR2315_GPIO_INT);
-+      reg &= ~(AR2315_GPIO_INT_M | AR2315_GPIO_INT_LVL_M);
-+      reg |= gpio | AR2315_GPIO_INT_LVL(level);
-+      ar231x_write_reg(AR2315_GPIO_INT, reg);
-+}
-+
-+static void ar2315_gpio_intr_enable(unsigned int irq)
-+{
-+      unsigned int gpio = irq - AR531X_GPIO_IRQ_BASE;
-+
-+      /* Enable interrupt with edge detection */
-+      if ((ar231x_read_reg(AR2315_GPIO_CR) & AR2315_GPIO_CR_M(gpio)) != AR2315_GPIO_CR_I(gpio))
-+              return;
-+
-+      gpiointmask |= (1 << gpio);
-+      ar2315_set_gpiointmask(gpio, 3);
-+}
-+
-+static unsigned int ar2315_gpio_intr_startup(unsigned int irq)
-+{
-+      unsigned int gpio = irq - AR531X_GPIO_IRQ_BASE;
-+
-+      /* reconfigure GPIO line as input */
-+      ar231x_mask_reg(AR2315_GPIO_CR, AR2315_GPIO_CR_M(gpio), AR2315_GPIO_CR_I(gpio));
-+      ar2315_gpio_intr_enable(irq);
-+      return 0;
-+}
-+
-+static void ar2315_gpio_intr_disable(unsigned int irq)
-+{
-+      unsigned int gpio = irq - AR531X_GPIO_IRQ_BASE;
-+
-+      /* Disable interrupt */
-+      gpiointmask &= ~(1 << gpio);
-+      ar2315_set_gpiointmask(gpio, 0);
-+}
-+
-+static void
-+ar2315_gpio_intr_end(unsigned int irq)
-+{
-+      if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-+              ar2315_gpio_intr_enable(irq);
-+}
-+
-+static struct irq_chip ar2315_gpio_intr_controller = {
-+      .typename       = "AR2315-GPIO",
-+      .startup  = ar2315_gpio_intr_startup,
-+      .ack      = ar2315_gpio_intr_disable,
-+      .mask_ack = ar2315_gpio_intr_disable,
-+      .mask     = ar2315_gpio_intr_disable,
-+      .unmask   = ar2315_gpio_intr_enable,
-+      .end      = ar2315_gpio_intr_end,
-+};
-+
-+static void
-+ar2315_misc_intr_enable(unsigned int irq)
-+{
-+      unsigned int imr;
-+
-+      imr = ar231x_read_reg(AR2315_IMR);
-+      switch(irq) {
-+      case AR531X_MISC_IRQ_SPI:
-+               imr |= AR2315_ISR_SPI;
-+               break;
-+      case AR531X_MISC_IRQ_TIMER:
-+           imr |= AR2315_ISR_TIMER;
-+           break;
-+      case AR531X_MISC_IRQ_AHB_PROC:
-+           imr |= AR2315_ISR_AHB;
-+           break;
-+      case AR531X_MISC_IRQ_GPIO:
-+           imr |= AR2315_ISR_GPIO;
-+           break;
-+      case AR531X_MISC_IRQ_UART0:
-+           imr |= AR2315_ISR_UART0;
-+           break;
-+      case AR531X_MISC_IRQ_WATCHDOG:
-+           imr |= AR2315_ISR_WD;
-+           break;
-+      default:
-+              break;
-+      }
-+      ar231x_write_reg(AR2315_IMR, imr);
-+}
-+
-+static void
-+ar2315_misc_intr_disable(unsigned int irq)
-+{
-+      unsigned int imr;
-+
-+      imr = ar231x_read_reg(AR2315_IMR);
-+      switch(irq) {
-+      case AR531X_MISC_IRQ_SPI:
-+               imr &= ~AR2315_ISR_SPI;
-+               break;
-+      case AR531X_MISC_IRQ_TIMER:
-+           imr &= ~AR2315_ISR_TIMER;
-+           break;
-+      case AR531X_MISC_IRQ_AHB_PROC:
-+           imr &= ~AR2315_ISR_AHB;
-+           break;
-+      case AR531X_MISC_IRQ_GPIO:
-+           imr &= ~AR2315_ISR_GPIO;
-+           break;
-+      case AR531X_MISC_IRQ_UART0:
-+           imr &= ~AR2315_ISR_UART0;
-+           break;
-+      case AR531X_MISC_IRQ_WATCHDOG:
-+           imr &= ~AR2315_ISR_WD;
-+           break;
-+      default:
-+              break;
-+      }
-+      ar231x_write_reg(AR2315_IMR, imr);
-+}
-+
-+static void
-+ar2315_misc_intr_end(unsigned int irq)
-+{
-+      if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS)))
-+              ar2315_misc_intr_enable(irq);
-+}
-+
-+
-+static struct irq_chip ar2315_misc_intr_controller = {
-+      .typename       = "AR2315-MISC",
-+      .ack      = ar2315_misc_intr_disable,
-+      .mask_ack = ar2315_misc_intr_disable,
-+      .mask     = ar2315_misc_intr_disable,
-+      .unmask   = ar2315_misc_intr_enable,
-+      .end      = ar2315_misc_intr_end,
-+};
-+
-+static irqreturn_t ar2315_ahb_proc_handler(int cpl, void *dev_id)
-+{
-+    ar231x_write_reg(AR2315_AHB_ERR0, AHB_ERROR_DET);
-+    ar231x_read_reg(AR2315_AHB_ERR1);
-+
-+    printk(KERN_ERR "AHB fatal error\n");
-+    machine_restart("AHB error"); /* Catastrophic failure */
-+
-+    return IRQ_HANDLED;
-+}
-+
-+static struct irqaction ar2315_ahb_proc_interrupt  = {
-+      .handler        = ar2315_ahb_proc_handler,
-+      .flags          = IRQF_DISABLED,
-+      .name           = "ar2315_ahb_proc_interrupt",
-+};
-+
-+static struct irqaction cascade  = {
-+      .handler        = no_action,
-+      .flags          = IRQF_DISABLED,
-+      .name           = "cascade",
-+};
-+
-+void
-+ar2315_irq_init(void)
-+{
-+      int i;
-+
-+      if (!is_2315())
-+              return;
-+
-+      ar231x_irq_dispatch = ar2315_irq_dispatch;
-+      gpiointval = ar231x_read_reg(AR2315_GPIO_DI);
-+      for (i = 0; i < AR531X_MISC_IRQ_COUNT; i++) {
-+              int irq = AR531X_MISC_IRQ_BASE + i;
-+              set_irq_chip_and_handler(irq, &ar2315_misc_intr_controller,
-+                      handle_level_irq);
-+      }
-+      for (i = 0; i < AR531X_GPIO_IRQ_COUNT; i++) {
-+              int irq = AR531X_GPIO_IRQ_BASE + i;
-+              set_irq_chip_and_handler(irq, &ar2315_gpio_intr_controller,
-+                      handle_level_irq);
-+      }
-+      setup_irq(AR531X_MISC_IRQ_GPIO, &cascade);
-+      setup_irq(AR531X_MISC_IRQ_AHB_PROC, &ar2315_ahb_proc_interrupt);
-+      setup_irq(AR2315_IRQ_MISC_INTRS, &cascade);
-+}
-+
-+const struct ar231x_gpiodev ar2315_gpiodev;
-+
-+static u32
-+ar2315_gpio_get_output(void)
-+{
-+      u32 reg;
-+      reg = ar231x_read_reg(AR2315_GPIO_CR);
-+      reg &= ar2315_gpiodev.valid_mask;
-+      return reg;
-+}
-+
-+static u32
-+ar2315_gpio_set_output(u32 mask, u32 val)
-+{
-+      u32 reg;
-+
-+      reg = ar231x_read_reg(AR2315_GPIO_CR);
-+      reg &= ~mask;
-+      reg |= val;
-+      ar231x_write_reg(AR2315_GPIO_CR, reg);
-+      return reg;
-+}
-+
-+static u32
-+ar2315_gpio_get(void)
-+{
-+      u32 reg;
-+      reg = ar231x_read_reg(AR2315_GPIO_DI);
-+      reg &= ar2315_gpiodev.valid_mask;
-+      return reg;
-+}
-+
-+static u32
-+ar2315_gpio_set(u32 mask, u32 value)
-+{
-+      u32 reg;
-+      reg = ar231x_read_reg(AR2315_GPIO_DO);
-+      reg &= ~mask;
-+      reg |= value;
-+      ar231x_write_reg(AR2315_GPIO_DO, reg);
-+      return reg;
-+}
-+
-+const struct ar231x_gpiodev ar2315_gpiodev = {
-+      .valid_mask = (1 << 22) - 1,
-+      .get_output = ar2315_gpio_get_output,
-+      .set_output = ar2315_gpio_set_output,
-+      .get = ar2315_gpio_get,
-+      .set = ar2315_gpio_set,
-+};
-+
-+static struct ar231x_eth ar2315_eth_data = {
-+      .reset_base = AR2315_RESET,
-+      .reset_mac = AR2315_RESET_ENET0,
-+      .reset_phy = AR2315_RESET_EPHY0,
-+      .phy_base = AR2315_ENET0,
-+      .config = &ar231x_board,
-+};
-+
-+static struct resource ar2315_spiflash_res[] = {
-+      {
-+              .name = "flash_base",
-+              .flags = IORESOURCE_MEM,
-+              .start = KSEG1ADDR(AR2315_SPI_READ),
-+              .end = KSEG1ADDR(AR2315_SPI_READ) + 0x1000000 - 1,
-+      },
-+      {
-+              .name = "flash_regs",
-+              .flags = IORESOURCE_MEM,
-+              .start = 0x11300000,
-+              .end = 0x11300012,
-+      },
-+};
-+
-+static struct platform_device ar2315_spiflash = {
-+      .id = 0,
-+      .name = "spiflash",
-+      .resource = ar2315_spiflash_res,
-+      .num_resources = ARRAY_SIZE(ar2315_spiflash_res)
-+};
-+
-+static struct platform_device ar2315_wdt = {
-+      .id = 0,
-+      .name = "ar2315_wdt",
-+};
-+
-+#define SPI_FLASH_CTL      0x00
-+#define SPI_FLASH_OPCODE   0x04
-+#define SPI_FLASH_DATA     0x08
-+
-+static inline u32
-+spiflash_read_reg(int reg)
-+{
-+      return ar231x_read_reg(KSEG1ADDR(AR2315_SPI) + reg);
-+}
-+
-+static inline void
-+spiflash_write_reg(int reg, u32 data)
-+{
-+      ar231x_write_reg(KSEG1ADDR(AR2315_SPI) + reg, data);
-+}
-+
-+static u32
-+spiflash_wait_status(void)
-+{
-+      u32 reg;
-+
-+      do {
-+              reg = spiflash_read_reg(SPI_FLASH_CTL);
-+      } while (reg & SPI_CTL_BUSY);
-+
-+      return reg;
-+}
-+
-+static u8
-+spiflash_probe(void)
-+{
-+      u32 reg;
-+
-+      reg = spiflash_wait_status();
-+      reg &= ~SPI_CTL_TX_RX_CNT_MASK;
-+      reg |= (1 << 4) | 4 | SPI_CTL_START;
-+
-+      spiflash_write_reg(SPI_FLASH_OPCODE, 0xab);
-+      spiflash_write_reg(SPI_FLASH_CTL, reg);
-+
-+      reg = spiflash_wait_status();
-+      reg = spiflash_read_reg(SPI_FLASH_DATA);
-+      reg &= 0xff;
-+
-+      return (u8) reg;
-+}
-+
-+
-+#define STM_8MBIT_SIGNATURE     0x13
-+#define STM_16MBIT_SIGNATURE    0x14
-+#define STM_32MBIT_SIGNATURE    0x15
-+#define STM_64MBIT_SIGNATURE    0x16
-+#define STM_128MBIT_SIGNATURE   0x17
-+
-+static u8 __init *
-+ar2315_flash_limit(void)
-+{
-+      u32 flash_size = 0;
-+
-+      /* probe the flash chip size */
-+      switch(spiflash_probe()) {
-+              case STM_8MBIT_SIGNATURE:
-+                      flash_size = 0x00100000;
-+                      break;
-+              case STM_16MBIT_SIGNATURE:
-+                      flash_size = 0x00200000;
-+                      break;
-+              case STM_32MBIT_SIGNATURE:
-+                      flash_size = 0x00400000;
-+                      break;
-+              case STM_64MBIT_SIGNATURE:
-+                      flash_size = 0x00800000;
-+                      break;
-+              case STM_128MBIT_SIGNATURE:
-+                      flash_size = 0x01000000;
-+                      break;
-+      }
-+
-+      ar2315_spiflash_res[0].end = ar2315_spiflash_res[0].start +
-+              flash_size - 1;
-+      return (u8 *) ar2315_spiflash_res[0].end + 1;
-+}
-+
-+#ifdef CONFIG_LEDS_GPIO
-+static struct gpio_led ar2315_leds[6];
-+static struct gpio_led_platform_data ar2315_led_data = {
-+      .leds = (void *) ar2315_leds,
-+};
-+
-+static struct platform_device ar2315_gpio_leds = {
-+      .name = "leds-gpio",
-+      .id = -1,
-+      .dev = {
-+              .platform_data = (void *) &ar2315_led_data,
-+      }
-+};
-+
-+static void __init
-+ar2315_init_gpio(void)
-+{
-+      static char led_names[6][6];
-+      int i, led = 0;
-+
-+      ar2315_led_data.num_leds = 0;
-+      for(i = 1; i < 8; i++)
-+      {
-+              if((i == AR2315_RESET_GPIO) ||
-+                 (i == ar231x_board.config->resetConfigGpio))
-+                      continue;
-+
-+              if(i == ar231x_board.config->sysLedGpio)
-+                      strcpy(led_names[led], "wlan");
-+              else
-+                      sprintf(led_names[led], "gpio%d", i);
-+
-+              ar2315_leds[led].name = led_names[led];
-+              ar2315_leds[led].gpio = i;
-+              ar2315_leds[led].active_low = 0;
-+              led++;
-+      }
-+      ar2315_led_data.num_leds = led;
-+      platform_device_register(&ar2315_gpio_leds);
-+}
-+#else
-+static inline void ar2315_init_gpio(void)
-+{
-+}
-+#endif
-+
-+int __init
-+ar2315_init_devices(void)
-+{
-+      if (!is_2315())
-+              return 0;
-+
-+      /* Find board configuration */
-+      ar231x_find_config(ar2315_flash_limit());
-+      ar2315_eth_data.macaddr = ar231x_board.config->enet0_mac;
-+
-+      ar2315_init_gpio();
-+      platform_device_register(&ar2315_wdt);
-+      platform_device_register(&ar2315_spiflash);
-+      ar231x_add_ethernet(0, AR2315_ENET0, AR2315_IRQ_ENET0_INTRS,
-+              &ar2315_eth_data);
-+      ar231x_add_wmac(0, AR2315_WLAN0, AR2315_IRQ_WLAN0_INTRS);
-+
-+      return 0;
-+}
-+
-+static void
-+ar2315_restart(char *command)
-+{
-+      void (*mips_reset_vec)(void) = (void *) 0xbfc00000;
-+
-+      local_irq_disable();
-+
-+      /* try reset the system via reset control */
-+      ar231x_write_reg(AR2315_COLD_RESET,AR2317_RESET_SYSTEM);
-+
-+      /* Cold reset does not work on the AR2315/6, use the GPIO reset bits a workaround.
-+       * give it some time to attempt a gpio based hardware reset
-+       * (atheros reference design workaround) */
-+      gpio_direction_output(AR2315_RESET_GPIO, 0);
-+      mdelay(100);
-+
-+      /* Some boards (e.g. Senao EOC-2610) don't implement the reset logic
-+       * workaround. Attempt to jump to the mips reset location -
-+       * the boot loader itself might be able to recover the system */
-+      mips_reset_vec();
-+}
-+
-+
-+/*
-+ * This table is indexed by bits 5..4 of the CLOCKCTL1 register
-+ * to determine the predevisor value.
-+ */
-+static int __initdata CLOCKCTL1_PREDIVIDE_TABLE[4] = { 1, 2, 4, 5 };
-+static int __initdata PLLC_DIVIDE_TABLE[5] = { 2, 3, 4, 6, 3 };
-+
-+static unsigned int __init
-+ar2315_sys_clk(unsigned int clockCtl)
-+{
-+    unsigned int pllcCtrl,cpuDiv;
-+    unsigned int pllcOut,refdiv,fdiv,divby2;
-+      unsigned int clkDiv;
-+
-+    pllcCtrl = ar231x_read_reg(AR2315_PLLC_CTL);
-+    refdiv = (pllcCtrl & PLLC_REF_DIV_M) >> PLLC_REF_DIV_S;
-+    refdiv = CLOCKCTL1_PREDIVIDE_TABLE[refdiv];
-+    fdiv = (pllcCtrl & PLLC_FDBACK_DIV_M) >> PLLC_FDBACK_DIV_S;
-+    divby2 = (pllcCtrl & PLLC_ADD_FDBACK_DIV_M) >> PLLC_ADD_FDBACK_DIV_S;
-+    divby2 += 1;
-+    pllcOut = (40000000/refdiv)*(2*divby2)*fdiv;
-+
-+
-+    /* clkm input selected */
-+      switch(clockCtl & CPUCLK_CLK_SEL_M) {
-+              case 0:
-+              case 1:
-+                      clkDiv = PLLC_DIVIDE_TABLE[(pllcCtrl & PLLC_CLKM_DIV_M) >> PLLC_CLKM_DIV_S];
-+                      break;
-+              case 2:
-+                      clkDiv = PLLC_DIVIDE_TABLE[(pllcCtrl & PLLC_CLKC_DIV_M) >> PLLC_CLKC_DIV_S];
-+                      break;
-+              default:
-+                      pllcOut = 40000000;
-+                      clkDiv = 1;
-+                      break;
-+      }
-+      cpuDiv = (clockCtl & CPUCLK_CLK_DIV_M) >> CPUCLK_CLK_DIV_S;
-+      cpuDiv = cpuDiv * 2 ?: 1;
-+      return (pllcOut/(clkDiv * cpuDiv));
-+}
-+
-+static inline unsigned int
-+ar2315_cpu_frequency(void)
-+{
-+    return ar2315_sys_clk(ar231x_read_reg(AR2315_CPUCLK));
-+}
-+
-+static inline unsigned int
-+ar2315_apb_frequency(void)
-+{
-+    return ar2315_sys_clk(ar231x_read_reg(AR2315_AMBACLK));
-+}
-+
-+void __init
-+ar2315_time_init(void)
-+{
-+      if (!is_2315())
-+              return;
-+
-+      mips_hpt_frequency = ar2315_cpu_frequency() / 2;
-+}
-+
-+void __init
-+ar2315_prom_init(void)
-+{
-+      u32 memsize, memcfg, devid;
-+
-+      if (!is_2315())
-+              return;
-+
-+      memcfg = ar231x_read_reg(AR2315_MEM_CFG);
-+      memsize   = 1 + ((memcfg & SDRAM_DATA_WIDTH_M) >> SDRAM_DATA_WIDTH_S);
-+      memsize <<= 1 + ((memcfg & SDRAM_COL_WIDTH_M) >> SDRAM_COL_WIDTH_S);
-+      memsize <<= 1 + ((memcfg & SDRAM_ROW_WIDTH_M) >> SDRAM_ROW_WIDTH_S);
-+      memsize <<= 3;
-+      add_memory_region(0, memsize, BOOT_MEM_RAM);
-+
-+      /* Detect the hardware based on the device ID */
-+      devid = ar231x_read_reg(AR2315_SREV) & AR2315_REV_CHIP;
-+      switch(devid) {
-+              case 0x90:
-+              case 0x91:
-+                      ar231x_devtype = DEV_TYPE_AR2317;
-+                      break;
-+              default:
-+                      ar231x_devtype = DEV_TYPE_AR2315;
-+                      break;
-+      }
-+      ar231x_gpiodev = &ar2315_gpiodev;
-+      ar231x_board.devid = devid;
-+}
-+
-+void __init
-+ar2315_plat_setup(void)
-+{
-+      u32 config;
-+
-+      if (!is_2315())
-+              return;
-+
-+      /* Clear any lingering AHB errors */
-+      config = read_c0_config();
-+      write_c0_config(config & ~0x3);
-+      ar231x_write_reg(AR2315_AHB_ERR0,AHB_ERROR_DET);
-+      ar231x_read_reg(AR2315_AHB_ERR1);
-+      ar231x_write_reg(AR2315_WDC, AR2315_WDC_IGNORE_EXPIRATION);
-+
-+      _machine_restart = ar2315_restart;
-+      ar231x_serial_setup(KSEG1ADDR(AR2315_UART0), ar2315_apb_frequency());
-+}
---- /dev/null
-+++ b/arch/mips/ar231x/ar2315.h
-@@ -0,0 +1,37 @@
-+#ifndef __AR2315_H
-+#define __AR2315_H
-+
-+#ifdef CONFIG_ATHEROS_AR2315
-+
-+extern void ar2315_irq_init(void);
-+extern int ar2315_init_devices(void);
-+extern void ar2315_prom_init(void);
-+extern void ar2315_plat_setup(void);
-+extern void ar2315_time_init(void);
-+
-+#else
-+
-+static inline void ar2315_irq_init(void)
-+{
-+}
-+
-+static inline int ar2315_init_devices(void)
-+{
-+      return 0;
-+}
-+
-+static inline void ar2315_prom_init(void)
-+{
-+}
-+
-+static inline void ar2315_plat_setup(void)
-+{
-+}
-+
-+static inline void ar2315_time_init(void)
-+{
-+}
-+
-+#endif
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/ar231x/ar5312.h
-@@ -0,0 +1,38 @@
-+#ifndef __AR5312_H
-+#define __AR5312_H
-+
-+#ifdef CONFIG_ATHEROS_AR5312
-+
-+extern void ar5312_irq_init(void);
-+extern int ar5312_init_devices(void);
-+extern void ar5312_prom_init(void);
-+extern void ar5312_plat_setup(void);
-+extern void ar5312_time_init(void);
-+extern void ar5312_time_init(void);
-+
-+#else
-+
-+static inline void ar5312_irq_init(void)
-+{
-+}
-+
-+static inline int ar5312_init_devices(void)
-+{
-+      return 0;
-+}
-+
-+static inline void ar5312_prom_init(void)
-+{
-+}
-+
-+static inline void ar5312_plat_setup(void)
-+{
-+}
-+
-+static inline void ar5312_time_init(void)
-+{
-+}
-+
-+#endif
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/ar231x.h
-@@ -0,0 +1,54 @@
-+#ifndef __AR531X_H
-+#define __AR531X_H
-+
-+#define AR531X_MISC_IRQ_BASE          0x20
-+#define AR531X_GPIO_IRQ_BASE          0x30
-+
-+/* Software's idea of interrupts handled by "CPU Interrupt Controller" */
-+#define AR531X_IRQ_NONE               MIPS_CPU_IRQ_BASE+0
-+#define AR531X_IRQ_CPU_CLOCK  MIPS_CPU_IRQ_BASE+7 /* C0_CAUSE: 0x8000 */
-+
-+/* Miscellaneous interrupts, which share IP6 */
-+#define AR531X_MISC_IRQ_NONE          AR531X_MISC_IRQ_BASE+0
-+#define AR531X_MISC_IRQ_TIMER         AR531X_MISC_IRQ_BASE+1
-+#define AR531X_MISC_IRQ_AHB_PROC      AR531X_MISC_IRQ_BASE+2
-+#define AR531X_MISC_IRQ_AHB_DMA               AR531X_MISC_IRQ_BASE+3
-+#define AR531X_MISC_IRQ_GPIO          AR531X_MISC_IRQ_BASE+4
-+#define AR531X_MISC_IRQ_UART0         AR531X_MISC_IRQ_BASE+5
-+#define AR531X_MISC_IRQ_UART0_DMA     AR531X_MISC_IRQ_BASE+6
-+#define AR531X_MISC_IRQ_WATCHDOG      AR531X_MISC_IRQ_BASE+7
-+#define AR531X_MISC_IRQ_LOCAL         AR531X_MISC_IRQ_BASE+8
-+#define AR531X_MISC_IRQ_SPI           AR531X_MISC_IRQ_BASE+9
-+#define AR531X_MISC_IRQ_COUNT         10
-+
-+/* GPIO Interrupts [0..7], share AR531X_MISC_IRQ_GPIO */
-+#define AR531X_GPIO_IRQ_NONE            AR531X_GPIO_IRQ_BASE+0
-+#define AR531X_GPIO_IRQ(n)              AR531X_GPIO_IRQ_BASE+n
-+#define AR531X_GPIO_IRQ_COUNT           22
-+
-+static inline u32
-+ar231x_read_reg(u32 reg)
-+{
-+      return __raw_readl((u32 *) KSEG1ADDR(reg));
-+}
-+
-+static inline void
-+ar231x_write_reg(u32 reg, u32 val)
-+{
-+      __raw_writel(val, (u32 *) KSEG1ADDR(reg));
-+}
-+
-+static inline u32
-+ar231x_mask_reg(u32 reg, u32 mask, u32 val)
-+{
-+      u32 ret;
-+
-+      ret = ar231x_read_reg(reg);
-+      ret &= ~mask;
-+      ret |= val;
-+      ar231x_write_reg(reg, ret);
-+
-+      return ret;
-+}
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/ar231x/devices.h
-@@ -0,0 +1,37 @@
-+#ifndef __AR231X_DEVICES_H
-+#define __AR231X_DEVICES_H
-+
-+enum {
-+      /* handled by ar5312.c */
-+      DEV_TYPE_AR2312,
-+      DEV_TYPE_AR2313,
-+      DEV_TYPE_AR5312,
-+
-+      /* handled by ar2315.c */
-+      DEV_TYPE_AR2315,
-+      DEV_TYPE_AR2316,
-+      DEV_TYPE_AR2317,
-+
-+      DEV_TYPE_UNKNOWN
-+};
-+
-+extern int ar231x_devtype;
-+extern struct ar231x_board_config ar231x_board;
-+extern asmlinkage void (*ar231x_irq_dispatch)(void);
-+
-+extern int ar231x_find_config(u8 *flash_limit);
-+extern void ar231x_serial_setup(u32 mapbase, unsigned int uartclk);
-+extern int ar231x_add_wmac(int nr, u32 base, int irq);
-+extern int ar231x_add_ethernet(int nr, u32 base, int irq, void *pdata);
-+
-+static inline bool is_2315(void)
-+{
-+      return (current_cpu_data.cputype == CPU_4KEC);
-+}
-+
-+static inline bool is_5312(void)
-+{
-+      return !is_2315();
-+}
-+
-+#endif
---- /dev/null
-+++ b/arch/mips/ar231x/devices.c
-@@ -0,0 +1,175 @@
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/serial.h>
-+#include <linux/serial_core.h>
-+#include <linux/serial_8250.h>
-+#include <linux/platform_device.h>
-+#include <ar231x_platform.h>
-+#include <ar231x.h>
-+#include "devices.h"
-+#include "ar5312.h"
-+#include "ar2315.h"
-+
-+struct ar231x_board_config ar231x_board;
-+int ar231x_devtype = DEV_TYPE_UNKNOWN;
-+const struct ar231x_gpiodev *ar231x_gpiodev;
-+EXPORT_SYMBOL(ar231x_gpiodev);
-+
-+static struct resource ar231x_eth0_res[] = {
-+      {
-+              .name = "eth0_membase",
-+              .flags = IORESOURCE_MEM,
-+      },
-+      {
-+              .name = "eth0_irq",
-+              .flags = IORESOURCE_IRQ,
-+      }
-+};
-+
-+static struct resource ar231x_eth1_res[] = {
-+      {
-+              .name = "eth1_membase",
-+              .flags = IORESOURCE_MEM,
-+      },
-+      {
-+              .name = "eth1_irq",
-+              .flags = IORESOURCE_IRQ,
-+      }
-+};
-+
-+static struct platform_device ar231x_eth[] = {
-+      {
-+              .id = 0,
-+              .name = "ar231x-eth",
-+              .resource = ar231x_eth0_res,
-+              .num_resources = ARRAY_SIZE(ar231x_eth0_res)
-+      },
-+      {
-+              .id = 1,
-+              .name = "ar231x-eth",
-+              .resource = ar231x_eth1_res,
-+              .num_resources = ARRAY_SIZE(ar231x_eth1_res)
-+      }
-+};
-+
-+static struct resource ar231x_wmac0_res[] = {
-+      {
-+              .name = "wmac0_membase",
-+              .flags = IORESOURCE_MEM,
-+      },
-+      {
-+              .name = "wmac0_irq",
-+              .flags = IORESOURCE_IRQ,
-+      }
-+};
-+
-+static struct resource ar231x_wmac1_res[] = {
-+      {
-+              .name = "wmac1_membase",
-+              .flags = IORESOURCE_MEM,
-+      },
-+      {
-+              .name = "wmac1_irq",
-+              .flags = IORESOURCE_IRQ,
-+      }
-+};
-+
-+
-+static struct platform_device ar231x_wmac[] = {
-+      {
-+              .id = 0,
-+              .name = "ar231x-wmac",
-+              .resource = ar231x_wmac0_res,
-+              .num_resources = ARRAY_SIZE(ar231x_wmac0_res),
-+              .dev.platform_data = &ar231x_board,
-+      },
-+      {
-+              .id = 1,
-+              .name = "ar231x-wmac",
-+              .resource = ar231x_wmac1_res,
-+              .num_resources = ARRAY_SIZE(ar231x_wmac1_res),
-+              .dev.platform_data = &ar231x_board,
-+      },
-+};
-+
-+static const char *devtype_strings[] = {
-+      [DEV_TYPE_AR5312] = "Atheros AR5312",
-+      [DEV_TYPE_AR2312] = "Atheros AR2312",
-+      [DEV_TYPE_AR2313] = "Atheros AR2313",
-+      [DEV_TYPE_AR2315] = "Atheros AR2315",
-+      [DEV_TYPE_AR2316] = "Atheros AR2316",
-+      [DEV_TYPE_AR2317] = "Atheros AR2317",
-+      [DEV_TYPE_UNKNOWN] = "Atheros (unknown)",
-+};
-+
-+const char *get_system_type(void)
-+{
-+      if ((ar231x_devtype >= ARRAY_SIZE(devtype_strings)) ||
-+              !devtype_strings[ar231x_devtype])
-+              return devtype_strings[DEV_TYPE_UNKNOWN];
-+      return devtype_strings[ar231x_devtype];
-+}
-+
-+
-+int __init
-+ar231x_add_ethernet(int nr, u32 base, int irq, void *pdata)
-+{
-+      struct resource *res;
-+
-+      ar231x_eth[nr].dev.platform_data = pdata;
-+      res = &ar231x_eth[nr].resource[0];
-+      res->start = base;
-+      res->end = base + 0x2000 - 1;
-+      res++;
-+      res->start = irq;
-+      res->end = irq;
-+      return platform_device_register(&ar231x_eth[nr]);
-+}
-+
-+void __init
-+ar231x_serial_setup(u32 mapbase, unsigned int uartclk)
-+{
-+      struct uart_port s;
-+
-+      memset(&s, 0, sizeof(s));
-+
-+      s.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST;
-+      s.iotype = UPIO_MEM;
-+      s.irq = AR531X_MISC_IRQ_UART0;
-+      s.regshift = 2;
-+      s.mapbase = mapbase;
-+      s.uartclk = uartclk;
-+      s.membase = (void __iomem *)s.mapbase;
-+
-+      early_serial_setup(&s);
-+}
-+
-+int __init
-+ar231x_add_wmac(int nr, u32 base, int irq)
-+{
-+      struct resource *res;
-+
-+      ar231x_wmac[nr].dev.platform_data = &ar231x_board;
-+      res = &ar231x_wmac[nr].resource[0];
-+      res->start = base;
-+      res->end = base + 0x10000 - 1;
-+      res++;
-+      res->start = irq;
-+      res->end = irq;
-+      return platform_device_register(&ar231x_wmac[nr]);
-+}
-+
-+static int __init ar231x_register_devices(void)
-+{
-+      static struct resource res = {
-+              .start = 0xFFFFFFFF,
-+      };
-+
-+      platform_device_register_simple("GPIODEV", 0, &res, 1);
-+      ar5312_init_devices();
-+      ar2315_init_devices();
-+
-+      return 0;
-+}
-+
-+device_initcall(ar231x_register_devices);
diff --git a/target/linux/atheros/patches-2.6.33/101-early-printk-support.patch b/target/linux/atheros/patches-2.6.33/101-early-printk-support.patch
deleted file mode 100644 (file)
index 8feec4c..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
---- /dev/null
-+++ b/arch/mips/ar231x/early_printk.c
-@@ -0,0 +1,44 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2010 Gabor Juhos <juhosg@openwrt.org>
-+ */
-+
-+#include <linux/mm.h>
-+#include <linux/io.h>
-+#include <linux/serial_reg.h>
-+#include <asm/addrspace.h>
-+
-+#include <asm/mach-ar231x/ar2315_regs.h>
-+#include <asm/mach-ar231x/ar5312_regs.h>
-+#include "devices.h"
-+
-+static inline void prom_uart_wr(void __iomem *base, unsigned reg,
-+                              unsigned char ch)
-+{
-+      __raw_writeb(ch, base + 4 * reg);
-+}
-+
-+static inline unsigned char prom_uart_rr(void __iomem *base, unsigned reg)
-+{
-+      return __raw_readb(base + 4 * reg);
-+}
-+
-+void prom_putchar(unsigned char ch)
-+{
-+      static void __iomem *base;
-+
-+      if (unlikely(base == NULL)) {
-+              if (is_2315())
-+                      base = (void __iomem *)(KSEG1ADDR(AR2315_UART0));
-+              else
-+                      base = (void __iomem *)(KSEG1ADDR(AR531X_UART0));
-+      }
-+
-+      while ((prom_uart_rr(base, UART_LSR) & UART_LSR_THRE) == 0);
-+      prom_uart_wr(base, UART_TX, ch);
-+      while ((prom_uart_rr(base, UART_LSR) & UART_LSR_THRE) == 0);
-+}
-+
---- a/arch/mips/ar231x/Makefile
-+++ b/arch/mips/ar231x/Makefile
-@@ -9,5 +9,8 @@
- #
- obj-y += board.o prom.o devices.o
-+
-+obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
-+
- obj-$(CONFIG_ATHEROS_AR5312) += ar5312.o
- obj-$(CONFIG_ATHEROS_AR2315) += ar2315.o
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -94,6 +94,7 @@ config ATHEROS_AR231X
-       select SYS_SUPPORTS_BIG_ENDIAN
-       select SYS_SUPPORTS_32BIT_KERNEL
-       select GENERIC_GPIO
-+      select SYS_HAS_EARLY_PRINTK
-       help
-         Support for AR231x and AR531x based boards
diff --git a/target/linux/atheros/patches-2.6.33/105-ar2315_pci.patch b/target/linux/atheros/patches-2.6.33/105-ar2315_pci.patch
deleted file mode 100644 (file)
index 3f5e6b4..0000000
+++ /dev/null
@@ -1,297 +0,0 @@
---- a/arch/mips/ar231x/Makefile
-+++ b/arch/mips/ar231x/Makefile
-@@ -14,3 +14,4 @@ obj-$(CONFIG_EARLY_PRINTK) += early_prin
- obj-$(CONFIG_ATHEROS_AR5312) += ar5312.o
- obj-$(CONFIG_ATHEROS_AR2315) += ar2315.o
-+obj-$(CONFIG_ATHEROS_AR2315_PCI) += pci.o
---- /dev/null
-+++ b/arch/mips/ar231x/pci.c
-@@ -0,0 +1,230 @@
-+/*
-+ * 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/types.h>
-+#include <linux/pci.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/spinlock.h>
-+#include <linux/delay.h>
-+#include <linux/irq.h>
-+#include <asm/bootinfo.h>
-+#include <asm/paccess.h>
-+#include <asm/irq_cpu.h>
-+#include <asm/io.h>
-+#include <ar231x_platform.h>
-+#include <ar231x.h>
-+#include <ar2315_regs.h>
-+#include "devices.h"
-+
-+#define AR531X_MEM_BASE    0x80800000UL
-+#define AR531X_MEM_SIZE    0x00ffffffUL
-+#define AR531X_IO_SIZE     0x00007fffUL
-+
-+static unsigned long configspace;
-+
-+static int config_access(int devfn, int where, int size, u32 *ptr, bool write)
-+{
-+      unsigned long flags;
-+      int func = PCI_FUNC(devfn);
-+      int dev = PCI_SLOT(devfn);
-+      u32 value = 0;
-+      int err = 0;
-+      u32 addr;
-+
-+      if (((dev != 0) && (dev != 3)) || (func > 2))
-+              return PCIBIOS_DEVICE_NOT_FOUND;
-+
-+      /* Select Configuration access */
-+      local_irq_save(flags);
-+      ar231x_mask_reg(AR2315_PCI_MISC_CONFIG, 0, AR2315_PCIMISC_CFG_SEL);
-+      mb();
-+
-+      addr = (u32) configspace + (1 << (13 + dev)) + (func << 8) + where;
-+      if (size == 1)
-+              addr ^= 0x3;
-+      else if (size == 2)
-+              addr ^= 0x2;
-+
-+      if (write) {
-+              value = *ptr;
-+              if (size == 1)
-+                      err = put_dbe(value, (u8 *) addr);
-+              else if (size == 2)
-+                      err = put_dbe(value, (u16 *) addr);
-+              else if (size == 4)
-+                      err = put_dbe(value, (u32 *) addr);
-+      } else {
-+              if (size == 1)
-+                      err = get_dbe(value, (u8 *) addr);
-+              else if (size == 2)
-+                      err = get_dbe(value, (u16 *) addr);
-+              else if (size == 4)
-+                      err = get_dbe(value, (u32 *) addr);
-+              if (err)
-+                      *ptr = 0xffffffff;
-+              else
-+                      *ptr = value;
-+      }
-+
-+      /* Select Memory access */
-+      ar231x_mask_reg(AR2315_PCI_MISC_CONFIG, AR2315_PCIMISC_CFG_SEL, 0);
-+      local_irq_restore(flags);
-+
-+      return (err ? PCIBIOS_DEVICE_NOT_FOUND : PCIBIOS_SUCCESSFUL);
-+}
-+
-+static int ar231x_pci_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 * value)
-+{
-+      return config_access(devfn, where, size, value, 0);
-+}
-+
-+static int ar231x_pci_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
-+{
-+      return config_access(devfn, where, size, &value, 1);
-+}
-+
-+struct pci_ops ar231x_pci_ops = {
-+      .read   = ar231x_pci_read,
-+      .write  = ar231x_pci_write,
-+};
-+
-+static struct resource ar231x_mem_resource = {
-+      .name   = "AR531x PCI MEM",
-+      .start  = AR531X_MEM_BASE,
-+      .end    = AR531X_MEM_BASE + AR531X_MEM_SIZE - AR531X_IO_SIZE - 1 + 0x4000000,
-+      .flags  = IORESOURCE_MEM,
-+};
-+
-+static struct resource ar231x_io_resource = {
-+      .name   = "AR531x PCI I/O",
-+      .start  = AR531X_MEM_BASE + AR531X_MEM_SIZE - AR531X_IO_SIZE,
-+      .end    = AR531X_MEM_BASE + AR531X_MEM_SIZE - 1,
-+      .flags  = IORESOURCE_IO,
-+};
-+
-+struct pci_controller ar231x_pci_controller = {
-+      .pci_ops                = &ar231x_pci_ops,
-+      .mem_resource   = &ar231x_mem_resource,
-+      .io_resource    = &ar231x_io_resource,
-+      .mem_offset     = 0x00000000UL,
-+      .io_offset      = 0x00000000UL,
-+};
-+
-+int pcibios_map_irq(const struct pci_dev *dev, u8 slot, u8 pin)
-+{
-+      return AR2315_IRQ_LCBUS_PCI;
-+}
-+
-+int pcibios_plat_dev_init(struct pci_dev *dev)
-+{
-+      pci_write_config_byte(dev, PCI_INTERRUPT_LINE, 5);
-+      pci_write_config_word(dev, 0x40, 0);
-+
-+      /* Clear any pending Abort or external Interrupts
-+       * and enable interrupt processing */
-+      ar231x_mask_reg(AR2315_PCI_INTEN_REG, AR2315_PCI_INT_ENABLE, 0);
-+      ar231x_write_reg(AR2315_PCI_INT_STATUS, (AR2315_PCI_ABORT_INT | AR2315_PCI_EXT_INT));
-+      ar231x_write_reg(AR2315_PCI_INT_MASK, (AR2315_PCI_ABORT_INT | AR2315_PCI_EXT_INT));
-+      ar231x_mask_reg(AR2315_PCI_INTEN_REG, 0, AR2315_PCI_INT_ENABLE);
-+
-+      return 0;
-+}
-+
-+static void
-+ar2315_pci_fixup(struct pci_dev *dev)
-+{
-+      unsigned int devfn = dev->devfn;
-+
-+      if (dev->bus->number != 0)
-+              return;
-+
-+      /* Only fix up the PCI host settings */
-+      if ((PCI_SLOT(devfn) != 3) || (PCI_FUNC(devfn) != 0))
-+              return;
-+
-+      /* Fix up MBARs */
-+      pci_write_config_dword(dev, PCI_BASE_ADDRESS_0, HOST_PCI_MBAR0);
-+      pci_write_config_dword(dev, PCI_BASE_ADDRESS_1, HOST_PCI_MBAR1);
-+      pci_write_config_dword(dev, PCI_BASE_ADDRESS_2, HOST_PCI_MBAR2);
-+      pci_write_config_dword(dev, PCI_COMMAND,
-+              PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER | PCI_COMMAND_SPECIAL |
-+              PCI_COMMAND_INVALIDATE | PCI_COMMAND_PARITY | PCI_COMMAND_SERR |
-+              PCI_COMMAND_FAST_BACK);
-+}
-+DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, ar2315_pci_fixup);
-+
-+static int __init
-+ar2315_pci_init(void)
-+{
-+      u32 reg;
-+
-+      if (ar231x_devtype != DEV_TYPE_AR2315)
-+              return -ENODEV;
-+
-+      configspace = (unsigned long) ioremap_nocache(0x80000000, 1*1024*1024); /* Remap PCI config space */
-+      ar231x_pci_controller.io_map_base =
-+              (unsigned long) ioremap_nocache(AR531X_MEM_BASE + AR531X_MEM_SIZE, AR531X_IO_SIZE);
-+      set_io_port_base(ar231x_pci_controller.io_map_base); /* PCI I/O space */
-+
-+      reg = ar231x_mask_reg(AR2315_RESET, 0, AR2315_RESET_PCIDMA);
-+      msleep(10);
-+
-+      reg &= ~AR2315_RESET_PCIDMA;
-+      ar231x_write_reg(AR2315_RESET, reg);
-+      msleep(10);
-+
-+      ar231x_mask_reg(AR2315_ENDIAN_CTL, 0,
-+              AR2315_CONFIG_PCIAHB | AR2315_CONFIG_PCIAHB_BRIDGE);
-+
-+      ar231x_write_reg(AR2315_PCICLK, AR2315_PCICLK_PLLC_CLKM |
-+              (AR2315_PCICLK_IN_FREQ_DIV_6 << AR2315_PCICLK_DIV_S));
-+      ar231x_mask_reg(AR2315_AHB_ARB_CTL, 0, AR2315_ARB_PCI);
-+      ar231x_mask_reg(AR2315_IF_CTL, AR2315_IF_PCI_CLK_MASK | AR2315_IF_MASK,
-+              AR2315_IF_PCI | AR2315_IF_PCI_HOST | AR2315_IF_PCI_INTR |
-+               (AR2315_IF_PCI_CLK_OUTPUT_CLK << AR2315_IF_PCI_CLK_SHIFT));
-+
-+      /* Reset the PCI bus by setting bits 5-4 in PCI_MCFG */
-+      ar231x_mask_reg(AR2315_PCI_MISC_CONFIG, AR2315_PCIMISC_RST_MODE,
-+              AR2315_PCIRST_LOW);
-+      msleep(100);
-+
-+      /* Bring the PCI out of reset */
-+      ar231x_mask_reg(AR2315_PCI_MISC_CONFIG, AR2315_PCIMISC_RST_MODE,
-+              AR2315_PCIRST_HIGH | AR2315_PCICACHE_DIS | 0x8);
-+
-+      ar231x_write_reg(AR2315_PCI_UNCACHE_CFG,
-+                      0x1E | /* 1GB uncached */
-+                      (1 << 5) | /* Enable uncached */
-+                      (0x2 << 30) /* Base: 0x80000000 */
-+      );
-+      ar231x_read_reg(AR2315_PCI_UNCACHE_CFG);
-+
-+      msleep(500);
-+
-+      /* dirty hack - anyone with a datasheet that knows the memory map ? */
-+      ioport_resource.start = 0x10000000;
-+      ioport_resource.end = 0xffffffff;
-+      iomem_resource.start = 0x10000000;
-+      iomem_resource.end = 0xffffffff;
-+
-+      register_pci_controller(&ar231x_pci_controller);
-+
-+      return 0;
-+}
-+
-+arch_initcall(ar2315_pci_init);
---- a/arch/mips/ar231x/Kconfig
-+++ b/arch/mips/ar231x/Kconfig
-@@ -15,3 +15,13 @@ config ATHEROS_AR2315
-       select SYS_SUPPORTS_BIG_ENDIAN
-       select GENERIC_GPIO
-       default y
-+
-+config ATHEROS_AR2315_PCI
-+      bool "PCI support"
-+      depends on ATHEROS_AR2315
-+      select HW_HAS_PCI
-+      select PCI
-+      select USB_ARCH_HAS_HCD
-+      select USB_ARCH_HAS_OHCI
-+      select USB_ARCH_HAS_EHCI
-+      default y
---- a/arch/mips/ar231x/ar2315.c
-+++ b/arch/mips/ar231x/ar2315.c
-@@ -63,6 +63,27 @@ static inline void ar2315_gpio_irq(void)
-               do_IRQ(AR531X_GPIO_IRQ_BASE + bit);
- }
-+#ifdef CONFIG_ATHEROS_AR2315_PCI
-+static inline void pci_abort_irq(void)
-+{
-+      ar231x_write_reg(AR2315_PCI_INT_STATUS, AR2315_PCI_ABORT_INT);
-+}
-+
-+static inline void pci_ack_irq(void)
-+{
-+      ar231x_write_reg(AR2315_PCI_INT_STATUS, AR2315_PCI_EXT_INT);
-+}
-+
-+void ar2315_pci_irq(int irq)
-+{
-+      if (ar231x_read_reg(AR2315_PCI_INT_STATUS) == AR2315_PCI_ABORT_INT)
-+              pci_abort_irq();
-+      else {
-+              do_IRQ(irq);
-+              pci_ack_irq();
-+      }
-+}
-+#endif /* CONFIG_ATHEROS_AR2315_PCI */
- /*
-  * Called when an interrupt is received, this function
-@@ -81,6 +102,10 @@ ar2315_irq_dispatch(void)
-               do_IRQ(AR2315_IRQ_WLAN0_INTRS);
-       else if (pending & CAUSEF_IP4)
-               do_IRQ(AR2315_IRQ_ENET0_INTRS);
-+#ifdef CONFIG_ATHEROS_AR2315_PCI
-+      else if (pending & CAUSEF_IP5)
-+              ar2315_pci_irq(AR2315_IRQ_LCBUS_PCI);
-+#endif
-       else if (pending & CAUSEF_IP2) {
-               unsigned int misc_intr = ar231x_read_reg(AR2315_ISR) & ar231x_read_reg(AR2315_IMR);
diff --git a/target/linux/atheros/patches-2.6.33/110-ar2313_ethernet.patch b/target/linux/atheros/patches-2.6.33/110-ar2313_ethernet.patch
deleted file mode 100644 (file)
index 6ce948e..0000000
+++ /dev/null
@@ -1,1596 +0,0 @@
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -359,6 +359,12 @@ config AX88796_93CX6
-       help
-         Select this if your platform comes with an external 93CX6 eeprom.
-+config AR231X_ETHERNET
-+      tristate "AR231x Ethernet support"
-+      depends on ATHEROS_AR231X
-+      help
-+        Support for the AR231x/531x ethernet controller
-+
- config MACE
-       tristate "MACE (Power Mac ethernet) support"
-       depends on PPC_PMAC && PPC32
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -216,6 +216,7 @@ obj-$(CONFIG_EQUALIZER) += eql.o
- obj-$(CONFIG_KORINA) += korina.o
- obj-$(CONFIG_MIPS_JAZZ_SONIC) += jazzsonic.o
- obj-$(CONFIG_MIPS_AU1X00_ENET) += au1000_eth.o
-+obj-$(CONFIG_AR231X_ETHERNET) += ar231x.o
- obj-$(CONFIG_MIPS_SIM_NET) += mipsnet.o
- obj-$(CONFIG_SGI_IOC3_ETH) += ioc3-eth.o
- obj-$(CONFIG_DECLANCE) += declance.o
---- /dev/null
-+++ b/drivers/net/ar231x.c
-@@ -0,0 +1,1263 @@
-+/*
-+ * ar231x.c: Linux driver for the Atheros AR231x Ethernet device.
-+ *
-+ * Copyright (C) 2004 by Sameer Dekate <sdekate@arubanetworks.com>
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+ *
-+ * Thanks to Atheros for providing hardware and documentation
-+ * enabling me to write this 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.
-+ *
-+ * Additional credits:
-+ *    This code is taken from John Taylor's Sibyte driver and then
-+ *    modified for the AR2313.
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/version.h>
-+#include <linux/types.h>
-+#include <linux/errno.h>
-+#include <linux/ioport.h>
-+#include <linux/pci.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/skbuff.h>
-+#include <linux/init.h>
-+#include <linux/delay.h>
-+#include <linux/mm.h>
-+#include <linux/highmem.h>
-+#include <linux/sockios.h>
-+#include <linux/pkt_sched.h>
-+#include <linux/mii.h>
-+#include <linux/phy.h>
-+#include <linux/ethtool.h>
-+#include <linux/ctype.h>
-+#include <linux/platform_device.h>
-+
-+#include <net/sock.h>
-+#include <net/ip.h>
-+
-+#include <asm/system.h>
-+#include <asm/io.h>
-+#include <asm/irq.h>
-+#include <asm/byteorder.h>
-+#include <asm/uaccess.h>
-+#include <asm/bootinfo.h>
-+
-+#define AR2313_MTU                     1692
-+#define AR2313_PRIOS                   1
-+#define AR2313_QUEUES                  (2*AR2313_PRIOS)
-+#define AR2313_DESCR_ENTRIES           64
-+
-+
-+#ifndef min
-+#define min(a,b)      (((a)<(b))?(a):(b))
-+#endif
-+
-+#ifndef SMP_CACHE_BYTES
-+#define SMP_CACHE_BYTES       L1_CACHE_BYTES
-+#endif
-+
-+#define AR2313_MBOX_SET_BIT  0x8
-+
-+#include "ar231x.h"
-+
-+/*
-+ * New interrupt handler strategy:
-+ *
-+ * An old interrupt handler worked using the traditional method of
-+ * replacing an skbuff with a new one when a packet arrives. However
-+ * the rx rings do not need to contain a static number of buffer
-+ * descriptors, thus it makes sense to move the memory allocation out
-+ * of the main interrupt handler and do it in a bottom half handler
-+ * and only allocate new buffers when the number of buffers in the
-+ * ring is below a certain threshold. In order to avoid starving the
-+ * NIC under heavy load it is however necessary to force allocation
-+ * when hitting a minimum threshold. The strategy for alloction is as
-+ * follows:
-+ *
-+ *     RX_LOW_BUF_THRES    - allocate buffers in the bottom half
-+ *     RX_PANIC_LOW_THRES  - we are very low on buffers, allocate
-+ *                           the buffers in the interrupt handler
-+ *     RX_RING_THRES       - maximum number of buffers in the rx ring
-+ *
-+ * One advantagous side effect of this allocation approach is that the
-+ * entire rx processing can be done without holding any spin lock
-+ * since the rx rings and registers are totally independent of the tx
-+ * ring and its registers.  This of course includes the kmalloc's of
-+ * new skb's. Thus start_xmit can run in parallel with rx processing
-+ * and the memory allocation on SMP systems.
-+ *
-+ * Note that running the skb reallocation in a bottom half opens up
-+ * another can of races which needs to be handled properly. In
-+ * particular it can happen that the interrupt handler tries to run
-+ * the reallocation while the bottom half is either running on another
-+ * CPU or was interrupted on the same CPU. To get around this the
-+ * driver uses bitops to prevent the reallocation routines from being
-+ * reentered.
-+ *
-+ * TX handling can also be done without holding any spin lock, wheee
-+ * this is fun! since tx_csm is only written to by the interrupt
-+ * handler.
-+ */
-+
-+/*
-+ * Threshold values for RX buffer allocation - the low water marks for
-+ * when to start refilling the rings are set to 75% of the ring
-+ * sizes. It seems to make sense to refill the rings entirely from the
-+ * intrrupt handler once it gets below the panic threshold, that way
-+ * we don't risk that the refilling is moved to another CPU when the
-+ * one running the interrupt handler just got the slab code hot in its
-+ * cache.
-+ */
-+#define RX_RING_SIZE          AR2313_DESCR_ENTRIES
-+#define RX_PANIC_THRES                (RX_RING_SIZE/4)
-+#define RX_LOW_THRES          ((3*RX_RING_SIZE)/4)
-+#define CRC_LEN                 4
-+#define RX_OFFSET               2
-+
-+#if defined(CONFIG_VLAN_8021Q) || defined(CONFIG_VLAN_8021Q_MODULE)
-+#define VLAN_HDR                4
-+#else
-+#define VLAN_HDR                0
-+#endif
-+
-+#define AR2313_BUFSIZE                (AR2313_MTU + VLAN_HDR + ETH_HLEN + CRC_LEN + RX_OFFSET)
-+
-+#ifdef MODULE
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("Sameer Dekate <sdekate@arubanetworks.com>, Imre Kaloz <kaloz@openwrt.org>, Felix Fietkau <nbd@openwrt.org>");
-+MODULE_DESCRIPTION("AR231x Ethernet driver");
-+#endif
-+
-+#define virt_to_phys(x) ((u32)(x) & 0x1fffffff)
-+
-+// prototypes
-+static void ar231x_halt(struct net_device *dev);
-+static void rx_tasklet_func(unsigned long data);
-+static void rx_tasklet_cleanup(struct net_device *dev);
-+static void ar231x_multicast_list(struct net_device *dev);
-+
-+static int ar231x_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum);
-+static int ar231x_mdiobus_write(struct mii_bus *bus, int phy_addr, int regnum, u16 value);
-+static int ar231x_mdiobus_reset(struct mii_bus *bus);
-+static int ar231x_mdiobus_probe (struct net_device *dev);
-+static void ar231x_adjust_link(struct net_device *dev);
-+
-+#ifndef ERR
-+#define ERR(fmt, args...) printk("%s: " fmt, __func__, ##args)
-+#endif
-+
-+static const struct net_device_ops ar231x_ops = {
-+      .ndo_open = ar231x_open,
-+      .ndo_stop = ar231x_close,
-+      .ndo_start_xmit = ar231x_start_xmit,
-+      .ndo_set_multicast_list = ar231x_multicast_list,
-+      .ndo_do_ioctl = ar231x_ioctl,
-+};
-+
-+int __init ar231x_probe(struct platform_device *pdev)
-+{
-+      struct net_device *dev;
-+      struct ar231x_private *sp;
-+      struct resource *res;
-+      unsigned long ar_eth_base;
-+      char buf[64];
-+
-+      dev = alloc_etherdev(sizeof(struct ar231x_private));
-+
-+      if (dev == NULL) {
-+              printk(KERN_ERR
-+                         "ar231x: Unable to allocate net_device structure!\n");
-+              return -ENOMEM;
-+      }
-+
-+      platform_set_drvdata(pdev, dev);
-+
-+      sp = netdev_priv(dev);
-+      sp->dev = dev;
-+      sp->cfg = pdev->dev.platform_data;
-+
-+      sprintf(buf, "eth%d_membase", pdev->id);
-+      res = platform_get_resource_byname(pdev, IORESOURCE_MEM, buf);
-+      if (!res)
-+              return -ENODEV;
-+
-+      sp->link = 0;
-+      ar_eth_base = res->start;
-+
-+      sprintf(buf, "eth%d_irq", pdev->id);
-+      dev->irq = platform_get_irq_byname(pdev, buf);
-+
-+      spin_lock_init(&sp->lock);
-+
-+      dev->features |= NETIF_F_HIGHDMA;
-+      dev->netdev_ops = &ar231x_ops;
-+
-+      tasklet_init(&sp->rx_tasklet, rx_tasklet_func, (unsigned long) dev);
-+      tasklet_disable(&sp->rx_tasklet);
-+
-+      sp->eth_regs =
-+              ioremap_nocache(virt_to_phys(ar_eth_base), sizeof(*sp->eth_regs));
-+      if (!sp->eth_regs) {
-+              printk("Can't remap eth registers\n");
-+              return (-ENXIO);
-+      }
-+
-+      /*
-+       * When there's only one MAC, PHY regs are typically on ENET0,
-+       * even though the MAC might be on ENET1.
-+       * Needto remap PHY regs separately in this case
-+       */
-+      if (virt_to_phys(ar_eth_base) == virt_to_phys(sp->phy_regs))
-+              sp->phy_regs = sp->eth_regs;
-+      else {
-+              sp->phy_regs =
-+                      ioremap_nocache(virt_to_phys(sp->cfg->phy_base),
-+                                                      sizeof(*sp->phy_regs));
-+              if (!sp->phy_regs) {
-+                      printk("Can't remap phy registers\n");
-+                      return (-ENXIO);
-+              }
-+      }
-+
-+      sp->dma_regs =
-+              ioremap_nocache(virt_to_phys(ar_eth_base + 0x1000),
-+                                              sizeof(*sp->dma_regs));
-+      dev->base_addr = (unsigned int) sp->dma_regs;
-+      if (!sp->dma_regs) {
-+              printk("Can't remap DMA registers\n");
-+              return (-ENXIO);
-+      }
-+
-+      sp->int_regs = ioremap_nocache(virt_to_phys(sp->cfg->reset_base), 4);
-+      if (!sp->int_regs) {
-+              printk("Can't remap INTERRUPT registers\n");
-+              return (-ENXIO);
-+      }
-+
-+      strncpy(sp->name, "Atheros AR231x", sizeof(sp->name) - 1);
-+      sp->name[sizeof(sp->name) - 1] = '\0';
-+      memcpy(dev->dev_addr, sp->cfg->macaddr, 6);
-+
-+      if (ar231x_init(dev)) {
-+              /*
-+               * ar231x_init() calls ar231x_init_cleanup() on error.
-+               */
-+              kfree(dev);
-+              return -ENODEV;
-+      }
-+
-+      if (register_netdev(dev)) {
-+              printk("%s: register_netdev failed\n", __func__);
-+              return -1;
-+      }
-+
-+      printk("%s: %s: %02x:%02x:%02x:%02x:%02x:%02x, irq %d\n",
-+                 dev->name, sp->name,
-+                 dev->dev_addr[0], dev->dev_addr[1], dev->dev_addr[2],
-+                 dev->dev_addr[3], dev->dev_addr[4], dev->dev_addr[5], dev->irq);
-+
-+      sp->mii_bus = mdiobus_alloc();
-+      if (sp->mii_bus == NULL)
-+              return -1;
-+
-+      sp->mii_bus->priv = dev;
-+      sp->mii_bus->read = ar231x_mdiobus_read;
-+      sp->mii_bus->write = ar231x_mdiobus_write;
-+      sp->mii_bus->reset = ar231x_mdiobus_reset;
-+      sp->mii_bus->name = "ar231x_eth_mii";
-+      snprintf(sp->mii_bus->id, MII_BUS_ID_SIZE, "%d", pdev->id);
-+      sp->mii_bus->irq = kmalloc(sizeof(int), GFP_KERNEL);
-+      *sp->mii_bus->irq = PHY_POLL;
-+
-+      mdiobus_register(sp->mii_bus);
-+
-+      if (ar231x_mdiobus_probe(dev) != 0) {
-+              printk(KERN_ERR "%s: mdiobus_probe failed\n", dev->name);
-+              rx_tasklet_cleanup(dev);
-+              ar231x_init_cleanup(dev);
-+              unregister_netdev(dev);
-+              kfree(dev);
-+              return -ENODEV;
-+      }
-+
-+      /* start link poll timer */
-+      ar231x_setup_timer(dev);
-+
-+      return 0;
-+}
-+
-+
-+static void ar231x_multicast_list(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      unsigned int filter;
-+
-+      filter = sp->eth_regs->mac_control;
-+
-+      if (dev->flags & IFF_PROMISC)
-+              filter |= MAC_CONTROL_PR;
-+      else
-+              filter &= ~MAC_CONTROL_PR;
-+      if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 0))
-+              filter |= MAC_CONTROL_PM;
-+      else
-+              filter &= ~MAC_CONTROL_PM;
-+
-+      sp->eth_regs->mac_control = filter;
-+}
-+
-+static void rx_tasklet_cleanup(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+
-+      /*
-+       * Tasklet may be scheduled. Need to get it removed from the list
-+       * since we're about to free the struct.
-+       */
-+
-+      sp->unloading = 1;
-+      tasklet_enable(&sp->rx_tasklet);
-+      tasklet_kill(&sp->rx_tasklet);
-+}
-+
-+static int __devexit ar231x_remove(struct platform_device *pdev)
-+{
-+      struct net_device *dev = platform_get_drvdata(pdev);
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      rx_tasklet_cleanup(dev);
-+      ar231x_init_cleanup(dev);
-+      unregister_netdev(dev);
-+      mdiobus_unregister(sp->mii_bus);
-+      mdiobus_free(sp->mii_bus);
-+      kfree(dev);
-+      return 0;
-+}
-+
-+
-+/*
-+ * Restart the AR2313 ethernet controller.
-+ */
-+static int ar231x_restart(struct net_device *dev)
-+{
-+      /* disable interrupts */
-+      disable_irq(dev->irq);
-+
-+      /* stop mac */
-+      ar231x_halt(dev);
-+
-+      /* initialize */
-+      ar231x_init(dev);
-+
-+      /* enable interrupts */
-+      enable_irq(dev->irq);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver ar231x_driver = {
-+      .driver.name = "ar231x-eth",
-+      .probe = ar231x_probe,
-+      .remove = __devexit_p(ar231x_remove),
-+};
-+
-+int __init ar231x_module_init(void)
-+{
-+      return platform_driver_register(&ar231x_driver);
-+}
-+
-+void __exit ar231x_module_cleanup(void)
-+{
-+      platform_driver_unregister(&ar231x_driver);
-+}
-+
-+module_init(ar231x_module_init);
-+module_exit(ar231x_module_cleanup);
-+
-+
-+static void ar231x_free_descriptors(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      if (sp->rx_ring != NULL) {
-+              kfree((void *) KSEG0ADDR(sp->rx_ring));
-+              sp->rx_ring = NULL;
-+              sp->tx_ring = NULL;
-+      }
-+}
-+
-+
-+static int ar231x_allocate_descriptors(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      int size;
-+      int j;
-+      ar231x_descr_t *space;
-+
-+      if (sp->rx_ring != NULL) {
-+              printk("%s: already done.\n", __FUNCTION__);
-+              return 0;
-+      }
-+
-+      size =
-+              (sizeof(ar231x_descr_t) * (AR2313_DESCR_ENTRIES * AR2313_QUEUES));
-+      space = kmalloc(size, GFP_KERNEL);
-+      if (space == NULL)
-+              return 1;
-+
-+      /* invalidate caches */
-+      dma_cache_inv((unsigned int) space, size);
-+
-+      /* now convert pointer to KSEG1 */
-+      space = (ar231x_descr_t *) KSEG1ADDR(space);
-+
-+      memset((void *) space, 0, size);
-+
-+      sp->rx_ring = space;
-+      space += AR2313_DESCR_ENTRIES;
-+
-+      sp->tx_ring = space;
-+      space += AR2313_DESCR_ENTRIES;
-+
-+      /* Initialize the transmit Descriptors */
-+      for (j = 0; j < AR2313_DESCR_ENTRIES; j++) {
-+              ar231x_descr_t *td = &sp->tx_ring[j];
-+              td->status = 0;
-+              td->devcs = DMA_TX1_CHAINED;
-+              td->addr = 0;
-+              td->descr =
-+                      virt_to_phys(&sp->
-+                                               tx_ring[(j + 1) & (AR2313_DESCR_ENTRIES - 1)]);
-+      }
-+
-+      return 0;
-+}
-+
-+
-+/*
-+ * Generic cleanup handling data allocated during init. Used when the
-+ * module is unloaded or if an error occurs during initialization
-+ */
-+static void ar231x_init_cleanup(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      struct sk_buff *skb;
-+      int j;
-+
-+      ar231x_free_descriptors(dev);
-+
-+      if (sp->eth_regs)
-+              iounmap((void *) sp->eth_regs);
-+      if (sp->dma_regs)
-+              iounmap((void *) sp->dma_regs);
-+
-+      if (sp->rx_skb) {
-+              for (j = 0; j < AR2313_DESCR_ENTRIES; j++) {
-+                      skb = sp->rx_skb[j];
-+                      if (skb) {
-+                              sp->rx_skb[j] = NULL;
-+                              dev_kfree_skb(skb);
-+                      }
-+              }
-+              kfree(sp->rx_skb);
-+              sp->rx_skb = NULL;
-+      }
-+
-+      if (sp->tx_skb) {
-+              for (j = 0; j < AR2313_DESCR_ENTRIES; j++) {
-+                      skb = sp->tx_skb[j];
-+                      if (skb) {
-+                              sp->tx_skb[j] = NULL;
-+                              dev_kfree_skb(skb);
-+                      }
-+              }
-+              kfree(sp->tx_skb);
-+              sp->tx_skb = NULL;
-+      }
-+}
-+
-+static int ar231x_setup_timer(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+
-+      init_timer(&sp->link_timer);
-+
-+      sp->link_timer.function = ar231x_link_timer_fn;
-+      sp->link_timer.data = (int) dev;
-+      sp->link_timer.expires = jiffies + HZ;
-+
-+      add_timer(&sp->link_timer);
-+      return 0;
-+
-+}
-+
-+static void ar231x_link_timer_fn(unsigned long data)
-+{
-+      struct net_device *dev = (struct net_device *) data;
-+      struct ar231x_private *sp = netdev_priv(dev);
-+
-+      // see if the link status changed
-+      // This was needed to make sure we set the PHY to the
-+      // autonegotiated value of half or full duplex.
-+      ar231x_check_link(dev);
-+
-+      // Loop faster when we don't have link.
-+      // This was needed to speed up the AP bootstrap time.
-+      if (sp->link == 0) {
-+              mod_timer(&sp->link_timer, jiffies + HZ / 2);
-+      } else {
-+              mod_timer(&sp->link_timer, jiffies + LINK_TIMER);
-+      }
-+}
-+
-+static void ar231x_check_link(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      u16 phyData;
-+
-+      phyData = ar231x_mdiobus_read(sp->mii_bus, sp->phy, MII_BMSR);
-+      if (sp->phyData != phyData) {
-+              if (phyData & BMSR_LSTATUS) {
-+                      /* link is present, ready link partner ability to deterine
-+                         duplexity */
-+                      int duplex = 0;
-+                      u16 reg;
-+
-+                      sp->link = 1;
-+                      reg = ar231x_mdiobus_read(sp->mii_bus, sp->phy, MII_BMCR);
-+                      if (reg & BMCR_ANENABLE) {
-+                              /* auto neg enabled */
-+                              reg = ar231x_mdiobus_read(sp->mii_bus, sp->phy, MII_LPA);
-+                              duplex = (reg & (LPA_100FULL | LPA_10FULL)) ? 1 : 0;
-+                      } else {
-+                              /* no auto neg, just read duplex config */
-+                              duplex = (reg & BMCR_FULLDPLX) ? 1 : 0;
-+                      }
-+
-+                      printk(KERN_INFO "%s: Configuring MAC for %s duplex\n",
-+                                 dev->name, (duplex) ? "full" : "half");
-+
-+                      if (duplex) {
-+                              /* full duplex */
-+                              sp->eth_regs->mac_control =
-+                                      ((sp->eth_regs->
-+                                        mac_control | MAC_CONTROL_F) & ~MAC_CONTROL_DRO);
-+                      } else {
-+                              /* half duplex */
-+                              sp->eth_regs->mac_control =
-+                                      ((sp->eth_regs->
-+                                        mac_control | MAC_CONTROL_DRO) & ~MAC_CONTROL_F);
-+                      }
-+              } else {
-+                      /* no link */
-+                      sp->link = 0;
-+              }
-+              sp->phyData = phyData;
-+      }
-+}
-+
-+static int ar231x_reset_reg(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      unsigned int ethsal, ethsah;
-+      unsigned int flags;
-+
-+      *sp->int_regs |= sp->cfg->reset_mac;
-+      mdelay(10);
-+      *sp->int_regs &= ~sp->cfg->reset_mac;
-+      mdelay(10);
-+      *sp->int_regs |= sp->cfg->reset_phy;
-+      mdelay(10);
-+      *sp->int_regs &= ~sp->cfg->reset_phy;
-+      mdelay(10);
-+
-+      sp->dma_regs->bus_mode = (DMA_BUS_MODE_SWR);
-+      mdelay(10);
-+      sp->dma_regs->bus_mode =
-+              ((32 << DMA_BUS_MODE_PBL_SHIFT) | DMA_BUS_MODE_BLE);
-+
-+      /* enable interrupts */
-+      sp->dma_regs->intr_ena = (DMA_STATUS_AIS |
-+                                                        DMA_STATUS_NIS |
-+                                                        DMA_STATUS_RI |
-+                                                        DMA_STATUS_TI | DMA_STATUS_FBE);
-+      sp->dma_regs->xmt_base = virt_to_phys(sp->tx_ring);
-+      sp->dma_regs->rcv_base = virt_to_phys(sp->rx_ring);
-+      sp->dma_regs->control =
-+              (DMA_CONTROL_SR | DMA_CONTROL_ST | DMA_CONTROL_SF);
-+
-+      sp->eth_regs->flow_control = (FLOW_CONTROL_FCE);
-+      sp->eth_regs->vlan_tag = (0x8100);
-+
-+      /* Enable Ethernet Interface */
-+      flags = (MAC_CONTROL_TE |       /* transmit enable */
-+                       MAC_CONTROL_PM |       /* pass mcast */
-+                       MAC_CONTROL_F |        /* full duplex */
-+                       MAC_CONTROL_HBD);      /* heart beat disabled */
-+
-+      if (dev->flags & IFF_PROMISC) { /* set promiscuous mode */
-+              flags |= MAC_CONTROL_PR;
-+      }
-+      sp->eth_regs->mac_control = flags;
-+
-+      /* Set all Ethernet station address registers to their initial values */
-+      ethsah = ((((u_int) (dev->dev_addr[5]) << 8) & (u_int) 0x0000FF00) |
-+                        (((u_int) (dev->dev_addr[4]) << 0) & (u_int) 0x000000FF));
-+
-+      ethsal = ((((u_int) (dev->dev_addr[3]) << 24) & (u_int) 0xFF000000) |
-+                        (((u_int) (dev->dev_addr[2]) << 16) & (u_int) 0x00FF0000) |
-+                        (((u_int) (dev->dev_addr[1]) << 8) & (u_int) 0x0000FF00) |
-+                        (((u_int) (dev->dev_addr[0]) << 0) & (u_int) 0x000000FF));
-+
-+      sp->eth_regs->mac_addr[0] = ethsah;
-+      sp->eth_regs->mac_addr[1] = ethsal;
-+
-+      mdelay(10);
-+
-+      return (0);
-+}
-+
-+
-+static int ar231x_init(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      int ecode = 0;
-+
-+      /*
-+       * Allocate descriptors
-+       */
-+      if (ar231x_allocate_descriptors(dev)) {
-+              printk("%s: %s: ar231x_allocate_descriptors failed\n",
-+                         dev->name, __FUNCTION__);
-+              ecode = -EAGAIN;
-+              goto init_error;
-+      }
-+
-+      /*
-+       * Get the memory for the skb rings.
-+       */
-+      if (sp->rx_skb == NULL) {
-+              sp->rx_skb =
-+                      kmalloc(sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES,
-+                                      GFP_KERNEL);
-+              if (!(sp->rx_skb)) {
-+                      printk("%s: %s: rx_skb kmalloc failed\n",
-+                                 dev->name, __FUNCTION__);
-+                      ecode = -EAGAIN;
-+                      goto init_error;
-+              }
-+      }
-+      memset(sp->rx_skb, 0, sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES);
-+
-+      if (sp->tx_skb == NULL) {
-+              sp->tx_skb =
-+                      kmalloc(sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES,
-+                                      GFP_KERNEL);
-+              if (!(sp->tx_skb)) {
-+                      printk("%s: %s: tx_skb kmalloc failed\n",
-+                                 dev->name, __FUNCTION__);
-+                      ecode = -EAGAIN;
-+                      goto init_error;
-+              }
-+      }
-+      memset(sp->tx_skb, 0, sizeof(struct sk_buff *) * AR2313_DESCR_ENTRIES);
-+
-+      /*
-+       * Set tx_csm before we start receiving interrupts, otherwise
-+       * the interrupt handler might think it is supposed to process
-+       * tx ints before we are up and running, which may cause a null
-+       * pointer access in the int handler.
-+       */
-+      sp->rx_skbprd = 0;
-+      sp->cur_rx = 0;
-+      sp->tx_prd = 0;
-+      sp->tx_csm = 0;
-+
-+      /*
-+       * Zero the stats before starting the interface
-+       */
-+      memset(&dev->stats, 0, sizeof(dev->stats));
-+
-+      /*
-+       * We load the ring here as there seem to be no way to tell the
-+       * firmware to wipe the ring without re-initializing it.
-+       */
-+      ar231x_load_rx_ring(dev, RX_RING_SIZE);
-+
-+      /*
-+       * Init hardware
-+       */
-+      ar231x_reset_reg(dev);
-+
-+      /*
-+       * Get the IRQ
-+       */
-+      ecode =
-+              request_irq(dev->irq, &ar231x_interrupt,
-+                                      IRQF_DISABLED | IRQF_SAMPLE_RANDOM,
-+                                      dev->name, dev);
-+      if (ecode) {
-+              printk(KERN_WARNING "%s: %s: Requested IRQ %d is busy\n",
-+                         dev->name, __FUNCTION__, dev->irq);
-+              goto init_error;
-+      }
-+
-+
-+      tasklet_enable(&sp->rx_tasklet);
-+
-+      return 0;
-+
-+  init_error:
-+      ar231x_init_cleanup(dev);
-+      return ecode;
-+}
-+
-+/*
-+ * Load the rx ring.
-+ *
-+ * Loading rings is safe without holding the spin lock since this is
-+ * done only before the device is enabled, thus no interrupts are
-+ * generated and by the interrupt handler/tasklet handler.
-+ */
-+static void ar231x_load_rx_ring(struct net_device *dev, int nr_bufs)
-+{
-+
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      short i, idx;
-+
-+      idx = sp->rx_skbprd;
-+
-+      for (i = 0; i < nr_bufs; i++) {
-+              struct sk_buff *skb;
-+              ar231x_descr_t *rd;
-+
-+              if (sp->rx_skb[idx])
-+                      break;
-+
-+              skb = netdev_alloc_skb(dev, AR2313_BUFSIZE);
-+              if (!skb) {
-+                      printk("\n\n\n\n %s: No memory in system\n\n\n\n",
-+                                 __FUNCTION__);
-+                      break;
-+              }
-+
-+              /*
-+               * Make sure IP header starts on a fresh cache line.
-+               */
-+              skb->dev = dev;
-+              skb_reserve(skb, RX_OFFSET);
-+              sp->rx_skb[idx] = skb;
-+
-+              rd = (ar231x_descr_t *) & sp->rx_ring[idx];
-+
-+              /* initialize dma descriptor */
-+              rd->devcs = ((AR2313_BUFSIZE << DMA_RX1_BSIZE_SHIFT) |
-+                                       DMA_RX1_CHAINED);
-+              rd->addr = virt_to_phys(skb->data);
-+              rd->descr =
-+                      virt_to_phys(&sp->
-+                                               rx_ring[(idx + 1) & (AR2313_DESCR_ENTRIES - 1)]);
-+              rd->status = DMA_RX_OWN;
-+
-+              idx = DSC_NEXT(idx);
-+      }
-+
-+      if (i)
-+              sp->rx_skbprd = idx;
-+
-+      return;
-+}
-+
-+#define AR2313_MAX_PKTS_PER_CALL        64
-+
-+static int ar231x_rx_int(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      struct sk_buff *skb, *skb_new;
-+      ar231x_descr_t *rxdesc;
-+      unsigned int status;
-+      u32 idx;
-+      int pkts = 0;
-+      int rval;
-+
-+      idx = sp->cur_rx;
-+
-+      /* process at most the entire ring and then wait for another interrupt
-+       */
-+      while (1) {
-+
-+              rxdesc = &sp->rx_ring[idx];
-+              status = rxdesc->status;
-+              if (status & DMA_RX_OWN) {
-+                      /* SiByte owns descriptor or descr not yet filled in */
-+                      rval = 0;
-+                      break;
-+              }
-+
-+              if (++pkts > AR2313_MAX_PKTS_PER_CALL) {
-+                      rval = 1;
-+                      break;
-+              }
-+
-+              if ((status & DMA_RX_ERROR) && !(status & DMA_RX_LONG)) {
-+                      dev->stats.rx_errors++;
-+                      dev->stats.rx_dropped++;
-+
-+                      /* add statistics counters */
-+                      if (status & DMA_RX_ERR_CRC)
-+                              dev->stats.rx_crc_errors++;
-+                      if (status & DMA_RX_ERR_COL)
-+                              dev->stats.rx_over_errors++;
-+                      if (status & DMA_RX_ERR_LENGTH)
-+                              dev->stats.rx_length_errors++;
-+                      if (status & DMA_RX_ERR_RUNT)
-+                              dev->stats.rx_over_errors++;
-+                      if (status & DMA_RX_ERR_DESC)
-+                              dev->stats.rx_over_errors++;
-+
-+              } else {
-+                      /* alloc new buffer. */
-+                      skb_new = netdev_alloc_skb(dev, AR2313_BUFSIZE + RX_OFFSET);
-+                      if (skb_new != NULL) {
-+
-+                              skb = sp->rx_skb[idx];
-+                              /* set skb */
-+                              skb_put(skb,
-+                                              ((status >> DMA_RX_LEN_SHIFT) & 0x3fff) - CRC_LEN);
-+
-+                              dev->stats.rx_bytes += skb->len;
-+                              skb->protocol = eth_type_trans(skb, dev);
-+                              /* pass the packet to upper layers */
-+                              netif_rx(skb);
-+
-+                              skb_new->dev = dev;
-+                              /* 16 bit align */
-+                              skb_reserve(skb_new, RX_OFFSET);
-+                              /* reset descriptor's curr_addr */
-+                              rxdesc->addr = virt_to_phys(skb_new->data);
-+
-+                              dev->stats.rx_packets++;
-+                              sp->rx_skb[idx] = skb_new;
-+                      } else {
-+                              dev->stats.rx_dropped++;
-+                      }
-+              }
-+
-+              rxdesc->devcs = ((AR2313_BUFSIZE << DMA_RX1_BSIZE_SHIFT) |
-+                                               DMA_RX1_CHAINED);
-+              rxdesc->status = DMA_RX_OWN;
-+
-+              idx = DSC_NEXT(idx);
-+      }
-+
-+      sp->cur_rx = idx;
-+
-+      return rval;
-+}
-+
-+
-+static void ar231x_tx_int(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      u32 idx;
-+      struct sk_buff *skb;
-+      ar231x_descr_t *txdesc;
-+      unsigned int status = 0;
-+
-+      idx = sp->tx_csm;
-+
-+      while (idx != sp->tx_prd) {
-+              txdesc = &sp->tx_ring[idx];
-+
-+              if ((status = txdesc->status) & DMA_TX_OWN) {
-+                      /* ar231x dma still owns descr */
-+                      break;
-+              }
-+              /* done with this descriptor */
-+              dma_unmap_single(NULL, txdesc->addr,
-+                                               txdesc->devcs & DMA_TX1_BSIZE_MASK,
-+                                               DMA_TO_DEVICE);
-+              txdesc->status = 0;
-+
-+              if (status & DMA_TX_ERROR) {
-+                      dev->stats.tx_errors++;
-+                      dev->stats.tx_dropped++;
-+                      if (status & DMA_TX_ERR_UNDER)
-+                              dev->stats.tx_fifo_errors++;
-+                      if (status & DMA_TX_ERR_HB)
-+                              dev->stats.tx_heartbeat_errors++;
-+                      if (status & (DMA_TX_ERR_LOSS | DMA_TX_ERR_LINK))
-+                              dev->stats.tx_carrier_errors++;
-+                      if (status & (DMA_TX_ERR_LATE |
-+                                                DMA_TX_ERR_COL |
-+                                                DMA_TX_ERR_JABBER | DMA_TX_ERR_DEFER))
-+                              dev->stats.tx_aborted_errors++;
-+              } else {
-+                      /* transmit OK */
-+                      dev->stats.tx_packets++;
-+              }
-+
-+              skb = sp->tx_skb[idx];
-+              sp->tx_skb[idx] = NULL;
-+              idx = DSC_NEXT(idx);
-+              dev->stats.tx_bytes += skb->len;
-+              dev_kfree_skb_irq(skb);
-+      }
-+
-+      sp->tx_csm = idx;
-+
-+      return;
-+}
-+
-+
-+static void rx_tasklet_func(unsigned long data)
-+{
-+      struct net_device *dev = (struct net_device *) data;
-+      struct ar231x_private *sp = netdev_priv(dev);
-+
-+      if (sp->unloading) {
-+              return;
-+      }
-+
-+      if (ar231x_rx_int(dev)) {
-+              tasklet_hi_schedule(&sp->rx_tasklet);
-+      } else {
-+              unsigned long flags;
-+              spin_lock_irqsave(&sp->lock, flags);
-+              sp->dma_regs->intr_ena |= DMA_STATUS_RI;
-+              spin_unlock_irqrestore(&sp->lock, flags);
-+      }
-+}
-+
-+static void rx_schedule(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+
-+      sp->dma_regs->intr_ena &= ~DMA_STATUS_RI;
-+
-+      tasklet_hi_schedule(&sp->rx_tasklet);
-+}
-+
-+static irqreturn_t ar231x_interrupt(int irq, void *dev_id)
-+{
-+      struct net_device *dev = (struct net_device *) dev_id;
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      unsigned int status, enabled;
-+
-+      /* clear interrupt */
-+      /*
-+       * Don't clear RI bit if currently disabled.
-+       */
-+      status = sp->dma_regs->status;
-+      enabled = sp->dma_regs->intr_ena;
-+      sp->dma_regs->status = status & enabled;
-+
-+      if (status & DMA_STATUS_NIS) {
-+              /* normal status */
-+              /*
-+               * Don't schedule rx processing if interrupt
-+               * is already disabled.
-+               */
-+              if (status & enabled & DMA_STATUS_RI) {
-+                      /* receive interrupt */
-+                      rx_schedule(dev);
-+              }
-+              if (status & DMA_STATUS_TI) {
-+                      /* transmit interrupt */
-+                      ar231x_tx_int(dev);
-+              }
-+      }
-+
-+      /* abnormal status */
-+      if (status & (DMA_STATUS_FBE | DMA_STATUS_TPS)) {
-+              ar231x_restart(dev);
-+      }
-+      return IRQ_HANDLED;
-+}
-+
-+
-+static int ar231x_open(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      unsigned int ethsal, ethsah;
-+
-+      /* reset the hardware, in case the MAC address changed */
-+      ethsah = ((((u_int) (dev->dev_addr[5]) << 8) & (u_int) 0x0000FF00) |
-+                        (((u_int) (dev->dev_addr[4]) << 0) & (u_int) 0x000000FF));
-+
-+      ethsal = ((((u_int) (dev->dev_addr[3]) << 24) & (u_int) 0xFF000000) |
-+                        (((u_int) (dev->dev_addr[2]) << 16) & (u_int) 0x00FF0000) |
-+                        (((u_int) (dev->dev_addr[1]) << 8) & (u_int) 0x0000FF00) |
-+                        (((u_int) (dev->dev_addr[0]) << 0) & (u_int) 0x000000FF));
-+
-+      sp->eth_regs->mac_addr[0] = ethsah;
-+      sp->eth_regs->mac_addr[1] = ethsal;
-+
-+      mdelay(10);
-+
-+      dev->mtu = 1500;
-+      netif_start_queue(dev);
-+
-+      sp->eth_regs->mac_control |= MAC_CONTROL_RE;
-+
-+      return 0;
-+}
-+
-+static void ar231x_halt(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      int j;
-+
-+      tasklet_disable(&sp->rx_tasklet);
-+
-+      /* kill the MAC */
-+      sp->eth_regs->mac_control &= ~(MAC_CONTROL_RE | /* disable Receives */
-+                                                                 MAC_CONTROL_TE);     /* disable Transmits */
-+      /* stop dma */
-+      sp->dma_regs->control = 0;
-+      sp->dma_regs->bus_mode = DMA_BUS_MODE_SWR;
-+
-+      /* place phy and MAC in reset */
-+      *sp->int_regs |= (sp->cfg->reset_mac | sp->cfg->reset_phy);
-+
-+      /* free buffers on tx ring */
-+      for (j = 0; j < AR2313_DESCR_ENTRIES; j++) {
-+              struct sk_buff *skb;
-+              ar231x_descr_t *txdesc;
-+
-+              txdesc = &sp->tx_ring[j];
-+              txdesc->descr = 0;
-+
-+              skb = sp->tx_skb[j];
-+              if (skb) {
-+                      dev_kfree_skb(skb);
-+                      sp->tx_skb[j] = NULL;
-+              }
-+      }
-+}
-+
-+/*
-+ * close should do nothing. Here's why. It's called when
-+ * 'ifconfig bond0 down' is run. If it calls free_irq then
-+ * the irq is gone forever ! When bond0 is made 'up' again,
-+ * the ar231x_open () does not call request_irq (). Worse,
-+ * the call to ar231x_halt() generates a WDOG reset due to
-+ * the write to 'sp->int_regs' and the box reboots.
-+ * Commenting this out is good since it allows the
-+ * system to resume when bond0 is made up again.
-+ */
-+static int ar231x_close(struct net_device *dev)
-+{
-+#if 0
-+      /*
-+       * Disable interrupts
-+       */
-+      disable_irq(dev->irq);
-+
-+      /*
-+       * Without (or before) releasing irq and stopping hardware, this
-+       * is an absolute non-sense, by the way. It will be reset instantly
-+       * by the first irq.
-+       */
-+      netif_stop_queue(dev);
-+
-+      /* stop the MAC and DMA engines */
-+      ar231x_halt(dev);
-+
-+      /* release the interrupt */
-+      free_irq(dev->irq, dev);
-+
-+#endif
-+      return 0;
-+}
-+
-+static int ar231x_start_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      ar231x_descr_t *td;
-+      u32 idx;
-+
-+      idx = sp->tx_prd;
-+      td = &sp->tx_ring[idx];
-+
-+      if (td->status & DMA_TX_OWN) {
-+              /* free skbuf and lie to the caller that we sent it out */
-+              dev->stats.tx_dropped++;
-+              dev_kfree_skb(skb);
-+
-+              /* restart transmitter in case locked */
-+              sp->dma_regs->xmt_poll = 0;
-+              return 0;
-+      }
-+
-+      /* Setup the transmit descriptor. */
-+      td->devcs = ((skb->len << DMA_TX1_BSIZE_SHIFT) |
-+                               (DMA_TX1_LS | DMA_TX1_IC | DMA_TX1_CHAINED));
-+      td->addr = dma_map_single(NULL, skb->data, skb->len, DMA_TO_DEVICE);
-+      td->status = DMA_TX_OWN;
-+
-+      /* kick transmitter last */
-+      sp->dma_regs->xmt_poll = 0;
-+
-+      sp->tx_skb[idx] = skb;
-+      idx = DSC_NEXT(idx);
-+      sp->tx_prd = idx;
-+
-+      return 0;
-+}
-+
-+static int ar231x_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
-+{
-+      struct mii_ioctl_data *data = (struct mii_ioctl_data *) &ifr->ifr_data;
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      int ret;
-+
-+      switch (cmd) {
-+
-+      case SIOCETHTOOL:
-+              spin_lock_irq(&sp->lock);
-+              ret = phy_ethtool_ioctl(sp->phy_dev, (void *) ifr->ifr_data);
-+              spin_unlock_irq(&sp->lock);
-+              return ret;
-+
-+      case SIOCSIFHWADDR:
-+              if (copy_from_user
-+                      (dev->dev_addr, ifr->ifr_data, sizeof(dev->dev_addr)))
-+                      return -EFAULT;
-+              return 0;
-+
-+      case SIOCGIFHWADDR:
-+              if (copy_to_user
-+                      (ifr->ifr_data, dev->dev_addr, sizeof(dev->dev_addr)))
-+                      return -EFAULT;
-+              return 0;
-+
-+      case SIOCGMIIPHY:
-+      case SIOCGMIIREG:
-+      case SIOCSMIIREG:
-+              return phy_mii_ioctl(sp->phy_dev, data, cmd);
-+
-+      default:
-+              break;
-+      }
-+
-+      return -EOPNOTSUPP;
-+}
-+
-+static void ar231x_adjust_link(struct net_device *dev)
-+{
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      unsigned int mc;
-+
-+      if (!sp->phy_dev->link)
-+              return;
-+
-+      if (sp->phy_dev->duplex != sp->oldduplex) {
-+              mc = readl(&sp->eth_regs->mac_control);
-+              mc &= ~(MAC_CONTROL_F | MAC_CONTROL_DRO);
-+              if (sp->phy_dev->duplex)
-+                      mc |= MAC_CONTROL_F;
-+              else
-+                      mc |= MAC_CONTROL_DRO;
-+              writel(mc, &sp->eth_regs->mac_control);
-+              sp->oldduplex = sp->phy_dev->duplex;
-+      }
-+}
-+
-+#define MII_ADDR(phy, reg) \
-+      ((reg << MII_ADDR_REG_SHIFT) | (phy << MII_ADDR_PHY_SHIFT))
-+
-+static int
-+ar231x_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum)
-+{
-+      struct net_device *const dev = bus->priv;
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      volatile ETHERNET_STRUCT *ethernet = sp->phy_regs;
-+
-+      ethernet->mii_addr = MII_ADDR(phy_addr, regnum);
-+      while (ethernet->mii_addr & MII_ADDR_BUSY);
-+      return (ethernet->mii_data >> MII_DATA_SHIFT);
-+}
-+
-+static int
-+ar231x_mdiobus_write(struct mii_bus *bus, int phy_addr, int regnum,
-+             u16 value)
-+{
-+      struct net_device *const dev = bus->priv;
-+      struct ar231x_private *sp = netdev_priv(dev);
-+      volatile ETHERNET_STRUCT *ethernet = sp->phy_regs;
-+
-+      while (ethernet->mii_addr & MII_ADDR_BUSY);
-+      ethernet->mii_data = value << MII_DATA_SHIFT;
-+      ethernet->mii_addr = MII_ADDR(phy_addr, regnum) | MII_ADDR_WRITE;
-+
-+      return 0;
-+}
-+
-+static int ar231x_mdiobus_reset(struct mii_bus *bus)
-+{
-+      struct net_device *const dev = bus->priv;
-+
-+      ar231x_reset_reg(dev);
-+
-+      return 0;
-+}
-+
-+static int ar231x_mdiobus_probe (struct net_device *dev)
-+{
-+      struct ar231x_private *const sp = netdev_priv(dev);
-+      struct phy_device *phydev = NULL;
-+      int phy_addr;
-+
-+      /* find the first (lowest address) PHY on the current MAC's MII bus */
-+      for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++)
-+              if (sp->mii_bus->phy_map[phy_addr]) {
-+                      phydev = sp->mii_bus->phy_map[phy_addr];
-+                      sp->phy = phy_addr;
-+                      break; /* break out with first one found */
-+              }
-+
-+      if (!phydev) {
-+              printk (KERN_ERR "ar231x: %s: no PHY found\n", dev->name);
-+              return -1;
-+      }
-+
-+      /* now we are supposed to have a proper phydev, to attach to... */
-+      BUG_ON(!phydev);
-+      BUG_ON(phydev->attached_dev);
-+
-+      phydev = phy_connect(dev, dev_name(&phydev->dev), &ar231x_adjust_link, 0,
-+              PHY_INTERFACE_MODE_MII);
-+
-+      if (IS_ERR(phydev)) {
-+              printk(KERN_ERR "%s: Could not attach to PHY\n", dev->name);
-+              return PTR_ERR(phydev);
-+      }
-+
-+      /* mask with MAC supported features */
-+      phydev->supported &= (SUPPORTED_10baseT_Half
-+              | SUPPORTED_10baseT_Full
-+              | SUPPORTED_100baseT_Half
-+              | SUPPORTED_100baseT_Full
-+              | SUPPORTED_Autoneg
-+              /* | SUPPORTED_Pause | SUPPORTED_Asym_Pause */
-+              | SUPPORTED_MII
-+              | SUPPORTED_TP);
-+
-+      phydev->advertising = phydev->supported;
-+
-+      sp->oldduplex = -1;
-+      sp->phy_dev = phydev;
-+
-+      printk(KERN_INFO "%s: attached PHY driver [%s] "
-+              "(mii_bus:phy_addr=%s)\n",
-+              dev->name, phydev->drv->name, dev_name(&phydev->dev));
-+
-+      return 0;
-+}
-+
---- /dev/null
-+++ b/drivers/net/ar231x.h
-@@ -0,0 +1,302 @@
-+/*
-+ * ar231x.h: Linux driver for the Atheros AR231x Ethernet device.
-+ *
-+ * Copyright (C) 2004 by Sameer Dekate <sdekate@arubanetworks.com>
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+ *
-+ * Thanks to Atheros for providing hardware and documentation
-+ * enabling me to write this 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.
-+ */
-+
-+#ifndef _AR2313_H_
-+#define _AR2313_H_
-+
-+#include <generated/autoconf.h>
-+#include <linux/bitops.h>
-+#include <asm/bootinfo.h>
-+#include <ar231x_platform.h>
-+
-+/*
-+ * probe link timer - 5 secs
-+ */
-+#define LINK_TIMER    (5*HZ)
-+
-+#define IS_DMA_TX_INT(X)   (((X) & (DMA_STATUS_TI)) != 0)
-+#define IS_DMA_RX_INT(X)   (((X) & (DMA_STATUS_RI)) != 0)
-+#define IS_DRIVER_OWNED(X) (((X) & (DMA_TX_OWN))    == 0)
-+
-+#define AR2313_TX_TIMEOUT (HZ/4)
-+
-+/*
-+ * Rings
-+ */
-+#define DSC_RING_ENTRIES_SIZE (AR2313_DESCR_ENTRIES * sizeof(struct desc))
-+#define DSC_NEXT(idx)         ((idx + 1) & (AR2313_DESCR_ENTRIES - 1))
-+
-+#define AR2313_MBGET          2
-+#define AR2313_MBSET          3
-+#define AR2313_PCI_RECONFIG   4
-+#define AR2313_PCI_DUMP               5
-+#define AR2313_TEST_PANIC     6
-+#define AR2313_TEST_NULLPTR   7
-+#define AR2313_READ_DATA      8
-+#define AR2313_WRITE_DATA     9
-+#define AR2313_GET_VERSION    10
-+#define AR2313_TEST_HANG      11
-+#define AR2313_SYNC           12
-+
-+#define DMA_RX_ERR_CRC                BIT(1)
-+#define DMA_RX_ERR_DRIB               BIT(2)
-+#define DMA_RX_ERR_MII                BIT(3)
-+#define DMA_RX_EV2            BIT(5)
-+#define DMA_RX_ERR_COL                BIT(6)
-+#define DMA_RX_LONG           BIT(7)
-+#define DMA_RX_LS             BIT(8)  /* last descriptor */
-+#define DMA_RX_FS             BIT(9)  /* first descriptor */
-+#define DMA_RX_MF             BIT(10) /* multicast frame */
-+#define DMA_RX_ERR_RUNT               BIT(11) /* runt frame */
-+#define DMA_RX_ERR_LENGTH     BIT(12) /* length error */
-+#define DMA_RX_ERR_DESC               BIT(14) /* descriptor error */
-+#define DMA_RX_ERROR          BIT(15) /* error summary */
-+#define DMA_RX_LEN_MASK               0x3fff0000
-+#define DMA_RX_LEN_SHIFT      16
-+#define DMA_RX_FILT           BIT(30)
-+#define DMA_RX_OWN            BIT(31) /* desc owned by DMA controller */
-+
-+#define DMA_RX1_BSIZE_MASK    0x000007ff
-+#define DMA_RX1_BSIZE_SHIFT   0
-+#define DMA_RX1_CHAINED               BIT(24)
-+#define DMA_RX1_RER           BIT(25)
-+
-+#define DMA_TX_ERR_UNDER      BIT(1)  /* underflow error */
-+#define DMA_TX_ERR_DEFER      BIT(2)  /* excessive deferral */
-+#define DMA_TX_COL_MASK               0x78
-+#define DMA_TX_COL_SHIFT      3
-+#define DMA_TX_ERR_HB         BIT(7)  /* hearbeat failure */
-+#define DMA_TX_ERR_COL                BIT(8)  /* excessive collisions */
-+#define DMA_TX_ERR_LATE               BIT(9)  /* late collision */
-+#define DMA_TX_ERR_LINK               BIT(10) /* no carrier */
-+#define DMA_TX_ERR_LOSS               BIT(11) /* loss of carrier */
-+#define DMA_TX_ERR_JABBER     BIT(14) /* transmit jabber timeout */
-+#define DMA_TX_ERROR          BIT(15) /* frame aborted */
-+#define DMA_TX_OWN            BIT(31) /* descr owned by DMA controller */
-+
-+#define DMA_TX1_BSIZE_MASK    0x000007ff
-+#define DMA_TX1_BSIZE_SHIFT   0
-+#define DMA_TX1_CHAINED               BIT(24) /* chained descriptors */
-+#define DMA_TX1_TER           BIT(25) /* transmit end of ring */
-+#define DMA_TX1_FS            BIT(29) /* first segment */
-+#define DMA_TX1_LS            BIT(30) /* last segment */
-+#define DMA_TX1_IC            BIT(31) /* interrupt on completion */
-+
-+#define RCVPKT_LENGTH(X)      (X  >> 16)      /* Received pkt Length */
-+
-+#define MAC_CONTROL_RE                BIT(2)  /* receive enable */
-+#define MAC_CONTROL_TE                BIT(3)  /* transmit enable */
-+#define MAC_CONTROL_DC                BIT(5)  /* Deferral check */
-+#define MAC_CONTROL_ASTP      BIT(8)  /* Auto pad strip */
-+#define MAC_CONTROL_DRTY      BIT(10) /* Disable retry */
-+#define MAC_CONTROL_DBF               BIT(11) /* Disable bcast frames */
-+#define MAC_CONTROL_LCC               BIT(12) /* late collision ctrl */
-+#define MAC_CONTROL_HP                BIT(13) /* Hash Perfect filtering */
-+#define MAC_CONTROL_HASH      BIT(14) /* Unicast hash filtering */
-+#define MAC_CONTROL_HO                BIT(15) /* Hash only filtering */
-+#define MAC_CONTROL_PB                BIT(16) /* Pass Bad frames */
-+#define MAC_CONTROL_IF                BIT(17) /* Inverse filtering */
-+#define MAC_CONTROL_PR                BIT(18) /* promiscuous mode (valid frames only) */
-+#define MAC_CONTROL_PM                BIT(19) /* pass multicast */
-+#define MAC_CONTROL_F         BIT(20) /* full-duplex */
-+#define MAC_CONTROL_DRO               BIT(23) /* Disable Receive Own */
-+#define MAC_CONTROL_HBD               BIT(28) /* heart-beat disabled (MUST BE SET) */
-+#define MAC_CONTROL_BLE               BIT(30) /* big endian mode */
-+#define MAC_CONTROL_RA                BIT(31) /* receive all (valid and invalid frames) */
-+
-+#define MII_ADDR_BUSY         BIT(0)
-+#define MII_ADDR_WRITE                BIT(1)
-+#define MII_ADDR_REG_SHIFT    6
-+#define MII_ADDR_PHY_SHIFT    11
-+#define MII_DATA_SHIFT                0
-+
-+#define FLOW_CONTROL_FCE      BIT(1)
-+
-+#define DMA_BUS_MODE_SWR      BIT(0)  /* software reset */
-+#define DMA_BUS_MODE_BLE      BIT(7)  /* big endian mode */
-+#define DMA_BUS_MODE_PBL_SHIFT        8       /* programmable burst length 32 */
-+#define DMA_BUS_MODE_DBO      BIT(20) /* big-endian descriptors */
-+
-+#define DMA_STATUS_TI         BIT(0)  /* transmit interrupt */
-+#define DMA_STATUS_TPS                BIT(1)  /* transmit process stopped */
-+#define DMA_STATUS_TU         BIT(2)  /* transmit buffer unavailable */
-+#define DMA_STATUS_TJT                BIT(3)  /* transmit buffer timeout */
-+#define DMA_STATUS_UNF                BIT(5)  /* transmit underflow */
-+#define DMA_STATUS_RI         BIT(6)  /* receive interrupt */
-+#define DMA_STATUS_RU         BIT(7)  /* receive buffer unavailable */
-+#define DMA_STATUS_RPS                BIT(8)  /* receive process stopped */
-+#define DMA_STATUS_ETI                BIT(10) /* early transmit interrupt */
-+#define DMA_STATUS_FBE                BIT(13) /* fatal bus interrupt */
-+#define DMA_STATUS_ERI                BIT(14) /* early receive interrupt */
-+#define DMA_STATUS_AIS                BIT(15) /* abnormal interrupt summary */
-+#define DMA_STATUS_NIS                BIT(16) /* normal interrupt summary */
-+#define DMA_STATUS_RS_SHIFT   17      /* receive process state */
-+#define DMA_STATUS_TS_SHIFT   20      /* transmit process state */
-+#define DMA_STATUS_EB_SHIFT   23      /* error bits */
-+
-+#define DMA_CONTROL_SR                BIT(1)  /* start receive */
-+#define DMA_CONTROL_ST                BIT(13) /* start transmit */
-+#define DMA_CONTROL_SF                BIT(21) /* store and forward */
-+
-+
-+typedef struct {
-+      volatile unsigned int status;   // OWN, Device control and status.
-+      volatile unsigned int devcs;    // pkt Control bits + Length
-+      volatile unsigned int addr;     // Current Address.
-+      volatile unsigned int descr;    // Next descriptor in chain.
-+} ar231x_descr_t;
-+
-+
-+
-+//
-+// New Combo structure for Both Eth0 AND eth1
-+//
-+typedef struct {
-+      volatile unsigned int mac_control;      /* 0x00 */
-+      volatile unsigned int mac_addr[2];      /* 0x04 - 0x08 */
-+      volatile unsigned int mcast_table[2];   /* 0x0c - 0x10 */
-+      volatile unsigned int mii_addr; /* 0x14 */
-+      volatile unsigned int mii_data; /* 0x18 */
-+      volatile unsigned int flow_control;     /* 0x1c */
-+      volatile unsigned int vlan_tag; /* 0x20 */
-+      volatile unsigned int pad[7];   /* 0x24 - 0x3c */
-+      volatile unsigned int ucast_table[8];   /* 0x40-0x5c */
-+
-+} ETHERNET_STRUCT;
-+
-+/********************************************************************
-+ * Interrupt controller
-+ ********************************************************************/
-+
-+typedef struct {
-+      volatile unsigned int wdog_control;     /* 0x08 */
-+      volatile unsigned int wdog_timer;       /* 0x0c */
-+      volatile unsigned int misc_status;      /* 0x10 */
-+      volatile unsigned int misc_mask;        /* 0x14 */
-+      volatile unsigned int global_status;    /* 0x18 */
-+      volatile unsigned int reserved; /* 0x1c */
-+      volatile unsigned int reset_control;    /* 0x20 */
-+} INTERRUPT;
-+
-+/********************************************************************
-+ * DMA controller
-+ ********************************************************************/
-+typedef struct {
-+      volatile unsigned int bus_mode; /* 0x00 (CSR0) */
-+      volatile unsigned int xmt_poll; /* 0x04 (CSR1) */
-+      volatile unsigned int rcv_poll; /* 0x08 (CSR2) */
-+      volatile unsigned int rcv_base; /* 0x0c (CSR3) */
-+      volatile unsigned int xmt_base; /* 0x10 (CSR4) */
-+      volatile unsigned int status;   /* 0x14 (CSR5) */
-+      volatile unsigned int control;  /* 0x18 (CSR6) */
-+      volatile unsigned int intr_ena; /* 0x1c (CSR7) */
-+      volatile unsigned int rcv_missed;       /* 0x20 (CSR8) */
-+      volatile unsigned int reserved[11];     /* 0x24-0x4c (CSR9-19) */
-+      volatile unsigned int cur_tx_buf_addr;  /* 0x50 (CSR20) */
-+      volatile unsigned int cur_rx_buf_addr;  /* 0x50 (CSR21) */
-+} DMA;
-+
-+/*
-+ * Struct private for the Sibyte.
-+ *
-+ * Elements are grouped so variables used by the tx handling goes
-+ * together, and will go into the same cache lines etc. in order to
-+ * avoid cache line contention between the rx and tx handling on SMP.
-+ *
-+ * Frequently accessed variables are put at the beginning of the
-+ * struct to help the compiler generate better/shorter code.
-+ */
-+struct ar231x_private {
-+      struct net_device *dev;
-+      int version;
-+      u32 mb[2];
-+
-+      volatile ETHERNET_STRUCT *phy_regs;
-+      volatile ETHERNET_STRUCT *eth_regs;
-+      volatile DMA *dma_regs;
-+      volatile u32 *int_regs;
-+      struct ar231x_eth *cfg;
-+
-+      spinlock_t lock;                        /* Serialise access to device */
-+
-+      /*
-+       * RX and TX descriptors, must be adjacent
-+       */
-+      ar231x_descr_t *rx_ring;
-+      ar231x_descr_t *tx_ring;
-+
-+
-+      struct sk_buff **rx_skb;
-+      struct sk_buff **tx_skb;
-+
-+      /*
-+       * RX elements
-+       */
-+      u32 rx_skbprd;
-+      u32 cur_rx;
-+
-+      /*
-+       * TX elements
-+       */
-+      u32 tx_prd;
-+      u32 tx_csm;
-+
-+      /*
-+       * Misc elements
-+       */
-+      char name[48];
-+      struct {
-+              u32 address;
-+              u32 length;
-+              char *mapping;
-+      } desc;
-+
-+
-+      struct timer_list link_timer;
-+      unsigned short phy;                     /* merlot phy = 1, samsung phy = 0x1f */
-+      unsigned short mac;
-+      unsigned short link;            /* 0 - link down, 1 - link up */
-+      u16 phyData;
-+
-+      struct tasklet_struct rx_tasklet;
-+      int unloading;
-+
-+      struct phy_device *phy_dev;
-+      struct mii_bus *mii_bus;
-+      int oldduplex;
-+};
-+
-+
-+/*
-+ * Prototypes
-+ */
-+static int ar231x_init(struct net_device *dev);
-+#ifdef TX_TIMEOUT
-+static void ar231x_tx_timeout(struct net_device *dev);
-+#endif
-+static int ar231x_restart(struct net_device *dev);
-+static void ar231x_load_rx_ring(struct net_device *dev, int bufs);
-+static irqreturn_t ar231x_interrupt(int irq, void *dev_id);
-+static int ar231x_open(struct net_device *dev);
-+static int ar231x_start_xmit(struct sk_buff *skb, struct net_device *dev);
-+static int ar231x_close(struct net_device *dev);
-+static int ar231x_ioctl(struct net_device *dev, struct ifreq *ifr,
-+                                              int cmd);
-+static void ar231x_init_cleanup(struct net_device *dev);
-+static int ar231x_setup_timer(struct net_device *dev);
-+static void ar231x_link_timer_fn(unsigned long data);
-+static void ar231x_check_link(struct net_device *dev);
-+#endif                                                        /* _AR2313_H_ */
diff --git a/target/linux/atheros/patches-2.6.33/120-spiflash.patch b/target/linux/atheros/patches-2.6.33/120-spiflash.patch
deleted file mode 100644 (file)
index 8e37146..0000000
+++ /dev/null
@@ -1,659 +0,0 @@
---- a/drivers/mtd/devices/Kconfig
-+++ b/drivers/mtd/devices/Kconfig
-@@ -112,6 +112,10 @@ config MTD_SST25L
-         Set up your spi devices with the right board-specific platform data,
-         if you want to specify device partitioning.
-+config MTD_AR2315
-+      tristate "Atheros AR2315+ SPI Flash support"
-+      depends on ATHEROS_AR2315
-+
- config MTD_SLRAM
-       tristate "Uncached system RAM"
-       help
---- a/drivers/mtd/devices/Makefile
-+++ b/drivers/mtd/devices/Makefile
-@@ -17,3 +17,4 @@ obj-$(CONFIG_MTD_BLOCK2MTD)  += block2mtd
- obj-$(CONFIG_MTD_DATAFLASH)   += mtd_dataflash.o
- obj-$(CONFIG_MTD_M25P80)      += m25p80.o
- obj-$(CONFIG_MTD_SST25L)      += sst25l.o
-+obj-$(CONFIG_MTD_AR2315)      += ar2315.o
---- /dev/null
-+++ b/drivers/mtd/devices/ar2315.c
-@@ -0,0 +1,517 @@
-+
-+/*
-+ * MTD driver for the SPI Flash Memory support on Atheros AR2315
-+ *
-+ * Copyright (c) 2005-2006 Atheros Communications Inc.
-+ * Copyright (C) 2006-2007 FON Technology, SL.
-+ * Copyright (C) 2006-2007 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+ *
-+ * This code 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/types.h>
-+#include <linux/version.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/platform_device.h>
-+#include <linux/sched.h>
-+#include <linux/root_dev.h>
-+#include <linux/delay.h>
-+#include <asm/delay.h>
-+#include <asm/io.h>
-+
-+#include <ar2315_spiflash.h>
-+#include <ar231x_platform.h>
-+#include <ar231x.h>
-+
-+
-+#define SPIFLASH "spiflash: "
-+#define busy_wait(_priv, _condition, _wait) do { \
-+      while (_condition) { \
-+              spin_unlock_bh(&_priv->lock); \
-+              if (_wait > 1) \
-+                      msleep(_wait); \
-+              else if ((_wait == 1) && need_resched()) \
-+                      schedule(); \
-+              else \
-+                      udelay(1); \
-+              spin_lock_bh(&_priv->lock); \
-+      } \
-+} while (0)
-+
-+enum {
-+      FLASH_NONE,
-+      FLASH_1MB,
-+      FLASH_2MB,
-+      FLASH_4MB,
-+      FLASH_8MB,
-+      FLASH_16MB,
-+};
-+
-+/* Flash configuration table */
-+struct flashconfig {
-+      u32 byte_cnt;
-+      u32 sector_cnt;
-+      u32 sector_size;
-+};
-+
-+const struct flashconfig flashconfig_tbl[] = {
-+      [FLASH_NONE] = { 0, 0, 0},
-+      [FLASH_1MB]  = { STM_1MB_BYTE_COUNT, STM_1MB_SECTOR_COUNT, STM_1MB_SECTOR_SIZE},
-+      [FLASH_2MB]  = { STM_2MB_BYTE_COUNT, STM_2MB_SECTOR_COUNT, STM_2MB_SECTOR_SIZE},
-+      [FLASH_4MB]  = { STM_4MB_BYTE_COUNT, STM_4MB_SECTOR_COUNT, STM_4MB_SECTOR_SIZE},
-+      [FLASH_8MB]  = { STM_8MB_BYTE_COUNT, STM_8MB_SECTOR_COUNT, STM_8MB_SECTOR_SIZE},
-+      [FLASH_16MB] = { STM_16MB_BYTE_COUNT, STM_16MB_SECTOR_COUNT, STM_16MB_SECTOR_SIZE}
-+};
-+
-+/* Mapping of generic opcodes to STM serial flash opcodes */
-+enum {
-+      SPI_WRITE_ENABLE,
-+      SPI_WRITE_DISABLE,
-+      SPI_RD_STATUS,
-+      SPI_WR_STATUS,
-+      SPI_RD_DATA,
-+      SPI_FAST_RD_DATA,
-+      SPI_PAGE_PROGRAM,
-+      SPI_SECTOR_ERASE,
-+      SPI_BULK_ERASE,
-+      SPI_DEEP_PWRDOWN,
-+      SPI_RD_SIG,
-+};
-+
-+struct opcodes {
-+    __u16 code;
-+    __s8 tx_cnt;
-+    __s8 rx_cnt;
-+};
-+const struct opcodes stm_opcodes[] = {
-+      [SPI_WRITE_ENABLE] = {STM_OP_WR_ENABLE, 1, 0},
-+      [SPI_WRITE_DISABLE] = {STM_OP_WR_DISABLE, 1, 0},
-+      [SPI_RD_STATUS] = {STM_OP_RD_STATUS, 1, 1},
-+      [SPI_WR_STATUS] = {STM_OP_WR_STATUS, 1, 0},
-+      [SPI_RD_DATA] = {STM_OP_RD_DATA, 4, 4},
-+      [SPI_FAST_RD_DATA] = {STM_OP_FAST_RD_DATA, 5, 0},
-+      [SPI_PAGE_PROGRAM] = {STM_OP_PAGE_PGRM, 8, 0},
-+      [SPI_SECTOR_ERASE] = {STM_OP_SECTOR_ERASE, 4, 0},
-+      [SPI_BULK_ERASE] = {STM_OP_BULK_ERASE, 1, 0},
-+      [SPI_DEEP_PWRDOWN] = {STM_OP_DEEP_PWRDOWN, 1, 0},
-+      [SPI_RD_SIG] = {STM_OP_RD_SIG, 4, 1},
-+};
-+
-+/* Driver private data structure */
-+struct spiflash_priv {
-+      struct mtd_info mtd;
-+      void *readaddr; /* memory mapped data for read  */
-+      void *mmraddr;  /* memory mapped register space */
-+      wait_queue_head_t wq;
-+      spinlock_t lock;
-+      int state;
-+};
-+
-+#define to_spiflash(_mtd) container_of(_mtd, struct spiflash_priv, mtd)
-+
-+enum {
-+      FL_READY,
-+      FL_READING,
-+      FL_ERASING,
-+      FL_WRITING
-+};
-+
-+/***************************************************************************************************/
-+
-+static u32
-+spiflash_read_reg(struct spiflash_priv *priv, int reg)
-+{
-+      return ar231x_read_reg((u32) priv->mmraddr + reg);
-+}
-+
-+static void
-+spiflash_write_reg(struct spiflash_priv *priv, int reg, u32 data)
-+{
-+      ar231x_write_reg((u32) priv->mmraddr + reg, data);
-+}
-+
-+static u32
-+spiflash_wait_busy(struct spiflash_priv *priv)
-+{
-+      u32 reg;
-+
-+      busy_wait(priv, (reg = spiflash_read_reg(priv, SPI_FLASH_CTL)) &
-+              SPI_CTL_BUSY, 0);
-+      return reg;
-+}
-+
-+static u32
-+spiflash_sendcmd (struct spiflash_priv *priv, int opcode, u32 addr)
-+{
-+      const struct opcodes *op;
-+      u32 reg, mask;
-+
-+      op = &stm_opcodes[opcode];
-+      reg = spiflash_wait_busy(priv);
-+      spiflash_write_reg(priv, SPI_FLASH_OPCODE,
-+              ((u32) op->code) | (addr << 8));
-+
-+      reg &= ~SPI_CTL_TX_RX_CNT_MASK;
-+      reg |= SPI_CTL_START | op->tx_cnt | (op->rx_cnt << 4);
-+
-+      spiflash_write_reg(priv, SPI_FLASH_CTL, reg);
-+      spiflash_wait_busy(priv);
-+
-+      if (!op->rx_cnt)
-+              return 0;
-+
-+      reg = spiflash_read_reg(priv, SPI_FLASH_DATA);
-+
-+      switch (op->rx_cnt) {
-+      case 1:
-+              mask = 0x000000ff;
-+              break;
-+      case 2:
-+              mask = 0x0000ffff;
-+              break;
-+      case 3:
-+              mask = 0x00ffffff;
-+              break;
-+      default:
-+              mask = 0xffffffff;
-+              break;
-+      }
-+      reg &= mask;
-+
-+      return reg;
-+}
-+
-+
-+/*
-+ * Probe SPI flash device
-+ * Function returns 0 for failure.
-+ * and flashconfig_tbl array index for success.
-+ */
-+static int
-+spiflash_probe_chip (struct spiflash_priv *priv)
-+{
-+      u32 sig;
-+      int flash_size;
-+
-+      /* Read the signature on the flash device */
-+      spin_lock_bh(&priv->lock);
-+      sig = spiflash_sendcmd(priv, SPI_RD_SIG, 0);
-+      spin_unlock_bh(&priv->lock);
-+
-+      switch (sig) {
-+      case STM_8MBIT_SIGNATURE:
-+              flash_size = FLASH_1MB;
-+              break;
-+      case STM_16MBIT_SIGNATURE:
-+              flash_size = FLASH_2MB;
-+              break;
-+      case STM_32MBIT_SIGNATURE:
-+              flash_size = FLASH_4MB;
-+              break;
-+      case STM_64MBIT_SIGNATURE:
-+              flash_size = FLASH_8MB;
-+              break;
-+      case STM_128MBIT_SIGNATURE:
-+              flash_size = FLASH_16MB;
-+              break;
-+      default:
-+              printk (KERN_WARNING SPIFLASH "Read of flash device signature failed!\n");
-+              return 0;
-+      }
-+
-+      return flash_size;
-+}
-+
-+
-+/* wait until the flash chip is ready and grab a lock */
-+static int spiflash_wait_ready(struct spiflash_priv *priv, int state)
-+{
-+      DECLARE_WAITQUEUE(wait, current);
-+
-+retry:
-+      spin_lock_bh(&priv->lock);
-+      if (priv->state != FL_READY) {
-+              set_current_state(TASK_UNINTERRUPTIBLE);
-+              add_wait_queue(&priv->wq, &wait);
-+              spin_unlock_bh(&priv->lock);
-+              schedule();
-+              remove_wait_queue(&priv->wq, &wait);
-+
-+              if(signal_pending(current))
-+                      return 0;
-+
-+              goto retry;
-+      }
-+      priv->state = state;
-+
-+      return 1;
-+}
-+
-+static inline void spiflash_done(struct spiflash_priv *priv)
-+{
-+      priv->state = FL_READY;
-+      spin_unlock_bh(&priv->lock);
-+      wake_up(&priv->wq);
-+}
-+
-+static void
-+spiflash_wait_complete(struct spiflash_priv *priv, unsigned int timeout)
-+{
-+      busy_wait(priv, spiflash_sendcmd(priv, SPI_RD_STATUS, 0) &
-+              SPI_STATUS_WIP, timeout);
-+      spiflash_done(priv);
-+}
-+
-+
-+
-+static int
-+spiflash_erase (struct mtd_info *mtd, struct erase_info *instr)
-+{
-+      struct spiflash_priv *priv = to_spiflash(mtd);
-+      const struct opcodes *op;
-+      u32 temp, reg;
-+
-+      if (instr->addr + instr->len > mtd->size)
-+              return -EINVAL;
-+
-+      if (!spiflash_wait_ready(priv, FL_ERASING))
-+              return -EINTR;
-+
-+      spiflash_sendcmd(priv, SPI_WRITE_ENABLE, 0);
-+      reg = spiflash_wait_busy(priv);
-+
-+      op = &stm_opcodes[SPI_SECTOR_ERASE];
-+      temp = ((u32)instr->addr << 8) | (u32)(op->code);
-+      spiflash_write_reg(priv, SPI_FLASH_OPCODE, temp);
-+
-+      reg &= ~SPI_CTL_TX_RX_CNT_MASK;
-+      reg |= op->tx_cnt | SPI_CTL_START;
-+      spiflash_write_reg(priv, SPI_FLASH_CTL, reg);
-+
-+      spiflash_wait_complete(priv, 20);
-+
-+      instr->state = MTD_ERASE_DONE;
-+      mtd_erase_callback(instr);
-+
-+      return 0;
-+}
-+
-+static int
-+spiflash_read (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)
-+{
-+      struct spiflash_priv *priv = to_spiflash(mtd);
-+      u8 *read_addr;
-+
-+      if (!len)
-+              return 0;
-+
-+      if (from + len > mtd->size)
-+              return -EINVAL;
-+
-+      *retlen = len;
-+
-+      if (!spiflash_wait_ready(priv, FL_READING))
-+              return -EINTR;
-+
-+      read_addr = (u8 *)(priv->readaddr + from);
-+      memcpy_fromio(buf, read_addr, len);
-+      spiflash_done(priv);
-+
-+      return 0;
-+}
-+
-+static int
-+spiflash_write (struct mtd_info *mtd, loff_t to, size_t len, size_t *retlen, const u8 *buf)
-+{
-+      struct spiflash_priv *priv = to_spiflash(mtd);
-+      u32 opcode, bytes_left;
-+
-+      *retlen = 0;
-+
-+      if (!len)
-+              return 0;
-+
-+      if (to + len > mtd->size)
-+              return -EINVAL;
-+
-+      bytes_left = len;
-+
-+      do {
-+              u32 read_len, reg, page_offset, spi_data = 0;
-+
-+              read_len = min(bytes_left, sizeof(u32));
-+
-+              /* 32-bit writes cannot span across a page boundary
-+               * (256 bytes). This types of writes require two page
-+               * program operations to handle it correctly. The STM part
-+               * will write the overflow data to the beginning of the
-+               * current page as opposed to the subsequent page.
-+               */
-+              page_offset = (to & (STM_PAGE_SIZE - 1)) + read_len;
-+
-+              if (page_offset > STM_PAGE_SIZE)
-+                      read_len -= (page_offset - STM_PAGE_SIZE);
-+
-+              if (!spiflash_wait_ready(priv, FL_WRITING))
-+                      return -EINTR;
-+
-+              spiflash_sendcmd(priv, SPI_WRITE_ENABLE, 0);
-+              spi_data = 0;
-+              switch (read_len) {
-+              case 4:
-+                      spi_data |= buf[3] << 24;
-+                      /* fall through */
-+              case 3:
-+                      spi_data |= buf[2] << 16;
-+                      /* fall through */
-+              case 2:
-+                      spi_data |= buf[1] << 8;
-+                      /* fall through */
-+              case 1:
-+                      spi_data |= buf[0] & 0xff;
-+                      break;
-+              default:
-+                      break;
-+              }
-+
-+              spiflash_write_reg(priv, SPI_FLASH_DATA, spi_data);
-+              opcode = stm_opcodes[SPI_PAGE_PROGRAM].code |
-+                      (to & 0x00ffffff) << 8;
-+              spiflash_write_reg(priv, SPI_FLASH_OPCODE, opcode);
-+
-+              reg = spiflash_read_reg(priv, SPI_FLASH_CTL);
-+              reg &= ~SPI_CTL_TX_RX_CNT_MASK;
-+              reg |= (read_len + 4) | SPI_CTL_START;
-+              spiflash_write_reg(priv, SPI_FLASH_CTL, reg);
-+
-+              spiflash_wait_complete(priv, 1);
-+
-+              bytes_left -= read_len;
-+              to += read_len;
-+              buf += read_len;
-+
-+              *retlen += read_len;
-+      } while (bytes_left != 0);
-+
-+      return 0;
-+}
-+
-+
-+#ifdef CONFIG_MTD_PARTITIONS
-+static const char *part_probe_types[] = { "cmdlinepart", "RedBoot", "MyLoader", NULL };
-+#endif
-+
-+
-+static int
-+spiflash_probe(struct platform_device *pdev)
-+{
-+      struct spiflash_priv *priv;
-+      struct mtd_partition *parts;
-+      struct mtd_info *mtd;
-+      int index, num_parts;
-+      int result = 0;
-+
-+      priv = kzalloc(sizeof(struct spiflash_priv), GFP_KERNEL);
-+      spin_lock_init(&priv->lock);
-+      init_waitqueue_head(&priv->wq);
-+      priv->state = FL_READY;
-+      mtd = &priv->mtd;
-+
-+      priv->mmraddr = ioremap_nocache(SPI_FLASH_MMR, SPI_FLASH_MMR_SIZE);
-+      if (!priv->mmraddr) {
-+              printk(KERN_WARNING SPIFLASH "Failed to map flash device\n");
-+              goto error;
-+      }
-+
-+      index = spiflash_probe_chip(priv);
-+      if (!index) {
-+              printk (KERN_WARNING SPIFLASH "Found no serial flash device\n");
-+              goto error;
-+      }
-+
-+      priv->readaddr = ioremap_nocache(SPI_FLASH_READ, flashconfig_tbl[index].byte_cnt);
-+      if (!priv->readaddr) {
-+              printk (KERN_WARNING SPIFLASH "Failed to map flash device\n");
-+              goto error;
-+      }
-+
-+      platform_set_drvdata(pdev, priv);
-+      mtd->name = "spiflash";
-+      mtd->type = MTD_NORFLASH;
-+      mtd->flags = (MTD_CAP_NORFLASH|MTD_WRITEABLE);
-+      mtd->size = flashconfig_tbl[index].byte_cnt;
-+      mtd->erasesize = flashconfig_tbl[index].sector_size;
-+      mtd->writesize = 1;
-+      mtd->numeraseregions = 0;
-+      mtd->eraseregions = NULL;
-+      mtd->erase = spiflash_erase;
-+      mtd->read = spiflash_read;
-+      mtd->write = spiflash_write;
-+      mtd->owner = THIS_MODULE;
-+
-+#ifdef CONFIG_MTD_PARTITIONS
-+      /* parse redboot partitions */
-+      num_parts = parse_mtd_partitions(mtd, part_probe_types, &parts, 0);
-+      if (!num_parts)
-+              goto error;
-+
-+      result = add_mtd_partitions(mtd, parts, num_parts);
-+#endif
-+
-+      return result;
-+
-+error:
-+      if (priv->mmraddr)
-+              iounmap(priv->mmraddr);
-+      kfree(priv);
-+      return -ENXIO;
-+}
-+
-+static int
-+spiflash_remove (struct platform_device *pdev)
-+{
-+      struct spiflash_priv *priv = platform_get_drvdata(pdev);
-+      struct mtd_info *mtd = &priv->mtd;
-+
-+      del_mtd_partitions(mtd);
-+      iounmap(priv->mmraddr);
-+      iounmap(priv->readaddr);
-+      kfree(priv);
-+
-+      return 0;
-+}
-+
-+struct platform_driver spiflash_driver = {
-+      .driver.name = "spiflash",
-+      .probe = spiflash_probe,
-+      .remove = spiflash_remove,
-+};
-+
-+int __init
-+spiflash_init (void)
-+{
-+      return platform_driver_register(&spiflash_driver);
-+}
-+
-+void __exit
-+spiflash_exit (void)
-+{
-+      return platform_driver_unregister(&spiflash_driver);
-+}
-+
-+module_init (spiflash_init);
-+module_exit (spiflash_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_AUTHOR("OpenWrt.org, Atheros Communications Inc");
-+MODULE_DESCRIPTION("MTD driver for SPI Flash on Atheros SOC");
-+
---- /dev/null
-+++ b/arch/mips/include/asm/mach-ar231x/ar2315_spiflash.h
-@@ -0,0 +1,116 @@
-+/*
-+ * SPI Flash Memory support header file.
-+ *
-+ * Copyright (c) 2005, Atheros Communications Inc.
-+ * Copyright (C) 2006 FON Technology, SL.
-+ * Copyright (C) 2006 Imre Kaloz <kaloz@openwrt.org>
-+ * Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
-+ *
-+ * This code 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.
-+ *
-+ */
-+#ifndef __AR2315_SPIFLASH_H
-+#define __AR2315_SPIFLASH_H
-+
-+#define STM_PAGE_SIZE           256
-+
-+#define SFI_WRITE_BUFFER_SIZE   4
-+#define SFI_FLASH_ADDR_MASK     0x00ffffff
-+
-+#define STM_8MBIT_SIGNATURE     0x13
-+#define STM_M25P80_BYTE_COUNT   1048576
-+#define STM_M25P80_SECTOR_COUNT 16
-+#define STM_M25P80_SECTOR_SIZE  0x10000
-+
-+#define STM_16MBIT_SIGNATURE    0x14
-+#define STM_M25P16_BYTE_COUNT   2097152
-+#define STM_M25P16_SECTOR_COUNT 32
-+#define STM_M25P16_SECTOR_SIZE  0x10000
-+
-+#define STM_32MBIT_SIGNATURE    0x15
-+#define STM_M25P32_BYTE_COUNT   4194304
-+#define STM_M25P32_SECTOR_COUNT 64
-+#define STM_M25P32_SECTOR_SIZE  0x10000
-+
-+#define STM_64MBIT_SIGNATURE    0x16
-+#define STM_M25P64_BYTE_COUNT   8388608
-+#define STM_M25P64_SECTOR_COUNT 128
-+#define STM_M25P64_SECTOR_SIZE  0x10000
-+
-+#define STM_128MBIT_SIGNATURE   0x17
-+#define STM_M25P128_BYTE_COUNT   16777216
-+#define STM_M25P128_SECTOR_COUNT 256
-+#define STM_M25P128_SECTOR_SIZE  0x10000
-+
-+#define STM_1MB_BYTE_COUNT   STM_M25P80_BYTE_COUNT
-+#define STM_1MB_SECTOR_COUNT STM_M25P80_SECTOR_COUNT
-+#define STM_1MB_SECTOR_SIZE  STM_M25P80_SECTOR_SIZE
-+#define STM_2MB_BYTE_COUNT   STM_M25P16_BYTE_COUNT
-+#define STM_2MB_SECTOR_COUNT STM_M25P16_SECTOR_COUNT
-+#define STM_2MB_SECTOR_SIZE  STM_M25P16_SECTOR_SIZE
-+#define STM_4MB_BYTE_COUNT   STM_M25P32_BYTE_COUNT
-+#define STM_4MB_SECTOR_COUNT STM_M25P32_SECTOR_COUNT
-+#define STM_4MB_SECTOR_SIZE  STM_M25P32_SECTOR_SIZE
-+#define STM_8MB_BYTE_COUNT   STM_M25P64_BYTE_COUNT
-+#define STM_8MB_SECTOR_COUNT STM_M25P64_SECTOR_COUNT
-+#define STM_8MB_SECTOR_SIZE  STM_M25P64_SECTOR_SIZE
-+#define STM_16MB_BYTE_COUNT   STM_M25P128_BYTE_COUNT
-+#define STM_16MB_SECTOR_COUNT STM_M25P128_SECTOR_COUNT
-+#define STM_16MB_SECTOR_SIZE  STM_M25P128_SECTOR_SIZE
-+
-+/*
-+ * ST Microelectronics Opcodes for Serial Flash
-+ */
-+
-+#define STM_OP_WR_ENABLE       0x06     /* Write Enable */
-+#define STM_OP_WR_DISABLE      0x04     /* Write Disable */
-+#define STM_OP_RD_STATUS       0x05     /* Read Status */
-+#define STM_OP_WR_STATUS       0x01     /* Write Status */
-+#define STM_OP_RD_DATA         0x03     /* Read Data */
-+#define STM_OP_FAST_RD_DATA    0x0b     /* Fast Read Data */
-+#define STM_OP_PAGE_PGRM       0x02     /* Page Program */
-+#define STM_OP_SECTOR_ERASE    0xd8     /* Sector Erase */
-+#define STM_OP_BULK_ERASE      0xc7     /* Bulk Erase */
-+#define STM_OP_DEEP_PWRDOWN    0xb9     /* Deep Power-Down Mode */
-+#define STM_OP_RD_SIG          0xab     /* Read Electronic Signature */
-+
-+#define STM_STATUS_WIP       0x01       /* Write-In-Progress */
-+#define STM_STATUS_WEL       0x02       /* Write Enable Latch */
-+#define STM_STATUS_BP0       0x04       /* Block Protect 0 */
-+#define STM_STATUS_BP1       0x08       /* Block Protect 1 */
-+#define STM_STATUS_BP2       0x10       /* Block Protect 2 */
-+#define STM_STATUS_SRWD      0x80       /* Status Register Write Disable */
-+
-+/*
-+ * SPI Flash Interface Registers
-+ */
-+#define AR531XPLUS_SPI_READ     0x08000000
-+#define AR531XPLUS_SPI_MMR      0x11300000
-+#define AR531XPLUS_SPI_MMR_SIZE 12
-+
-+#define AR531XPLUS_SPI_CTL      0x00
-+#define AR531XPLUS_SPI_OPCODE   0x04
-+#define AR531XPLUS_SPI_DATA     0x08
-+
-+#define SPI_FLASH_READ          AR531XPLUS_SPI_READ
-+#define SPI_FLASH_MMR           AR531XPLUS_SPI_MMR
-+#define SPI_FLASH_MMR_SIZE      AR531XPLUS_SPI_MMR_SIZE
-+#define SPI_FLASH_CTL           AR531XPLUS_SPI_CTL
-+#define SPI_FLASH_OPCODE        AR531XPLUS_SPI_OPCODE
-+#define SPI_FLASH_DATA          AR531XPLUS_SPI_DATA
-+
-+#define SPI_CTL_START           0x00000100
-+#define SPI_CTL_BUSY            0x00010000
-+#define SPI_CTL_TXCNT_MASK      0x0000000f
-+#define SPI_CTL_RXCNT_MASK      0x000000f0
-+#define SPI_CTL_TX_RX_CNT_MASK  0x000000ff
-+#define SPI_CTL_SIZE_MASK       0x00060000
-+
-+#define SPI_CTL_CLK_SEL_MASK    0x03000000
-+#define SPI_OPCODE_MASK         0x000000ff
-+
-+#define SPI_STATUS_WIP                STM_STATUS_WIP
-+
-+#endif
diff --git a/target/linux/atheros/patches-2.6.33/130-watchdog.patch b/target/linux/atheros/patches-2.6.33/130-watchdog.patch
deleted file mode 100644 (file)
index ed80e79..0000000
+++ /dev/null
@@ -1,228 +0,0 @@
---- /dev/null
-+++ b/drivers/watchdog/ar2315-wtd.c
-@@ -0,0 +1,200 @@
-+/*
-+ * 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
-+ *
-+ * Copyright (C) 2008 John Crispin <blogic@openwrt.org>
-+ * Based on EP93xx and ifxmips wdt driver
-+ */
-+
-+#include <linux/interrupt.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/types.h>
-+#include <linux/miscdevice.h>
-+#include <linux/watchdog.h>
-+#include <linux/fs.h>
-+#include <linux/ioport.h>
-+#include <linux/notifier.h>
-+#include <linux/reboot.h>
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+
-+#include <asm/io.h>
-+#include <asm/uaccess.h>
-+#include <asm/system.h>
-+#include <asm/addrspace.h>
-+#include <ar231x_platform.h>
-+#include <ar2315_regs.h>
-+#include <ar231x.h>
-+
-+#define CLOCK_RATE 40000000
-+#define HEARTBEAT(x) (x < 1 || x > 90)?(20):(x)
-+
-+static int wdt_timeout = 20;
-+static int started = 0;
-+static int in_use = 0;
-+
-+static void
-+ar2315_wdt_enable(void)
-+{
-+      ar231x_write_reg(AR2315_WD, wdt_timeout * CLOCK_RATE);
-+      ar231x_write_reg(AR2315_ISR, 0x80);
-+}
-+
-+static ssize_t
-+ar2315_wdt_write(struct file *file, const char __user *data, size_t len, loff_t *ppos)
-+{
-+      if(len)
-+              ar2315_wdt_enable();
-+      return len;
-+}
-+
-+static int
-+ar2315_wdt_open(struct inode *inode, struct file *file)
-+{
-+      if(in_use)
-+              return -EBUSY;
-+      ar2315_wdt_enable();
-+      in_use = started = 1;
-+      return nonseekable_open(inode, file);
-+}
-+
-+static int
-+ar2315_wdt_release(struct inode *inode, struct file *file)
-+{
-+      in_use = 0;
-+      return 0;
-+}
-+
-+static irqreturn_t
-+ar2315_wdt_interrupt(int irq, void *dev_id)
-+{
-+      if(started)
-+      {
-+              printk(KERN_CRIT "watchdog expired, rebooting system\n");
-+              emergency_restart();
-+      } else {
-+              ar231x_write_reg(AR2315_WDC, 0);
-+              ar231x_write_reg(AR2315_WD, 0);
-+              ar231x_write_reg(AR2315_ISR, 0x80);
-+      }
-+      return IRQ_HANDLED;
-+}
-+
-+static struct watchdog_info ident = {
-+      .options = WDIOF_SETTIMEOUT | WDIOF_KEEPALIVEPING,
-+      .identity = "ar2315 Watchdog",
-+};
-+
-+static int
-+ar2315_wdt_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg)
-+{
-+      int new_wdt_timeout;
-+      int ret = -ENOIOCTLCMD;
-+
-+      switch(cmd)
-+      {
-+              case WDIOC_GETSUPPORT:
-+                      ret = copy_to_user((struct watchdog_info __user *)arg, &ident, sizeof(ident)) ? -EFAULT : 0;
-+                      break;
-+
-+              case WDIOC_KEEPALIVE:
-+                      ar2315_wdt_enable();
-+                      ret = 0;
-+                      break;
-+
-+              case WDIOC_SETTIMEOUT:
-+                      if((ret = get_user(new_wdt_timeout, (int __user *)arg)))
-+                              break;
-+                      wdt_timeout = HEARTBEAT(new_wdt_timeout);
-+                      ar2315_wdt_enable();
-+                      break;
-+
-+              case WDIOC_GETTIMEOUT:
-+                      ret = put_user(wdt_timeout, (int __user *)arg);
-+                      break;
-+      }
-+      return ret;
-+}
-+
-+static struct file_operations ar2315_wdt_fops = {
-+      .owner          = THIS_MODULE,
-+      .llseek         = no_llseek,
-+      .write          = ar2315_wdt_write,
-+      .ioctl          = ar2315_wdt_ioctl,
-+      .open           = ar2315_wdt_open,
-+      .release        = ar2315_wdt_release,
-+};
-+
-+static struct miscdevice ar2315_wdt_miscdev = {
-+      .minor  = WATCHDOG_MINOR,
-+      .name   = "watchdog",
-+      .fops   = &ar2315_wdt_fops,
-+};
-+
-+static int
-+ar2315_wdt_probe(struct platform_device *dev)
-+{
-+      int ret = 0;
-+
-+      ar2315_wdt_enable();
-+      ret = request_irq(AR531X_MISC_IRQ_WATCHDOG, ar2315_wdt_interrupt, IRQF_DISABLED, "ar2315_wdt", NULL);
-+      if(ret)
-+      {
-+              printk(KERN_ERR "ar2315wdt: failed to register inetrrupt\n");
-+              goto out;
-+      }
-+
-+      ret = misc_register(&ar2315_wdt_miscdev);
-+      if(ret)
-+              printk(KERN_ERR "ar2315wdt: failed to register miscdev\n");
-+
-+out:
-+      return ret;
-+}
-+
-+static int
-+ar2315_wdt_remove(struct platform_device *dev)
-+{
-+      misc_deregister(&ar2315_wdt_miscdev);
-+      free_irq(AR531X_MISC_IRQ_WATCHDOG, NULL);
-+      return 0;
-+}
-+
-+static struct platform_driver ar2315_wdt_driver = {
-+      .probe = ar2315_wdt_probe,
-+      .remove = ar2315_wdt_remove,
-+      .driver = {
-+              .name = "ar2315_wdt",
-+              .owner = THIS_MODULE,
-+      },
-+};
-+
-+static int __init
-+init_ar2315_wdt(void)
-+{
-+      int ret = platform_driver_register(&ar2315_wdt_driver);
-+      if(ret)
-+              printk(KERN_INFO "ar2315_wdt: error registering platfom driver!");
-+      return ret;
-+}
-+
-+static void __exit
-+exit_ar2315_wdt(void)
-+{
-+      platform_driver_unregister(&ar2315_wdt_driver);
-+}
-+
-+module_init(init_ar2315_wdt);
-+module_exit(exit_ar2315_wdt);
---- a/drivers/watchdog/Kconfig
-+++ b/drivers/watchdog/Kconfig
-@@ -840,6 +840,12 @@ config TXX9_WDT
-       help
-         Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
-+config ATHEROS_WDT
-+      tristate "Atheros wisoc Watchdog Timer"
-+      depends on ATHEROS_AR231X
-+      help
-+        Hardware driver for the Atheros wisoc Watchdog Timer.
-+
- # PARISC Architecture
- # POWERPC Architecture
---- a/drivers/watchdog/Makefile
-+++ b/drivers/watchdog/Makefile
-@@ -112,6 +112,7 @@ obj-$(CONFIG_PNX833X_WDT) += pnx833x_wdt
- obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
- obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
- obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
-+obj-$(CONFIG_ATHEROS_WDT) += ar2315-wtd.o
- # PARISC Architecture
diff --git a/target/linux/atheros/patches-2.6.33/140-redboot_partition_scan.patch b/target/linux/atheros/patches-2.6.33/140-redboot_partition_scan.patch
deleted file mode 100644 (file)
index 289d4eb..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -60,31 +60,32 @@ static int parse_redboot_partitions(stru
-       static char nullstring[] = "unallocated";
- #endif
-+      buf = vmalloc(master->erasesize);
-+      if (!buf)
-+              return -ENOMEM;
-+
-+ restart:
-       if ( directory < 0 ) {
-               offset = master->size + directory * master->erasesize;
--              while (master->block_isbad && 
-+              while (master->block_isbad &&
-                      master->block_isbad(master, offset)) {
-                       if (!offset) {
-                       nogood:
-                               printk(KERN_NOTICE "Failed to find a non-bad block to check for RedBoot partition table\n");
-+                              vfree(buf);
-                               return -EIO;
-                       }
-                       offset -= master->erasesize;
-               }
-       } else {
-               offset = directory * master->erasesize;
--              while (master->block_isbad && 
-+              while (master->block_isbad &&
-                      master->block_isbad(master, offset)) {
-                       offset += master->erasesize;
-                       if (offset == master->size)
-                               goto nogood;
-               }
-       }
--      buf = vmalloc(master->erasesize);
--
--      if (!buf)
--              return -ENOMEM;
--
-       printk(KERN_NOTICE "Searching for RedBoot partition table in %s at offset 0x%lx\n",
-              master->name, offset);
-@@ -156,6 +157,11 @@ static int parse_redboot_partitions(stru
-       }
-       if (i == numslots) {
-               /* Didn't find it */
-+              if (offset + master->erasesize < master->size) {
-+                      /* not at the end of the flash yet, maybe next block :) */
-+                      directory++;
-+                      goto restart;
-+              }
-               printk(KERN_NOTICE "No RedBoot partition table detected in %s\n",
-                      master->name);
-               ret = 0;
diff --git a/target/linux/atheros/patches-2.6.33/141-redboot_various_erase_size_fix.patch b/target/linux/atheros/patches-2.6.33/141-redboot_various_erase_size_fix.patch
deleted file mode 100644 (file)
index b9cb0b4..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -39,6 +39,22 @@ static inline int redboot_checksum(struc
-       return 1;
- }
-+static uint32_t mtd_get_offset_erasesize(struct mtd_info *mtd, uint64_t offset)
-+{
-+      struct mtd_erase_region_info *regions = mtd->eraseregions;
-+      int i;
-+
-+      for (i = 0; i < mtd->numeraseregions; i++) {
-+              if (regions[i].offset +
-+                  regions[i].numblocks * regions[i].erasesize <= offset)
-+                      continue;
-+
-+              return regions[i].erasesize;
-+      }
-+
-+      return mtd->erasesize;
-+}
-+
- static int parse_redboot_partitions(struct mtd_info *master,
-                              struct mtd_partition **pparts,
-                              unsigned long fis_origin)
-@@ -55,6 +71,7 @@ static int parse_redboot_partitions(stru
-       int namelen = 0;
-       int nulllen = 0;
-       int numslots;
-+      int first_slot;
-       unsigned long offset;
- #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-       static char nullstring[] = "unallocated";
-@@ -168,7 +185,10 @@ static int parse_redboot_partitions(stru
-               goto out;
-       }
--      for (i = 0; i < numslots; i++) {
-+      first_slot = (buf[i].flash_base & (master->erasesize - 1)) /
-+                   sizeof(struct fis_image_desc);
-+
-+      for (i = first_slot; i < first_slot + numslots; i++) {
-               struct fis_list *new_fl, **prev;
-               if (buf[i].name[0] == 0xff) {
-@@ -244,12 +264,13 @@ static int parse_redboot_partitions(stru
-       }
- #endif
-       for ( ; i<nrparts; i++) {
--              if(max_offset < buf[i].flash_base + buf[i].size)
--                      max_offset = buf[i].flash_base + buf[i].size;
-               parts[i].size = fl->img->size;
-               parts[i].offset = fl->img->flash_base;
-               parts[i].name = names;
-+              if (max_offset < parts[i].offset + parts[i].size)
-+                      max_offset = parts[i].offset + parts[i].size;
-+
-               strcpy(names, fl->img->name);
- #ifdef CONFIG_MTD_REDBOOT_PARTS_READONLY
-               if (!memcmp(names, "RedBoot", 8) ||
-@@ -279,7 +300,9 @@ static int parse_redboot_partitions(stru
-               fl = fl->next;
-               kfree(tmp_fl);
-       }
--      if(master->size - max_offset >= master->erasesize)
-+
-+      if (master->size - max_offset >=
-+          mtd_get_offset_erasesize(master, max_offset))
-       {
-               parts[nrparts].size = master->size - max_offset;
-               parts[nrparts].offset = max_offset;
diff --git a/target/linux/atheros/patches-2.6.33/200-ar2313_enable_mvswitch.patch b/target/linux/atheros/patches-2.6.33/200-ar2313_enable_mvswitch.patch
deleted file mode 100644 (file)
index b97a62d..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
---- a/drivers/net/ar231x.c
-+++ b/drivers/net/ar231x.c
-@@ -735,6 +735,7 @@ static void ar231x_load_rx_ring(struct n
-       for (i = 0; i < nr_bufs; i++) {
-               struct sk_buff *skb;
-               ar231x_descr_t *rd;
-+              int offset = RX_OFFSET;
-               if (sp->rx_skb[idx])
-                       break;
-@@ -750,7 +751,9 @@ static void ar231x_load_rx_ring(struct n
-                * Make sure IP header starts on a fresh cache line.
-                */
-               skb->dev = dev;
--              skb_reserve(skb, RX_OFFSET);
-+              if (sp->phy_dev)
-+                      offset += sp->phy_dev->pkt_align;
-+              skb_reserve(skb, offset);
-               sp->rx_skb[idx] = skb;
-               rd = (ar231x_descr_t *) & sp->rx_ring[idx];
-@@ -824,20 +827,23 @@ static int ar231x_rx_int(struct net_devi
-                       /* alloc new buffer. */
-                       skb_new = netdev_alloc_skb(dev, AR2313_BUFSIZE + RX_OFFSET);
-                       if (skb_new != NULL) {
-+                              int offset;
-                               skb = sp->rx_skb[idx];
-                               /* set skb */
-                               skb_put(skb,
-                                               ((status >> DMA_RX_LEN_SHIFT) & 0x3fff) - CRC_LEN);
--
-                               dev->stats.rx_bytes += skb->len;
--                              skb->protocol = eth_type_trans(skb, dev);
--                              /* pass the packet to upper layers */
--                              netif_rx(skb);
-+                              /* pass the packet to upper layers */
-+                              sp->rx(skb);
-                               skb_new->dev = dev;
-+
-                               /* 16 bit align */
--                              skb_reserve(skb_new, RX_OFFSET);
-+                              offset = RX_OFFSET;
-+                              if (sp->phy_dev)
-+                                      offset += sp->phy_dev->pkt_align;
-+                              skb_reserve(skb_new, offset);
-                               /* reset descriptor's curr_addr */
-                               rxdesc->addr = virt_to_phys(skb_new->data);
-@@ -1239,6 +1245,8 @@ static int ar231x_mdiobus_probe (struct 
-               return PTR_ERR(phydev);
-       }
-+      sp->rx = phydev->netif_rx;
-+
-       /* mask with MAC supported features */
-       phydev->supported &= (SUPPORTED_10baseT_Half
-               | SUPPORTED_10baseT_Full
---- a/drivers/net/ar231x.h
-+++ b/drivers/net/ar231x.h
-@@ -221,6 +221,8 @@ typedef struct {
-  */
- struct ar231x_private {
-       struct net_device *dev;
-+      int (*rx)(struct sk_buff *skb);
-+
-       int version;
-       u32 mb[2];
diff --git a/target/linux/atheros/patches-2.6.33/210-reset_button.patch b/target/linux/atheros/patches-2.6.33/210-reset_button.patch
deleted file mode 100644 (file)
index 3c91818..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
---- a/arch/mips/ar231x/Makefile
-+++ b/arch/mips/ar231x/Makefile
-@@ -8,7 +8,7 @@
- # Copyright (C) 2006-2009 Felix Fietkau <nbd@openwrt.org>
- #
--obj-y += board.o prom.o devices.o
-+obj-y += board.o prom.o devices.o reset.o
- obj-$(CONFIG_EARLY_PRINTK) += early_printk.o
---- /dev/null
-+++ b/arch/mips/ar231x/reset.c
-@@ -0,0 +1,160 @@
-+#include <linux/init.h>
-+#include <linux/module.h>
-+#include <linux/timer.h>
-+#include <linux/interrupt.h>
-+#include <linux/kobject.h>
-+#include <linux/workqueue.h>
-+#include <linux/skbuff.h>
-+#include <linux/netlink.h>
-+#include <net/sock.h>
-+#include <asm/uaccess.h>
-+#include <ar231x_platform.h>
-+#include <ar231x.h>
-+#include <gpio.h>
-+#include "devices.h"
-+
-+#define AR531X_RESET_GPIO_IRQ (AR531X_GPIO_IRQ(ar231x_board.config->resetConfigGpio))
-+
-+struct event_t {
-+      struct work_struct wq;
-+      int set;
-+      unsigned long jiffies;
-+};
-+
-+static struct timer_list rst_button_timer;
-+static unsigned long seen;
-+
-+extern struct sock *uevent_sock;
-+extern u64 uevent_next_seqnum(void);
-+
-+static int no_release_workaround = 1;
-+module_param(no_release_workaround, int, 0);
-+
-+static inline void
-+add_msg(struct sk_buff *skb, char *msg)
-+{
-+      char *scratch;
-+      scratch = skb_put(skb, strlen(msg) + 1);
-+      sprintf(scratch, msg);
-+}
-+
-+static void
-+hotplug_button(struct work_struct *wq)
-+{
-+      struct sk_buff *skb;
-+      struct event_t *event;
-+      size_t len;
-+      char *scratch, *s;
-+      char buf[128];
-+
-+      event = container_of(wq, struct event_t, wq);
-+      if (!uevent_sock)
-+              goto done;
-+
-+      /* allocate message with the maximum possible size */
-+      s = event->set ? "pressed" : "released";
-+      len = strlen(s) + 2;
-+      skb = alloc_skb(NLMSG_GOODSIZE, GFP_KERNEL);
-+      if (!skb)
-+              goto done;
-+
-+      /* add header */
-+      scratch = skb_put(skb, len);
-+      sprintf(scratch, "%s@",s);
-+
-+      /* copy keys to our continuous event payload buffer */
-+      add_msg(skb, "HOME=/");
-+      add_msg(skb, "PATH=/sbin:/bin:/usr/sbin:/usr/bin");
-+      add_msg(skb, "SUBSYSTEM=button");
-+      add_msg(skb, "BUTTON=reset");
-+      add_msg(skb, (event->set ? "ACTION=pressed" : "ACTION=released"));
-+      sprintf(buf, "SEEN=%ld", (event->jiffies - seen)/HZ);
-+      add_msg(skb, buf);
-+      snprintf(buf, 128, "SEQNUM=%llu", uevent_next_seqnum());
-+      add_msg(skb, buf);
-+
-+      NETLINK_CB(skb).dst_group = 1;
-+      netlink_broadcast(uevent_sock, skb, 0, 1, GFP_KERNEL);
-+
-+done:
-+      kfree(event);
-+}
-+
-+static void
-+reset_button_poll(unsigned long unused)
-+{
-+      struct event_t *event;
-+      int gpio = ~0;
-+
-+      if(!no_release_workaround)
-+              return;
-+
-+      gpio = ar231x_gpiodev->get();
-+      gpio &= (1 << (AR531X_RESET_GPIO_IRQ - AR531X_GPIO_IRQ_BASE));
-+      if(gpio) {
-+              rst_button_timer.expires = jiffies + (HZ / 4);
-+              add_timer(&rst_button_timer);
-+              return;
-+      }
-+
-+      event = (struct event_t *) kzalloc(sizeof(struct event_t), GFP_ATOMIC);
-+      if (!event)
-+              return;
-+
-+      event->set = 0;
-+      event->jiffies = jiffies;
-+      INIT_WORK(&event->wq, hotplug_button);
-+      schedule_work(&event->wq);
-+}
-+
-+static irqreturn_t
-+button_handler(int irq, void *dev_id)
-+{
-+      static int pressed = 0;
-+      struct event_t *event;
-+      u32 gpio = ~0;
-+
-+      event = (struct event_t *) kzalloc(sizeof(struct event_t), GFP_ATOMIC);
-+      if (!event)
-+              return IRQ_NONE;
-+
-+      pressed = !pressed;
-+
-+      gpio = ar231x_gpiodev->get() & (1 << (irq - AR531X_GPIO_IRQ_BASE));
-+
-+      event->set = gpio;
-+      if(!event->set)
-+              no_release_workaround = 0;
-+
-+      event->jiffies = jiffies;
-+
-+      INIT_WORK(&event->wq, hotplug_button);
-+      schedule_work(&event->wq);
-+
-+      seen = jiffies;
-+      if(event->set && no_release_workaround)
-+              mod_timer(&rst_button_timer, jiffies + (HZ / 4));
-+
-+      return IRQ_HANDLED;
-+}
-+
-+
-+static int __init
-+ar231x_init_reset(void)
-+{
-+      seen = jiffies;
-+
-+      if (ar231x_board.config->resetConfigGpio == 0xffff)
-+              return -ENODEV;
-+
-+      init_timer(&rst_button_timer);
-+      rst_button_timer.function = reset_button_poll;
-+      rst_button_timer.expires = jiffies + HZ / 50;
-+      add_timer(&rst_button_timer);
-+
-+      request_irq(AR531X_RESET_GPIO_IRQ, &button_handler, IRQF_SAMPLE_RANDOM, "ar231x_reset", NULL);
-+
-+      return 0;
-+}
-+
-+module_init(ar231x_init_reset);
diff --git a/target/linux/atheros/patches-2.6.33/220-enet_micrel_workaround.patch b/target/linux/atheros/patches-2.6.33/220-enet_micrel_workaround.patch
deleted file mode 100644 (file)
index dc7d63d..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
---- a/drivers/net/ar231x.c
-+++ b/drivers/net/ar231x.c
-@@ -148,6 +148,7 @@ static int ar231x_mdiobus_write(struct m
- static int ar231x_mdiobus_reset(struct mii_bus *bus);
- static int ar231x_mdiobus_probe (struct net_device *dev);
- static void ar231x_adjust_link(struct net_device *dev);
-+static bool no_phy = false;
- #ifndef ERR
- #define ERR(fmt, args...) printk("%s: " fmt, __func__, ##args)
-@@ -278,6 +279,21 @@ int __init ar231x_probe(struct platform_
-       mdiobus_register(sp->mii_bus);
-+      /* Workaround for Micrel switch, which is only available on
-+       * one PHY and cannot be configured through MDIO */
-+      if (!no_phy) {
-+              u32 phy_id = 0;
-+              get_phy_id(sp->mii_bus, 1, &phy_id);
-+              if (phy_id == 0x00221450)
-+                      no_phy = true;
-+      }
-+      if (no_phy) {
-+              sp->link = 1;
-+              netif_carrier_on(dev);
-+              return 0;
-+      }
-+      no_phy = true;
-+
-       if (ar231x_mdiobus_probe(dev) != 0) {
-               printk(KERN_ERR "%s: mdiobus_probe failed\n", dev->name);
-               rx_tasklet_cleanup(dev);
-@@ -334,8 +350,10 @@ static int __exit ar231x_remove(struct p
-       rx_tasklet_cleanup(dev);
-       ar231x_init_cleanup(dev);
-       unregister_netdev(dev);
--      mdiobus_unregister(sp->mii_bus);
--      mdiobus_free(sp->mii_bus);
-+      if (sp->mii_bus) {
-+              mdiobus_unregister(sp->mii_bus);
-+              mdiobus_free(sp->mii_bus);
-+      }
-       kfree(dev);
-       return 0;
- }
-@@ -836,7 +854,12 @@ static int ar231x_rx_int(struct net_devi
-                               dev->stats.rx_bytes += skb->len;
-                               /* pass the packet to upper layers */
--                              sp->rx(skb);
-+                              if (sp->rx) {
-+                                      sp->rx(skb);
-+                              } else {
-+                                      skb->protocol = eth_type_trans(skb, skb->dev);
-+                                      netif_rx(skb);
-+                              }
-                               skb_new->dev = dev;
-                               /* 16 bit align */
-@@ -1123,6 +1146,9 @@ static int ar231x_ioctl(struct net_devic
-       struct ar231x_private *sp = netdev_priv(dev);
-       int ret;
-+      if (!sp->phy_dev)
-+              return -ENODEV;
-+
-       switch (cmd) {
-       case SIOCETHTOOL:
diff --git a/target/linux/brcm47xx/config-2.6.33 b/target/linux/brcm47xx/config-2.6.33
deleted file mode 100644 (file)
index ffc4913..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_ARPD is not set
-CONFIG_B44=y
-CONFIG_B44_PCI=y
-CONFIG_B44_PCICORE_AUTOSELECT=y
-CONFIG_B44_PCI_AUTOSELECT=y
-CONFIG_BCM47XX=y
-CONFIG_BCM47XX_WDT=y
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CFE=y
-CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200"
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-# CONFIG_CPU_BIG_ENDIAN is not set
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPS32_R1=y
-# CONFIG_CPU_MIPS32_R2 is not set
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR1=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-CONFIG_DECOMPRESS_LZMA=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-# CONFIG_HAMRADIO is not set
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HW_HAS_PCI=y
-CONFIG_HW_RANDOM=y
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-CONFIG_IRQ_CPU=y
-CONFIG_KALLSYMS=y
-CONFIG_LEDS_GPIO=y
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_MIKROTIK_RB532 is not set
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-# CONFIG_MIPS_MACHINE is not set
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MTD_BCM47XX=y
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PHYLIB=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POWERTV is not set
-# CONFIG_PROC_KCORE is not set
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-CONFIG_SERIAL_8250_EXTENDED=y
-# CONFIG_SERIAL_8250_MANY_PORTS is not set
-# CONFIG_SERIAL_8250_RSA is not set
-CONFIG_SERIAL_8250_SHARE_IRQ=y
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-CONFIG_SSB=y
-CONFIG_SSB_B43_PCI_BRIDGE=y
-CONFIG_SSB_DEBUG=y
-CONFIG_SSB_DRIVER_EXTIF=y
-CONFIG_SSB_DRIVER_GIGE=y
-CONFIG_SSB_DRIVER_MIPS=y
-CONFIG_SSB_DRIVER_PCICORE=y
-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
-CONFIG_SSB_EMBEDDED=y
-CONFIG_SSB_PCICORE_HOSTMODE=y
-CONFIG_SSB_PCIHOST=y
-CONFIG_SSB_PCIHOST_POSSIBLE=y
-CONFIG_SSB_SERIAL=y
-CONFIG_SSB_SPROM=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
-# CONFIG_TC35815 is not set
-# CONFIG_TINY_RCU is not set
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_TREE_RCU=y
-CONFIG_USB_SUPPORT=y
-CONFIG_WATCHDOG_NOWAYOUT=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/brcm47xx/patches-2.6.33/110-flash_map.patch b/target/linux/brcm47xx/patches-2.6.33/110-flash_map.patch
deleted file mode 100644 (file)
index 307bc7b..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/mtd/maps/Kconfig
-+++ b/drivers/mtd/maps/Kconfig
-@@ -325,6 +325,12 @@ config MTD_CFI_FLAGADM
-         Mapping for the Flaga digital module. If you don't have one, ignore
-         this setting.
-+config MTD_BCM47XX
-+      tristate "BCM47xx flash device"
-+      depends on MIPS && MTD_CFI && BCM47XX
-+      help
-+        Support for the flash chips on the BCM947xx board.
-+
- config MTD_REDWOOD
-       tristate "CFI Flash devices mapped on IBM Redwood"
-       depends on MTD_CFI && ( REDWOOD_4 || REDWOOD_5 || REDWOOD_6 )
---- a/drivers/mtd/maps/Makefile
-+++ b/drivers/mtd/maps/Makefile
-@@ -29,6 +29,7 @@ obj-$(CONFIG_MTD_PMC_MSP_EVM)   += pmcms
- obj-$(CONFIG_MTD_PCMCIA)      += pcmciamtd.o
- obj-$(CONFIG_MTD_RPXLITE)     += rpxlite.o
- obj-$(CONFIG_MTD_TQM8XXL)     += tqm8xxl.o
-+obj-$(CONFIG_MTD_BCM47XX)     += bcm47xx-flash.o
- obj-$(CONFIG_MTD_SA1100)      += sa1100-flash.o
- obj-$(CONFIG_MTD_SBC_GXX)     += sbc_gxx.o
- obj-$(CONFIG_MTD_SC520CDP)    += sc520cdp.o
diff --git a/target/linux/brcm47xx/patches-2.6.33/130-remove_scache.patch b/target/linux/brcm47xx/patches-2.6.33/130-remove_scache.patch
deleted file mode 100644 (file)
index fc750eb..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -205,7 +205,6 @@ config MIPS_MALTA
-       select I8259
-       select MIPS_BOARDS_GEN
-       select MIPS_BONITO64
--      select MIPS_CPU_SCACHE
-       select PCI_GT64XXX_PCI0
-       select MIPS_MSC
-       select SWAP_IO_SPACE
-@@ -1561,13 +1560,6 @@ config IP22_CPU_SCACHE
-       bool
-       select BOARD_SCACHE
--#
--# Support for a MIPS32 / MIPS64 style S-caches
--#
--config MIPS_CPU_SCACHE
--      bool
--      select BOARD_SCACHE
--
- config R5000_CPU_SCACHE
-       bool
-       select BOARD_SCACHE
---- a/arch/mips/kernel/cpu-probe.c
-+++ b/arch/mips/kernel/cpu-probe.c
-@@ -759,6 +759,8 @@ static inline void cpu_probe_mips(struct
-       case PRID_IMP_25KF:
-               c->cputype = CPU_25KF;
-               __cpu_name[cpu] = "MIPS 25Kc";
-+              /* Probe for L2 cache */
-+              c->scache.flags &= ~MIPS_CACHE_NOT_PRESENT;
-               break;
-       case PRID_IMP_34K:
-               c->cputype = CPU_34K;
---- a/arch/mips/mm/Makefile
-+++ b/arch/mips/mm/Makefile
-@@ -33,6 +33,5 @@ obj-$(CONFIG_CPU_CAVIUM_OCTEON)      += c-oct
- obj-$(CONFIG_IP22_CPU_SCACHE) += sc-ip22.o
- obj-$(CONFIG_R5000_CPU_SCACHE)  += sc-r5k.o
- obj-$(CONFIG_RM7000_CPU_SCACHE)       += sc-rm7k.o
--obj-$(CONFIG_MIPS_CPU_SCACHE) += sc-mips.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/mm/c-r4k.c
-+++ b/arch/mips/mm/c-r4k.c
-@@ -1148,7 +1148,6 @@ static void __init loongson2_sc_init(voi
- extern int r5k_sc_init(void);
- extern int rm7k_sc_init(void);
--extern int mips_sc_init(void);
- static void __cpuinit setup_scache(void)
- {
-@@ -1202,29 +1201,17 @@ static void __cpuinit setup_scache(void)
- #endif
-       default:
--              if (c->isa_level == MIPS_CPU_ISA_M32R1 ||
--                  c->isa_level == MIPS_CPU_ISA_M32R2 ||
--                  c->isa_level == MIPS_CPU_ISA_M64R1 ||
--                  c->isa_level == MIPS_CPU_ISA_M64R2) {
--#ifdef CONFIG_MIPS_CPU_SCACHE
--                      if (mips_sc_init ()) {
--                              scache_size = c->scache.ways * c->scache.sets * c->scache.linesz;
--                              printk("MIPS secondary cache %ldkB, %s, linesize %d bytes.\n",
--                                     scache_size >> 10,
--                                     way_string[c->scache.ways], c->scache.linesz);
--                      }
--#else
--                      if (!(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
--                              panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
--#endif
--                      return;
--              }
-               sc_present = 0;
-       }
-       if (!sc_present)
-               return;
-+      if ((c->isa_level == MIPS_CPU_ISA_M32R1 ||
-+           c->isa_level == MIPS_CPU_ISA_M64R1) &&
-+          !(c->scache.flags & MIPS_CACHE_NOT_PRESENT))
-+              panic("Dunno how to handle MIPS32 / MIPS64 second level cache");
-+
-       /* compute a couple of other cache variables */
-       c->scache.waysize = scache_size / c->scache.ways;
diff --git a/target/linux/brcm47xx/patches-2.6.33/150-cpu_fixes.patch b/target/linux/brcm47xx/patches-2.6.33/150-cpu_fixes.patch
deleted file mode 100644 (file)
index 4198614..0000000
+++ /dev/null
@@ -1,367 +0,0 @@
---- a/arch/mips/include/asm/r4kcache.h
-+++ b/arch/mips/include/asm/r4kcache.h
-@@ -17,6 +17,20 @@
- #include <asm/cpu-features.h>
- #include <asm/mipsmtregs.h>
-+#ifdef CONFIG_BCM47XX
-+#include <asm/paccess.h>
-+#include <linux/ssb/ssb.h>
-+#define BCM4710_DUMMY_RREG() ((void) *((u8 *) KSEG1ADDR(SSB_ENUM_BASE + SSB_IMSTATE)))
-+
-+#define BCM4710_FILL_TLB(addr) (*(volatile unsigned long *)(addr))
-+#define BCM4710_PROTECTED_FILL_TLB(addr) ({ unsigned long x; get_dbe(x, (volatile unsigned long *)(addr)); })
-+#else
-+#define BCM4710_DUMMY_RREG()
-+
-+#define BCM4710_FILL_TLB(addr)
-+#define BCM4710_PROTECTED_FILL_TLB(addr)
-+#endif
-+
- /*
-  * This macro return a properly sign-extended address suitable as base address
-  * for indexed cache operations.  Two issues here:
-@@ -150,6 +164,7 @@ static inline void flush_icache_line_ind
- static inline void flush_dcache_line_indexed(unsigned long addr)
- {
-       __dflush_prologue
-+      BCM4710_DUMMY_RREG();
-       cache_op(Index_Writeback_Inv_D, addr);
-       __dflush_epilogue
- }
-@@ -169,6 +184,7 @@ static inline void flush_icache_line(uns
- static inline void flush_dcache_line(unsigned long addr)
- {
-       __dflush_prologue
-+      BCM4710_DUMMY_RREG();
-       cache_op(Hit_Writeback_Inv_D, addr);
-       __dflush_epilogue
- }
-@@ -176,6 +192,7 @@ static inline void flush_dcache_line(uns
- static inline void invalidate_dcache_line(unsigned long addr)
- {
-       __dflush_prologue
-+      BCM4710_DUMMY_RREG();
-       cache_op(Hit_Invalidate_D, addr);
-       __dflush_epilogue
- }
-@@ -208,6 +225,7 @@ static inline void flush_scache_line(uns
-  */
- static inline void protected_flush_icache_line(unsigned long addr)
- {
-+      BCM4710_DUMMY_RREG();
-       protected_cache_op(Hit_Invalidate_I, addr);
- }
-@@ -219,6 +237,7 @@ static inline void protected_flush_icach
-  */
- static inline void protected_writeback_dcache_line(unsigned long addr)
- {
-+      BCM4710_DUMMY_RREG();
-       protected_cache_op(Hit_Writeback_Inv_D, addr);
- }
-@@ -339,8 +358,52 @@ static inline void invalidate_tcache_pag
-               : "r" (base),                                           \
-                 "i" (op));
-+static inline void blast_dcache(void)
-+{
-+      unsigned long start = KSEG0;
-+      unsigned long dcache_size = current_cpu_data.dcache.waysize * current_cpu_data.dcache.ways;
-+      unsigned long end = (start + dcache_size);
-+
-+      do {
-+              BCM4710_DUMMY_RREG();
-+              cache_op(Index_Writeback_Inv_D, start);
-+              start += current_cpu_data.dcache.linesz;
-+      } while(start < end);
-+}
-+
-+static inline void blast_dcache_page(unsigned long page)
-+{
-+      unsigned long start = page;
-+      unsigned long end = start + PAGE_SIZE;
-+
-+      BCM4710_FILL_TLB(start);
-+      do {
-+              BCM4710_DUMMY_RREG();
-+              cache_op(Hit_Writeback_Inv_D, start);
-+              start += current_cpu_data.dcache.linesz;
-+      } while(start < end);
-+}
-+
-+static inline void blast_dcache_page_indexed(unsigned long page)
-+{
-+      unsigned long start = page;
-+      unsigned long end = start + PAGE_SIZE;
-+      unsigned long ws_inc = 1UL << current_cpu_data.dcache.waybit;
-+      unsigned long ws_end = current_cpu_data.dcache.ways <<
-+                             current_cpu_data.dcache.waybit;
-+      unsigned long ws, addr;
-+      for (ws = 0; ws < ws_end; ws += ws_inc) {
-+              start = page + ws;
-+              for (addr = start; addr < end; addr += current_cpu_data.dcache.linesz) {
-+                      BCM4710_DUMMY_RREG();
-+                      cache_op(Index_Writeback_Inv_D, addr);
-+              }
-+      }
-+}
-+
-+
- /* build blast_xxx, blast_xxx_page, blast_xxx_page_indexed */
--#define __BUILD_BLAST_CACHE(pfx, desc, indexop, hitop, lsize) \
-+#define __BUILD_BLAST_CACHE(pfx, desc, indexop, hitop, lsize, war) \
- static inline void blast_##pfx##cache##lsize(void)                    \
- {                                                                     \
-       unsigned long start = INDEX_BASE;                               \
-@@ -352,6 +415,7 @@ static inline void blast_##pfx##cache##l
-                                                                       \
-       __##pfx##flush_prologue                                         \
-                                                                       \
-+      war                                                             \
-       for (ws = 0; ws < ws_end; ws += ws_inc)                         \
-               for (addr = start; addr < end; addr += lsize * 32)      \
-                       cache##lsize##_unroll32(addr|ws, indexop);      \
-@@ -366,6 +430,7 @@ static inline void blast_##pfx##cache##l
-                                                                       \
-       __##pfx##flush_prologue                                         \
-                                                                       \
-+      war                                                             \
-       do {                                                            \
-               cache##lsize##_unroll32(start, hitop);                  \
-               start += lsize * 32;                                    \
-@@ -384,6 +449,8 @@ static inline void blast_##pfx##cache##l
-                              current_cpu_data.desc.waybit;            \
-       unsigned long ws, addr;                                         \
-                                                                       \
-+      war                                                             \
-+                                                                      \
-       __##pfx##flush_prologue                                         \
-                                                                       \
-       for (ws = 0; ws < ws_end; ws += ws_inc)                         \
-@@ -393,36 +460,38 @@ static inline void blast_##pfx##cache##l
-       __##pfx##flush_epilogue                                         \
- }
--__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 16)
--__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 16)
--__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16)
--__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 32)
--__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 32)
--__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32)
--__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 64)
--__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64)
--__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64)
--__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128)
--
--__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 16)
--__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 32)
--__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 16)
--__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 32)
--__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 64)
--__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 128)
-+__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 16, )
-+__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 16, BCM4710_FILL_TLB(start);)
-+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 16, )
-+__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 32, )
-+__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 32, BCM4710_FILL_TLB(start);)
-+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 32, )
-+__BUILD_BLAST_CACHE(d, dcache, Index_Writeback_Inv_D, Hit_Writeback_Inv_D, 64, )
-+__BUILD_BLAST_CACHE(i, icache, Index_Invalidate_I, Hit_Invalidate_I, 64, BCM4710_FILL_TLB(start);)
-+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 64, )
-+__BUILD_BLAST_CACHE(s, scache, Index_Writeback_Inv_SD, Hit_Writeback_Inv_SD, 128, )
-+
-+__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 16, )
-+__BUILD_BLAST_CACHE(inv_d, dcache, Index_Writeback_Inv_D, Hit_Invalidate_D, 32, )
-+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 16, )
-+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 32, )
-+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 64, )
-+__BUILD_BLAST_CACHE(inv_s, scache, Index_Writeback_Inv_SD, Hit_Invalidate_SD, 128, )
- /* build blast_xxx_range, protected_blast_xxx_range */
--#define __BUILD_BLAST_CACHE_RANGE(pfx, desc, hitop, prot) \
-+#define __BUILD_BLAST_CACHE_RANGE(pfx, desc, hitop, prot, war, war2) \
- static inline void prot##blast_##pfx##cache##_range(unsigned long start, \
-                                                   unsigned long end)  \
- {                                                                     \
-       unsigned long lsize = cpu_##desc##_line_size();                 \
-       unsigned long addr = start & ~(lsize - 1);                      \
-       unsigned long aend = (end - 1) & ~(lsize - 1);                  \
-+      war                                                             \
-                                                                       \
-       __##pfx##flush_prologue                                         \
-                                                                       \
-       while (1) {                                                     \
-+              war2                                            \
-               prot##cache_op(hitop, addr);                            \
-               if (addr == aend)                                       \
-                       break;                                          \
-@@ -432,13 +501,13 @@ static inline void prot##blast_##pfx##ca
-       __##pfx##flush_epilogue                                         \
- }
--__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D, protected_)
--__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, protected_)
--__BUILD_BLAST_CACHE_RANGE(i, icache, Hit_Invalidate_I, protected_)
--__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D, )
--__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, )
-+__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D, protected_, BCM4710_PROTECTED_FILL_TLB(addr); BCM4710_PROTECTED_FILL_TLB(aend);, BCM4710_DUMMY_RREG();)
-+__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD, protected_,, )
-+__BUILD_BLAST_CACHE_RANGE(i, icache, Hit_Invalidate_I, protected_,, )
-+__BUILD_BLAST_CACHE_RANGE(d, dcache, Hit_Writeback_Inv_D,, BCM4710_FILL_TLB(addr); BCM4710_FILL_TLB(aend);, BCM4710_DUMMY_RREG();)
-+__BUILD_BLAST_CACHE_RANGE(s, scache, Hit_Writeback_Inv_SD,,, )
- /* blast_inv_dcache_range */
--__BUILD_BLAST_CACHE_RANGE(inv_d, dcache, Hit_Invalidate_D, )
--__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD, )
-+__BUILD_BLAST_CACHE_RANGE(inv_d, dcache, Hit_Invalidate_D,,,BCM4710_DUMMY_RREG();)
-+__BUILD_BLAST_CACHE_RANGE(inv_s, scache, Hit_Invalidate_SD,,, )
- #endif /* _ASM_R4KCACHE_H */
---- a/arch/mips/include/asm/stackframe.h
-+++ b/arch/mips/include/asm/stackframe.h
-@@ -430,6 +430,10 @@
-               .macro  RESTORE_SP_AND_RET
-               LONG_L  sp, PT_R29(sp)
-               .set    mips3
-+#ifdef CONFIG_BCM47XX
-+              nop
-+              nop
-+#endif
-               eret
-               .set    mips0
-               .endm
---- a/arch/mips/kernel/genex.S
-+++ b/arch/mips/kernel/genex.S
-@@ -52,6 +52,10 @@ NESTED(except_vec1_generic, 0, sp)
- NESTED(except_vec3_generic, 0, sp)
-       .set    push
-       .set    noat
-+#ifdef CONFIG_BCM47XX
-+      nop
-+      nop
-+#endif
- #if R5432_CP0_INTERRUPT_WAR
-       mfc0    k0, CP0_INDEX
- #endif
---- a/arch/mips/mm/c-r4k.c
-+++ b/arch/mips/mm/c-r4k.c
-@@ -35,6 +35,9 @@
- #include <asm/cacheflush.h> /* for run_uncached() */
-+/* For enabling BCM4710 cache workarounds */
-+int bcm4710 = 0;
-+
- /*
-  * Special Variant of smp_call_function for use by cache functions:
-  *
-@@ -111,6 +114,9 @@ static void __cpuinit r4k_blast_dcache_p
- {
-       unsigned long  dc_lsize = cpu_dcache_line_size();
-+      if (bcm4710)
-+              r4k_blast_dcache_page = blast_dcache_page;
-+      else
-       if (dc_lsize == 0)
-               r4k_blast_dcache_page = (void *)cache_noop;
-       else if (dc_lsize == 16)
-@@ -127,6 +133,9 @@ static void __cpuinit r4k_blast_dcache_p
- {
-       unsigned long dc_lsize = cpu_dcache_line_size();
-+      if (bcm4710)
-+              r4k_blast_dcache_page_indexed = blast_dcache_page_indexed;
-+      else
-       if (dc_lsize == 0)
-               r4k_blast_dcache_page_indexed = (void *)cache_noop;
-       else if (dc_lsize == 16)
-@@ -143,6 +152,9 @@ static void __cpuinit r4k_blast_dcache_s
- {
-       unsigned long dc_lsize = cpu_dcache_line_size();
-+      if (bcm4710)
-+              r4k_blast_dcache = blast_dcache;
-+      else
-       if (dc_lsize == 0)
-               r4k_blast_dcache = (void *)cache_noop;
-       else if (dc_lsize == 16)
-@@ -680,6 +692,8 @@ static void local_r4k_flush_cache_sigtra
-       unsigned long addr = (unsigned long) arg;
-       R4600_HIT_CACHEOP_WAR_IMPL;
-+      BCM4710_PROTECTED_FILL_TLB(addr);
-+      BCM4710_PROTECTED_FILL_TLB(addr + 4);
-       if (dc_lsize)
-               protected_writeback_dcache_line(addr & ~(dc_lsize - 1));
-       if (!cpu_icache_snoops_remote_store && scache_size)
-@@ -1298,6 +1312,17 @@ static void __cpuinit coherency_setup(vo
-        * silly idea of putting something else there ...
-        */
-       switch (current_cpu_type()) {
-+      case CPU_BCM3302:
-+              {
-+                      u32 cm;
-+                      cm = read_c0_diag();
-+                      /* Enable icache */
-+                      cm |= (1 << 31);
-+                      /* Enable dcache */
-+                      cm |= (1 << 30);
-+                      write_c0_diag(cm);
-+              }
-+              break;
-       case CPU_R4000PC:
-       case CPU_R4000SC:
-       case CPU_R4000MC:
-@@ -1354,6 +1379,15 @@ void __cpuinit r4k_cache_init(void)
-               break;
-       }
-+      /* Check if special workarounds are required */
-+#ifdef CONFIG_BCM47XX
-+      if (current_cpu_data.cputype == CPU_BCM4710 && (current_cpu_data.processor_id & 0xff) == 0) {
-+              printk("Enabling BCM4710A0 cache workarounds.\n");
-+              bcm4710 = 1;
-+      } else
-+#endif
-+              bcm4710 = 0;
-+
-       probe_pcache();
-       setup_scache();
-@@ -1412,5 +1446,13 @@ void __cpuinit r4k_cache_init(void)
- #if !defined(CONFIG_MIPS_CMP)
-       local_r4k___flush_cache_all(NULL);
- #endif
-+#ifdef CONFIG_BCM47XX
-+      {
-+              static void (*_coherency_setup)(void);
-+              _coherency_setup = (void (*)(void)) KSEG1ADDR(coherency_setup);
-+              _coherency_setup();
-+      }
-+#else
-       coherency_setup();
-+#endif
- }
---- a/arch/mips/mm/tlbex.c
-+++ b/arch/mips/mm/tlbex.c
-@@ -749,6 +749,9 @@ static void __cpuinit build_r4000_tlb_re
-               /* No need for uasm_i_nop */
-       }
-+#ifdef CONFIG_BCM47XX
-+      uasm_i_nop(&p);
-+#endif
- #ifdef CONFIG_64BIT
-       build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */
- #else
-@@ -1203,6 +1206,9 @@ build_r4000_tlbchange_handler_head(u32 *
-                                  struct uasm_reloc **r, unsigned int pte,
-                                  unsigned int ptr)
- {
-+#ifdef CONFIG_BCM47XX
-+      uasm_i_nop(p);
-+#endif
- #ifdef CONFIG_64BIT
-       build_get_pmde64(p, l, r, pte, ptr); /* get pmd in ptr */
- #else
diff --git a/target/linux/brcm47xx/patches-2.6.33/160-kmap_coherent.patch b/target/linux/brcm47xx/patches-2.6.33/160-kmap_coherent.patch
deleted file mode 100644 (file)
index 9cba353..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
---- a/arch/mips/include/asm/cpu-features.h
-+++ b/arch/mips/include/asm/cpu-features.h
-@@ -107,6 +107,9 @@
- #ifndef cpu_has_pindexed_dcache
- #define cpu_has_pindexed_dcache       (cpu_data[0].dcache.flags & MIPS_CACHE_PINDEX)
- #endif
-+#ifndef cpu_use_kmap_coherent
-+#define cpu_use_kmap_coherent 1
-+#endif
- /*
-  * I-Cache snoops remote store.  This only matters on SMP.  Some multiprocessors
---- /dev/null
-+++ b/arch/mips/include/asm/mach-bcm47xx/cpu-feature-overrides.h
-@@ -0,0 +1,13 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2005 Ralf Baechle (ralf@linux-mips.org)
-+ */
-+#ifndef __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H
-+#define __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H
-+
-+#define cpu_use_kmap_coherent 0
-+
-+#endif /* __ASM_MACH_BCM47XX_CPU_FEATURE_OVERRIDES_H */
---- a/arch/mips/mm/c-r4k.c
-+++ b/arch/mips/mm/c-r4k.c
-@@ -507,7 +507,7 @@ static inline void local_r4k_flush_cache
-                */
-               map_coherent = (cpu_has_dc_aliases &&
-                               page_mapped(page) && !Page_dcache_dirty(page));
--              if (map_coherent)
-+              if (map_coherent && cpu_use_kmap_coherent)
-                       vaddr = kmap_coherent(page, addr);
-               else
-                       vaddr = kmap_atomic(page, KM_USER0);
-@@ -530,7 +530,7 @@ static inline void local_r4k_flush_cache
-       }
-       if (vaddr) {
--              if (map_coherent)
-+              if (map_coherent && cpu_use_kmap_coherent)
-                       kunmap_coherent();
-               else
-                       kunmap_atomic(vaddr, KM_USER0);
---- a/arch/mips/mm/init.c
-+++ b/arch/mips/mm/init.c
-@@ -209,7 +209,7 @@ void copy_user_highpage(struct page *to,
-       void *vfrom, *vto;
-       vto = kmap_atomic(to, KM_USER1);
--      if (cpu_has_dc_aliases &&
-+      if (cpu_has_dc_aliases && cpu_use_kmap_coherent &&
-           page_mapped(from) && !Page_dcache_dirty(from)) {
-               vfrom = kmap_coherent(from, vaddr);
-               copy_page(vto, vfrom);
-@@ -231,7 +231,7 @@ void copy_to_user_page(struct vm_area_st
-       struct page *page, unsigned long vaddr, void *dst, const void *src,
-       unsigned long len)
- {
--      if (cpu_has_dc_aliases &&
-+      if (cpu_has_dc_aliases && cpu_use_kmap_coherent &&
-           page_mapped(page) && !Page_dcache_dirty(page)) {
-               void *vto = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
-               memcpy(vto, src, len);
-@@ -249,7 +249,7 @@ void copy_from_user_page(struct vm_area_
-       struct page *page, unsigned long vaddr, void *dst, const void *src,
-       unsigned long len)
- {
--      if (cpu_has_dc_aliases &&
-+      if (cpu_has_dc_aliases && cpu_use_kmap_coherent &&
-           page_mapped(page) && !Page_dcache_dirty(page)) {
-               void *vfrom = kmap_coherent(page, vaddr) + (vaddr & ~PAGE_MASK);
-               memcpy(dst, vfrom, len);
diff --git a/target/linux/brcm47xx/patches-2.6.33/170-128MB_ram_bugfix.patch b/target/linux/brcm47xx/patches-2.6.33/170-128MB_ram_bugfix.patch
deleted file mode 100644 (file)
index 9819ad7..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
---- a/arch/mips/bcm47xx/prom.c
-+++ b/arch/mips/bcm47xx/prom.c
-@@ -126,6 +126,7 @@ static __init void prom_init_cmdline(voi
- static __init void prom_init_mem(void)
- {
-       unsigned long mem;
-+      unsigned long max;
-       /* Figure out memory size by finding aliases.
-        *
-@@ -134,21 +135,26 @@ static __init void prom_init_mem(void)
-        * want to reuse the memory used by CFE (around 4MB). That means cfe_*
-        * functions stop to work at some point during the boot, we should only
-        * call them at the beginning of the boot.
-+       * 
-+       * BCM47XX uses 128MB for addressing the ram, if the system contains
-+       * less that that amount of ram it remaps the ram more often into the
-+       * available space.
-+       * Accessing memory after 128MB will cause an exception.
-+       * max contains the biggest possible address supported by the platform.
-+       * If the method wants to try something above we assume 128MB ram.
-        */
-+      max = ((unsigned long)(prom_init) | ((128 << 20) - 1));
-       for (mem = (1 << 20); mem < (128 << 20); mem += (1 << 20)) {
-+              if (((unsigned long)(prom_init) + mem) > max) {
-+                      mem = (128 << 20);
-+                      printk("assume 128MB RAM\n");
-+                      break;
-+              }
-               if (*(unsigned long *)((unsigned long)(prom_init) + mem) ==
-                   *(unsigned long *)(prom_init))
-                       break;
-       }
--      /* Ignoring the last page when ddr size is 128M. Cached
--       * accesses to last page is causing the processor to prefetch
--       * using address above 128M stepping out of the ddr address
--       * space.
--       */
--      if (mem == 0x8000000)
--              mem -= 0x1000;
--
-       add_memory_region(0, mem, BOOT_MEM_RAM);
- }
diff --git a/target/linux/brcm47xx/patches-2.6.33/180-ssb_extif_interrupt.patch b/target/linux/brcm47xx/patches-2.6.33/180-ssb_extif_interrupt.patch
deleted file mode 100644 (file)
index d89531c..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-From 83e34f03ee9b86b49bde4707a1fe03a1837e29be Mon Sep 17 00:00:00 2001
-From: Jochen Friedrich <jochen@scram.de>
-Date: Wed, 3 Feb 2010 21:28:11 +0100
-Subject: [PATCH 1/1] ssb: fix interrupt assignment
-
-Explicitely enable shared interrupt 2 for any core that didn't get a dedicated IRQ
-anymore (fallthrough case) and for EXTIF cores to make gpio interrupts work.
-Also remove a bogus comment.
-
-Signed-off-by: Jochen Friedrich <jochen@scram.de>
-Signed-off-by: John W. Linville <linville@tuxdriver.com>
----
- drivers/ssb/driver_mipscore.c |    5 ++++-
- 1 files changed, 4 insertions(+), 1 deletions(-)
-
---- a/drivers/ssb/driver_mipscore.c
-+++ b/drivers/ssb/driver_mipscore.c
-@@ -270,7 +270,6 @@ void ssb_mipscore_init(struct ssb_mipsco
-                               set_irq(dev, irq++);
-                       }
-                       break;
--                      /* fallthrough */
-               case SSB_DEV_PCI:
-               case SSB_DEV_ETHERNET:
-               case SSB_DEV_ETHERNET_GBIT:
-@@ -281,6 +280,10 @@ void ssb_mipscore_init(struct ssb_mipsco
-                               set_irq(dev, irq++);
-                               break;
-                       }
-+                      /* fallthrough */
-+              case SSB_DEV_EXTIF:
-+                      set_irq(dev, 0);
-+                      break;
-               }
-       }
-       ssb_dprintk(KERN_INFO PFX "after irq reconfiguration\n");
diff --git a/target/linux/brcm47xx/patches-2.6.33/210-b44_phy_fix.patch b/target/linux/brcm47xx/patches-2.6.33/210-b44_phy_fix.patch
deleted file mode 100644 (file)
index 3540c23..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/net/b44.c
-+++ b/drivers/net/b44.c
-@@ -339,7 +339,7 @@ static int b44_phy_reset(struct b44 *bp)
-               }
-       }
--      return 0;
-+      return err;
- }
- static void __b44_set_flow_ctrl(struct b44 *bp, u32 pause_flags)
-@@ -2223,6 +2223,10 @@ static int __devinit b44_init_one(struct
-        */
-       b44_chip_reset(bp, B44_CHIP_RESET_FULL);
-+      /* do a phy reset to test if there is an active phy */
-+      if (b44_phy_reset(bp) < 0)
-+              bp->phy_addr = B44_PHY_ADDR_NO_PHY;
-+
-       printk(KERN_INFO "%s: Broadcom 44xx/47xx 10/100BaseT Ethernet %pM\n",
-              dev->name, dev->dev_addr);
diff --git a/target/linux/brcm47xx/patches-2.6.33/220-bcm5354.patch b/target/linux/brcm47xx/patches-2.6.33/220-bcm5354.patch
deleted file mode 100644 (file)
index f396ca7..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/drivers/ssb/driver_chipcommon.c
-+++ b/drivers/ssb/driver_chipcommon.c
-@@ -258,6 +258,8 @@ void ssb_chipco_resume(struct ssb_chipco
- void ssb_chipco_get_clockcpu(struct ssb_chipcommon *cc,
-                              u32 *plltype, u32 *n, u32 *m)
- {
-+      if ((chipco_read32(cc, SSB_CHIPCO_CHIPID) & SSB_CHIPCO_IDMASK) == 0x5354)
-+              return;
-       *n = chipco_read32(cc, SSB_CHIPCO_CLOCK_N);
-       *plltype = (cc->capabilities & SSB_CHIPCO_CAP_PLLT);
-       switch (*plltype) {
-@@ -281,6 +283,8 @@ void ssb_chipco_get_clockcpu(struct ssb_
- void ssb_chipco_get_clockcontrol(struct ssb_chipcommon *cc,
-                                u32 *plltype, u32 *n, u32 *m)
- {
-+      if ((chipco_read32(cc, SSB_CHIPCO_CHIPID) & SSB_CHIPCO_IDMASK) == 0x5354)
-+              return;
-       *n = chipco_read32(cc, SSB_CHIPCO_CLOCK_N);
-       *plltype = (cc->capabilities & SSB_CHIPCO_CAP_PLLT);
-       switch (*plltype) {
---- a/drivers/ssb/driver_mipscore.c
-+++ b/drivers/ssb/driver_mipscore.c
-@@ -217,6 +217,8 @@ u32 ssb_cpu_clock(struct ssb_mipscore *m
-       if ((pll_type == SSB_PLLTYPE_5) || (bus->chip_id == 0x5365)) {
-               rate = 200000000;
-+      } else if (bus->chip_id == 0x5354) {
-+              rate = 240000000;
-       } else {
-               rate = ssb_calc_clock_rate(pll_type, n, m);
-       }
---- a/drivers/ssb/main.c
-+++ b/drivers/ssb/main.c
-@@ -1069,6 +1069,8 @@ u32 ssb_clockspeed(struct ssb_bus *bus)
-       if (bus->chip_id == 0x5365) {
-               rate = 100000000;
-+      } else if (bus->chip_id == 0x5354) {
-+              rate = 120000000;
-       } else {
-               rate = ssb_calc_clock_rate(plltype, clkctl_n, clkctl_m);
-               if (plltype == SSB_PLLTYPE_3) /* 25Mhz, 2 dividers */
diff --git a/target/linux/brcm47xx/patches-2.6.33/250-ohci-ssb-usb2.patch b/target/linux/brcm47xx/patches-2.6.33/250-ohci-ssb-usb2.patch
deleted file mode 100644 (file)
index 25b27e4..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
----
- drivers/usb/host/ohci-ssb.c |   39 ++++++++++++++++++++++++++++++++++++---
- 1 file changed, 36 insertions(+), 3 deletions(-)
-
---- a/drivers/usb/host/ohci-ssb.c
-+++ b/drivers/usb/host/ohci-ssb.c
-@@ -106,10 +106,42 @@ static int ssb_ohci_attach(struct ssb_de
-       int err = -ENOMEM;
-       u32 tmp, flags = 0;
--      if (dev->id.coreid == SSB_DEV_USB11_HOSTDEV)
-+      if (dev->id.coreid == SSB_DEV_USB11_HOSTDEV) {
-+              /* Put the device into host-mode. */
-               flags |= SSB_OHCI_TMSLOW_HOSTMODE;
--
--      ssb_device_enable(dev, flags);
-+              ssb_device_enable(dev, flags);
-+      } else if (dev->id.coreid == SSB_DEV_USB20_HOST) {
-+              /*
-+               * USB 2.0 special considerations:
-+               *
-+               * 1. Since the core supports both OHCI and EHCI functions, it must
-+               *    only be reset once.
-+               *
-+               * 2. In addition to the standard SSB reset sequence, the Host Control
-+               *    Register must be programmed to bring the USB core and various
-+               *    phy components out of reset.
-+               */
-+              ssb_device_enable(dev, 0);
-+              ssb_write32(dev, 0x200, 0x7ff);
-+              udelay(1);
-+              if (dev->id.revision == 1) { // bug in rev 1
-+
-+                      /* Change Flush control reg */
-+                      tmp = ssb_read32(dev, 0x400);
-+                      tmp &= ~8;
-+                      ssb_write32(dev, 0x400, tmp);
-+                      tmp = ssb_read32(dev, 0x400);
-+                      printk("USB20H fcr: 0x%0x\n", tmp);
-+
-+                      /* Change Shim control reg */
-+                      tmp = ssb_read32(dev, 0x304);
-+                      tmp &= ~0x100;
-+                      ssb_write32(dev, 0x304, tmp);
-+                      tmp = ssb_read32(dev, 0x304);
-+                      printk("USB20H shim: 0x%0x\n", tmp);
-+              }
-+      } else
-+              ssb_device_enable(dev, 0);
-       hcd = usb_create_hcd(&ssb_ohci_hc_driver, dev->dev,
-                       dev_name(dev->dev));
-@@ -200,6 +232,7 @@ static int ssb_ohci_resume(struct ssb_de
- static const struct ssb_device_id ssb_ohci_table[] = {
-       SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB11_HOSTDEV, SSB_ANY_REV),
-       SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB11_HOST, SSB_ANY_REV),
-+      SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB20_HOST, SSB_ANY_REV),
-       SSB_DEVTABLE_END
- };
- MODULE_DEVICE_TABLE(ssb, ssb_ohci_table);
diff --git a/target/linux/brcm47xx/patches-2.6.33/260-ohci-set-dma-mask.patch b/target/linux/brcm47xx/patches-2.6.33/260-ohci-set-dma-mask.patch
deleted file mode 100644 (file)
index 9627798..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
----
- drivers/usb/host/ohci-ssb.c |    3 +++
- 1 file changed, 3 insertions(+)
-
---- a/drivers/usb/host/ohci-ssb.c
-+++ b/drivers/usb/host/ohci-ssb.c
-@@ -106,6 +106,9 @@ static int ssb_ohci_attach(struct ssb_de
-       int err = -ENOMEM;
-       u32 tmp, flags = 0;
-+      if (ssb_dma_set_mask(dev, DMA_BIT_MASK(32)))
-+              return -EOPNOTSUPP;
-+
-       if (dev->id.coreid == SSB_DEV_USB11_HOSTDEV) {
-               /* Put the device into host-mode. */
-               flags |= SSB_OHCI_TMSLOW_HOSTMODE;
diff --git a/target/linux/brcm47xx/patches-2.6.33/270-ehci-ssb.patch b/target/linux/brcm47xx/patches-2.6.33/270-ehci-ssb.patch
deleted file mode 100644 (file)
index 27b3923..0000000
+++ /dev/null
@@ -1,314 +0,0 @@
----
- drivers/usb/host/Kconfig    |   13 ++
- drivers/usb/host/ehci-hcd.c |   12 ++
- drivers/usb/host/ehci-ssb.c |  201 ++++++++++++++++++++++++++++++++++++++++++++
- drivers/usb/host/ohci-ssb.c |   23 +++++
- 4 files changed, 247 insertions(+), 2 deletions(-)
-
---- a/drivers/usb/host/Kconfig
-+++ b/drivers/usb/host/Kconfig
-@@ -150,6 +150,19 @@ config USB_OXU210HP_HCD
-         To compile this driver as a module, choose M here: the
-         module will be called oxu210hp-hcd.
-+config USB_EHCI_HCD_SSB
-+      bool "EHCI support for Broadcom SSB EHCI core"
-+      depends on USB_EHCI_HCD && SSB && EXPERIMENTAL
-+      default n
-+      ---help---
-+        Support for the Sonics Silicon Backplane (SSB) attached
-+        Broadcom USB EHCI core.
-+
-+        This device is present in some embedded devices with
-+        Broadcom based SSB bus.
-+
-+        If unsure, say N.
-+
- config USB_ISP116X_HCD
-       tristate "ISP116X HCD support"
-       depends on USB
---- a/drivers/usb/host/ehci-hcd.c
-+++ b/drivers/usb/host/ehci-hcd.c
-@@ -1158,8 +1158,16 @@ MODULE_LICENSE ("GPL");
- #define       PLATFORM_DRIVER         ehci_atmel_driver
- #endif
--#if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
--    !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
-+#ifdef CONFIG_USB_EHCI_HCD_SSB
-+#include "ehci-ssb.c"
-+#define SSB_EHCI_DRIVER         ssb_ehci_driver
-+#endif
-+
-+#if !defined(PCI_DRIVER) && \
-+    !defined(PLATFORM_DRIVER) && \
-+    !defined(PS3_SYSTEM_BUS_DRIVER) && \
-+    !defined(OF_PLATFORM_DRIVER) && \
-+    !defined(SSB_EHCI_DRIVER)
- #error "missing bus glue for ehci-hcd"
- #endif
---- /dev/null
-+++ b/drivers/usb/host/ehci-ssb.c
-@@ -0,0 +1,201 @@
-+/*
-+ * Sonics Silicon Backplane
-+ * Broadcom USB-core EHCI driver (SSB bus glue)
-+ *
-+ * Copyright 2007 Steven Brown <sbrown@cortland.com>
-+ *
-+ * Derived from the OHCI-SSB driver
-+ * Copyright 2007 Michael Buesch <mb@bu3sch.de>
-+ *
-+ * Derived from the EHCI-PCI driver
-+ * Copyright (c) 2000-2004 by David Brownell
-+ *
-+ * Derived from the OHCI-PCI driver
-+ * Copyright 1999 Roman Weissgaerber
-+ * Copyright 2000-2002 David Brownell
-+ * Copyright 1999 Linus Torvalds
-+ * Copyright 1999 Gregory P. Smith
-+ *
-+ * Derived from the USBcore related parts of Broadcom-SB
-+ * Copyright 2005 Broadcom Corporation
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+#include <linux/ssb/ssb.h>
-+
-+#define SSB_OHCI_TMSLOW_HOSTMODE      (1 << 29)
-+
-+struct ssb_ehci_device {
-+      struct ehci_hcd ehci; /* _must_ be at the beginning. */
-+
-+      u32 enable_flags;
-+};
-+
-+static inline
-+struct ssb_ehci_device *hcd_to_ssb_ehci(struct usb_hcd *hcd)
-+{
-+      return (struct ssb_ehci_device *)(hcd->hcd_priv);
-+}
-+
-+
-+static int ssb_ehci_reset(struct usb_hcd *hcd)
-+{
-+      struct ehci_hcd *ehci = hcd_to_ehci(hcd);
-+      int err;
-+
-+      ehci->caps = hcd->regs;
-+      ehci->regs = hcd->regs +
-+              HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
-+
-+      dbg_hcs_params(ehci, "reset");
-+      dbg_hcc_params(ehci, "reset");
-+
-+      ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
-+
-+      err = ehci_halt(ehci);
-+
-+      if (err)
-+              return err;
-+
-+      err = ehci_init(hcd);
-+
-+      if (err)
-+              return err;
-+
-+      ehci_port_power(ehci, 0);
-+
-+      return err;
-+}
-+
-+static int ssb_ehci_start(struct usb_hcd *hcd)
-+{
-+      struct ehci_hcd *ehci = hcd_to_ehci(hcd);
-+      int err;
-+
-+      err = ehci_run(hcd);
-+      if (err < 0) {
-+              ehci_err(ehci, "can't start\n");
-+              ehci_stop(hcd);
-+      }
-+
-+      return err;
-+}
-+
-+#ifdef CONFIG_PM
-+static int ssb_ehci_hcd_suspend(struct usb_hcd *hcd, pm_message_t message)
-+{
-+      struct ssb_ehci_device *ehcidev = hcd_to_ssb_ehci(hcd);
-+      struct ehci_hcd *ehci = &ehcidev->ehci;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&ehci->lock, flags);
-+
-+      ehci_writel(ehci, EHCI_INTR_MIE, &ehci->regs->intrdisable);
-+      ehci_readl(ehci, &ehci->regs->intrdisable); /* commit write */
-+
-+      /* make sure snapshot being resumed re-enumerates everything */
-+      if (message.event == PM_EVENT_PRETHAW)
-+              ehci_usb_reset(ehci);
-+
-+      clear_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
-+
-+      spin_unlock_irqrestore(&ehci->lock, flags);
-+      return 0;
-+}
-+
-+static int ssb_ehci_hcd_resume(struct usb_hcd *hcd)
-+{
-+      set_bit(HCD_FLAG_HW_ACCESSIBLE, &hcd->flags);
-+      usb_hcd_resume_root_hub(hcd);
-+      return 0;
-+}
-+#endif /* CONFIG_PM */
-+
-+static const struct hc_driver ssb_ehci_hc_driver = {
-+      .description            = "ssb-usb-ehci",
-+      .product_desc           = "SSB EHCI Controller",
-+      .hcd_priv_size          = sizeof(struct ssb_ehci_device),
-+
-+      .irq                    = ehci_irq,
-+      .flags                  = HCD_MEMORY | HCD_USB2,
-+
-+      .reset                  = ssb_ehci_reset,
-+      .start                  = ssb_ehci_start,
-+      .stop                   = ehci_stop,
-+      .shutdown               = ehci_shutdown,
-+
-+#ifdef CONFIG_PM
-+      .suspend                = ssb_ehci_hcd_suspend,
-+      .resume                 = ssb_ehci_hcd_resume,
-+#endif
-+
-+      .urb_enqueue            = ehci_urb_enqueue,
-+      .urb_dequeue            = ehci_urb_dequeue,
-+      .endpoint_disable       = ehci_endpoint_disable,
-+
-+      .get_frame_number       = ehci_get_frame,
-+
-+      .hub_status_data        = ehci_hub_status_data,
-+      .hub_control            = ehci_hub_control,
-+#ifdef CONFIG_PM
-+      .bus_suspend            = ehci_bus_suspend,
-+      .bus_resume             = ehci_bus_resume,
-+#endif
-+
-+};
-+
-+static void ssb_ehci_detach(struct ssb_device *dev, struct usb_hcd *hcd)
-+{
-+
-+      usb_remove_hcd(hcd);
-+      iounmap(hcd->regs);
-+      usb_put_hcd(hcd);
-+}
-+EXPORT_SYMBOL_GPL(ssb_ehci_detach);
-+
-+static int ssb_ehci_attach(struct ssb_device *dev, struct usb_hcd **ehci_hcd)
-+{
-+      struct ssb_ehci_device *ehcidev;
-+      struct usb_hcd *hcd;
-+      int err = -ENOMEM;
-+      u32 tmp, flags = 0;
-+
-+      hcd = usb_create_hcd(&ssb_ehci_hc_driver, dev->dev,
-+                           dev_name(dev->dev));
-+      if (!hcd)
-+              goto err_dev_disable;
-+
-+      ehcidev = hcd_to_ssb_ehci(hcd);
-+      ehcidev->enable_flags = flags;
-+      tmp = ssb_read32(dev, SSB_ADMATCH0);
-+      hcd->rsrc_start = ssb_admatch_base(tmp) + 0x800; /* ehci core offset */
-+      hcd->rsrc_len = 0x100; /* ehci reg block size */
-+      /*
-+       * start & size modified per sbutils.c
-+       */
-+      hcd->regs = ioremap_nocache(hcd->rsrc_start, hcd->rsrc_len);
-+      if (!hcd->regs)
-+              goto err_put_hcd;
-+      err = usb_add_hcd(hcd, dev->irq, IRQF_SHARED | IRQF_DISABLED);
-+      if (err)
-+              goto err_iounmap;
-+
-+      *ehci_hcd = hcd;
-+
-+      return err;
-+
-+err_iounmap:
-+      iounmap(hcd->regs);
-+err_put_hcd:
-+      usb_put_hcd(hcd);
-+err_dev_disable:
-+      ssb_device_disable(dev, flags);
-+      return err;
-+}
-+EXPORT_SYMBOL_GPL(ssb_ehci_attach);
-+
-+static const struct ssb_device_id ssb_ehci_table[] = {
-+      SSB_DEVICE(SSB_VENDOR_BROADCOM, SSB_DEV_USB20_HOST, SSB_ANY_REV),
-+      SSB_DEVTABLE_END
-+};
-+MODULE_DEVICE_TABLE(ssb, ssb_ehci_table);
---- a/drivers/usb/host/ohci-ssb.c
-+++ b/drivers/usb/host/ohci-ssb.c
-@@ -17,6 +17,8 @@
-  */
- #include <linux/ssb/ssb.h>
-+extern int ssb_ehci_attach(struct ssb_device *dev, struct usb_hcd **hcd);
-+extern void ssb_ehci_detach(struct ssb_device *dev, struct usb_hcd *hcd);
- #define SSB_OHCI_TMSLOW_HOSTMODE      (1 << 29)
-@@ -24,6 +26,7 @@ struct ssb_ohci_device {
-       struct ohci_hcd ohci; /* _must_ be at the beginning. */
-       u32 enable_flags;
-+      struct usb_hcd *ehci_hcd;
- };
- static inline
-@@ -92,13 +95,25 @@ static const struct hc_driver ssb_ohci_h
- static void ssb_ohci_detach(struct ssb_device *dev)
- {
-       struct usb_hcd *hcd = ssb_get_drvdata(dev);
-+#ifdef CONFIG_USB_EHCI_HCD_SSB
-+      struct ssb_ohci_device *ohcidev = hcd_to_ssb_ohci(hcd);
-+#endif
-       usb_remove_hcd(hcd);
-       iounmap(hcd->regs);
-       usb_put_hcd(hcd);
-+
-+#ifdef CONFIG_USB_EHCI_HCD_SSB
-+      /*
-+       * Also detach ehci function
-+       */
-+      if (dev->id.coreid == SSB_DEV_USB20_HOST)
-+              ssb_ehci_detach(dev, ohcidev->ehci_hcd);
-+#endif
-       ssb_device_disable(dev, 0);
- }
-+
- static int ssb_ohci_attach(struct ssb_device *dev)
- {
-       struct ssb_ohci_device *ohcidev;
-@@ -165,6 +180,14 @@ static int ssb_ohci_attach(struct ssb_de
-       ssb_set_drvdata(dev, hcd);
-+#ifdef CONFIG_USB_EHCI_HCD_SSB
-+      /*
-+       * attach ehci function in this core
-+       */
-+      if (dev->id.coreid == SSB_DEV_USB20_HOST)
-+              err = ssb_ehci_attach(dev, &(ohcidev->ehci_hcd));
-+#endif
-+
-       return err;
- err_iounmap:
diff --git a/target/linux/brcm47xx/patches-2.6.33/275-usb2-bcm5354-init.patch b/target/linux/brcm47xx/patches-2.6.33/275-usb2-bcm5354-init.patch
deleted file mode 100644 (file)
index 3d8327e..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-This patch significantly improves the reliability of high speed 
-usb writes on the bcm5354. It implements a work around for version 2
-of the usb20 core that was cribbed from the GPL sources for the 
-Asus wl500gpv2 and verified against the wl520gu sources.
-
-Reference:
-GPL/WL-520gu-NewUI/src/linux/linux/arch/mips/brcm-boards/bcm947xx/pcibios.c
-GPL/WL-500gPV2-NewUI/src/linux/linux/arch/mips/brcm-boards/bcm947xx/pcibios.c
-
-Signed-off-by: Steve Brown <sbrown@cortland.com>
-
----
- drivers/usb/host/ohci-ssb.c |   37 +++++++++++++++++++++++--------------
- 1 file changed, 23 insertions(+), 14 deletions(-)
-
---- a/drivers/usb/host/ohci-ssb.c
-+++ b/drivers/usb/host/ohci-ssb.c
-@@ -141,22 +141,31 @@ static int ssb_ohci_attach(struct ssb_de
-                */
-               ssb_device_enable(dev, 0);
-               ssb_write32(dev, 0x200, 0x7ff);
-+
-+              /* Change Flush control reg */
-+              tmp = ssb_read32(dev, 0x400);
-+              tmp &= ~8;
-+              ssb_write32(dev, 0x400, tmp);
-+              tmp = ssb_read32(dev, 0x400);
-+
-+              /* Change Shim control reg */
-+              tmp = ssb_read32(dev, 0x304);
-+              tmp &= ~0x100;
-+              ssb_write32(dev, 0x304, tmp);
-+              tmp = ssb_read32(dev, 0x304);
-+
-               udelay(1);
--              if (dev->id.revision == 1) { // bug in rev 1
--                      /* Change Flush control reg */
--                      tmp = ssb_read32(dev, 0x400);
--                      tmp &= ~8;
--                      ssb_write32(dev, 0x400, tmp);
--                      tmp = ssb_read32(dev, 0x400);
--                      printk("USB20H fcr: 0x%0x\n", tmp);
--
--                      /* Change Shim control reg */
--                      tmp = ssb_read32(dev, 0x304);
--                      tmp &= ~0x100;
--                      ssb_write32(dev, 0x304, tmp);
--                      tmp = ssb_read32(dev, 0x304);
--                      printk("USB20H shim: 0x%0x\n", tmp);
-+              /* Work around for 5354 failures */
-+              if ((dev->id.revision == 2) && (dev->bus->chip_id == 0x5354)) {
-+                      /* Change syn01 reg */
-+                      tmp = 0x00fe00fe;
-+                      ssb_write32(dev, 0x894, tmp);
-+
-+                      /* Change syn03 reg */
-+                      tmp = ssb_read32(dev, 0x89c);
-+                      tmp |= 0x1;
-+                      ssb_write32(dev, 0x89c, tmp);
-               }
-       } else
-               ssb_device_enable(dev, 0);
diff --git a/target/linux/brcm47xx/patches-2.6.33/280-activate_ssb_support_in_usb.patch b/target/linux/brcm47xx/patches-2.6.33/280-activate_ssb_support_in_usb.patch
deleted file mode 100644 (file)
index f224158..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-This prevents the options from being delete with make kernel_oldconfig.
----
- drivers/ssb/Kconfig |    2 ++
- 1 file changed, 2 insertions(+)
-
---- a/drivers/ssb/Kconfig
-+++ b/drivers/ssb/Kconfig
-@@ -140,6 +140,8 @@ config SSB_DRIVER_MIPS
- config SSB_EMBEDDED
-       bool
-       depends on SSB_DRIVER_MIPS
-+      select USB_EHCI_HCD_SSB if USB_EHCI_HCD
-+      select USB_OHCI_HCD_SSB if USB_OHCI_HCD
-       default y
- config SSB_DRIVER_EXTIF
diff --git a/target/linux/brcm47xx/patches-2.6.33/300-fork_cacheflush.patch b/target/linux/brcm47xx/patches-2.6.33/300-fork_cacheflush.patch
deleted file mode 100644 (file)
index 686fb1b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/include/asm/cacheflush.h
-+++ b/arch/mips/include/asm/cacheflush.h
-@@ -32,7 +32,7 @@
- extern void (*flush_cache_all)(void);
- extern void (*__flush_cache_all)(void);
- extern void (*flush_cache_mm)(struct mm_struct *mm);
--#define flush_cache_dup_mm(mm)        do { (void) (mm); } while (0)
-+#define flush_cache_dup_mm(mm) flush_cache_mm(mm)
- extern void (*flush_cache_range)(struct vm_area_struct *vma,
-       unsigned long start, unsigned long end);
- extern void (*flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn);
diff --git a/target/linux/brcm47xx/patches-2.6.33/301-kmod-fuse-dcache-bug-r4k.patch b/target/linux/brcm47xx/patches-2.6.33/301-kmod-fuse-dcache-bug-r4k.patch
deleted file mode 100644 (file)
index e960dba..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/arch/mips/mm/c-r4k.c
-+++ b/arch/mips/mm/c-r4k.c
-@@ -373,7 +373,7 @@ static inline void local_r4k___flush_cac
-       }
- }
--static void r4k___flush_cache_all(void)
-+void r4k___flush_cache_all(void)
- {
-       r4k_on_each_cpu(local_r4k___flush_cache_all, NULL, 1);
- }
-@@ -537,7 +537,7 @@ static inline void local_r4k_flush_cache
-       }
- }
--static void r4k_flush_cache_page(struct vm_area_struct *vma,
-+void r4k_flush_cache_page(struct vm_area_struct *vma,
-       unsigned long addr, unsigned long pfn)
- {
-       struct flush_cache_page_args args;
-@@ -1456,3 +1456,10 @@ void __cpuinit r4k_cache_init(void)
-       coherency_setup();
- #endif
- }
-+
-+// fuse package DCACHE BUG patch exports
-+void (*fuse_flush_cache_all)(void) = r4k___flush_cache_all;
-+void (*fuse_flush_cache_page)(struct vm_area_struct *vma, unsigned long page,
-+        unsigned long pfn) = r4k_flush_cache_page;
-+EXPORT_SYMBOL(fuse_flush_cache_page);
-+EXPORT_SYMBOL(fuse_flush_cache_all);
diff --git a/target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch b/target/linux/brcm47xx/patches-2.6.33/302-kmod-fuse-dcache-bug-fuse.patch
deleted file mode 100644 (file)
index d6c0b3a..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
---- a/fs/fuse/dev.c
-+++ b/fs/fuse/dev.c
-@@ -533,6 +533,11 @@ static void fuse_copy_finish(struct fuse
-       }
- }
-+#ifdef DCACHE_BUG
-+extern void (*fuse_flush_cache_all)(void);
-+extern void (*fuse_flush_cache_page)(struct vm_area_struct *vma, unsigned long page, unsigned long pfn);
-+#endif
-+
- /*
-  * Get another pagefull of userspace buffer, and map it to kernel
-  * address space, and lock request
-@@ -541,6 +546,9 @@ static int fuse_copy_fill(struct fuse_co
- {
-       unsigned long offset;
-       int err;
-+#ifdef DCACHE_BUG
-+      struct vm_area_struct *vma;
-+#endif
-       unlock_request(cs->fc, cs->req);
-       fuse_copy_finish(cs);
-@@ -552,14 +560,22 @@ static int fuse_copy_fill(struct fuse_co
-               cs->nr_segs--;
-       }
-       down_read(&current->mm->mmap_sem);
-+#ifndef DCACHE_BUG
-       err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0,
-                            &cs->pg, NULL);
-+#else
-+      err = get_user_pages(current, current->mm, cs->addr, 1, cs->write, 0,
-+                           &cs->pg, &vma);
-+#endif
-       up_read(&current->mm->mmap_sem);
-       if (err < 0)
-               return err;
-       BUG_ON(err != 1);
-       offset = cs->addr % PAGE_SIZE;
-       cs->mapaddr = kmap_atomic(cs->pg, KM_USER0);
-+#ifdef DCACHE_BUG
-+      fuse_flush_cache_page(vma, cs->addr, page_to_pfn(cs->pg));
-+#endif
-       cs->buf = cs->mapaddr + offset;
-       cs->len = min(PAGE_SIZE - offset, cs->seglen);
-       cs->seglen -= cs->len;
-@@ -573,6 +589,11 @@ static int fuse_copy_do(struct fuse_copy
- {
-       unsigned ncpy = min(*size, cs->len);
-       if (val) {
-+#ifdef DCACHE_BUG
-+              // patch from mailing list, it is very important, otherwise,
-+              // can't mount, or ls mount point will hang
-+              fuse_flush_cache_all();
-+#endif
-               if (cs->write)
-                       memcpy(cs->buf, *val, ncpy);
-               else
---- a/fs/fuse/fuse_i.h
-+++ b/fs/fuse/fuse_i.h
-@@ -8,6 +8,7 @@
- #ifndef _FS_FUSE_I_H
- #define _FS_FUSE_I_H
-+#define DCACHE_BUG
- #include <linux/fuse.h>
- #include <linux/fs.h>
---- a/fs/fuse/inode.c
-+++ b/fs/fuse/inode.c
-@@ -1201,6 +1201,10 @@ static int __init fuse_init(void)
-       printk(KERN_INFO "fuse init (API version %i.%i)\n",
-              FUSE_KERNEL_VERSION, FUSE_KERNEL_MINOR_VERSION);
-+#ifdef DCACHE_BUG
-+printk("fuse init: DCACHE_BUG enabled\n");
-+#endif
-+
-       INIT_LIST_HEAD(&fuse_conn_list);
-       res = fuse_fs_init();
-       if (res)
diff --git a/target/linux/brcm47xx/patches-2.6.33/310-no_highpage.patch b/target/linux/brcm47xx/patches-2.6.33/310-no_highpage.patch
deleted file mode 100644 (file)
index cde3cbf..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/arch/mips/include/asm/page.h
-+++ b/arch/mips/include/asm/page.h
-@@ -43,6 +43,7 @@
- #ifndef __ASSEMBLY__
- #include <linux/pfn.h>
-+#include <asm/cpu-features.h>
- #include <asm/io.h>
- extern void build_clear_page(void);
-@@ -78,13 +79,16 @@ static inline void clear_user_page(void 
-               flush_data_cache_page((unsigned long)addr);
- }
--extern void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
--      struct page *to);
--struct vm_area_struct;
--extern void copy_user_highpage(struct page *to, struct page *from,
--      unsigned long vaddr, struct vm_area_struct *vma);
-+static inline void copy_user_page(void *vto, void *vfrom, unsigned long vaddr,
-+      struct page *to)
-+{
-+      extern void (*flush_data_cache_page)(unsigned long addr);
--#define __HAVE_ARCH_COPY_USER_HIGHPAGE
-+      copy_page(vto, vfrom);
-+      if (!cpu_has_ic_fills_f_dc ||
-+          pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK))
-+              flush_data_cache_page((unsigned long)vto);
-+}
- /*
-  * These are used to make use of C type-checking..
---- a/arch/mips/mm/init.c
-+++ b/arch/mips/mm/init.c
-@@ -203,30 +203,6 @@ void kunmap_coherent(void)
-       preempt_check_resched();
- }
--void copy_user_highpage(struct page *to, struct page *from,
--      unsigned long vaddr, struct vm_area_struct *vma)
--{
--      void *vfrom, *vto;
--
--      vto = kmap_atomic(to, KM_USER1);
--      if (cpu_has_dc_aliases && cpu_use_kmap_coherent &&
--          page_mapped(from) && !Page_dcache_dirty(from)) {
--              vfrom = kmap_coherent(from, vaddr);
--              copy_page(vto, vfrom);
--              kunmap_coherent();
--      } else {
--              vfrom = kmap_atomic(from, KM_USER0);
--              copy_page(vto, vfrom);
--              kunmap_atomic(vfrom, KM_USER0);
--      }
--      if ((!cpu_has_ic_fills_f_dc) ||
--          pages_do_alias((unsigned long)vto, vaddr & PAGE_MASK))
--              flush_data_cache_page((unsigned long)vto);
--      kunmap_atomic(vto, KM_USER1);
--      /* Make sure this page is cleared on other CPU's too before using it */
--      smp_wmb();
--}
--
- void copy_to_user_page(struct vm_area_struct *vma,
-       struct page *page, unsigned long vaddr, void *dst, const void *src,
-       unsigned long len)
diff --git a/target/linux/brcm47xx/patches-2.6.33/400-arch-bcm47xx.patch b/target/linux/brcm47xx/patches-2.6.33/400-arch-bcm47xx.patch
deleted file mode 100644 (file)
index f5158a8..0000000
+++ /dev/null
@@ -1,319 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -62,6 +62,7 @@ config BCM47XX
-       select SSB_DRIVER_MIPS
-       select SSB_DRIVER_EXTIF
-       select SSB_EMBEDDED
-+      select SSB_B43_PCI_BRIDGE if PCI
-       select SSB_PCICORE_HOSTMODE if PCI
-       select GENERIC_GPIO
-       select SYS_HAS_EARLY_PRINTK
---- a/arch/mips/bcm47xx/Makefile
-+++ b/arch/mips/bcm47xx/Makefile
-@@ -3,4 +3,4 @@
- # under Linux.
- #
--obj-y := gpio.o irq.o prom.o serial.o setup.o time.o wgt634u.o
-+obj-y := cfe_env.o gpio.o irq.o nvram.o prom.o serial.o setup.o time.o wgt634u.o
---- a/arch/mips/bcm47xx/irq.c
-+++ b/arch/mips/bcm47xx/irq.c
-@@ -1,5 +1,6 @@
- /*
-  *  Copyright (C) 2004 Florian Schirmer <jolt@tuxbox.org>
-+ *  Copyright (C) 2008 Michael Buesch <mb@bu3sch.de>
-  *
-  *  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
-@@ -23,10 +24,19 @@
-  */
- #include <linux/types.h>
-+#include <linux/errno.h>
-+#include <linux/init.h>
- #include <linux/interrupt.h>
- #include <linux/irq.h>
-+#include <linux/pci.h>
-+#include <linux/ssb/ssb.h>
-+
- #include <asm/irq_cpu.h>
-+
-+extern struct ssb_bus ssb_bcm47xx;
-+
-+
- void plat_irq_dispatch(void)
- {
-       u32 cause;
---- a/arch/mips/bcm47xx/nvram.c
-+++ b/arch/mips/bcm47xx/nvram.c
-@@ -24,10 +24,10 @@
- #include <asm/io.h>
- #include <asm/uaccess.h>
--#include <nvram.h>
-+#include "include/nvram.h"
- #define MB * 1048576
--extern struct ssb_bus ssb;
-+extern struct ssb_bus ssb_bcm47xx;
- static char nvram_buf[NVRAM_SPACE];
- static int cfe_env;
-@@ -36,7 +36,7 @@ extern char *cfe_env_get(char *nv_buf, c
- /* Probe for NVRAM header */
- static void __init early_nvram_init(void)
- {
--      struct ssb_mipscore *mcore = &ssb.mipscore;
-+      struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
-       struct nvram_header *header;
-       int i;
-       u32 base, lim, off;
---- a/arch/mips/bcm47xx/setup.c
-+++ b/arch/mips/bcm47xx/setup.c
-@@ -2,7 +2,7 @@
-  *  Copyright (C) 2004 Florian Schirmer <jolt@tuxbox.org>
-  *  Copyright (C) 2005 Waldemar Brodkorb <wbx@openwrt.org>
-  *  Copyright (C) 2006 Felix Fietkau <nbd@openwrt.org>
-- *  Copyright (C) 2006 Michael Buesch <mb@bu3sch.de>
-+ *  Copyright (C) 2006-2008 Michael Buesch <mb@bu3sch.de>
-  *
-  *  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
-@@ -25,18 +25,28 @@
-  *  675 Mass Ave, Cambridge, MA 02139, USA.
-  */
-+#include <linux/init.h>
- #include <linux/types.h>
- #include <linux/ssb/ssb.h>
- #include <linux/ssb/ssb_embedded.h>
-+#include <linux/tty.h>
-+#include <linux/serial.h>
-+#include <linux/serial_core.h>
-+#include <linux/serial_reg.h>
-+#include <linux/serial_8250.h>
- #include <asm/bootinfo.h>
- #include <asm/reboot.h>
- #include <asm/time.h>
--#include <bcm47xx.h>
- #include <asm/fw/cfe/cfe_api.h>
-+#include <linux/pm.h>
-+
-+#include "include/nvram.h"
- struct ssb_bus ssb_bcm47xx;
- EXPORT_SYMBOL(ssb_bcm47xx);
-+extern void bcm47xx_pci_init(void);
-+
- static void bcm47xx_machine_restart(char *command)
- {
-       printk(KERN_ALERT "Please stand by while rebooting the system...\n");
-@@ -56,7 +66,7 @@ static void bcm47xx_machine_halt(void)
-               cpu_relax();
- }
--static void str2eaddr(char *str, char *dest)
-+static void e_aton(char *str, char *dest)
- {
-       int i = 0;
-@@ -73,52 +83,142 @@ static void str2eaddr(char *str, char *d
-       }
- }
--static int bcm47xx_get_invariants(struct ssb_bus *bus,
--                                 struct ssb_init_invariants *iv)
-+static void bcm47xx_fill_sprom(struct ssb_sprom *sprom)
- {
--      char buf[100];
-+      char *s;
--      /* Fill boardinfo structure */
--      memset(&(iv->boardinfo), 0 , sizeof(struct ssb_boardinfo));
-+      memset(sprom, 0xFF, sizeof(struct ssb_sprom));
--      if (cfe_getenv("boardvendor", buf, sizeof(buf)) >= 0)
--              iv->boardinfo.type = (u16)simple_strtoul(buf, NULL, 0);
--      if (cfe_getenv("boardtype", buf, sizeof(buf)) >= 0)
--              iv->boardinfo.type = (u16)simple_strtoul(buf, NULL, 0);
--      if (cfe_getenv("boardrev", buf, sizeof(buf)) >= 0)
--              iv->boardinfo.rev = (u16)simple_strtoul(buf, NULL, 0);
--
--      /* Fill sprom structure */
--      memset(&(iv->sprom), 0, sizeof(struct ssb_sprom));
--      iv->sprom.revision = 3;
--
--      if (cfe_getenv("et0macaddr", buf, sizeof(buf)) >= 0)
--              str2eaddr(buf, iv->sprom.et0mac);
--      if (cfe_getenv("et1macaddr", buf, sizeof(buf)) >= 0)
--              str2eaddr(buf, iv->sprom.et1mac);
--      if (cfe_getenv("et0phyaddr", buf, sizeof(buf)) >= 0)
--              iv->sprom.et0phyaddr = simple_strtoul(buf, NULL, 10);
--      if (cfe_getenv("et1phyaddr", buf, sizeof(buf)) >= 0)
--              iv->sprom.et1phyaddr = simple_strtoul(buf, NULL, 10);
--      if (cfe_getenv("et0mdcport", buf, sizeof(buf)) >= 0)
--              iv->sprom.et0mdcport = simple_strtoul(buf, NULL, 10);
--      if (cfe_getenv("et1mdcport", buf, sizeof(buf)) >= 0)
--              iv->sprom.et1mdcport = simple_strtoul(buf, NULL, 10);
-+      sprom->revision = 1;
-+      if ((s = nvram_get("il0macaddr")))
-+              e_aton(s, sprom->il0mac);
-+      if ((s = nvram_get("et0macaddr")))
-+              e_aton(s, sprom->et0mac);
-+      if ((s = nvram_get("et1macaddr")))
-+              e_aton(s, sprom->et1mac);
-+      if ((s = nvram_get("et0phyaddr")))
-+              sprom->et0phyaddr = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("et1phyaddr")))
-+              sprom->et1phyaddr = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("et0mdcport")))
-+              sprom->et0mdcport = !!simple_strtoul(s, NULL, 10);
-+      if ((s = nvram_get("et1mdcport")))
-+              sprom->et1mdcport = !!simple_strtoul(s, NULL, 10);
-+      if ((s = nvram_get("pa0b0")))
-+              sprom->pa0b0 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa0b1")))
-+              sprom->pa0b1 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa0b2")))
-+              sprom->pa0b2 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa1b0")))
-+              sprom->pa1b0 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa1b1")))
-+              sprom->pa1b1 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa1b2")))
-+              sprom->pa1b2 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("wl0gpio0")))
-+              sprom->gpio0 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("wl0gpio1")))
-+              sprom->gpio1 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("wl0gpio2")))
-+              sprom->gpio2 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("wl0gpio3")))
-+              sprom->gpio3 = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa0maxpwr")))
-+              sprom->maxpwr_bg = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa1maxpwr")))
-+              sprom->maxpwr_a = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa0itssit")))
-+              sprom->itssi_bg = simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("pa1itssit")))
-+              sprom->itssi_a = simple_strtoul(s, NULL, 0);
-+      sprom->boardflags_lo = 0;
-+      if ((s = nvram_get("boardflags")))
-+              sprom->boardflags_lo = simple_strtoul(s, NULL, 0);
-+      sprom->boardflags_hi = 0;
-+      if ((s = nvram_get("boardflags2")))
-+              sprom->boardflags_hi = simple_strtoul(s, NULL, 0);
-+}
-+
-+static int bcm47xx_get_invariants(struct ssb_bus *bus, struct ssb_init_invariants *iv)
-+{
-+      char *s;
-+
-+      iv->boardinfo.vendor = SSB_BOARDVENDOR_BCM;
-+      if ((s = nvram_get("boardtype")))
-+              iv->boardinfo.type = (u16)simple_strtoul(s, NULL, 0);
-+      if ((s = nvram_get("boardrev")))
-+              iv->boardinfo.rev = (u16)simple_strtoul(s, NULL, 0);
-+
-+      bcm47xx_fill_sprom(&iv->sprom);
-+
-+      if ((s = nvram_get("cardbus")))
-+              iv->has_cardbus_slot = !!simple_strtoul(s, NULL, 10);
-       return 0;
- }
- void __init plat_mem_setup(void)
- {
--      int err;
-+      int i, err;
-+      char *s;
-+      struct ssb_mipscore *mcore;
-+
-+      err = ssb_bus_ssbbus_register(&ssb_bcm47xx, SSB_ENUM_BASE, bcm47xx_get_invariants);
-+      if (err) {
-+              const char *msg = "Failed to initialize SSB bus (err %d)\n";
-+              printk(msg, err); /* Make sure the message gets out of the box. */
-+              panic(msg, err);
-+      }
-+      mcore = &ssb_bcm47xx.mipscore;
--      err = ssb_bus_ssbbus_register(&ssb_bcm47xx, SSB_ENUM_BASE,
--                                    bcm47xx_get_invariants);
--      if (err)
--              panic("Failed to initialize SSB bus (err %d)\n", err);
-+      s = nvram_get("kernel_args");
-+      if (s && !strncmp(s, "console=ttyS1", 13)) {
-+              struct ssb_serial_port port;
-+
-+              printk("Swapping serial ports!\n");
-+              /* swap serial ports */
-+              memcpy(&port, &mcore->serial_ports[0], sizeof(port));
-+              memcpy(&mcore->serial_ports[0], &mcore->serial_ports[1], sizeof(port));
-+              memcpy(&mcore->serial_ports[1], &port, sizeof(port));
-+      }
-+
-+      for (i = 0; i < mcore->nr_serial_ports; i++) {
-+              struct ssb_serial_port *port = &(mcore->serial_ports[i]);
-+              struct uart_port s;
-+
-+              memset(&s, 0, sizeof(s));
-+              s.line = i;
-+              s.mapbase = (unsigned int) port->regs;
-+              s.membase = port->regs;
-+              s.irq = port->irq + 2;
-+              s.uartclk = port->baud_base;
-+              s.flags = UPF_BOOT_AUTOCONF | UPF_SHARE_IRQ;
-+              s.iotype = SERIAL_IO_MEM;
-+              s.regshift = port->reg_shift;
-+
-+              early_serial_setup(&s);
-+      }
-+      printk("Serial init done.\n");
-       _machine_restart = bcm47xx_machine_restart;
-       _machine_halt = bcm47xx_machine_halt;
-       pm_power_off = bcm47xx_machine_halt;
- }
-+static int __init bcm47xx_register_gpiodev(void)
-+{
-+      static struct resource res = {
-+              .start = 0xFFFFFFFF,
-+      };
-+      struct platform_device *pdev;
-+
-+      pdev = platform_device_register_simple("GPIODEV", 0, &res, 1);
-+      if (!pdev) {
-+              printk(KERN_ERR "bcm47xx: GPIODEV init failed\n");
-+              return -ENODEV;
-+      }
-+
-+      return 0;
-+}
-+device_initcall(bcm47xx_register_gpiodev);
---- a/arch/mips/bcm47xx/time.c
-+++ b/arch/mips/bcm47xx/time.c
-@@ -22,11 +22,17 @@
-  *  675 Mass Ave, Cambridge, MA 02139, USA.
-  */
--
- #include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/sched.h>
-+#include <linux/serial_reg.h>
-+#include <linux/interrupt.h>
- #include <linux/ssb/ssb.h>
-+#include <asm/addrspace.h>
-+#include <asm/io.h>
- #include <asm/time.h>
--#include <bcm47xx.h>
-+
-+extern struct ssb_bus ssb_bcm47xx;
- void __init plat_time_init(void)
- {
diff --git a/target/linux/brcm47xx/patches-2.6.33/601-mips-remove-pci-collision-check.patch b/target/linux/brcm47xx/patches-2.6.33/601-mips-remove-pci-collision-check.patch
deleted file mode 100644 (file)
index 7860ca0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/arch/mips/pci/pci.c
-+++ b/arch/mips/pci/pci.c
-@@ -185,12 +185,10 @@ static int pcibios_enable_resources(stru
-               if ((idx == PCI_ROM_RESOURCE) &&
-                               (!(r->flags & IORESOURCE_ROM_ENABLE)))
-                       continue;
--              if (!r->start && r->end) {
--                      printk(KERN_ERR "PCI: Device %s not available "
--                             "because of resource collisions\n",
-+              if (!r->start && r->end)
-+                      printk(KERN_WARNING "PCI: Device %s resource"
-+                             "collisions detected. Ignoring...\n",
-                              pci_name(dev));
--                      return -EINVAL;
--              }
-               if (r->flags & IORESOURCE_IO)
-                       cmd |= PCI_COMMAND_IO;
-               if (r->flags & IORESOURCE_MEM)
diff --git a/target/linux/brcm47xx/patches-2.6.33/700-ssb-gigabit-ethernet-driver.patch b/target/linux/brcm47xx/patches-2.6.33/700-ssb-gigabit-ethernet-driver.patch
deleted file mode 100644 (file)
index 04185d7..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
---- a/drivers/net/tg3.c
-+++ b/drivers/net/tg3.c
-@@ -41,6 +41,7 @@
- #include <linux/prefetch.h>
- #include <linux/dma-mapping.h>
- #include <linux/firmware.h>
-+#include <linux/ssb/ssb_driver_gige.h>
- #include <net/checksum.h>
- #include <net/ip.h>
-@@ -466,8 +467,9 @@ static void _tw32_flush(struct tg3 *tp, 
- static inline void tw32_mailbox_flush(struct tg3 *tp, u32 off, u32 val)
- {
-       tp->write32_mbox(tp, off, val);
--      if (!(tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) &&
--          !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND))
-+      if ((tp->tg3_flags3 & TG3_FLG3_FLUSH_POSTED_WRITES) ||
-+          (!(tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) &&
-+           !(tp->tg3_flags2 & TG3_FLG2_ICH_WORKAROUND)))
-               tp->read32_mbox(tp, off);
- }
-@@ -477,7 +479,7 @@ static void tg3_write32_tx_mbox(struct t
-       writel(val, mbox);
-       if (tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG)
-               writel(val, mbox);
--      if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
-+      if ((tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) || (tp->tg3_flags3 & TG3_FLG3_FLUSH_POSTED_WRITES))
-               readl(mbox);
- }
-@@ -777,7 +779,7 @@ static void tg3_switch_clocks(struct tg3
- #define PHY_BUSY_LOOPS        5000
--static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
-+static int __tg3_readphy(struct tg3 *tp, unsigned int phy_addr, int reg, u32 *val)
- {
-       u32 frame_val;
-       unsigned int loops;
-@@ -791,7 +793,7 @@ static int tg3_readphy(struct tg3 *tp, i
-       *val = 0x0;
--      frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
-+      frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
-                     MI_COM_PHY_ADDR_MASK);
-       frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
-                     MI_COM_REG_ADDR_MASK);
-@@ -826,7 +828,12 @@ static int tg3_readphy(struct tg3 *tp, i
-       return ret;
- }
--static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
-+static int tg3_readphy(struct tg3 *tp, int reg, u32 *val)
-+{
-+      return __tg3_readphy(tp, tp->phy_addr, reg, val);
-+}
-+
-+static int __tg3_writephy(struct tg3 *tp, unsigned int phy_addr, int reg, u32 val)
- {
-       u32 frame_val;
-       unsigned int loops;
-@@ -842,7 +849,7 @@ static int tg3_writephy(struct tg3 *tp, 
-               udelay(80);
-       }
--      frame_val  = ((tp->phy_addr << MI_COM_PHY_ADDR_SHIFT) &
-+      frame_val  = ((phy_addr << MI_COM_PHY_ADDR_SHIFT) &
-                     MI_COM_PHY_ADDR_MASK);
-       frame_val |= ((reg << MI_COM_REG_ADDR_SHIFT) &
-                     MI_COM_REG_ADDR_MASK);
-@@ -875,6 +882,11 @@ static int tg3_writephy(struct tg3 *tp, 
-       return ret;
- }
-+static int tg3_writephy(struct tg3 *tp, int reg, u32 val)
-+{
-+      return __tg3_writephy(tp, tp->phy_addr, reg, val);
-+}
-+
- static int tg3_bmcr_reset(struct tg3 *tp)
- {
-       u32 phy_control;
-@@ -2381,6 +2393,9 @@ static int tg3_nvram_read(struct tg3 *tp
- {
-       int ret;
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE)
-+              return -ENODEV;
-+
-       if (!(tp->tg3_flags & TG3_FLAG_NVRAM))
-               return tg3_nvram_read_using_eeprom(tp, offset, val);
-@@ -2712,8 +2727,10 @@ static int tg3_set_power_state(struct tg
-       tg3_frob_aux_power(tp);
-       /* Workaround for unstable PLL clock */
--      if ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
--          (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX)) {
-+      if ((tp->phy_id & PHY_ID_MASK) != PHY_ID_BCM5750_2 &&
-+                              /* !!! FIXME !!! */
-+          ((GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_AX) ||
-+          (GET_CHIP_REV(tp->pci_chip_rev_id) == CHIPREV_5750_BX))) {
-               u32 val = tr32(0x7d00);
-               val &= ~((1 << 16) | (1 << 4) | (1 << 2) | (1 << 1) | 1);
-@@ -3205,6 +3222,14 @@ relink:
-               tg3_phy_copper_begin(tp);
-+              if (tp->tg3_flags3 & TG3_FLG3_ROBOSWITCH) {
-+                      current_link_up = 1;
-+                      current_speed = SPEED_1000; //FIXME
-+                      current_duplex = DUPLEX_FULL;
-+                      tp->link_config.active_speed = current_speed;
-+                      tp->link_config.active_duplex = current_duplex;
-+              }
-+
-               tg3_readphy(tp, MII_BMSR, &tmp);
-               if (!tg3_readphy(tp, MII_BMSR, &tmp) &&
-                   (tmp & BMSR_LSTATUS))
-@@ -6633,6 +6658,11 @@ static int tg3_poll_fw(struct tg3 *tp)
-       int i;
-       u32 val;
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE) {
-+              /* We don't use firmware. */
-+              return 0;
-+      }
-+
-       if (GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5906) {
-               /* Wait up to 20ms for init done. */
-               for (i = 0; i < 200; i++) {
-@@ -6910,6 +6940,14 @@ static int tg3_chip_reset(struct tg3 *tp
-               tw32(0x5000, 0x400);
-       }
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE) {
-+              /* BCM4785: In order to avoid repercussions from using potentially
-+               * defective internal ROM, stop the Rx RISC CPU, which is not
-+               * required. */
-+              tg3_stop_fw(tp);
-+              tg3_halt_cpu(tp, RX_CPU_BASE);
-+      }
-+
-       tw32(GRC_MODE, tp->grc_mode);
-       if (tp->pci_chip_rev_id == CHIPREV_ID_5705_A0) {
-@@ -7089,9 +7127,12 @@ static int tg3_halt_cpu(struct tg3 *tp, 
-               return -ENODEV;
-       }
--      /* Clear firmware's nvram arbitration. */
--      if (tp->tg3_flags & TG3_FLAG_NVRAM)
--              tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
-+      if (!(tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE)) {
-+              /* Clear firmware's nvram arbitration. */
-+              if (tp->tg3_flags & TG3_FLAG_NVRAM)
-+                      tw32(NVRAM_SWARB, SWARB_REQ_CLR0);
-+      }
-+
-       return 0;
- }
-@@ -7154,6 +7195,11 @@ static int tg3_load_5701_a0_firmware_fix
-       const __be32 *fw_data;
-       int err, i;
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE) {
-+              /* We don't use firmware. */
-+              return 0;
-+      }
-+
-       fw_data = (void *)tp->fw->data;
-       /* Firmware blob starts with version numbers, followed by
-@@ -7213,6 +7259,11 @@ static int tg3_load_tso_firmware(struct 
-       unsigned long cpu_base, cpu_scratch_base, cpu_scratch_size;
-       int err, i;
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE) {
-+              /* We don't use firmware. */
-+              return 0;
-+      }
-+
-       if (tp->tg3_flags2 & TG3_FLG2_HW_TSO)
-               return 0;
-@@ -8317,6 +8368,11 @@ static void tg3_timer(unsigned long __op
-       spin_lock(&tp->lock);
-+      if (tp->tg3_flags3 & TG3_FLG3_FLUSH_POSTED_WRITES) {
-+              /* BCM4785: Flush posted writes from GbE to host memory. */
-+              tr32(HOSTCC_MODE);
-+      }
-+
-       if (!(tp->tg3_flags & TG3_FLAG_TAGGED_STATUS)) {
-               /* All of this garbage is because when using non-tagged
-                * IRQ status the mailbox/status_block protocol the chip
-@@ -10214,6 +10270,11 @@ static int tg3_test_nvram(struct tg3 *tp
-       if (tp->tg3_flags3 & TG3_FLG3_NO_NVRAM)
-               return 0;
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE) {
-+              /* We don't have NVRAM. */
-+              return 0;
-+      }
-+
-       if (tg3_nvram_read(tp, 0, &magic) != 0)
-               return -EIO;
-@@ -11014,7 +11075,7 @@ static int tg3_ioctl(struct net_device *
-                       return -EAGAIN;
-               spin_lock_bh(&tp->lock);
--              err = tg3_readphy(tp, data->reg_num & 0x1f, &mii_regval);
-+              err = __tg3_readphy(tp, data->phy_id & 0x1f, data->reg_num & 0x1f, &mii_regval);
-               spin_unlock_bh(&tp->lock);
-               data->val_out = mii_regval;
-@@ -11030,7 +11091,7 @@ static int tg3_ioctl(struct net_device *
-                       return -EAGAIN;
-               spin_lock_bh(&tp->lock);
--              err = tg3_writephy(tp, data->reg_num & 0x1f, data->val_in);
-+              err = __tg3_writephy(tp, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);
-               spin_unlock_bh(&tp->lock);
-               return err;
-@@ -11675,6 +11736,12 @@ static void __devinit tg3_get_5717_nvram
- /* Chips other than 5700/5701 use the NVRAM for fetching info. */
- static void __devinit tg3_nvram_init(struct tg3 *tp)
- {
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE) {
-+              /* No NVRAM and EEPROM on the SSB Broadcom GigE core. */
-+              tp->tg3_flags &= ~(TG3_FLAG_NVRAM | TG3_FLAG_NVRAM_BUFFERED);
-+              return;
-+      }
-+
-       tw32_f(GRC_EEPROM_ADDR,
-            (EEPROM_ADDR_FSM_RESET |
-             (EEPROM_DEFAULT_CLOCK_PERIOD <<
-@@ -11936,6 +12003,9 @@ static int tg3_nvram_write_block(struct 
- {
-       int ret;
-+      if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE)
-+              return -ENODEV;
-+
-       if (tp->tg3_flags & TG3_FLAG_EEPROM_WRITE_PROT) {
-               tw32_f(GRC_LOCAL_CTRL, tp->grc_local_ctrl &
-                      ~GRC_LCLCTRL_GPIO_OUTPUT1);
-@@ -13246,6 +13316,11 @@ static int __devinit tg3_get_invariants(
-             GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5701)))
-               tp->tg3_flags |= TG3_FLAG_SRAM_USE_CONFIG;
-+      if (tp->tg3_flags3 & TG3_FLG3_FLUSH_POSTED_WRITES) {
-+              tp->write32_tx_mbox = tg3_write_flush_reg32;
-+              tp->write32_rx_mbox = tg3_write_flush_reg32;
-+      }
-+
-       /* Get eeprom hw config before calling tg3_set_power_state().
-        * In particular, the TG3_FLG2_IS_NIC flag must be
-        * determined before calling tg3_set_power_state() so that
-@@ -13637,6 +13712,10 @@ static int __devinit tg3_get_device_addr
-       }
-       if (!is_valid_ether_addr(&dev->dev_addr[0])) {
-+              if (tp->tg3_flags3 & TG3_FLG3_IS_SSB_CORE)
-+                      ssb_gige_get_macaddr(tp->pdev, &dev->dev_addr[0]);
-+      }
-+      if (!is_valid_ether_addr(&dev->dev_addr[0])) {
- #ifdef CONFIG_SPARC
-               if (!tg3_get_default_macaddr_sparc(tp))
-                       return 0;
-@@ -14139,6 +14218,7 @@ static char * __devinit tg3_phy_string(s
-       case PHY_ID_BCM5704:    return "5704";
-       case PHY_ID_BCM5705:    return "5705";
-       case PHY_ID_BCM5750:    return "5750";
-+      case PHY_ID_BCM5750_2:  return "5750-2";
-       case PHY_ID_BCM5752:    return "5752";
-       case PHY_ID_BCM5714:    return "5714";
-       case PHY_ID_BCM5780:    return "5780";
-@@ -14351,6 +14431,13 @@ static int __devinit tg3_init_one(struct
-               tp->msg_enable = tg3_debug;
-       else
-               tp->msg_enable = TG3_DEF_MSG_ENABLE;
-+      if (pdev_is_ssb_gige_core(pdev)) {
-+              tp->tg3_flags3 |= TG3_FLG3_IS_SSB_CORE;
-+              if (ssb_gige_must_flush_posted_writes(pdev))
-+                      tp->tg3_flags3 |= TG3_FLG3_FLUSH_POSTED_WRITES;
-+              if (ssb_gige_have_roboswitch(pdev))
-+                      tp->tg3_flags3 |= TG3_FLG3_ROBOSWITCH;
-+      }
-       /* The word/byte swap controls here control register access byte
-        * swapping.  DMA data byte swapping is controlled in the GRC_MODE
---- a/drivers/net/tg3.h
-+++ b/drivers/net/tg3.h
-@@ -1959,6 +1959,9 @@
- #define  NIC_SRAM_RGMII_STD_IBND_DISABLE 0x00000004
- #define  NIC_SRAM_RGMII_EXT_IBND_RX_EN         0x00000008
- #define  NIC_SRAM_RGMII_EXT_IBND_TX_EN         0x00000010
-+#define TG3_FLG3_IS_SSB_CORE          0x00000800
-+#define TG3_FLG3_FLUSH_POSTED_WRITES  0x00001000
-+#define TG3_FLG3_ROBOSWITCH           0x00002000
- #define NIC_SRAM_RX_MINI_BUFFER_DESC  0x00001000
-@@ -2874,6 +2877,7 @@ struct tg3 {
- #define PHY_ID_BCM5714                        0x60008340
- #define PHY_ID_BCM5780                        0x60008350
- #define PHY_ID_BCM5755                        0xbc050cc0
-+#define PHY_ID_BCM5750_2              0xbc050cd0
- #define PHY_ID_BCM5787                        0xbc050ce0
- #define PHY_ID_BCM5756                        0xbc050ed0
- #define PHY_ID_BCM5784                        0xbc050fa0
-@@ -2921,7 +2925,8 @@ struct tg3 {
-        (X) == PHY_ID_BCM5780 || (X) == PHY_ID_BCM5787 || \
-        (X) == PHY_ID_BCM5755 || (X) == PHY_ID_BCM5756 || \
-        (X) == PHY_ID_BCM5906 || (X) == PHY_ID_BCM5761 || \
--       (X) == PHY_ID_BCM5717 || (X) == PHY_ID_BCM8002)
-+       (X) == PHY_ID_BCM5717 || (X) == PHY_ID_BCM8002 || \
-+       (X) == PHY_ID_BCM5750_2)
-       struct tg3_hw_stats             *hw_stats;
-       dma_addr_t                      stats_mapping;
diff --git a/target/linux/brcm47xx/patches-2.6.33/800-fix_cfe_detection.patch b/target/linux/brcm47xx/patches-2.6.33/800-fix_cfe_detection.patch
deleted file mode 100644 (file)
index a298055..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
---- a/arch/mips/bcm47xx/prom.c
-+++ b/arch/mips/bcm47xx/prom.c
-@@ -32,6 +32,7 @@
- #include <asm/fw/cfe/cfe_error.h>
- static int cfe_cons_handle;
-+static void (* __prom_putchar)(char c);
- const char *get_system_type(void)
- {
-@@ -40,65 +41,40 @@ const char *get_system_type(void)
- void prom_putchar(char c)
- {
-+      if (__prom_putchar)
-+              __prom_putchar(c);
-+}
-+
-+void prom_putchar_cfe(char c)
-+{
-       while (cfe_write(cfe_cons_handle, &c, 1) == 0)
-               ;
- }
--static __init void prom_init_cfe(void)
-+static __init int prom_init_cfe(void)
- {
-       uint32_t cfe_ept;
-       uint32_t cfe_handle;
-       uint32_t cfe_eptseal;
--      int argc = fw_arg0;
--      char **envp = (char **) fw_arg2;
--      int *prom_vec = (int *) fw_arg3;
--
--      /*
--       * Check if a loader was used; if NOT, the 4 arguments are
--       * what CFE gives us (handle, 0, EPT and EPTSEAL)
--       */
--      if (argc < 0) {
--              cfe_handle = (uint32_t)argc;
--              cfe_ept = (uint32_t)envp;
--              cfe_eptseal = (uint32_t)prom_vec;
--      } else {
--              if ((int)prom_vec < 0) {
--                      /*
--                       * Old loader; all it gives us is the handle,
--                       * so use the "known" entrypoint and assume
--                       * the seal.
--                       */
--                      cfe_handle = (uint32_t)prom_vec;
--                      cfe_ept = 0xBFC00500;
--                      cfe_eptseal = CFE_EPTSEAL;
--              } else {
--                      /*
--                       * Newer loaders bundle the handle/ept/eptseal
--                       * Note: prom_vec is in the loader's useg
--                       * which is still alive in the TLB.
--                       */
--                      cfe_handle = prom_vec[0];
--                      cfe_ept = prom_vec[2];
--                      cfe_eptseal = prom_vec[3];
--              }
--      }
--      if (cfe_eptseal != CFE_EPTSEAL) {
--              /* too early for panic to do any good */
--              printk(KERN_ERR "CFE's entrypoint seal doesn't match.");
--              while (1) ;
--      }
-+      cfe_eptseal = (uint32_t) fw_arg3;
-+      cfe_handle = (uint32_t) fw_arg0;
-+      cfe_ept = (uint32_t) fw_arg2;
-+
-+      if (cfe_eptseal != CFE_EPTSEAL)
-+              return -1;
-       cfe_init(cfe_handle, cfe_ept);
-+      return 0;
- }
--static __init void prom_init_console(void)
-+static __init void prom_init_console_cfe(void)
- {
-       /* Initialize CFE console */
-       cfe_cons_handle = cfe_getstdhandle(CFE_STDHANDLE_CONSOLE);
- }
--static __init void prom_init_cmdline(void)
-+static __init void prom_init_cmdline_cfe(void)
- {
-       static char buf[COMMAND_LINE_SIZE] __initdata;
-@@ -160,9 +136,12 @@ static __init void prom_init_mem(void)
- void __init prom_init(void)
- {
--      prom_init_cfe();
--      prom_init_console();
--      prom_init_cmdline();
-+      if (prom_init_cfe() == 0) {
-+              //prom_init_console_cfe();
-+              //prom_init_cmdline_cfe();
-+              __prom_putchar = prom_putchar_cfe;
-+      }
-+
-       prom_init_mem();
- }
diff --git a/target/linux/brcm47xx/patches-2.6.33/812-disable_wgt634u_crap.patch b/target/linux/brcm47xx/patches-2.6.33/812-disable_wgt634u_crap.patch
deleted file mode 100644 (file)
index eb212f3..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
---- a/arch/mips/bcm47xx/Makefile
-+++ b/arch/mips/bcm47xx/Makefile
-@@ -3,4 +3,4 @@
- # under Linux.
- #
--obj-y := cfe_env.o gpio.o irq.o nvram.o prom.o serial.o setup.o time.o wgt634u.o
-+obj-y := cfe_env.o gpio.o irq.o nvram.o prom.o serial.o setup.o time.o
---- a/arch/mips/bcm47xx/wgt634u.c
-+++ /dev/null
-@@ -1,167 +0,0 @@
--/*
-- * This file is subject to the terms and conditions of the GNU General Public
-- * License.  See the file "COPYING" in the main directory of this archive
-- * for more details.
-- *
-- * Copyright (C) 2007 Aurelien Jarno <aurelien@aurel32.net>
-- */
--
--#include <linux/platform_device.h>
--#include <linux/module.h>
--#include <linux/leds.h>
--#include <linux/mtd/physmap.h>
--#include <linux/ssb/ssb.h>
--#include <linux/interrupt.h>
--#include <linux/reboot.h>
--#include <linux/gpio.h>
--#include <asm/mach-bcm47xx/bcm47xx.h>
--
--/* GPIO definitions for the WGT634U */
--#define WGT634U_GPIO_LED      3
--#define WGT634U_GPIO_RESET    2
--#define WGT634U_GPIO_TP1      7
--#define WGT634U_GPIO_TP2      6
--#define WGT634U_GPIO_TP3      5
--#define WGT634U_GPIO_TP4      4
--#define WGT634U_GPIO_TP5      1
--
--static struct gpio_led wgt634u_leds[] = {
--      {
--              .name = "power",
--              .gpio = WGT634U_GPIO_LED,
--              .active_low = 1,
--              .default_trigger = "heartbeat",
--      },
--};
--
--static struct gpio_led_platform_data wgt634u_led_data = {
--      .num_leds =     ARRAY_SIZE(wgt634u_leds),
--      .leds =         wgt634u_leds,
--};
--
--static struct platform_device wgt634u_gpio_leds = {
--      .name =         "leds-gpio",
--      .id =           -1,
--      .dev = {
--              .platform_data = &wgt634u_led_data,
--      }
--};
--
--
--/* 8MiB flash. The struct mtd_partition matches original Netgear WGT634U
--   firmware. */
--static struct mtd_partition wgt634u_partitions[] = {
--      {
--              .name       = "cfe",
--              .offset     = 0,
--              .size       = 0x60000,          /* 384k */
--              .mask_flags = MTD_WRITEABLE     /* force read-only */
--      },
--      {
--              .name   = "config",
--              .offset = 0x60000,
--              .size   = 0x20000               /* 128k */
--      },
--      {
--              .name   = "linux",
--              .offset = 0x80000,
--              .size   = 0x140000              /* 1280k */
--      },
--      {
--              .name   = "jffs",
--              .offset = 0x1c0000,
--              .size   = 0x620000              /* 6272k */
--      },
--      {
--              .name   = "nvram",
--              .offset = 0x7e0000,
--              .size   = 0x20000               /* 128k */
--      },
--};
--
--static struct physmap_flash_data wgt634u_flash_data = {
--      .parts    = wgt634u_partitions,
--      .nr_parts = ARRAY_SIZE(wgt634u_partitions)
--};
--
--static struct resource wgt634u_flash_resource = {
--      .flags = IORESOURCE_MEM,
--};
--
--static struct platform_device wgt634u_flash = {
--      .name          = "physmap-flash",
--      .id            = 0,
--      .dev           = { .platform_data = &wgt634u_flash_data, },
--      .resource      = &wgt634u_flash_resource,
--      .num_resources = 1,
--};
--
--/* Platform devices */
--static struct platform_device *wgt634u_devices[] __initdata = {
--      &wgt634u_flash,
--      &wgt634u_gpio_leds,
--};
--
--static irqreturn_t gpio_interrupt(int irq, void *ignored)
--{
--      int state;
--
--      /* Interrupts are shared, check if the current one is
--         a GPIO interrupt. */
--      if (!ssb_chipco_irq_status(&ssb_bcm47xx.chipco,
--                                 SSB_CHIPCO_IRQ_GPIO))
--              return IRQ_NONE;
--
--      state = gpio_get_value(WGT634U_GPIO_RESET);
--
--      /* Interrupt are level triggered, revert the interrupt polarity
--         to clear the interrupt. */
--      gpio_polarity(WGT634U_GPIO_RESET, state);
--
--      if (!state) {
--              printk(KERN_INFO "Reset button pressed");
--              ctrl_alt_del();
--      }
--
--      return IRQ_HANDLED;
--}
--
--static int __init wgt634u_init(void)
--{
--      /* There is no easy way to detect that we are running on a WGT634U
--       * machine. Use the MAC address as an heuristic. Netgear Inc. has
--       * been allocated ranges 00:09:5b:xx:xx:xx and 00:0f:b5:xx:xx:xx.
--       */
--
--      u8 *et0mac = ssb_bcm47xx.sprom.et0mac;
--
--      if (et0mac[0] == 0x00 &&
--          ((et0mac[1] == 0x09 && et0mac[2] == 0x5b) ||
--           (et0mac[1] == 0x0f && et0mac[2] == 0xb5))) {
--              struct ssb_mipscore *mcore = &ssb_bcm47xx.mipscore;
--
--              printk(KERN_INFO "WGT634U machine detected.\n");
--
--              if (!request_irq(gpio_to_irq(WGT634U_GPIO_RESET),
--                               gpio_interrupt, IRQF_SHARED,
--                               "WGT634U GPIO", &ssb_bcm47xx.chipco)) {
--                      gpio_direction_input(WGT634U_GPIO_RESET);
--                      gpio_intmask(WGT634U_GPIO_RESET, 1);
--                      ssb_chipco_irq_mask(&ssb_bcm47xx.chipco,
--                                          SSB_CHIPCO_IRQ_GPIO,
--                                          SSB_CHIPCO_IRQ_GPIO);
--              }
--
--              wgt634u_flash_data.width = mcore->flash_buswidth;
--              wgt634u_flash_resource.start = mcore->flash_window;
--              wgt634u_flash_resource.end = mcore->flash_window
--                                         + mcore->flash_window_size
--                                         - 1;
--              return platform_add_devices(wgt634u_devices,
--                                          ARRAY_SIZE(wgt634u_devices));
--      } else
--              return -ENODEV;
--}
--
--module_init(wgt634u_init);
--
diff --git a/target/linux/brcm47xx/patches-2.6.33/813-use_netdev_alloc_skb.patch b/target/linux/brcm47xx/patches-2.6.33/813-use_netdev_alloc_skb.patch
deleted file mode 100644 (file)
index c431e40..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/net/b44.c
-+++ b/drivers/net/b44.c
-@@ -815,7 +815,7 @@ static int b44_rx(struct b44 *bp, int bu
-                       struct sk_buff *copy_skb;
-                       b44_recycle_rx(bp, cons, bp->rx_prod);
--                      copy_skb = dev_alloc_skb(len + 2);
-+                      copy_skb = netdev_alloc_skb(bp->dev, len + 2);
-                       if (copy_skb == NULL)
-                               goto drop_it_no_recycle;
diff --git a/target/linux/brcm47xx/patches-2.6.33/900-disable_early_printk.patch b/target/linux/brcm47xx/patches-2.6.33/900-disable_early_printk.patch
deleted file mode 100644 (file)
index c5fb54b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -65,7 +65,6 @@ config BCM47XX
-       select SSB_B43_PCI_BRIDGE if PCI
-       select SSB_PCICORE_HOSTMODE if PCI
-       select GENERIC_GPIO
--      select SYS_HAS_EARLY_PRINTK
-       select CFE
-       help
-        Support for BCM47XX based boards
diff --git a/target/linux/brcm47xx/patches-2.6.33/920-cache-wround.patch b/target/linux/brcm47xx/patches-2.6.33/920-cache-wround.patch
deleted file mode 100644 (file)
index 3edf04b..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
---- a/arch/mips/include/asm/r4kcache.h
-+++ b/arch/mips/include/asm/r4kcache.h
-@@ -20,10 +20,25 @@
- #ifdef CONFIG_BCM47XX
- #include <asm/paccess.h>
- #include <linux/ssb/ssb.h>
--#define BCM4710_DUMMY_RREG() ((void) *((u8 *) KSEG1ADDR(SSB_ENUM_BASE + SSB_IMSTATE)))
-+#define BCM4710_DUMMY_RREG() bcm4710_dummy_rreg()
-+
-+static inline unsigned long bcm4710_dummy_rreg(void) {
-+      return (*(volatile unsigned long *)(KSEG1ADDR(SSB_ENUM_BASE + SSB_IMSTATE)));
-+}
-+
-+#define BCM4710_FILL_TLB(addr) bcm4710_fill_tlb((void*)(addr))
-+
-+static inline unsigned long bcm4710_fill_tlb(void *addr) {
-+      return (*(unsigned long *)addr);
-+}
-+
-+#define BCM4710_PROTECTED_FILL_TLB(addr) bcm4710_protected_fill_tlb((void*)(addr))
-+
-+static inline void bcm4710_protected_fill_tlb(void *addr) {
-+      unsigned long x;
-+      get_dbe(x, (unsigned long *)addr);;
-+}
--#define BCM4710_FILL_TLB(addr) (*(volatile unsigned long *)(addr))
--#define BCM4710_PROTECTED_FILL_TLB(addr) ({ unsigned long x; get_dbe(x, (volatile unsigned long *)(addr)); })
- #else
- #define BCM4710_DUMMY_RREG()
---- a/arch/mips/mm/tlbex.c
-+++ b/arch/mips/mm/tlbex.c
-@@ -611,6 +611,9 @@ build_get_pgde32(u32 **p, unsigned int t
- #endif
-       uasm_i_addu(p, ptr, tmp, ptr);
- #else
-+#ifdef CONFIG_BCM47XX
-+      uasm_i_nop(p);
-+#endif
-       UASM_i_LA_mostly(p, ptr, pgdc);
- #endif
-       uasm_i_mfc0(p, tmp, C0_BADVADDR); /* get faulting address */
-@@ -749,12 +752,12 @@ static void __cpuinit build_r4000_tlb_re
-               /* No need for uasm_i_nop */
-       }
--#ifdef CONFIG_BCM47XX
--      uasm_i_nop(&p);
--#endif
- #ifdef CONFIG_64BIT
-       build_get_pmde64(&p, &l, &r, K0, K1); /* get pmd in K1 */
- #else
-+# ifdef CONFIG_BCM47XX
-+      uasm_i_nop(&p);
-+# endif
-       build_get_pgde32(&p, K0, K1); /* get pgd in K1 */
- #endif
-@@ -766,6 +769,9 @@ static void __cpuinit build_r4000_tlb_re
-       build_update_entries(&p, K0, K1);
-       build_tlb_write_entry(&p, &l, &r, tlb_random);
-       uasm_l_leave(&l, p);
-+#ifdef CONFIG_BCM47XX
-+      uasm_i_nop(&p);
-+#endif
-       uasm_i_eret(&p); /* return from trap */
- #ifdef CONFIG_HUGETLB_PAGE
-@@ -1206,12 +1212,12 @@ build_r4000_tlbchange_handler_head(u32 *
-                                  struct uasm_reloc **r, unsigned int pte,
-                                  unsigned int ptr)
- {
--#ifdef CONFIG_BCM47XX
--      uasm_i_nop(p);
--#endif
- #ifdef CONFIG_64BIT
-       build_get_pmde64(p, l, r, pte, ptr); /* get pmd in ptr */
- #else
-+# ifdef CONFIG_BCM47XX
-+      uasm_i_nop(p);
-+# endif
-       build_get_pgde32(p, pte, ptr); /* get pgd in ptr */
- #endif
-@@ -1248,6 +1254,9 @@ build_r4000_tlbchange_handler_tail(u32 *
-       build_update_entries(p, tmp, ptr);
-       build_tlb_write_entry(p, l, r, tlb_indexed);
-       uasm_l_leave(l, *p);
-+#ifdef CONFIG_BCM47XX
-+      uasm_i_nop(p);
-+#endif
-       uasm_i_eret(p); /* return from trap */
- #ifdef CONFIG_64BIT
---- a/arch/mips/kernel/genex.S
-+++ b/arch/mips/kernel/genex.S
-@@ -22,6 +22,19 @@
- #include <asm/page.h>
- #include <asm/thread_info.h>
-+#ifdef CONFIG_BCM47XX
-+# ifdef eret
-+#  undef eret
-+# endif
-+# define eret                                         \
-+      .set push;                              \
-+      .set noreorder;                         \
-+       nop;                                   \
-+       nop;                                   \
-+       eret;                                  \
-+      .set pop;
-+#endif
-+
- #define PANIC_PIC(msg)                                        \
-               .set push;                              \
-               .set    reorder;                        \
-@@ -54,7 +67,6 @@ NESTED(except_vec3_generic, 0, sp)
-       .set    noat
- #ifdef CONFIG_BCM47XX
-       nop
--      nop
- #endif
- #if R5432_CP0_INTERRUPT_WAR
-       mfc0    k0, CP0_INDEX
-@@ -79,6 +91,9 @@ NESTED(except_vec3_r4000, 0, sp)
-       .set    push
-       .set    mips3
-       .set    noat
-+#ifdef CONFIG_BCM47XX
-+      nop
-+#endif
-       mfc0    k1, CP0_CAUSE
-       li      k0, 31<<2
-       andi    k1, k1, 0x7c
diff --git a/target/linux/brcm47xx/patches-2.6.33/930-bcm47xx-pci-iomem.patch b/target/linux/brcm47xx/patches-2.6.33/930-bcm47xx-pci-iomem.patch
deleted file mode 100644 (file)
index 1ceccb5..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-Index: linux-2.6.33/drivers/ssb/driver_pcicore.c
-===================================================================
---- linux-2.6.33.orig/drivers/ssb/driver_pcicore.c     2010-03-15 14:52:55.000000000 +0100
-+++ linux-2.6.33/drivers/ssb/driver_pcicore.c  2010-03-15 15:57:38.000000000 +0100
-@@ -246,20 +246,12 @@
-       .pci_ops        = &ssb_pcicore_pciops,
-       .io_resource    = &ssb_pcicore_io_resource,
-       .mem_resource   = &ssb_pcicore_mem_resource,
--      .mem_offset     = 0x24000000,
- };
--static u32 ssb_pcicore_pcibus_iobase = 0x100;
--static u32 ssb_pcicore_pcibus_membase = SSB_PCI_DMA;
--
- /* This function is called when doing a pci_enable_device().
-  * We must first check if the device is a device on the PCI-core bridge. */
- int ssb_pcicore_plat_dev_init(struct pci_dev *d)
- {
--      struct resource *res;
--      int pos, size;
--      u32 *base;
--
-       if (d->bus->ops != &ssb_pcicore_pciops) {
-               /* This is not a device on the PCI-core bridge. */
-               return -ENODEV;
-@@ -268,27 +260,6 @@
-       ssb_printk(KERN_INFO "PCI: Fixing up device %s\n",
-                  pci_name(d));
--      /* Fix up resource bases */
--      for (pos = 0; pos < 6; pos++) {
--              res = &d->resource[pos];
--              if (res->flags & IORESOURCE_IO)
--                      base = &ssb_pcicore_pcibus_iobase;
--              else
--                      base = &ssb_pcicore_pcibus_membase;
--              res->flags |= IORESOURCE_PCI_FIXED;
--              if (res->end) {
--                      size = res->end - res->start + 1;
--                      if (*base & (size - 1))
--                              *base = (*base + size) & ~(size - 1);
--                      res->start = *base;
--                      res->end = res->start + size - 1;
--                      *base += size;
--                      pci_write_config_dword(d, PCI_BASE_ADDRESS_0 + (pos << 2), res->start);
--              }
--              /* Fix up PCI bridge BAR0 only */
--              if (d->bus->number == 0 && PCI_SLOT(d->devfn) == 0)
--                      break;
--      }
-       /* Fix up interrupt lines */
-       d->irq = ssb_mips_irq(extpci_core->dev) + 2;
-       pci_write_config_byte(d, PCI_INTERRUPT_LINE, d->irq);
diff --git a/target/linux/brcm47xx/patches-2.6.33/940-bcm47xx-yenta.patch b/target/linux/brcm47xx/patches-2.6.33/940-bcm47xx-yenta.patch
deleted file mode 100644 (file)
index aaff523..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-Index: linux-2.6.32.9/drivers/pcmcia/yenta_socket.c
-===================================================================
---- linux-2.6.32.9.orig/drivers/pcmcia/yenta_socket.c  2010-03-12 09:43:45.000000000 +0100
-+++ linux-2.6.32.9/drivers/pcmcia/yenta_socket.c       2010-03-12 10:05:33.000000000 +0100
-@@ -866,6 +866,8 @@
-        * Probe for usable interrupts using the force
-        * register to generate bogus card status events.
-        */
-+#ifndef CONFIG_BCM47XX
-+      /* WRT54G3G does not like this */
-       cb_writel(socket, CB_SOCKET_EVENT, -1);
-       cb_writel(socket, CB_SOCKET_MASK, CB_CSTSMASK);
-       exca_writeb(socket, I365_CSCINT, 0);
-@@ -880,6 +882,7 @@
-       }
-       cb_writel(socket, CB_SOCKET_MASK, 0);
-       exca_writeb(socket, I365_CSCINT, 0);
-+#endif
-       mask = probe_irq_mask(val) & 0xffff;
-@@ -960,6 +963,10 @@
-       else
-               socket->socket.irq_mask = 0;
-+      /* irq mask probing is broken for the WRT54G3G */
-+      if (socket->socket.irq_mask == 0)
-+              socket->socket.irq_mask = 0x6f8;
-+
-       dev_printk(KERN_INFO, &socket->dev->dev,
-                  "ISA IRQ mask 0x%04x, PCI irq %d\n",
-                  socket->socket.irq_mask, socket->cb_irq);
-@@ -1198,6 +1205,15 @@
-       dev_printk(KERN_INFO, &dev->dev,
-                  "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
-+      /* Generate an interrupt on card insert/remove */
-+      config_writew(socket, CB_SOCKET_MASK, CB_CSTSMASK | CB_CDMASK);
-+
-+      /* Set up Multifunction Routing Status Register */
-+      config_writew(socket, 0x8C, 0x1000 /* MFUNC3 to GPIO3 */ | 0x2 /* MFUNC0 to INTA */);
-+
-+      /* Switch interrupts to parallelized */
-+      config_writeb(socket, 0x92, 0x64);
-+
-       yenta_fixup_parent_bridge(dev->subordinate);
-       /* Register it with the pcmcia layer.. */
diff --git a/target/linux/brcm63xx/config-2.6.33 b/target/linux/brcm63xx/config-2.6.33
deleted file mode 100644 (file)
index c9dd638..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_ATH_COMMON is not set
-CONFIG_AUDIT=y
-CONFIG_AUDIT_GENERIC=y
-# CONFIG_BATMAN_ADV is not set
-# CONFIG_BCM47XX is not set
-CONFIG_BCM63XX=y
-CONFIG_BCM63XX_CPU_6338=y
-CONFIG_BCM63XX_CPU_6345=y
-CONFIG_BCM63XX_CPU_6348=y
-CONFIG_BCM63XX_CPU_6358=y
-CONFIG_BCM63XX_ENET=y
-CONFIG_BCM63XX_PHY=y
-CONFIG_BCM63XX_WDT=y
-CONFIG_BITREVERSE=y
-CONFIG_BOARD_BCM963XX=y
-# CONFIG_BOARD_LIVEBOX is not set
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CFG80211=m
-# CONFIG_CFG80211_DEBUGFS is not set
-CONFIG_CFG80211_DEFAULT_PS=y
-# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
-# CONFIG_CFG80211_REG_DEBUG is not set
-CONFIG_CFG80211_WEXT=y
-CONFIG_CMDLINE="root=/dev/mtdblock2 rootfstype=squashfs,jffs2 noinitrd console=ttyS0,115200"
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-CONFIG_CPU_BIG_ENDIAN=y
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-# CONFIG_CPU_LITTLE_ENDIAN is not set
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPS32_R1=y
-# CONFIG_CPU_MIPS32_R2 is not set
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR1=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-CONFIG_CRAMFS=y
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-CONFIG_DECOMPRESS_LZMA=y
-CONFIG_DEFAULT_SECURITY=""
-CONFIG_DEFAULT_SECURITY_DAC=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-CONFIG_EARLY_PRINTK=y
-CONFIG_ELF_CORE=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_CS5535 is not set
-CONFIG_GPIO_DEVICE=y
-CONFIG_GPIO_SYSFS=y
-# CONFIG_HAMRADIO is not set
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-CONFIG_HW_HAS_PCI=y
-CONFIG_HW_RANDOM=y
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-CONFIG_IP_PIMSM_V1=y
-CONFIG_IP_PIMSM_V2=y
-CONFIG_IRQ_CPU=y
-CONFIG_KEXEC=y
-CONFIG_LEDS_GPIO=y
-# CONFIG_LEDS_LT3593 is not set
-# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-CONFIG_MAGIC_SYSRQ=y
-# CONFIG_MIKROTIK_RB532 is not set
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=5
-# CONFIG_MIPS_MACHINE is not set
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MODULE_FORCE_LOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-CONFIG_MTD_BCM963XX=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-CONFIG_MTD_CFI_BE_BYTE_SWAP=y
-# CONFIG_MTD_CFI_GEOMETRY is not set
-# CONFIG_MTD_CFI_NOSWAP is not set
-CONFIG_MTD_CFI_STAA=y
-CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_CONCAT=y
-CONFIG_MTD_JEDECPROBE=y
-CONFIG_MTD_REDBOOT_PARTS=y
-CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-# CONFIG_NL80211_TESTMODE is not set
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PCI=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PHYLIB=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-CONFIG_POSIX_MQUEUE=y
-CONFIG_POSIX_MQUEUE_SYSCTL=y
-# CONFIG_POWERTV is not set
-# CONFIG_R8187SE is not set
-# CONFIG_RAMZSWAP is not set
-CONFIG_RELAY=y
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-# CONFIG_SCSI_DMA is not set
-# CONFIG_SERIAL_8250 is not set
-CONFIG_SERIAL_BCM63XX=y
-CONFIG_SERIAL_BCM63XX_CONSOLE=y
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-CONFIG_SQUASHFS_EMBEDDED=y
-CONFIG_SSB=y
-CONFIG_SSB_B43_PCI_BRIDGE=y
-# CONFIG_SSB_DRIVER_MIPS is not set
-CONFIG_SSB_DRIVER_PCICORE=y
-CONFIG_SSB_DRIVER_PCICORE_POSSIBLE=y
-CONFIG_SSB_PCIHOST=y
-CONFIG_SSB_PCIHOST_POSSIBLE=y
-CONFIG_SSB_SPROM=y
-CONFIG_SWAP_IO_SPACE=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_HAS_EARLY_PRINTK=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_BIG_ENDIAN=y
-# CONFIG_TC35815 is not set
-# CONFIG_TINY_RCU is not set
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_TREE_RCU=y
-CONFIG_USB_EHCI_BIG_ENDIAN_MMIO=y
-CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-CONFIG_USB_SUPPORT=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_WATCHDOG_NOWAYOUT=y
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/brcm63xx/patches-2.6.33/007-usb-ohci-support.patch b/target/linux/brcm63xx/patches-2.6.33/007-usb-ohci-support.patch
deleted file mode 100644 (file)
index 526d3e7..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-The bcm63xx SOC has an integrated OHCI controller, this patch adds
-platform device registration and change board code to register ohci
-device when necessary.
-
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- arch/mips/bcm63xx/Kconfig                          |    6 ++
- arch/mips/bcm63xx/Makefile                         |    3 +-
- arch/mips/bcm63xx/boards/board_bcm963xx.c          |    4 ++
- arch/mips/bcm63xx/dev-usb-ohci.c                   |   49 ++++++++++++++++++++
- .../asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h        |    6 ++
- 5 files changed, 67 insertions(+), 1 deletions(-)
- create mode 100644 arch/mips/bcm63xx/dev-usb-ohci.c
- create mode 100644 arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h
-
---- a/arch/mips/bcm63xx/Kconfig
-+++ b/arch/mips/bcm63xx/Kconfig
-@@ -16,10 +16,16 @@ config BCM63XX_CPU_6345
- config BCM63XX_CPU_6348
-       bool "support 6348 CPU"
-       select HW_HAS_PCI
-+      select USB_ARCH_HAS_OHCI
-+      select USB_OHCI_BIG_ENDIAN_DESC
-+      select USB_OHCI_BIG_ENDIAN_MMIO
- config BCM63XX_CPU_6358
-       bool "support 6358 CPU"
-       select HW_HAS_PCI
-+      select USB_ARCH_HAS_OHCI
-+      select USB_OHCI_BIG_ENDIAN_DESC
-+      select USB_OHCI_BIG_ENDIAN_MMIO
- endmenu
- source "arch/mips/bcm63xx/boards/Kconfig"
---- a/arch/mips/bcm63xx/Makefile
-+++ b/arch/mips/bcm63xx/Makefile
-@@ -1,5 +1,6 @@
- obj-y         += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \
--                 dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o dev-wdt.o
-+                 dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o dev-wdt.o \
-+                 dev-usb-ohci.o
- obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
- obj-y         += boards/
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -24,6 +24,7 @@
- #include <bcm63xx_dev_enet.h>
- #include <bcm63xx_dev_dsp.h>
- #include <bcm63xx_dev_pcmcia.h>
-+#include <bcm63xx_dev_usb_ohci.h>
- #include <board_bcm963xx.h>
- #define PFX   "board_bcm963xx: "
-@@ -803,6 +804,9 @@ int __init board_register_devices(void)
-           !board_get_mac_address(board.enet1.mac_addr))
-               bcm63xx_enet_register(1, &board.enet1);
-+      if (board.has_ohci0)
-+              bcm63xx_ohci_register();
-+
-       if (board.has_dsp)
-               bcm63xx_dsp_register(&board.dsp);
---- /dev/null
-+++ b/arch/mips/bcm63xx/dev-usb-ohci.c
-@@ -0,0 +1,49 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2010 Maxime Bizon <mbizon@freebox.fr>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <bcm63xx_cpu.h>
-+#include <bcm63xx_dev_usb_ohci.h>
-+
-+static struct resource ohci_resources[] = {
-+      {
-+              /* start & end filled at runtime */
-+              .flags          = IORESOURCE_MEM,
-+      },
-+      {
-+              /* start filled at runtime */
-+              .flags          = IORESOURCE_IRQ,
-+      },
-+};
-+
-+static u64 ohci_dmamask = ~(u32)0;
-+
-+static struct platform_device bcm63xx_ohci_device = {
-+      .name           = "bcm63xx_ohci",
-+      .id             = 0,
-+      .num_resources  = ARRAY_SIZE(ohci_resources),
-+      .resource       = ohci_resources,
-+      .dev            = {
-+              .dma_mask               = &ohci_dmamask,
-+              .coherent_dma_mask      = 0xffffffff,
-+      },
-+};
-+
-+int __init bcm63xx_ohci_register(void)
-+{
-+      if (!BCMCPU_IS_6348() && !BCMCPU_IS_6358())
-+              return 0;
-+
-+      ohci_resources[0].start = bcm63xx_regset_address(RSET_OHCI0);
-+      ohci_resources[0].end = ohci_resources[0].start;
-+      ohci_resources[0].end += RSET_OHCI_SIZE - 1;
-+      ohci_resources[1].start = bcm63xx_get_irq_number(IRQ_OHCI0);
-+      return platform_device_register(&bcm63xx_ohci_device);
-+}
---- /dev/null
-+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ohci.h
-@@ -0,0 +1,6 @@
-+#ifndef BCM63XX_DEV_USB_OHCI_H_
-+#define BCM63XX_DEV_USB_OHCI_H_
-+
-+int bcm63xx_ohci_register(void);
-+
-+#endif /* BCM63XX_DEV_USB_OHCI_H_ */
diff --git a/target/linux/brcm63xx/patches-2.6.33/008-usb-ehci-support.patch b/target/linux/brcm63xx/patches-2.6.33/008-usb-ehci-support.patch
deleted file mode 100644 (file)
index e5a682d..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-The bcm63xx SOC has an integrated EHCI controller, this patch adds
-platform device registration and change board code to register
-EHCI device when necessary.
-
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- arch/mips/bcm63xx/Kconfig                          |    2 +
- arch/mips/bcm63xx/Makefile                         |    2 +-
- arch/mips/bcm63xx/boards/board_bcm963xx.c          |    4 ++
- arch/mips/bcm63xx/dev-usb-ehci.c                   |   49 ++++++++++++++++++++
- .../asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h        |    6 ++
- 5 files changed, 62 insertions(+), 1 deletions(-)
- create mode 100644 arch/mips/bcm63xx/dev-usb-ehci.c
- create mode 100644 arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h
-
---- a/arch/mips/bcm63xx/Kconfig
-+++ b/arch/mips/bcm63xx/Kconfig
-@@ -26,6 +26,8 @@ config BCM63XX_CPU_6358
-       select USB_ARCH_HAS_OHCI
-       select USB_OHCI_BIG_ENDIAN_DESC
-       select USB_OHCI_BIG_ENDIAN_MMIO
-+      select USB_ARCH_HAS_EHCI
-+      select USB_EHCI_BIG_ENDIAN_MMIO
- endmenu
- source "arch/mips/bcm63xx/boards/Kconfig"
---- a/arch/mips/bcm63xx/Makefile
-+++ b/arch/mips/bcm63xx/Makefile
-@@ -1,6 +1,6 @@
- obj-y         += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \
-                  dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o dev-wdt.o \
--                 dev-usb-ohci.o
-+                 dev-usb-ohci.o dev-usb-ehci.o
- obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
- obj-y         += boards/
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -25,6 +25,7 @@
- #include <bcm63xx_dev_dsp.h>
- #include <bcm63xx_dev_pcmcia.h>
- #include <bcm63xx_dev_usb_ohci.h>
-+#include <bcm63xx_dev_usb_ehci.h>
- #include <board_bcm963xx.h>
- #define PFX   "board_bcm963xx: "
-@@ -804,6 +805,9 @@ int __init board_register_devices(void)
-           !board_get_mac_address(board.enet1.mac_addr))
-               bcm63xx_enet_register(1, &board.enet1);
-+      if (board.has_ehci0)
-+              bcm63xx_ehci_register();
-+
-       if (board.has_ohci0)
-               bcm63xx_ohci_register();
---- /dev/null
-+++ b/arch/mips/bcm63xx/dev-usb-ehci.c
-@@ -0,0 +1,49 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2010 Maxime Bizon <mbizon@freebox.fr>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <bcm63xx_cpu.h>
-+#include <bcm63xx_dev_usb_ehci.h>
-+
-+static struct resource ehci_resources[] = {
-+      {
-+              /* start & end filled at runtime */
-+              .flags          = IORESOURCE_MEM,
-+      },
-+      {
-+              /* start filled at runtime */
-+              .flags          = IORESOURCE_IRQ,
-+      },
-+};
-+
-+static u64 ehci_dmamask = ~(u32)0;
-+
-+static struct platform_device bcm63xx_ehci_device = {
-+      .name           = "bcm63xx_ehci",
-+      .id             = 0,
-+      .num_resources  = ARRAY_SIZE(ehci_resources),
-+      .resource       = ehci_resources,
-+      .dev            = {
-+              .dma_mask               = &ehci_dmamask,
-+              .coherent_dma_mask      = 0xffffffff,
-+      },
-+};
-+
-+int __init bcm63xx_ehci_register(void)
-+{
-+      if (!BCMCPU_IS_6358())
-+              return 0;
-+
-+      ehci_resources[0].start = bcm63xx_regset_address(RSET_EHCI0);
-+      ehci_resources[0].end = ehci_resources[0].start;
-+      ehci_resources[0].end += RSET_EHCI_SIZE - 1;
-+      ehci_resources[1].start = bcm63xx_get_irq_number(IRQ_EHCI0);
-+      return platform_device_register(&bcm63xx_ehci_device);
-+}
---- /dev/null
-+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_ehci.h
-@@ -0,0 +1,6 @@
-+#ifndef BCM63XX_DEV_USB_EHCI_H_
-+#define BCM63XX_DEV_USB_EHCI_H_
-+
-+int bcm63xx_ehci_register(void);
-+
-+#endif /* BCM63XX_DEV_USB_EHCI_H_ */
diff --git a/target/linux/brcm63xx/patches-2.6.33/009-fix-double-gpio-registration.patch b/target/linux/brcm63xx/patches-2.6.33/009-fix-double-gpio-registration.patch
deleted file mode 100644 (file)
index 56b44ee..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-bcm63xx_gpio_init is already called from prom_init to allow board to
-use them early, so we can remove the unneeded arch_initcall.
-
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- arch/mips/bcm63xx/gpio.c |    2 --
- 1 files changed, 0 insertions(+), 2 deletions(-)
-
---- a/arch/mips/bcm63xx/gpio.c
-+++ b/arch/mips/bcm63xx/gpio.c
-@@ -130,5 +130,3 @@ int __init bcm63xx_gpio_init(void)
-       return gpiochip_add(&bcm63xx_gpio_chip);
- }
--
--arch_initcall(bcm63xx_gpio_init);
diff --git a/target/linux/brcm63xx/patches-2.6.33/010-add_bcm63xx_ohci_controller.patch b/target/linux/brcm63xx/patches-2.6.33/010-add_bcm63xx_ohci_controller.patch
deleted file mode 100644 (file)
index 49e6ea1..0000000
+++ /dev/null
@@ -1,202 +0,0 @@
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- drivers/usb/host/ohci-bcm63xx.c |  166 +++++++++++++++++++++++++++++++++++++++
- drivers/usb/host/ohci-hcd.c     |    5 +
- drivers/usb/host/ohci.h         |    2 +-
- 3 files changed, 172 insertions(+), 1 deletions(-)
- create mode 100644 drivers/usb/host/ohci-bcm63xx.c
-
---- /dev/null
-+++ b/drivers/usb/host/ohci-bcm63xx.c
-@@ -0,0 +1,166 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2010 Maxime Bizon <mbizon@freebox.fr>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/clk.h>
-+#include <linux/platform_device.h>
-+#include <bcm63xx_cpu.h>
-+#include <bcm63xx_regs.h>
-+#include <bcm63xx_io.h>
-+
-+static struct clk *usb_host_clock;
-+
-+static int __devinit ohci_bcm63xx_start(struct usb_hcd *hcd)
-+{
-+      struct ohci_hcd *ohci = hcd_to_ohci(hcd);
-+      int ret;
-+
-+        /*
-+         * port 2 can be shared with USB slave, but all boards seem to
-+         * have only one host port populated, so we can hardcode it
-+         */
-+      ohci->num_ports = 1;
-+
-+      ret = ohci_init(ohci);
-+      if (ret < 0)
-+              return ret;
-+
-+      ret = ohci_run(ohci);
-+      if (ret < 0) {
-+              err("can't start %s", hcd->self.bus_name);
-+              ohci_stop(hcd);
-+              return ret;
-+      }
-+      return 0;
-+}
-+
-+static const struct hc_driver ohci_bcm63xx_hc_driver = {
-+      .description =          hcd_name,
-+      .product_desc =         "BCM63XX integrated OHCI controller",
-+      .hcd_priv_size =        sizeof(struct ohci_hcd),
-+
-+      .irq =                  ohci_irq,
-+      .flags =                HCD_USB11 | HCD_MEMORY,
-+      .start =                ohci_bcm63xx_start,
-+      .stop =                 ohci_stop,
-+      .shutdown =             ohci_shutdown,
-+      .urb_enqueue =          ohci_urb_enqueue,
-+      .urb_dequeue =          ohci_urb_dequeue,
-+      .endpoint_disable =     ohci_endpoint_disable,
-+      .get_frame_number =     ohci_get_frame,
-+      .hub_status_data =      ohci_hub_status_data,
-+      .hub_control =          ohci_hub_control,
-+      .start_port_reset =     ohci_start_port_reset,
-+};
-+
-+static int __devinit ohci_hcd_bcm63xx_drv_probe(struct platform_device *pdev)
-+{
-+      struct resource *res_mem;
-+      struct usb_hcd *hcd;
-+      struct ohci_hcd *ohci;
-+      u32 reg;
-+      int ret, irq;
-+
-+      res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      irq = platform_get_irq(pdev, 0);
-+      if (!res_mem || irq < 0)
-+              return -ENODEV;
-+
-+      if (BCMCPU_IS_6348()) {
-+              struct clk *clk;
-+              /* enable USB host clock */
-+              clk = clk_get(&pdev->dev, "usbh");
-+              if (IS_ERR(clk))
-+                      return -ENODEV;
-+
-+              clk_enable(clk);
-+              usb_host_clock = clk;
-+              bcm_rset_writel(RSET_OHCI_PRIV, 0, OHCI_PRIV_REG);
-+
-+      } else if (BCMCPU_IS_6358()) {
-+              reg = bcm_rset_readl(RSET_USBH_PRIV, USBH_PRIV_SWAP_REG);
-+              reg &= ~USBH_PRIV_SWAP_OHCI_ENDN_MASK;
-+              reg |= USBH_PRIV_SWAP_OHCI_DATA_MASK;
-+              bcm_rset_writel(RSET_USBH_PRIV, reg, USBH_PRIV_SWAP_REG);
-+              /*
-+               * The magic value comes for the original vendor BSP
-+               * and is needed for USB to work. Datasheet does not
-+               * help, so the magic value is used as-is.
-+               */
-+              bcm_rset_writel(RSET_USBH_PRIV, 0x1c0020, USBH_PRIV_TEST_REG);
-+      } else
-+              return 0;
-+
-+      hcd = usb_create_hcd(&ohci_bcm63xx_hc_driver, &pdev->dev, "bcm63xx");
-+      if (!hcd)
-+              return -ENOMEM;
-+      hcd->rsrc_start = res_mem->start;
-+      hcd->rsrc_len = res_mem->end - res_mem->start + 1;
-+
-+      if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
-+              pr_debug("request_mem_region failed\n");
-+              ret = -EBUSY;
-+              goto out;
-+      }
-+
-+      hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
-+      if (!hcd->regs) {
-+              pr_debug("ioremap failed\n");
-+              ret = -EIO;
-+              goto out1;
-+      }
-+
-+      ohci = hcd_to_ohci(hcd);
-+      ohci->flags |= OHCI_QUIRK_BE_MMIO | OHCI_QUIRK_BE_DESC |
-+              OHCI_QUIRK_FRAME_NO;
-+      ohci_hcd_init(ohci);
-+
-+      ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
-+      if (ret)
-+              goto out2;
-+
-+      platform_set_drvdata(pdev, hcd);
-+      return 0;
-+
-+out2:
-+      iounmap(hcd->regs);
-+out1:
-+      release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
-+out:
-+      usb_put_hcd(hcd);
-+      return ret;
-+}
-+
-+static int __devexit ohci_hcd_bcm63xx_drv_remove(struct platform_device *pdev)
-+{
-+      struct usb_hcd *hcd;
-+
-+      hcd = platform_get_drvdata(pdev);
-+      usb_remove_hcd(hcd);
-+      iounmap(hcd->regs);
-+      usb_put_hcd(hcd);
-+      release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
-+      if (usb_host_clock) {
-+              clk_disable(usb_host_clock);
-+              clk_put(usb_host_clock);
-+      }
-+      platform_set_drvdata(pdev, NULL);
-+      return 0;
-+}
-+
-+static struct platform_driver ohci_hcd_bcm63xx_driver = {
-+      .probe          = ohci_hcd_bcm63xx_drv_probe,
-+      .remove         = __devexit_p(ohci_hcd_bcm63xx_drv_remove),
-+      .shutdown       = usb_hcd_platform_shutdown,
-+      .driver         = {
-+              .name   = "bcm63xx_ohci",
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+MODULE_ALIAS("platform:bcm63xx_ohci");
---- a/drivers/usb/host/ohci-hcd.c
-+++ b/drivers/usb/host/ohci-hcd.c
-@@ -1051,6 +1051,11 @@ MODULE_LICENSE ("GPL");
- #define PLATFORM_DRIVER               usb_hcd_pnx4008_driver
- #endif
-+#ifdef CONFIG_BCM63XX
-+#include "ohci-bcm63xx.c"
-+#define PLATFORM_DRIVER               ohci_hcd_bcm63xx_driver
-+#endif
-+
- #if defined(CONFIG_CPU_SUBTYPE_SH7720) || \
-     defined(CONFIG_CPU_SUBTYPE_SH7721) || \
-     defined(CONFIG_CPU_SUBTYPE_SH7763) || \
---- a/drivers/usb/host/ohci.h
-+++ b/drivers/usb/host/ohci.h
-@@ -655,7 +655,7 @@ static inline u32 hc32_to_cpup (const st
-  * some big-endian SOC implementations.  Same thing happens with PSW access.
-  */
--#ifdef CONFIG_PPC_MPC52xx
-+#if defined(CONFIG_PPC_MPC52xx) || defined(CONFIG_BCM63XX)
- #define big_endian_frame_no_quirk(ohci)       (ohci->flags & OHCI_QUIRK_FRAME_NO)
- #else
- #define big_endian_frame_no_quirk(ohci)       0
diff --git a/target/linux/brcm63xx/patches-2.6.33/011-add_bcm63xx_ehci_controller.patch b/target/linux/brcm63xx/patches-2.6.33/011-add_bcm63xx_ehci_controller.patch
deleted file mode 100644 (file)
index 16ca692..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- drivers/usb/host/ehci-bcm63xx.c |  154 +++++++++++++++++++++++++++++++++++++++
- drivers/usb/host/ehci-hcd.c     |    5 +
- 2 files changed, 159 insertions(+), 0 deletions(-)
- create mode 100644 drivers/usb/host/ehci-bcm63xx.c
-
---- /dev/null
-+++ b/drivers/usb/host/ehci-bcm63xx.c
-@@ -0,0 +1,154 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/platform_device.h>
-+#include <bcm63xx_cpu.h>
-+#include <bcm63xx_regs.h>
-+#include <bcm63xx_io.h>
-+
-+static int ehci_bcm63xx_setup(struct usb_hcd *hcd)
-+{
-+      struct ehci_hcd *ehci = hcd_to_ehci(hcd);
-+      int retval;
-+
-+      retval = ehci_halt(ehci);
-+      if (retval)
-+              return retval;
-+
-+      retval = ehci_init(hcd);
-+      if (retval)
-+              return retval;
-+
-+      ehci_reset(ehci);
-+      ehci_port_power(ehci, 0);
-+
-+      return retval;
-+}
-+
-+
-+static const struct hc_driver ehci_bcm63xx_hc_driver = {
-+      .description =          hcd_name,
-+      .product_desc =         "BCM63XX integrated EHCI controller",
-+      .hcd_priv_size =        sizeof(struct ehci_hcd),
-+
-+      .irq =                  ehci_irq,
-+      .flags =                HCD_MEMORY | HCD_USB2,
-+
-+      .reset =                ehci_bcm63xx_setup,
-+      .start =                ehci_run,
-+      .stop =                 ehci_stop,
-+      .shutdown =             ehci_shutdown,
-+
-+      .urb_enqueue =          ehci_urb_enqueue,
-+      .urb_dequeue =          ehci_urb_dequeue,
-+      .endpoint_disable =     ehci_endpoint_disable,
-+
-+      .get_frame_number =     ehci_get_frame,
-+
-+      .hub_status_data =      ehci_hub_status_data,
-+      .hub_control =          ehci_hub_control,
-+      .bus_suspend =          ehci_bus_suspend,
-+      .bus_resume =           ehci_bus_resume,
-+      .relinquish_port =      ehci_relinquish_port,
-+      .port_handed_over =     ehci_port_handed_over,
-+};
-+
-+static int __devinit ehci_hcd_bcm63xx_drv_probe(struct platform_device *pdev)
-+{
-+      struct resource *res_mem;
-+      struct usb_hcd *hcd;
-+      struct ehci_hcd *ehci;
-+      u32 reg;
-+      int ret, irq;
-+
-+      res_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      irq = platform_get_irq(pdev, 0);;
-+      if (!res_mem || irq < 0)
-+              return -ENODEV;
-+
-+      reg = bcm_rset_readl(RSET_USBH_PRIV, USBH_PRIV_SWAP_REG);
-+      reg &= ~USBH_PRIV_SWAP_EHCI_DATA_MASK;
-+      reg |= USBH_PRIV_SWAP_EHCI_ENDN_MASK;
-+      bcm_rset_writel(RSET_USBH_PRIV, reg, USBH_PRIV_SWAP_REG);
-+
-+      /*
-+       * The magic value comes for the original vendor BSP and is
-+       * needed for USB to work. Datasheet does not help, so the
-+       * magic value is used as-is.
-+       */
-+      bcm_rset_writel(RSET_USBH_PRIV, 0x1c0020, USBH_PRIV_TEST_REG);
-+
-+      hcd = usb_create_hcd(&ehci_bcm63xx_hc_driver, &pdev->dev, "bcm63xx");
-+      if (!hcd)
-+              return -ENOMEM;
-+      hcd->rsrc_start = res_mem->start;
-+      hcd->rsrc_len = res_mem->end - res_mem->start + 1;
-+
-+      if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) {
-+              pr_debug("request_mem_region failed\n");
-+              ret = -EBUSY;
-+              goto out;
-+      }
-+
-+      hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
-+      if (!hcd->regs) {
-+              pr_debug("ioremap failed\n");
-+              ret = -EIO;
-+              goto out1;
-+      }
-+
-+      ehci = hcd_to_ehci(hcd);
-+      ehci->big_endian_mmio = 1;
-+      ehci->big_endian_desc = 0;
-+      ehci->caps = hcd->regs;
-+      ehci->regs = hcd->regs +
-+              HC_LENGTH(ehci_readl(ehci, &ehci->caps->hc_capbase));
-+      ehci->hcs_params = ehci_readl(ehci, &ehci->caps->hcs_params);
-+      ehci->sbrn = 0x20;
-+
-+      ret = usb_add_hcd(hcd, irq, IRQF_DISABLED);
-+      if (ret)
-+              goto out2;
-+
-+      platform_set_drvdata(pdev, hcd);
-+      return 0;
-+
-+out2:
-+      iounmap(hcd->regs);
-+out1:
-+      release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
-+out:
-+      usb_put_hcd(hcd);
-+      return ret;
-+}
-+
-+static int __devexit ehci_hcd_bcm63xx_drv_remove(struct platform_device *pdev)
-+{
-+      struct usb_hcd *hcd;
-+
-+      hcd = platform_get_drvdata(pdev);
-+      usb_remove_hcd(hcd);
-+      iounmap(hcd->regs);
-+      usb_put_hcd(hcd);
-+      release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
-+      platform_set_drvdata(pdev, NULL);
-+      return 0;
-+}
-+
-+static struct platform_driver ehci_hcd_bcm63xx_driver = {
-+      .probe          = ehci_hcd_bcm63xx_drv_probe,
-+      .remove         = __devexit_p(ehci_hcd_bcm63xx_drv_remove),
-+      .shutdown       = usb_hcd_platform_shutdown,
-+      .driver         = {
-+              .name   = "bcm63xx_ehci",
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+MODULE_ALIAS("platform:bcm63xx_ehci");
---- a/drivers/usb/host/ehci-hcd.c
-+++ b/drivers/usb/host/ehci-hcd.c
-@@ -1158,6 +1158,11 @@ MODULE_LICENSE ("GPL");
- #define       PLATFORM_DRIVER         ehci_atmel_driver
- #endif
-+#ifdef CONFIG_BCM63XX
-+#include "ehci-bcm63xx.c"
-+#define       PLATFORM_DRIVER         ehci_hcd_bcm63xx_driver
-+#endif
-+
- #if !defined(PCI_DRIVER) && !defined(PLATFORM_DRIVER) && \
-     !defined(PS3_SYSTEM_BUS_DRIVER) && !defined(OF_PLATFORM_DRIVER)
- #error "missing bus glue for ehci-hcd"
diff --git a/target/linux/brcm63xx/patches-2.6.33/012-mips_add_readl_writel_be_accessors.patch b/target/linux/brcm63xx/patches-2.6.33/012-mips_add_readl_writel_be_accessors.patch
deleted file mode 100644 (file)
index 71b715d..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-MIPS currently lacks the readl_be and writel_be accessors
-which are required by BCM63xx for OHCI and EHCI support.
-Let's define them globally for MIPS. This also fixes the
-compilation of the bcm63xx defconfig against USB.
-
-Signed-off-by: Florian Fainelli <ffainelli@freebox.fr>
----
---- a/arch/mips/include/asm/io.h
-+++ b/arch/mips/include/asm/io.h
-@@ -447,6 +447,9 @@ __BUILDIO(q, u64)
- #define readl_relaxed                 readl
- #define readq_relaxed                 readq
-+#define readl_be(addr)                        be32_to_cpu(__raw_readl((__force unsigned *)(addr)))
-+#define writel_be(val, addr)          __raw_writel(cpu_to_be32((val)), (__force unsigned *)(addr))
-+
- /*
-  * Some code tests for these symbols
-  */
diff --git a/target/linux/brcm63xx/patches-2.6.33/020-watchdog.patch b/target/linux/brcm63xx/patches-2.6.33/020-watchdog.patch
deleted file mode 100644 (file)
index b4204d8..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
---- a/drivers/watchdog/Makefile
-+++ b/drivers/watchdog/Makefile
-@@ -112,6 +112,7 @@ obj-$(CONFIG_PNX833X_WDT) += pnx833x_wdt
- obj-$(CONFIG_SIBYTE_WDOG) += sb_wdog.o
- obj-$(CONFIG_AR7_WDT) += ar7_wdt.o
- obj-$(CONFIG_TXX9_WDT) += txx9wdt.o
-+obj-$(CONFIG_BCM63XX_WDT) += bcm63xx_wdt.o
- # PARISC Architecture
---- a/drivers/watchdog/Kconfig
-+++ b/drivers/watchdog/Kconfig
-@@ -840,6 +840,16 @@ config TXX9_WDT
-       help
-         Hardware driver for the built-in watchdog timer on TXx9 MIPS SoCs.
-+config BCM63XX_WDT
-+      tristate "Broadcom BCM63xx hardware watchdog"
-+      depends on BCM63XX
-+      help
-+        Watchdog driver for the built in watchdog hardware in Broadcom
-+        BCM63xx SoC.
-+
-+        To compile thi driver as a loadable module, choose M here.
-+        The module will be called bcm63xx_wdt.
-+
- # PARISC Architecture
- # POWERPC Architecture
---- /dev/null
-+++ b/drivers/watchdog/bcm63xx_wdt.c
-@@ -0,0 +1,334 @@
-+/*
-+ *  Broadcom BCM63xx SoC watchdog driver
-+ *
-+ *  Copyright (C) 2007, Miguel Gaio <miguel.gaio@efixo.com>
-+ *  Copyright (C) 2008, Florian Fainelli <florian@openwrt.org>
-+ *
-+ *  This program is free software; you can redistribute it and/or
-+ *  modify it under the terms of the GNU General Public License
-+ *  as published by the Free Software Foundation; either version
-+ *  2 of the License, or (at your option) any later version.
-+ */
-+
-+#include <linux/bitops.h>
-+#include <linux/errno.h>
-+#include <linux/fs.h>
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/miscdevice.h>
-+#include <linux/module.h>
-+#include <linux/moduleparam.h>
-+#include <linux/reboot.h>
-+#include <linux/types.h>
-+#include <linux/uaccess.h>
-+#include <linux/watchdog.h>
-+#include <linux/timer.h>
-+#include <linux/jiffies.h>
-+#include <linux/resource.h>
-+#include <linux/platform_device.h>
-+
-+#include <bcm63xx_cpu.h>
-+#include <bcm63xx_io.h>
-+#include <bcm63xx_regs.h>
-+
-+#define PFX KBUILD_MODNAME
-+
-+#define WDT_HZ                50000000 /* Fclk */
-+#define WDT_DEFAULT_TIME      30      /* seconds */
-+#define WDT_MAX_TIME          256     /* seconds */
-+
-+static struct {
-+      void __iomem *regs;
-+      struct timer_list timer;
-+      int default_ticks;
-+      unsigned long inuse;
-+      atomic_t ticks;
-+} bcm63xx_wdt_device;
-+
-+static int expect_close;
-+static int timeout;
-+
-+static int wdt_time = WDT_DEFAULT_TIME;
-+static int nowayout = WATCHDOG_NOWAYOUT;
-+module_param(nowayout, int, 0);
-+MODULE_PARM_DESC(nowayout, "Watchdog cannot be stopped once started (default="
-+      __MODULE_STRING(WATCHDOG_NOWAYOUT) ")");
-+
-+/* HW functions */
-+static void bcm63xx_wdt_hw_start(void)
-+{
-+      bcm_writel(0xfffffffe, bcm63xx_wdt_device.regs + WDT_DEFVAL_REG);
-+      bcm_writel(WDT_START_1, bcm63xx_wdt_device.regs + WDT_CTL_REG);
-+      bcm_writel(WDT_START_2, bcm63xx_wdt_device.regs + WDT_CTL_REG);
-+}
-+
-+static void bcm63xx_wdt_hw_stop(void)
-+{
-+      bcm_writel(WDT_STOP_1, bcm63xx_wdt_device.regs + WDT_CTL_REG);
-+      bcm_writel(WDT_STOP_2, bcm63xx_wdt_device.regs + WDT_CTL_REG);
-+}
-+
-+static void bcm63xx_timer_tick(unsigned long unused)
-+{
-+      if (!atomic_dec_and_test(&bcm63xx_wdt_device.ticks)) {
-+              bcm63xx_wdt_hw_start();
-+              mod_timer(&bcm63xx_wdt_device.timer, jiffies + HZ);
-+      } else
-+              printk(KERN_CRIT PFX ": watchdog will restart system\n");
-+}
-+
-+static void bcm63xx_wdt_pet(void)
-+{
-+      atomic_set(&bcm63xx_wdt_device.ticks, wdt_time);
-+}
-+
-+static void bcm63xx_wdt_start(void)
-+{
-+      bcm63xx_wdt_pet();
-+      bcm63xx_timer_tick(0);
-+}
-+
-+static void bcm63xx_wdt_pause(void)
-+{
-+      del_timer_sync(&bcm63xx_wdt_device.timer);
-+      bcm63xx_wdt_hw_stop();
-+}
-+
-+static int bcm63xx_wdt_settimeout(int new_time)
-+{
-+      if ((new_time <= 0) || (new_time > WDT_MAX_TIME))
-+              return -EINVAL;
-+
-+      wdt_time = new_time;
-+
-+      return 0;
-+}
-+
-+static int bcm63xx_wdt_open(struct inode *inode, struct file *file)
-+{
-+      if (test_and_set_bit(0, &bcm63xx_wdt_device.inuse))
-+              return -EBUSY;
-+
-+      bcm63xx_wdt_start();
-+      return nonseekable_open(inode, file);
-+}
-+
-+static int bcm63xx_wdt_release(struct inode *inode, struct file *file)
-+{
-+      if (expect_close == 42)
-+              bcm63xx_wdt_pause();
-+      else {
-+              printk(KERN_CRIT PFX
-+                      ": Unexpected close, not stopping watchdog!\n");
-+              bcm63xx_wdt_start();
-+      }
-+      clear_bit(0, &bcm63xx_wdt_device.inuse);
-+      expect_close = 0;
-+      return 0;
-+}
-+
-+static ssize_t bcm63xx_wdt_write(struct file *file, const char *data,
-+                              size_t len, loff_t *ppos)
-+{
-+      if (len) {
-+              if (!nowayout) {
-+                      size_t i;
-+
-+                      /* In case it was set long ago */
-+                      expect_close = 0;
-+
-+                      for (i = 0; i != len; i++) {
-+                              char c;
-+                              if (get_user(c, data + i))
-+                                      return -EFAULT;
-+                              if (c == 'V')
-+                                      expect_close = 42;
-+                      }
-+              }
-+              bcm63xx_wdt_pet();
-+      }
-+      return len;
-+}
-+
-+static struct watchdog_info bcm63xx_wdt_info = {
-+      .identity       = PFX,
-+      .options        = WDIOF_SETTIMEOUT |
-+                              WDIOF_KEEPALIVEPING |
-+                              WDIOF_MAGICCLOSE,
-+};
-+
-+
-+static long bcm63xx_wdt_ioctl(struct file *file, unsigned int cmd,
-+                              unsigned long arg)
-+{
-+      void __user *argp = (void __user *)arg;
-+      int __user *p = argp;
-+      int new_value, retval = -EINVAL;
-+
-+      switch (cmd) {
-+      case WDIOC_GETSUPPORT:
-+              return copy_to_user(argp, &bcm63xx_wdt_info,
-+                      sizeof(bcm63xx_wdt_info)) ? -EFAULT : 0;
-+
-+      case WDIOC_GETSTATUS:
-+      case WDIOC_GETBOOTSTATUS:
-+              return put_user(0, p);
-+
-+      case WDIOC_SETOPTIONS:
-+              if (get_user(new_value, p))
-+                      return -EFAULT;
-+
-+              if (new_value & WDIOS_DISABLECARD) {
-+                      bcm63xx_wdt_pause();
-+                      retval = 0;
-+              }
-+              if (new_value & WDIOS_ENABLECARD) {
-+                      bcm63xx_wdt_start();
-+                      retval = 0;
-+              }
-+
-+              return retval;
-+
-+      case WDIOC_KEEPALIVE:
-+              bcm63xx_wdt_pet();
-+              return 0;
-+
-+      case WDIOC_SETTIMEOUT:
-+              if (get_user(new_value, p))
-+                      return -EFAULT;
-+
-+              if (bcm63xx_wdt_settimeout(new_value))
-+                      return -EINVAL;
-+
-+              bcm63xx_wdt_pet();
-+
-+      case WDIOC_GETTIMEOUT:
-+              return put_user(wdt_time, p);
-+
-+      default:
-+              return -ENOTTY;
-+
-+      }
-+}
-+
-+static int bcm63xx_wdt_notify_sys(struct notifier_block *this,
-+                              unsigned long code, void *unused)
-+{
-+      if (code == SYS_DOWN || code == SYS_HALT)
-+              bcm63xx_wdt_pause();
-+      return NOTIFY_DONE;
-+}
-+
-+static const struct file_operations bcm63xx_wdt_fops = {
-+      .owner          = THIS_MODULE,
-+      .llseek         = no_llseek,
-+      .write          = bcm63xx_wdt_write,
-+      .unlocked_ioctl = bcm63xx_wdt_ioctl,
-+      .open           = bcm63xx_wdt_open,
-+      .release        = bcm63xx_wdt_release,
-+};
-+
-+static struct miscdevice bcm63xx_wdt_miscdev = {
-+      .minor  = WATCHDOG_MINOR,
-+      .name   = "watchdog",
-+      .fops   = &bcm63xx_wdt_fops,
-+};
-+
-+static struct notifier_block bcm63xx_wdt_notifier = {
-+      .notifier_call = bcm63xx_wdt_notify_sys,
-+};
-+
-+
-+static int bcm63xx_wdt_probe(struct platform_device *pdev)
-+{
-+      int ret;
-+      struct resource *r;
-+
-+      setup_timer(&bcm63xx_wdt_device.timer, bcm63xx_timer_tick, 0L);
-+
-+      r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!r) {
-+              printk(KERN_ERR PFX
-+                      "failed to retrieve resources\n");
-+              return -ENODEV;
-+      }
-+
-+      bcm63xx_wdt_device.regs = ioremap_nocache(r->start, r->end - r->start);
-+      if (!bcm63xx_wdt_device.regs) {
-+              printk(KERN_ERR PFX
-+                      "failed to remap I/O resources\n");
-+              return -ENXIO;
-+      }
-+
-+      if (bcm63xx_wdt_settimeout(wdt_time)) {
-+              bcm63xx_wdt_settimeout(WDT_DEFAULT_TIME);
-+              printk(KERN_INFO PFX
-+                      ": wdt_time value must be 1 <= wdt_time <= 256, using %d\n",
-+                      wdt_time);
-+      }
-+
-+      ret = register_reboot_notifier(&bcm63xx_wdt_notifier);
-+      if (ret) {
-+              printk(KERN_ERR PFX
-+                      "failed to register reboot_notifier\n");
-+              return ret;
-+      }
-+
-+      ret = misc_register(&bcm63xx_wdt_miscdev);
-+      if (ret < 0) {
-+              printk(KERN_ERR PFX
-+                      "failed to register watchdog device\n");
-+              goto unmap;
-+      }
-+
-+      printk(KERN_INFO PFX " started, timer margin: %d sec\n", WDT_DEFAULT_TIME);
-+
-+      return 0;
-+
-+unmap:
-+      unregister_reboot_notifier(&bcm63xx_wdt_notifier);
-+      iounmap(bcm63xx_wdt_device.regs);
-+      return ret;
-+}
-+
-+static int bcm63xx_wdt_remove(struct platform_device *pdev)
-+{
-+      if (!nowayout)
-+              bcm63xx_wdt_pause();
-+
-+      misc_deregister(&bcm63xx_wdt_miscdev);
-+
-+      iounmap(bcm63xx_wdt_device.regs);
-+
-+      unregister_reboot_notifier(&bcm63xx_wdt_notifier);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver bcm63xx_wdt = {
-+      .probe  = bcm63xx_wdt_probe,
-+      .remove = bcm63xx_wdt_remove,
-+      .driver = {
-+              .name = "bcm63xx-wdt",
-+      }
-+};
-+
-+static int __init bcm63xx_wdt_init(void)
-+{
-+      return platform_driver_register(&bcm63xx_wdt);
-+}
-+
-+static void __exit bcm63xx_wdt_exit(void)
-+{
-+      platform_driver_unregister(&bcm63xx_wdt);
-+}
-+
-+module_init(bcm63xx_wdt_init);
-+module_exit(bcm63xx_wdt_exit);
-+
-+MODULE_AUTHOR("Miguel Gaio <miguel.gaio@efixo.com>");
-+MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
-+MODULE_DESCRIPTION("Driver for the Broadcom BCM63xx SoC watchdog");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS_MISCDEV(WATCHDOG_MINOR);
-+MODULE_ALIAS("platform:bcm63xx-wdt");
diff --git a/target/linux/brcm63xx/patches-2.6.33/040-bcm963xx_flashmap.patch b/target/linux/brcm63xx/patches-2.6.33/040-bcm963xx_flashmap.patch
deleted file mode 100644 (file)
index cd0ec54..0000000
+++ /dev/null
@@ -1,512 +0,0 @@
-From e734ace5baa04e0e8af1d4483475fbd6bd2b32a1 Mon Sep 17 00:00:00 2001
-From: Axel Gembe <ago@bastart.eu.org>
-Date: Mon, 12 May 2008 18:54:09 +0200
-Subject: [PATCH] bcm963xx: flashmap support
-
-
-Signed-off-by: Axel Gembe <ago@bastart.eu.org>
----
- drivers/mtd/maps/Kconfig  |    7 +++++++
- drivers/mtd/maps/Makefile |    1 +
- drivers/mtd/redboot.c     |   13 ++++++++++---
- 3 files changed, 18 insertions(+), 3 deletions(-)
-
---- a/drivers/mtd/maps/Kconfig
-+++ b/drivers/mtd/maps/Kconfig
-@@ -257,6 +257,13 @@ config MTD_ALCHEMY
-       help
-         Flash memory access on AMD Alchemy Pb/Db/RDK Reference Boards
-+config MTD_BCM963XX
-+        tristate "BCM963xx Flash device"
-+        depends on MIPS && BCM63XX
-+        help
-+        Flash memory access on BCM963xx boards. Currently only works with
-+        RedBoot and CFE.
-+
- config MTD_DILNETPC
-       tristate "CFI Flash device mapped on DIL/Net PC"
-       depends on X86 && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT && BROKEN
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -39,7 +39,7 @@ static inline int redboot_checksum(struc
-       return 1;
- }
--static int parse_redboot_partitions(struct mtd_info *master,
-+int parse_redboot_partitions(struct mtd_info *master,
-                              struct mtd_partition **pparts,
-                              unsigned long fis_origin)
- {
-@@ -162,6 +162,14 @@ static int parse_redboot_partitions(stru
-               goto out;
-       }
-+      if (!fis_origin) {
-+              for (i = 0; i < numslots; i++) {
-+                      if (!strncmp(buf[i].name, "RedBoot", 8)) {
-+                              fis_origin = (buf[i].flash_base & (master->size << 1) - 1);
-+                      }
-+              }
-+      }
-+
-       for (i = 0; i < numslots; i++) {
-               struct fis_list *new_fl, **prev;
-@@ -184,9 +192,8 @@ static int parse_redboot_partitions(stru
-               new_fl->img = &buf[i];
-                 if (fis_origin) {
-                         buf[i].flash_base -= fis_origin;
--                } else {
--                        buf[i].flash_base &= master->size-1;
-                 }
-+              buf[i].flash_base &= (master->size << 1) - 1;
-               /* I'm sure the JFFS2 code has done me permanent damage.
-                * I now think the following is _normal_
---- a/drivers/mtd/maps/Makefile
-+++ b/drivers/mtd/maps/Makefile
-@@ -61,3 +61,4 @@ obj-$(CONFIG_MTD_BFIN_ASYNC) += bfin-asy
- obj-$(CONFIG_MTD_RBTX4939)    += rbtx4939-flash.o
- obj-$(CONFIG_MTD_VMU)         += vmu-flash.o
- obj-$(CONFIG_MTD_GPIO_ADDR)   += gpio-addr-flash.o
-+obj-$(CONFIG_MTD_BCM963XX)    += bcm963xx-flash.o
---- /dev/null
-+++ b/drivers/mtd/maps/bcm963xx-flash.c
-@@ -0,0 +1,399 @@
-+/*
-+ * Copyright (C) 2006-2008  Florian Fainelli <florian@openwrt.org>
-+ *                        Mike Albon <malbon@openwrt.org>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU General Public License as published by
-+ * the Free Software Foundation; either version 2 of the License, or
-+ * (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/mtd/map.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/vmalloc.h>
-+#include <linux/platform_device.h>
-+
-+#include <bcm_tag.h>
-+#include <asm/io.h>
-+
-+#define BUSWIDTH 2                     /* Buswidth */
-+#define EXTENDED_SIZE 0xBFC00000       /* Extended flash address */
-+
-+#define PFX KBUILD_MODNAME ": "
-+
-+extern int parse_redboot_partitions(struct mtd_info *master, struct mtd_partition **pparts, unsigned long fis_origin);
-+static struct mtd_partition *parsed_parts;
-+
-+static struct mtd_info *bcm963xx_mtd_info;
-+
-+static struct map_info bcm963xx_map = {
-+       .name          = "bcm963xx",
-+       .bankwidth     = BUSWIDTH,
-+};
-+
-+static struct tagiddesc_t tagidtab[NUM_TAGID] = TAGID_DEFINITIONS;
-+
-+static uint32_t tagcrc32tab[256] = {
-+      0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3,
-+      0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91,
-+      0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7,
-+      0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5,
-+      0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B,
-+      0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59,
-+      0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F,
-+      0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D,
-+      0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433,
-+      0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01,
-+      0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457,
-+      0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65,
-+      0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB,
-+      0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9,
-+      0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F,
-+      0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD,
-+      0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683,
-+      0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1,
-+      0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7,
-+      0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5,
-+      0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B,
-+      0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79,
-+      0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F,
-+      0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D,
-+      0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713,
-+      0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21,
-+      0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777,
-+      0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45,
-+      0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB,
-+      0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9,
-+      0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF,
-+      0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D
-+};
-+
-+static uint32_t tagcrc32(uint32_t crc, uint8_t *data, size_t len)
-+{
-+      while (len--)
-+              crc = (crc >> 8) ^ tagcrc32tab[(crc ^ *data++) & 0xFF];
-+
-+      return crc;
-+}
-+
-+static int parse_cfe_partitions( struct mtd_info *master, struct mtd_partition **pparts)
-+{
-+      int nrparts = 3, curpart = 0; /* CFE,NVRAM and global LINUX are always present. */
-+      union bcm_tag *buf;
-+      struct mtd_partition *parts;
-+      int ret;
-+      size_t retlen;
-+      unsigned int rootfsaddr, kerneladdr, spareaddr;
-+      unsigned int rootfslen, kernellen, sparelen, totallen;
-+      unsigned char *tagid;
-+      int namelen = 0;
-+      int i;
-+      uint32_t tagidcrc;
-+      uint32_t calctagidcrc;
-+        bool tagid_match = false;
-+      char *boardid;
-+        char *tagversion;
-+      char *matchtagid;
-+
-+      /* Allocate memory for buffer */
-+      buf = vmalloc(sizeof(union bcm_tag));
-+      if (!buf)
-+              return -ENOMEM;
-+
-+      /* Get the tag */
-+      ret = master->read(master,master->erasesize,sizeof(union bcm_tag), &retlen, (void *)buf);
-+      if (retlen != sizeof(union bcm_tag)){
-+              vfree(buf);
-+              return -EIO;
-+      }
-+
-+      /* tagId isn't in the same location, so we check each tagid against the
-+         * tagid CRC.  If the CRC is valid we have found the right tag and so
-+         * use that tag
-+         */
-+
-+      for (i = 0; i < NUM_TAGID; i++) {
-+        switch(i) {
-+        case 0:
-+          matchtagid = "bccfe";
-+          tagid = &(buf->bccfe.tagId[0]);
-+          sscanf(buf->bccfe.rootAddress,"%u", &rootfsaddr);
-+          sscanf(buf->bccfe.rootLength, "%u", &rootfslen);
-+          sscanf(buf->bccfe.kernelAddress, "%u", &kerneladdr);
-+          sscanf(buf->bccfe.kernelLength, "%u", &kernellen);
-+          sscanf(buf->bccfe.totalLength, "%u", &totallen);
-+          tagidcrc = *(uint32_t *)&(buf->bccfe.tagIdCRC[0]);
-+          tagversion = &(buf->bccfe.tagVersion[0]);
-+          boardid = &(buf->bccfe.boardid[0]);
-+          break;
-+        case 1:
-+          matchtagid = "bc300";
-+          tagid = &(buf->bc300.tagId[0]);
-+          sscanf(buf->bc300.rootAddress,"%u", &rootfsaddr);
-+          sscanf(buf->bc300.rootLength, "%u", &rootfslen);
-+          sscanf(buf->bc300.kernelAddress, "%u", &kerneladdr);
-+          sscanf(buf->bc300.kernelLength, "%u", &kernellen);
-+          sscanf(buf->bc300.totalLength, "%u", &totallen);
-+          tagidcrc = *(uint32_t *)&(buf->bc300.tagIdCRC[0]);
-+          tagversion = &(buf->bc300.tagVersion[0]);
-+          boardid = &(buf->bc300.boardid[0]);
-+          break;
-+        case 2:
-+          matchtagid = "ag306";
-+          tagid = &(buf->ag306.tagId[0]);
-+          sscanf(buf->ag306.rootAddress,"%u", &rootfsaddr);
-+          sscanf(buf->ag306.rootLength, "%u", &rootfslen);
-+          sscanf(buf->ag306.kernelAddress, "%u", &kerneladdr);
-+          sscanf(buf->ag306.kernelLength, "%u", &kernellen);
-+          sscanf(buf->ag306.totalLength, "%u", &totallen);
-+          tagidcrc = *(uint32_t *)&(buf->ag306.tagIdCRC[0]);
-+          tagversion = &(buf->ag306.tagVersion[0]);
-+          boardid = &(buf->ag306.boardid[0]);
-+          break;
-+        case 3:
-+          matchtagid = "bc221";
-+          tagid = &(buf->bc221.tagId[0]);
-+          sscanf(buf->bc221.rootAddress,"%u", &rootfsaddr);
-+          sscanf(buf->bc221.rootLength, "%u", &rootfslen);
-+          sscanf(buf->bc221.kernelAddress, "%u", &kerneladdr);
-+          sscanf(buf->bc221.kernelLength, "%u", &kernellen);
-+          sscanf(buf->bc221.totalLength, "%u", &totallen);
-+          tagidcrc = *(uint32_t *)&(buf->bc221.tagIdCRC[0]);
-+          tagversion = &(buf->bc221.tagVersion[0]);
-+          boardid = &(buf->bc221.boardid[0]);
-+          break;
-+        case 4:
-+          matchtagid = "bc310";
-+          tagid = &(buf->bc310.tagId[0]);
-+          sscanf(buf->bc310.rootAddress,"%u", &rootfsaddr);
-+          sscanf(buf->bc310.rootLength, "%u", &rootfslen);
-+          sscanf(buf->bc310.kernelAddress, "%u", &kerneladdr);
-+          sscanf(buf->bc310.kernelLength, "%u", &kernellen);
-+          sscanf(buf->bc310.totalLength, "%u", &totallen);
-+          tagidcrc = *(uint32_t *)&(buf->bc310.tagIdCRC[0]);
-+          tagversion = &(buf->bc310.tagVersion[0]);
-+          boardid = &(buf->bc310.boardid[0]);
-+          break;
-+        }
-+        if (strncmp(tagid, matchtagid, TAGID_LEN) != 0) {
-+          continue;
-+        }
-+
-+        calctagidcrc = htonl(tagcrc32(IMAGETAG_CRC_START, tagid, TAGID_LEN));
-+        if (tagidcrc == calctagidcrc) {
-+          tagid_match = true;
-+          break;
-+        }
-+      }
-+
-+      if (!tagid_match) {
-+          tagid = "bcram";
-+          sscanf(buf->bccfe.rootAddress,"%u", &rootfsaddr);
-+          sscanf(buf->bccfe.rootLength, "%u", &rootfslen);
-+          sscanf(buf->bccfe.kernelAddress, "%u", &kerneladdr);
-+          sscanf(buf->bccfe.kernelLength, "%u", &kernellen);
-+          sscanf(buf->bccfe.totalLength, "%u", &totallen);
-+          tagidcrc = *(uint32_t *)&(buf->bccfe.tagIdCRC[0]);
-+          tagversion = &(buf->bccfe.tagVersion[0]);
-+          boardid = &(buf->bccfe.boardid[0]);
-+      }
-+
-+      printk(KERN_INFO PFX "CFE boot tag found with version %s, board type %s, and tagid %s.\n",tagversion,boardid,tagid);
-+
-+      rootfsaddr = rootfsaddr - EXTENDED_SIZE;
-+      kerneladdr = kerneladdr - EXTENDED_SIZE;
-+      spareaddr = roundup(totallen,master->erasesize) + master->erasesize;
-+      sparelen = master->size - spareaddr - master->erasesize;
-+
-+      /* Determine number of partitions */
-+      namelen = 8;
-+      if (rootfslen > 0){
-+              nrparts++;
-+              namelen =+ 6;
-+      };
-+      if (kernellen > 0) {
-+              nrparts++;
-+              namelen =+ 6;
-+      };
-+
-+      /* Ask kernel for more memory */
-+      parts = kzalloc(sizeof(*parts) * nrparts + 10 * nrparts, GFP_KERNEL);
-+      if (!parts) {
-+              vfree(buf);
-+              return -ENOMEM;
-+      };
-+
-+      /* Start building partition list */
-+      parts[curpart].name = "CFE";
-+      parts[curpart].offset = 0;
-+      parts[curpart].size = master->erasesize;
-+      curpart++;
-+
-+      if (kernellen > 0) {
-+              parts[curpart].name = "kernel";
-+              parts[curpart].offset = kerneladdr;
-+              parts[curpart].size = kernellen;
-+              curpart++;
-+      };
-+
-+      if (rootfslen > 0) {
-+              parts[curpart].name = "rootfs";
-+              parts[curpart].offset = rootfsaddr;
-+              parts[curpart].size = rootfslen;
-+              if (sparelen > 0)
-+                      parts[curpart].size += sparelen;
-+              curpart++;
-+      };
-+
-+      parts[curpart].name = "nvram";
-+      parts[curpart].offset = master->size - master->erasesize;
-+      parts[curpart].size = master->erasesize;
-+
-+      /* Global partition "linux" to make easy firmware upgrade */
-+      curpart++;
-+      parts[curpart].name = "linux";
-+      parts[curpart].offset = parts[0].size;
-+      parts[curpart].size = master->size - parts[0].size - parts[3].size;
-+ 
-+      for (i = 0; i < nrparts; i++)
-+              printk(KERN_INFO PFX "Partition %d is %s offset %lx and length %lx\n", i, parts[i].name, parts[i].offset, parts[i].size);
-+
-+      printk(KERN_INFO PFX "Spare partition is %x offset and length %x\n", spareaddr, sparelen);
-+      *pparts = parts;
-+      vfree(buf);
-+
-+      return nrparts;
-+};
-+
-+static int bcm963xx_detect_cfe(struct mtd_info *master)
-+{
-+      int idoffset = 0x4e0;
-+      static char idstring[8] = "CFE1CFE1";
-+      char buf[9];
-+      int ret;
-+      size_t retlen;
-+
-+      ret = master->read(master, idoffset, 8, &retlen, (void *)buf);
-+      buf[retlen] = 0;
-+      printk(KERN_INFO PFX "Read Signature value of %s\n", buf);
-+
-+      return strncmp(idstring, buf, 8);
-+}
-+
-+static int bcm963xx_probe(struct platform_device *pdev)
-+{
-+      int err = 0;
-+      int parsed_nr_parts = 0;
-+      char *part_type;
-+      struct resource *r;
-+
-+      r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 
-+      bcm963xx_map.phys = r->start;
-+      bcm963xx_map.size = (r->end - r->start) + 1;
-+      bcm963xx_map.virt = ioremap(r->start, r->end - r->start + 1);
-+
-+      if (!bcm963xx_map.virt) {
-+              printk(KERN_ERR PFX "Failed to ioremap\n");
-+              return -EIO;
-+      }
-+      printk(KERN_INFO PFX "0x%08lx at 0x%08x\n", bcm963xx_map.size, bcm963xx_map.phys);
-+
-+      simple_map_init(&bcm963xx_map);
-+
-+      bcm963xx_mtd_info = do_map_probe("cfi_probe", &bcm963xx_map);
-+      if (!bcm963xx_mtd_info) {
-+              printk(KERN_ERR PFX "Failed to probe using CFI\n");
-+              err = -EIO;
-+              goto err_probe;
-+      }
-+
-+      bcm963xx_mtd_info->owner = THIS_MODULE;
-+
-+      /* This is mutually exclusive */
-+      if (bcm963xx_detect_cfe(bcm963xx_mtd_info) == 0) {
-+              printk(KERN_INFO PFX "CFE bootloader detected\n");
-+              if (parsed_nr_parts == 0) {
-+                      int ret = parse_cfe_partitions(bcm963xx_mtd_info, &parsed_parts);
-+                      if (ret > 0) {
-+                              part_type = "CFE";
-+                              parsed_nr_parts = ret;
-+                      }
-+              }
-+      } else {
-+              printk(KERN_INFO PFX "assuming RedBoot bootloader\n");
-+              if (bcm963xx_mtd_info->size > 0x00400000) {
-+                      printk(KERN_INFO PFX "Support for extended flash memory size : 0x%lx ; ONLY 64MBIT SUPPORT\n", bcm963xx_mtd_info->size);
-+                      bcm963xx_map.virt = (u32)(EXTENDED_SIZE);
-+              }
-+
-+#ifdef CONFIG_MTD_REDBOOT_PARTS
-+              if (parsed_nr_parts == 0) {
-+                      int ret = parse_redboot_partitions(bcm963xx_mtd_info, &parsed_parts, 0);
-+                      if (ret > 0) {
-+                              part_type = "RedBoot";
-+                              parsed_nr_parts = ret;
-+                      }
-+              }
-+#endif
-+      }
-+
-+      return add_mtd_partitions(bcm963xx_mtd_info, parsed_parts, parsed_nr_parts);
-+
-+err_probe:
-+      iounmap(bcm963xx_map.virt);
-+      return err;
-+}
-+
-+static int bcm963xx_remove(struct platform_device *pdev)
-+{
-+      if (bcm963xx_mtd_info) {
-+              del_mtd_partitions(bcm963xx_mtd_info);
-+              map_destroy(bcm963xx_mtd_info);
-+      }
-+
-+      if (bcm963xx_map.virt) {
-+              iounmap(bcm963xx_map.virt);
-+              bcm963xx_map.virt = 0;
-+      }
-+
-+      return 0;
-+}
-+
-+static struct platform_driver bcm63xx_mtd_dev = {
-+      .probe  = bcm963xx_probe,
-+      .remove = bcm963xx_remove,
-+      .driver = {
-+              .name   = "bcm963xx-flash",
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+static int __init bcm963xx_mtd_init(void)
-+{
-+      return platform_driver_register(&bcm63xx_mtd_dev);
-+}
-+
-+static void __exit bcm963xx_mtd_exit(void)
-+{
-+      platform_driver_unregister(&bcm63xx_mtd_dev);
-+}
-+
-+module_init(bcm963xx_mtd_init);
-+module_exit(bcm963xx_mtd_exit);
-+
-+MODULE_LICENSE("GPL");
-+MODULE_DESCRIPTION("Broadcom BCM63xx MTD partition parser/mapping for CFE and RedBoot");
-+MODULE_AUTHOR("Florian Fainelli <florian@openwrt.org>");
-+MODULE_AUTHOR("Mike Albon <malbon@openwrt.org>");
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -721,20 +721,6 @@ static int board_get_mac_address(u8 *mac
-       return 0;
- }
--static struct mtd_partition mtd_partitions[] = {
--      {
--              .name           = "cfe",
--              .offset         = 0x0,
--              .size           = 0x40000,
--      }
--};
--
--static struct physmap_flash_data flash_data = {
--      .width                  = 2,
--      .nr_parts               = ARRAY_SIZE(mtd_partitions),
--      .parts                  = mtd_partitions,
--};
--
- static struct resource mtd_resources[] = {
-       {
-               .start          = 0,    /* filled at runtime */
-@@ -744,12 +730,9 @@ static struct resource mtd_resources[] =
- };
- static struct platform_device mtd_dev = {
--      .name                   = "physmap-flash",
-+      .name                   = "bcm963xx-flash",
-       .resource               = mtd_resources,
-       .num_resources          = ARRAY_SIZE(mtd_resources),
--      .dev                    = {
--              .platform_data  = &flash_data,
--      },
- };
- /*
diff --git a/target/linux/brcm63xx/patches-2.6.33/070_bcm63xx_enet_vlan_incoming_fixed.patch b/target/linux/brcm63xx/patches-2.6.33/070_bcm63xx_enet_vlan_incoming_fixed.patch
deleted file mode 100644 (file)
index dd0a722..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/net/bcm63xx_enet.c
-+++ b/drivers/net/bcm63xx_enet.c
-@@ -1523,7 +1523,7 @@ static int compute_hw_mtu(struct bcm_ene
-       actual_mtu = mtu;
-       /* add ethernet header + vlan tag size */
--      actual_mtu += VLAN_ETH_HLEN;
-+      actual_mtu += VLAN_ETH_HLEN + VLAN_HLEN;
-       if (actual_mtu < 64 || actual_mtu > BCMENET_MAX_MTU)
-               return -EINVAL;
diff --git a/target/linux/brcm63xx/patches-2.6.33/100-reset_buttons.patch b/target/linux/brcm63xx/patches-2.6.33/100-reset_buttons.patch
deleted file mode 100644 (file)
index e1faeee..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -15,6 +15,8 @@
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/physmap.h>
- #include <linux/ssb/ssb.h>
-+#include <linux/gpio_buttons.h>
-+#include <linux/input.h>
- #include <asm/addrspace.h>
- #include <bcm63xx_board.h>
- #include <bcm63xx_cpu.h>
-@@ -288,6 +290,16 @@ static struct board_info __initdata boar
-                       .active_low     = 1,
-               },
-       },
-+      .reset_buttons = {
-+              {
-+                      .desc           = "reset",
-+                      .gpio           = 32,
-+                      .active_low     = 1,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_0,
-+                      .threshold      = 3,
-+              },
-+      },
- };
- static struct board_info __initdata board_96348gw = {
-@@ -345,6 +357,16 @@ static struct board_info __initdata boar
-                       .active_low     = 1,
-               },
-       },
-+      .reset_buttons = {
-+              {
-+                      .desc           = "reset",
-+                      .gpio           = 36,
-+                      .active_low     = 1,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_0,
-+                      .threshold      = 3,
-+              },
-+      },
- };
- static struct board_info __initdata board_FAST2404 = {
-@@ -770,6 +792,16 @@ static struct platform_device bcm63xx_gp
-       .dev.platform_data      = &bcm63xx_led_data,
- };
-+static struct gpio_buttons_platform_data bcm63xx_gpio_buttons_data = {
-+      .poll_interval  = 20,
-+};
-+
-+static struct platform_device bcm63xx_gpio_buttons_device = {
-+      .name           = "gpio-buttons",
-+      .id             = 0,
-+      .dev.platform_data = &bcm63xx_gpio_buttons_data,
-+};
-+
- /*
-  * third stage init callback, register all board devices.
-  */
-@@ -825,6 +857,13 @@ int __init board_register_devices(void)
-       platform_device_register(&bcm63xx_gpio_leds);
-+      if (board.reset_buttons) {
-+              bcm63xx_gpio_buttons_data.nbuttons = ARRAY_SIZE(board.reset_buttons);
-+              bcm63xx_gpio_buttons_data.buttons = board.reset_buttons;
-+
-+              platform_device_register(&bcm63xx_gpio_buttons_device);
-+      }
-+
-       return 0;
- }
---- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-+++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -55,6 +55,9 @@ struct board_info {
-       /* GPIO LEDs */
-       struct gpio_led leds[5];
-+
-+      /* Reset button */
-+      struct gpio_button reset_buttons[1];
- };
- #endif /* ! BOARD_BCM963XX_H_ */
diff --git a/target/linux/brcm63xx/patches-2.6.33/110-gpiodev.patch b/target/linux/brcm63xx/patches-2.6.33/110-gpiodev.patch
deleted file mode 100644 (file)
index 8530c4e..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -784,6 +784,10 @@ static struct ssb_sprom bcm63xx_sprom =
- };
- #endif
-+static struct resource gpiodev_resource = {
-+      .start                  = 0xFFFFFFFF,
-+};
-+
- static struct gpio_led_platform_data bcm63xx_led_data;
- static struct platform_device bcm63xx_gpio_leds = {
-@@ -852,6 +856,8 @@ int __init board_register_devices(void)
-       platform_device_register(&mtd_dev);
-+      platform_device_register_simple("GPIODEV", 0, &gpiodev_resource, 1);
-+
-       bcm63xx_led_data.num_leds = ARRAY_SIZE(board.leds);
-       bcm63xx_led_data.leds = board.leds;
diff --git a/target/linux/brcm63xx/patches-2.6.33/120-board_rta1025w_16.patch b/target/linux/brcm63xx/patches-2.6.33/120-board_rta1025w_16.patch
deleted file mode 100644 (file)
index 370c397..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -392,6 +392,25 @@ static struct board_info __initdata boar
-       .has_ehci0                      = 1,
- };
-+static struct board_info __initdata board_rta1025w_16 = {
-+      .name                           = "RTA1025W_16",
-+      .expected_cpu_id                = 0x6348,
-+
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+      .enet1 = {
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+};
-+
-+
- static struct board_info __initdata board_DV201AMR = {
-       .name                           = "DV201AMR",
-       .expected_cpu_id                = 0x6348,
-@@ -576,6 +595,7 @@ static const struct board_info __initdat
-       &board_FAST2404,
-       &board_DV201AMR,
-       &board_96348gw_a,
-+      &board_rta1025w_16,
- #endif
- #ifdef CONFIG_BCM63XX_CPU_6358
diff --git a/target/linux/brcm63xx/patches-2.6.33/130-board_DWVS0.patch b/target/linux/brcm63xx/patches-2.6.33/130-board_DWVS0.patch
deleted file mode 100644 (file)
index 440189c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -574,6 +574,27 @@ static struct board_info __initdata boar
-       .has_ohci0 = 1,
-       .has_ehci0 = 1,
- };
-+
-+static struct board_info __initdata board_DWVS0 = {
-+      .name                           = "DWV-S0",
-+      .expected_cpu_id                = 0x6358,
-+
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+
-+      .enet1 = {
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+
-+      .has_ohci0 = 1,
-+};
- #endif
- /*
-@@ -602,6 +623,7 @@ static const struct board_info __initdat
-       &board_96358vw,
-       &board_96358vw2,
-       &board_AGPFS0,
-+      &board_DWVS0,
- #endif
- };
diff --git a/target/linux/brcm63xx/patches-2.6.33/140-new_bcm96348gw_leds.patch b/target/linux/brcm63xx/patches-2.6.33/140-new_bcm96348gw_leds.patch
deleted file mode 100644 (file)
index f1a66c9..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -336,24 +336,39 @@ static struct board_info __initdata boar
-                       .active_low     = 1,
-               },
-               {
--                      .name           = "ppp",
--                      .gpio           = 3,
-+                      .name           = "power",
-+                      .gpio           = 0,
-                       .active_low     = 1,
-+                      .default_trigger = "default-on",
-               },
-               {
--                      .name           = "ppp-fail",
-+                      .name           = "stop",
-+                      .gpio           = 1,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "line1",
-                       .gpio           = 4,
-                       .active_low     = 1,
-               },
-               {
--                      .name           = "power",
--                      .gpio           = 0,
-+                      .name           = "line2",
-+                      .gpio           = 5,
-                       .active_low     = 1,
--                      .default_trigger = "default-on",
-               },
-               {
--                      .name           = "stop",
--                      .gpio           = 1,
-+                      .name           = "line3",
-+                      .gpio           = 6,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "tel",
-+                      .gpio           = 7,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "eth",
-+                      .gpio           = 35,
-                       .active_low     = 1,
-               },
-       },
-@@ -854,6 +869,7 @@ static struct platform_device bcm63xx_gp
- int __init board_register_devices(void)
- {
-       u32 val;
-+      int led_count = 0;
-       if (board.has_pccard)
-               bcm63xx_pcmcia_register();
-@@ -900,7 +916,11 @@ int __init board_register_devices(void)
-       platform_device_register_simple("GPIODEV", 0, &gpiodev_resource, 1);
--      bcm63xx_led_data.num_leds = ARRAY_SIZE(board.leds);
-+      /* count number of LEDs defined by this device */
-+      while (led_count < ARRAY_SIZE(board.leds) && board.leds[led_count].name)
-+              led_count++;
-+
-+      bcm63xx_led_data.num_leds = led_count;
-       bcm63xx_led_data.leds = board.leds;
-       platform_device_register(&bcm63xx_gpio_leds);
---- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-+++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -54,7 +54,7 @@ struct board_info {
-       struct bcm63xx_dsp_platform_data dsp;
-       /* GPIO LEDs */
--      struct gpio_led leds[5];
-+      struct gpio_led leds[8];
-       /* Reset button */
-       struct gpio_button reset_buttons[1];
diff --git a/target/linux/brcm63xx/patches-2.6.33/150-alice_gate2_leds.patch b/target/linux/brcm63xx/patches-2.6.33/150-alice_gate2_leds.patch
deleted file mode 100644 (file)
index 7795f99..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -588,6 +588,63 @@ static struct board_info __initdata boar
-       .has_ohci0 = 1,
-       .has_ehci0 = 1,
-+
-+      .leds = {
-+              /*Each led on alice gate is bi-color */
-+              {
-+                      .name           = "power:red",
-+                      .gpio           = 5,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "power:green",
-+                      .gpio           = 4,
-+                      .active_low     = 1,
-+                      .default_trigger = "default-on",
-+              },
-+              {
-+                      .name           = "wifi:red",
-+                      .gpio           = 23,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "wifi:green",
-+                      .gpio           = 22,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "usr1:red",
-+                      .gpio           = 27,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "usr1:green",
-+                      .gpio           = 26,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "usr2:red",
-+                      .gpio           = 30,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "usr2:green",
-+                      .gpio           = 29,
-+                      .active_low     = 1,
-+              },
-+      },
-+
-+      .reset_buttons = {
-+              {
-+                      .desc           = "sw2",
-+                      .gpio           = 37,
-+                      .active_low     = 1,
-+                      .type           = EV_KEY,
-+                      .code           = BTN_0,
-+                      .threshold      = 3,
-+              },
-+      },
-+      /* sw1 is connected to gpio34*/
- };
- static struct board_info __initdata board_DWVS0 = {
diff --git a/target/linux/brcm63xx/patches-2.6.33/160-fix_gpio_count.patch b/target/linux/brcm63xx/patches-2.6.33/160-fix_gpio_count.patch
deleted file mode 100644 (file)
index f997685..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h
-+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_gpio.h
-@@ -10,6 +10,10 @@ static inline unsigned long bcm63xx_gpio
-       switch (bcm63xx_get_cpu_id()) {
-       case BCM6358_CPU_ID:
-               return 40;
-+      case BCM6338_CPU_ID:
-+              return 8;
-+      case BCM6345_CPU_ID:
-+              return 16;
-       case BCM6348_CPU_ID:
-       default:
-               return 37;
diff --git a/target/linux/brcm63xx/patches-2.6.33/170-board_livebox.patch b/target/linux/brcm63xx/patches-2.6.33/170-board_livebox.patch
deleted file mode 100644 (file)
index 02354d5..0000000
+++ /dev/null
@@ -1,246 +0,0 @@
---- a/arch/mips/bcm63xx/boards/Kconfig
-+++ b/arch/mips/bcm63xx/boards/Kconfig
-@@ -8,4 +8,10 @@ config BOARD_BCM963XX
-       select SSB
-        help
-+config BOARD_LIVEBOX
-+      bool "Inventel Livebox(es) boards"
-+      select SSB
-+      help
-+       Inventel Livebox boards using the RedBoot bootloader.
-+
- endchoice
---- a/arch/mips/bcm63xx/boards/Makefile
-+++ b/arch/mips/bcm63xx/boards/Makefile
-@@ -1,3 +1,4 @@
- obj-$(CONFIG_BOARD_BCM963XX)          += board_bcm963xx.o
-+obj-$(CONFIG_BOARD_LIVEBOX)           += board_livebox.o
- EXTRA_CFLAGS += -Werror
---- /dev/null
-+++ b/arch/mips/bcm63xx/boards/board_livebox.c
-@@ -0,0 +1,223 @@
-+/*
-+ * This file is subject to the terms and conditions of the GNU General Public
-+ * License.  See the file "COPYING" in the main directory of this archive
-+ * for more details.
-+ *
-+ * Copyright (C) 2008 Florian Fainelli <florian@openwrt.org>
-+ */
-+
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/string.h>
-+#include <linux/platform_device.h>
-+#include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
-+#include <linux/mtd/physmap.h>
-+#include <linux/input.h>
-+#include <linux/gpio_buttons.h>
-+#include <asm/addrspace.h>
-+#include <bcm63xx_board.h>
-+#include <bcm63xx_cpu.h>
-+#include <bcm63xx_regs.h>
-+#include <bcm63xx_io.h>
-+#include <bcm63xx_dev_pci.h>
-+#include <bcm63xx_dev_enet.h>
-+#include <bcm63xx_dev_pcmcia.h>
-+#include <bcm63xx_dev_usb_ohci.h>
-+#include <bcm63xx_dev_usb_ehci.h>
-+#include <board_bcm963xx.h>
-+
-+#define PFX   "board_livebox: "
-+
-+static unsigned int mac_addr_used = 0;
-+static struct board_info board;
-+
-+/*
-+ * known 6348 boards
-+ */
-+#ifdef CONFIG_BCM63XX_CPU_6348
-+static struct board_info __initdata board_livebox = {
-+      .name                           = "Livebox",
-+      .expected_cpu_id                = 0x6348,
-+
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+
-+      .enet1 = {
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+
-+      .has_ohci0                      = 1,
-+      .has_pccard                     = 1,
-+      .has_ehci0                      = 1,
-+};
-+#endif
-+
-+/*
-+ * all boards
-+ */
-+static const struct board_info __initdata *bcm963xx_boards[] = {
-+#ifdef CONFIG_BCM63XX_CPU_6348
-+      &board_livebox
-+#endif
-+};
-+
-+/*
-+ * early init callback
-+ */
-+void __init board_prom_init(void)
-+{
-+      u32 val;
-+
-+      /* read base address of boot chip select (0) */
-+      val = bcm_mpi_readl(MPI_CSBASE_REG(0));
-+      val &= MPI_CSBASE_BASE_MASK;
-+
-+      /* assume board is a Livebox */
-+      memcpy(&board, bcm963xx_boards[0], sizeof(board));
-+
-+      /* setup pin multiplexing depending on board enabled device,
-+       * this has to be done this early since PCI init is done
-+       * inside arch_initcall */
-+      val = 0;
-+
-+      if (board.has_pci) {
-+              bcm63xx_pci_enabled = 1;
-+              if (BCMCPU_IS_6348())
-+                      val |= GPIO_MODE_6348_G2_PCI;
-+      }
-+
-+      if (board.has_pccard) {
-+              if (BCMCPU_IS_6348())
-+                      val |= GPIO_MODE_6348_G1_MII_PCCARD;
-+      }
-+
-+      if (board.has_enet0 && !board.enet0.use_internal_phy) {
-+              if (BCMCPU_IS_6348())
-+                      val |= GPIO_MODE_6348_G3_EXT_MII |
-+                              GPIO_MODE_6348_G0_EXT_MII;
-+      }
-+
-+      if (board.has_enet1 && !board.enet1.use_internal_phy) {
-+              if (BCMCPU_IS_6348())
-+                      val |= GPIO_MODE_6348_G3_EXT_MII |
-+                              GPIO_MODE_6348_G0_EXT_MII;
-+      }
-+
-+      bcm_gpio_writel(val, GPIO_MODE_REG);
-+}
-+
-+/*
-+ * second stage init callback, good time to panic if we couldn't
-+ * identify on which board we're running since early printk is working
-+ */
-+void __init board_setup(void)
-+{
-+      if (!board.name[0])
-+              panic("unable to detect bcm963xx board");
-+      printk(KERN_INFO PFX "board name: %s\n", board.name);
-+
-+      /* make sure we're running on expected cpu */
-+      if (bcm63xx_get_cpu_id() != board.expected_cpu_id)
-+              panic("unexpected CPU for bcm963xx board");
-+}
-+
-+/*
-+ * return board name for /proc/cpuinfo
-+ */
-+const char *board_get_name(void)
-+{
-+      return board.name;
-+}
-+
-+/*
-+ * register & return a new board mac address
-+ */
-+
-+static int board_get_mac_address(u8 *mac)
-+{
-+      u8 default_mac[ETH_ALEN] = {0x00, 0x07, 0x3A, 0x00, 0x00, 0x00};
-+      u8 *p;
-+      int count;
-+
-+      memcpy(mac, default_mac, ETH_ALEN);
-+
-+      p = mac + ETH_ALEN - 1;
-+      count = mac_addr_used;
-+
-+      while (count--) {
-+              do {
-+                      (*p)++;
-+                      if (*p != 0)
-+                              break;
-+                      p--;
-+              } while (p != mac);
-+      }
-+
-+      if (p == mac) {
-+              printk(KERN_ERR PFX "unable to fetch mac address\n");
-+              return -ENODEV;
-+      }
-+        mac_addr_used++;
-+
-+      return 0;
-+}
-+
-+static struct resource mtd_resources[] = {
-+      {
-+              .start          = 0,    /* filled at runtime */
-+              .end            = 0,    /* filled at runtime */
-+              .flags          = IORESOURCE_MEM,
-+      }
-+};
-+
-+static struct platform_device mtd_dev = {
-+      .name                   = "bcm963xx-flash",
-+      .resource               = mtd_resources,
-+      .num_resources          = ARRAY_SIZE(mtd_resources),
-+};
-+
-+
-+/*
-+ * third stage init callback, register all board devices.
-+ */
-+int __init board_register_devices(void)
-+{
-+      u32 val;
-+
-+      if (board.has_pccard)
-+              bcm63xx_pcmcia_register();
-+
-+      if (board.has_enet0 &&
-+          !board_get_mac_address(board.enet0.mac_addr))
-+              bcm63xx_enet_register(0, &board.enet0);
-+
-+      if (board.has_enet1 &&
-+          !board_get_mac_address(board.enet1.mac_addr))
-+              bcm63xx_enet_register(1, &board.enet1);
-+
-+      if (board.has_ohci0)
-+              bcm63xx_ohci_register();
-+
-+      if (board.has_ehci0)
-+              bcm63xx_ehci_register();
-+
-+
-+      /* read base address of boot chip select (0) */
-+      val = bcm_mpi_readl(MPI_CSBASE_REG(0));
-+      val &= MPI_CSBASE_BASE_MASK;
-+      mtd_resources[0].start = val;
-+      mtd_resources[0].end = 0x1FFFFFFF;
-+
-+      platform_device_register(&mtd_dev);
-+
-+      return 0;
-+}
-+
diff --git a/target/linux/brcm63xx/patches-2.6.33/180-udc_preliminary_support.patch b/target/linux/brcm63xx/patches-2.6.33/180-udc_preliminary_support.patch
deleted file mode 100644 (file)
index e0999da..0000000
+++ /dev/null
@@ -1,243 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -28,6 +28,7 @@
- #include <bcm63xx_dev_pcmcia.h>
- #include <bcm63xx_dev_usb_ohci.h>
- #include <bcm63xx_dev_usb_ehci.h>
-+#include <bcm63xx_dev_usb_udc.h>
- #include <board_bcm963xx.h>
- #define PFX   "board_bcm963xx: "
-@@ -405,6 +406,8 @@ static struct board_info __initdata boar
-       .has_ohci0                      = 1,
-       .has_pccard                     = 1,
-       .has_ehci0                      = 1,
-+
-+      .has_udc0                       = 1,
- };
- static struct board_info __initdata board_rta1025w_16 = {
-@@ -948,6 +951,9 @@ int __init board_register_devices(void)
-       if (board.has_dsp)
-               bcm63xx_dsp_register(&board.dsp);
-+      if (board.has_udc0)
-+              bcm63xx_udc_register();
-+
-       /* Generate MAC address for WLAN and
-        * register our SPROM */
- #ifdef CONFIG_SSB_PCIHOST
---- /dev/null
-+++ b/arch/mips/bcm63xx/dev-usb-udc.c
-@@ -0,0 +1,58 @@
-+/*
-+ * Copyright (C) 2009 Henk Vergonet <Henk.Vergonet@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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-+ */
-+#include <linux/init.h>
-+#include <linux/kernel.h>
-+#include <linux/platform_device.h>
-+#include <bcm63xx_cpu.h>
-+
-+static struct resource udc_resources[] = {
-+      {
-+              .start          = -1, /* filled at runtime */
-+              .end            = -1, /* filled at runtime */
-+              .flags          = IORESOURCE_MEM,
-+      },
-+      {
-+              .start          = -1, /* filled at runtime */
-+              .flags          = IORESOURCE_IRQ,
-+      },
-+};
-+
-+static u64 udc_dmamask = ~(u32)0;
-+
-+static struct platform_device bcm63xx_udc_device = {
-+      .name           = "bcm63xx-udc",
-+      .id             = 0,
-+      .num_resources  = ARRAY_SIZE(udc_resources),
-+      .resource       = udc_resources,
-+      .dev            = {
-+              .dma_mask               = &udc_dmamask,
-+              .coherent_dma_mask      = 0xffffffff,
-+      },
-+};
-+
-+int __init bcm63xx_udc_register(void)
-+{
-+      if (!BCMCPU_IS_6338() && !BCMCPU_IS_6345() && !BCMCPU_IS_6348())
-+              return 0;
-+
-+      udc_resources[0].start = bcm63xx_regset_address(RSET_UDC0);
-+      udc_resources[0].end = udc_resources[0].start;
-+      udc_resources[0].end += RSET_UDC_SIZE - 1;
-+      udc_resources[1].start = bcm63xx_get_irq_number(IRQ_UDC0);
-+      return platform_device_register(&bcm63xx_udc_device);
-+}
---- a/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h
-+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_cpu.h
-@@ -125,7 +125,7 @@ enum bcm63xx_regs_set {
- #define BCM_6338_UART0_BASE           (0xfffe0300)
- #define BCM_6338_GPIO_BASE            (0xfffe0400)
- #define BCM_6338_SPI_BASE             (0xfffe0c00)
--#define BCM_6338_UDC0_BASE            (0xdeadbeef)
-+#define BCM_6338_UDC0_BASE            (0xfffe3000)
- #define BCM_6338_USBDMA_BASE          (0xfffe2400)
- #define BCM_6338_OHCI0_BASE           (0xdeadbeef)
- #define BCM_6338_OHCI_PRIV_BASE               (0xfffe3000)
-@@ -155,7 +155,7 @@ enum bcm63xx_regs_set {
- #define BCM_6345_UART0_BASE           (0xfffe0300)
- #define BCM_6345_GPIO_BASE            (0xfffe0400)
- #define BCM_6345_SPI_BASE             (0xdeadbeef)
--#define BCM_6345_UDC0_BASE            (0xdeadbeef)
-+#define BCM_6345_UDC0_BASE            (0xfffe2100)
- #define BCM_6345_USBDMA_BASE          (0xfffe2800)
- #define BCM_6345_ENET0_BASE           (0xfffe1800)
- #define BCM_6345_ENETDMA_BASE         (0xfffe2800)
-@@ -210,7 +210,7 @@ enum bcm63xx_regs_set {
- #define BCM_6358_UART0_BASE           (0xfffe0100)
- #define BCM_6358_GPIO_BASE            (0xfffe0080)
- #define BCM_6358_SPI_BASE             (0xdeadbeef)
--#define BCM_6358_UDC0_BASE            (0xfffe0800)
-+#define BCM_6358_UDC0_BASE            (0xfffe0400)
- #define BCM_6358_OHCI0_BASE           (0xfffe1400)
- #define BCM_6358_OHCI_PRIV_BASE               (0xdeadbeef)
- #define BCM_6358_USBH_PRIV_BASE               (0xfffe1500)
-@@ -430,6 +430,7 @@ enum bcm63xx_irq {
-       IRQ_TIMER = 0,
-       IRQ_UART0,
-       IRQ_DSL,
-+      IRQ_UDC0,
-       IRQ_ENET0,
-       IRQ_ENET1,
-       IRQ_ENET_PHY,
-@@ -472,7 +473,7 @@ enum bcm63xx_irq {
- #define BCM_6345_UART0_IRQ            (IRQ_INTERNAL_BASE + 2)
- #define BCM_6345_DSL_IRQ              (IRQ_INTERNAL_BASE + 3)
- #define BCM_6345_ATM_IRQ              (IRQ_INTERNAL_BASE + 4)
--#define BCM_6345_USB_IRQ              (IRQ_INTERNAL_BASE + 5)
-+#define BCM_6345_UDC0_IRQ             (IRQ_INTERNAL_BASE + 5)
- #define BCM_6345_ENET0_IRQ            (IRQ_INTERNAL_BASE + 8)
- #define BCM_6345_ENET_PHY_IRQ         (IRQ_INTERNAL_BASE + 12)
- #define BCM_6345_ENET0_RXDMA_IRQ      (IRQ_INTERNAL_BASE + 13 + 1)
-@@ -494,10 +495,17 @@ enum bcm63xx_irq {
- #define BCM_6348_TIMER_IRQ            (IRQ_INTERNAL_BASE + 0)
- #define BCM_6348_UART0_IRQ            (IRQ_INTERNAL_BASE + 2)
- #define BCM_6348_DSL_IRQ              (IRQ_INTERNAL_BASE + 4)
-+#define BCM_6348_UDC0_IRQ             (IRQ_INTERNAL_BASE + 6)
- #define BCM_6348_ENET1_IRQ            (IRQ_INTERNAL_BASE + 7)
- #define BCM_6348_ENET0_IRQ            (IRQ_INTERNAL_BASE + 8)
- #define BCM_6348_ENET_PHY_IRQ         (IRQ_INTERNAL_BASE + 9)
- #define BCM_6348_OHCI0_IRQ            (IRQ_INTERNAL_BASE + 12)
-+#define BCM_6348_USB_CNTL_RX_DMA_IRQ  (IRQ_INTERNAL_BASE + 14)
-+#define BCM_6348_USB_CNTL_TX_DMA_IRQ  (IRQ_INTERNAL_BASE + 15)
-+#define BCM_6348_USB_BULK_RX_DMA_IRQ  (IRQ_INTERNAL_BASE + 16)
-+#define BCM_6348_USB_BULK_TX_DMA_IRQ  (IRQ_INTERNAL_BASE + 17)
-+#define BCM_6348_USB_ISO_RX_DMA_IRQ   (IRQ_INTERNAL_BASE + 18)
-+#define BCM_6348_USB_ISO_TX_DMA_IRQ   (IRQ_INTERNAL_BASE + 19)
- #define BCM_6348_ENET0_RXDMA_IRQ      (IRQ_INTERNAL_BASE + 20)
- #define BCM_6348_ENET0_TXDMA_IRQ      (IRQ_INTERNAL_BASE + 21)
- #define BCM_6348_ENET1_RXDMA_IRQ      (IRQ_INTERNAL_BASE + 22)
---- /dev/null
-+++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_usb_udc.h
-@@ -0,0 +1,6 @@
-+#ifndef BCM63XX_DEV_USB_UDC_H_
-+#define BCM63XX_DEV_USB_UDC_H_
-+
-+int bcm63xx_udc_register(void);
-+
-+#endif /* BCM63XX_DEV_USB_UDC_H_ */
---- a/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-+++ b/arch/mips/include/asm/mach-bcm63xx/board_bcm963xx.h
-@@ -45,6 +45,7 @@ struct board_info {
-       unsigned int    has_ohci0:1;
-       unsigned int    has_ehci0:1;
-       unsigned int    has_dsp:1;
-+      unsigned int    has_udc0:1;
-       /* ethernet config */
-       struct bcm63xx_enet_platform_data enet0;
---- a/arch/mips/bcm63xx/Makefile
-+++ b/arch/mips/bcm63xx/Makefile
-@@ -1,6 +1,6 @@
- obj-y         += clk.o cpu.o cs.o gpio.o irq.o prom.o setup.o timer.o \
-                  dev-dsp.o dev-enet.o dev-pcmcia.o dev-uart.o dev-wdt.o \
--                 dev-usb-ohci.o dev-usb-ehci.o
-+                 dev-usb-ohci.o dev-usb-ehci.o dev-usb-udc.o
- obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
- obj-y         += boards/
---- a/arch/mips/bcm63xx/clk.c
-+++ b/arch/mips/bcm63xx/clk.c
-@@ -141,6 +141,30 @@ static struct clk clk_usbh = {
- };
- /*
-+ * USB slave clock
-+ */
-+static void usbs_set(struct clk *clk, int enable)
-+{
-+      u32 mask;
-+
-+      switch(bcm63xx_get_cpu_id()) {
-+      case BCM6338_CPU_ID:
-+              mask = CKCTL_6338_USBS_EN;
-+              break;
-+      case BCM6348_CPU_ID:
-+              mask = CKCTL_6348_USBS_EN;
-+              break;
-+      default:
-+              return;
-+      }
-+      bcm_hwclock_set(mask, enable);
-+}
-+
-+static struct clk clk_usbs = {
-+      .set    = usbs_set,
-+};
-+
-+/*
-  * SPI clock
-  */
- static void spi_set(struct clk *clk, int enable)
-@@ -208,6 +232,8 @@ struct clk *clk_get(struct device *dev,
-               return &clk_ephy;
-       if (!strcmp(id, "usbh"))
-               return &clk_usbh;
-+      if (!strcmp(id, "usbs"))
-+              return &clk_usbs;
-       if (!strcmp(id, "spi"))
-               return &clk_spi;
-       if (!strcmp(id, "periph"))
---- a/arch/mips/bcm63xx/Kconfig
-+++ b/arch/mips/bcm63xx/Kconfig
-@@ -7,6 +7,7 @@ config BCM63XX_CPU_6338
-       select USB_ARCH_HAS_OHCI
-       select USB_OHCI_BIG_ENDIAN_DESC
-       select USB_OHCI_BIG_ENDIAN_MMIO
-+      select USB_ARCH_HAS_UDC
- config BCM63XX_CPU_6345
-       bool "support 6345 CPU"
-@@ -19,6 +20,7 @@ config BCM63XX_CPU_6348
-       select USB_ARCH_HAS_OHCI
-       select USB_OHCI_BIG_ENDIAN_DESC
-       select USB_OHCI_BIG_ENDIAN_MMIO
-+      select USB_ARCH_HAS_UDC
- config BCM63XX_CPU_6358
-       bool "support 6358 CPU"
diff --git a/target/linux/brcm63xx/patches-2.6.33/190-typo_cpu_features_override.patch b/target/linux/brcm63xx/patches-2.6.33/190-typo_cpu_features_override.patch
deleted file mode 100644 (file)
index cf5e611..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-Fix typo: CONFIG_BCMCPU_IS_63xx does not exists,
-CONFIG_BCM63XX_CPU_63xx is the valid config option.
-
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- .../asm/mach-bcm63xx/cpu-feature-overrides.h       |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
---- a/arch/mips/include/asm/mach-bcm63xx/cpu-feature-overrides.h
-+++ b/arch/mips/include/asm/mach-bcm63xx/cpu-feature-overrides.h
-@@ -24,7 +24,7 @@
- #define cpu_has_smartmips             0
- #define cpu_has_vtag_icache           0
--#if !defined(BCMCPU_RUNTIME_DETECT) && (defined(CONFIG_BCMCPU_IS_6348) || defined(CONFIG_CPU_IS_6338) || defined(CONFIG_CPU_IS_BCM6345))
-+#if !defined(BCMCPU_RUNTIME_DETECT) && (defined(CONFIG_BCM63XX_CPU_6348) || defined(CONFIG_BCM63XX_CPU_6345) || defined(CONFIG_BCM63XX_CPU_6338))
- #define cpu_has_dc_aliases            0
- #endif
diff --git a/target/linux/brcm63xx/patches-2.6.33/210-init_gpio_out_low_high_current_value_at_boot.patch b/target/linux/brcm63xx/patches-2.6.33/210-init_gpio_out_low_high_current_value_at_boot.patch
deleted file mode 100644 (file)
index 902840b..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-To avoid glitch during gpio initialisation, fetch gpio output
-registers values left by bootloader.
-
-Signed-off-by: Maxime Bizon <mbizon@freebox.fr>
----
- arch/mips/bcm63xx/gpio.c |    2 ++
- 1 files changed, 2 insertions(+), 0 deletions(-)
-
---- a/arch/mips/bcm63xx/gpio.c
-+++ b/arch/mips/bcm63xx/gpio.c
-@@ -125,6 +125,8 @@ static struct gpio_chip bcm63xx_gpio_chi
- int __init bcm63xx_gpio_init(void)
- {
-+      gpio_out_low = bcm_gpio_readl(GPIO_DATA_LO_REG);
-+      gpio_out_high = bcm_gpio_readl(GPIO_DATA_HI_REG);
-       bcm63xx_gpio_chip.ngpio = bcm63xx_gpio_count();
-       pr_info("registering %d GPIOs\n", bcm63xx_gpio_chip.ngpio);
diff --git a/target/linux/brcm63xx/patches-2.6.33/220-board-D4PW.patch b/target/linux/brcm63xx/patches-2.6.33/220-board-D4PW.patch
deleted file mode 100644 (file)
index 528b6fd..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/arch/mips/bcm63xx/boards/board_bcm963xx.c
-+++ b/arch/mips/bcm63xx/boards/board_bcm963xx.c
-@@ -467,6 +467,49 @@
-       .has_ohci0 = 1,
- };
-+
-+static struct board_info __initdata board_96348_D4PW = {
-+      .name                           = "D-4P-W",
-+      .expected_cpu_id                = 0x6348,
-+
-+      .has_enet0                      = 1,
-+      .has_enet1                      = 1,
-+      .has_pci                        = 1,
-+
-+      .enet0 = {
-+              .has_phy                = 1,
-+              .use_internal_phy       = 1,
-+      },
-+      .enet1 = {
-+              .force_speed_100        = 1,
-+              .force_duplex_full      = 1,
-+      },
-+
-+      .has_ohci0                      = 1,
-+      .has_ehci0                      = 1,
-+
-+      .leds = {
-+              {
-+                      .name           = "ppp",
-+                      .gpio           = 4,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "ppp-fail",
-+                      .gpio           = 5,
-+                      .active_low     = 1,
-+              },
-+              {
-+                      .name           = "power",
-+                      .gpio           = 0,
-+                      .active_low     = 1,
-+                      .default_trigger = "default-on",
-+
-+              },
-+      },
-+
-+};
-+
- #endif
- /*
-@@ -692,6 +735,7 @@
-       &board_DV201AMR,
-       &board_96348gw_a,
-       &board_rta1025w_16,
-+      &board_96348_D4PW,
- #endif
- #ifdef CONFIG_BCM63XX_CPU_6358
diff --git a/target/linux/generic-2.6/config-2.6.25 b/target/linux/generic-2.6/config-2.6.25
deleted file mode 100644 (file)
index 2312891..0000000
+++ /dev/null
@@ -1,2031 +0,0 @@
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_9P_FS is not set
-# CONFIG_ACENIC is not set
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADM6996_PHY is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_AF_RXRPC is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_AIRO is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_AMIGA_PARTITION is not set
-CONFIG_ANON_INODES=y
-# CONFIG_APPLICOM is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_CLPS7500 is not set
-# CONFIG_ARCH_CO285 is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_MSM7X00A is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_ORION is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCNET is not set
-CONFIG_ARPD=y
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_ATA is not set
-# CONFIG_ATALK is not set
-# CONFIG_ATA_NONSTANDARD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_ATA_SFF=y
-# CONFIG_ATL1 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-CONFIG_ATM_BR2684_IPFILTER=y
-# CONFIG_ATM_BR2684 is not set
-# CONFIG_ATM_CLIP is not set
-CONFIG_ATM_CLIP_NO_ICMP=y
-# CONFIG_ATM_DRIVERS is not set
-# CONFIG_ATM_DUMMY is not set
-# CONFIG_ATMEL is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_LANE is not set
-# CONFIG_ATM_MPOA is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_AUDIT is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AX25_DAMA_SLAVE is not set
-# CONFIG_AX25 is not set
-# CONFIG_AX88796 is not set
-# CONFIG_B44 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-CONFIG_BASE_FULL=y
-CONFIG_BASE_SMALL=0
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-CONFIG_BCM43XX_DEBUG=y
-CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
-# CONFIG_BCM43XX_DMA_MODE is not set
-CONFIG_BCM43XX_DMA=y
-# CONFIG_BCM43XX is not set
-# CONFIG_BCM43XX_PIO_MODE is not set
-CONFIG_BCM43XX_PIO=y
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_BLINK is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-CONFIG_BLK_DEV=y
-CONFIG_BLOCK=y
-# CONFIG_BNX2 is not set
-# CONFIG_BONDING is not set
-# CONFIG_BPQETHER is not set
-# CONFIG_BRIDGE_EBT_802_3 is not set
-# CONFIG_BRIDGE_EBT_AMONG is not set
-# CONFIG_BRIDGE_EBT_ARP is not set
-# CONFIG_BRIDGE_EBT_ARPREPLY is not set
-# CONFIG_BRIDGE_EBT_BROUTE is not set
-# CONFIG_BRIDGE_EBT_DNAT is not set
-# CONFIG_BRIDGE_EBT_IP is not set
-# CONFIG_BRIDGE_EBT_LIMIT is not set
-# CONFIG_BRIDGE_EBT_LOG is not set
-# CONFIG_BRIDGE_EBT_MARK is not set
-# CONFIG_BRIDGE_EBT_MARK_T is not set
-# CONFIG_BRIDGE_EBT_NFLOG is not set
-# CONFIG_BRIDGE_EBT_PKTTYPE is not set
-# CONFIG_BRIDGE_EBT_REDIRECT is not set
-# CONFIG_BRIDGE_EBT_SNAT is not set
-# CONFIG_BRIDGE_EBT_STP is not set
-# CONFIG_BRIDGE_EBT_T_FILTER is not set
-# CONFIG_BRIDGE_EBT_T_NAT is not set
-# CONFIG_BRIDGE_EBT_ULOG is not set
-# CONFIG_BRIDGE_EBT_VLAN is not set
-# CONFIG_BRIDGE_NETFILTER is not set
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-CONFIG_BRIDGE=y
-# CONFIG_BROADCOM_PHY is not set
-CONFIG_BROKEN_ON_SMP=y
-CONFIG_BSD_DISKLABEL=y
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_CMTP is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBTSDIO is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIDTL1 is not set
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_BT_HIDP is not set
-# CONFIG_BT is not set
-# CONFIG_BT_L2CAP is not set
-# CONFIG_BT_RFCOMM is not set
-CONFIG_BT_RFCOMM_TTY=y
-# CONFIG_BT_SCO is not set
-CONFIG_BUG=y
-# CONFIG_CAN is not set
-# CONFIG_CAPI_AVM is not set
-# CONFIG_CAPI_EICON is not set
-# CONFIG_CAPI_TRACE is not set
-CONFIG_CARDBUS=y
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_CASSINI is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_CFG80211 is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_CIFS is not set
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_STATS2 is not set
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-CONFIG_CLS_U32_MARK=y
-CONFIG_CLS_U32_PERF=y
-CONFIG_CMDLINE=""
-# CONFIG_CODA_FS is not set
-# CONFIG_COMPAT_BRK is not set
-# CONFIG_CONFIGFS_FS is not set
-# CONFIG_CONNECTOR is not set
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC_ITU_T is not set
-CONFIG_CROSSCOMPILE=y
-# CONFIG_CRYPTO_AES is not set
-# CONFIG_CRYPTO_ALGAPI is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_BLKCIPHER is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_HASH is not set
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_PCBC is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SEQIV is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_TWOFISH_COMMON is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-CONFIG_CRYPTO=y
-# CONFIG_DAB is not set
-# CONFIG_DAVICOM_PHY is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_FS is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DECNET is not set
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_BIC is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_CUBIC is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_HTCP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-# CONFIG_DEFAULT_NOOP is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="westwood"
-# CONFIG_DEFAULT_VEGAS is not set
-CONFIG_DEFAULT_WESTWOOD=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-# CONFIG_DEVFS_DEBUG is not set
-CONFIG_DEVFS_FS=y
-CONFIG_DEVFS_MOUNT=y
-# CONFIG_DGRS is not set
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_DL2K is not set
-# CONFIG_DLM is not set
-# CONFIG_DMA_ENGINE is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_DRM is not set
-# CONFIG_DS1682 is not set
-# CONFIG_DTLK is not set
-# CONFIG_DUMMY is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DVB is not set
-# CONFIG_E1000E is not set
-# CONFIG_E1000 is not set
-# CONFIG_E100 is not set
-# CONFIG_ECONET is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_ELF_CORE is not set
-CONFIG_EMBEDDED=y
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# CONFIG_ENC28J60 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_EPIC100 is not set
-CONFIG_EPOLL=y
-# CONFIG_EQUALIZER is not set
-CONFIG_EVENTFD=y
-CONFIG_EXPERIMENTAL=y
-# CONFIG_EXPORTFS is not set
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_FAT_FS is not set
-# CONFIG_FB_IBM_GXT4500 is not set
-# CONFIG_FB is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FDDI is not set
-# CONFIG_FEALNX is not set
-CONFIG_FIB_RULES=y
-# CONFIG_FIREWIRE is not set
-# CONFIG_FIXED_PHY is not set
-CONFIG_FLATMEM_MANUAL=y
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_FORCEDETH is not set
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_FTL is not set
-# CONFIG_FUSE_FS is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SAS is not set
-# CONFIG_FUSION_SPI is not set
-CONFIG_FUTEX=y
-CONFIG_FW_LOADER=y
-CONFIG_GACT_PROB=y
-# CONFIG_GAMEPORT is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GFS2_FS is not set
-# CONFIG_GPIO_DEVICE is not set
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_HAMACHI is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_HERMES is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HID_FF is not set
-# CONFIG_HID is not set
-# CONFIG_HIDRAW is not set
-# CONFIG_HID_SUPPORT is not set
-CONFIG_HIGH_RES_TIMERS=y
-# CONFIG_HIPPI is not set
-# CONFIG_HOSTAP_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_PCI is not set
-# CONFIG_HOSTAP_PLX is not set
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_HOTPLUG_PCI is not set
-CONFIG_HOTPLUG=y
-# CONFIG_HP100 is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-CONFIG_HZ=100
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ_100=y
-# CONFIG_HZ_1024 is not set
-# CONFIG_HZ_128 is not set
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_48 is not set
-# CONFIG_I2C_ALGOPCA is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_CHARDEV is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_IBM_IIC is not set
-# CONFIG_I2C is not set
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_I2C_PCA is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2O is not set
-# CONFIG_I82092 is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
-CONFIG_IDE_MAX_HWIFS=4
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-CONFIG_IDE_PROC_FS=y
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IEEE1394_DV1394 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_IEEE1394_OHCI1394 is not set
-# CONFIG_IEEE1394_PCILYNX is not set
-# CONFIG_IEEE1394_RAWIO is not set
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_CRYPT_WEP is not set
-# CONFIG_IEEE80211_DEBUG is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_IFB is not set
-# CONFIG_IGB is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_IKCONFIG_PROC is not set
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-# CONFIG_IMQ_BEHAVIOR_AB is not set
-CONFIG_IMQ_BEHAVIOR_BA=y
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-# CONFIG_IMQ is not set
-CONFIG_IMQ_NUM_DEVS=2
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_INET6_XFRM_MODE_BEET is not set
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_TCP_DIAG is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET=y
-# CONFIG_INFINIBAND is not set
-# CONFIG_INFTL is not set
-CONFIG_INIT_ENV_ARG_LIMIT=32
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_PCSPKR is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_WISTRON_BTNS is not set
-# CONFIG_INSTRUMENTATION is not set
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IP1000 is not set
-# CONFIG_IP6_NF_FILTER is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP6_NF_MANGLE is not set
-# CONFIG_IP6_NF_MATCH_AH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_LIMIT is not set
-# CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_RAW is not set
-# CONFIG_IP6_NF_TARGET_HL is not set
-# CONFIG_IP6_NF_TARGET_IMQ is not set
-# CONFIG_IP6_NF_TARGET_LOG is not set
-# CONFIG_IP6_NF_TARGET_REJECT is not set
-# CONFIG_IP6_NF_TARGET_ROUTE is not set
-CONFIG_IP_ADVANCED_ROUTER=y
-# CONFIG_IPC_NS is not set
-# CONFIG_IP_DCCP is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_ARPFILTER is not set
-# CONFIG_IP_NF_ARP_MANGLE is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_CT_ACCT=y
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FILTER is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
-# CONFIG_IP_NF_MATCH_IPP2P is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_SET is not set
-# CONFIG_IP_NF_MATCH_TIME is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_NAT_AMANDA is not set
-# CONFIG_IP_NF_NAT_FTP is not set
-# CONFIG_IP_NF_NAT_H323 is not set
-# CONFIG_IP_NF_NAT_IRC is not set
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_NAT_PPTP is not set
-# CONFIG_IP_NF_NAT_SIP is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-# CONFIG_IP_NF_NAT_TFTP is not set
-CONFIG_IP_NF_NAT=y
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_RAW is not set
-CONFIG_IP_NF_SET_HASHSIZE=1024
-# CONFIG_IP_NF_SET_IPHASH is not set
-# CONFIG_IP_NF_SET_IPMAP is not set
-# CONFIG_IP_NF_SET_IPPORTHASH is not set
-# CONFIG_IP_NF_SET_IPTREE is not set
-# CONFIG_IP_NF_SET_IPTREEMAP is not set
-# CONFIG_IP_NF_SET is not set
-# CONFIG_IP_NF_SET_MACIPMAP is not set
-CONFIG_IP_NF_SET_MAX=256
-# CONFIG_IP_NF_SET_NETHASH is not set
-# CONFIG_IP_NF_SET_PORTMAP is not set
-# CONFIG_IP_NF_SIP is not set
-# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_IMQ is not set
-# CONFIG_IP_NF_TARGET_LOG is not set
-# CONFIG_IP_NF_TARGET_MASQUERADE is not set
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_ROUTE is not set
-# CONFIG_IP_NF_TARGET_SAME is not set
-# CONFIG_IP_NF_TARGET_SET is not set
-# CONFIG_IP_NF_TARGET_TOS is not set
-# CONFIG_IP_NF_TARGET_TTL is not set
-# CONFIG_IP_NF_TARGET_ULOG is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_IP_PNP is not set
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
-# CONFIG_IP_ROUTE_MULTIPATH_DRR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RANDOM is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_WRANDOM is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_SCTP is not set
-CONFIG_IPSEC_NAT_TRAVERSAL=y
-# CONFIG_IPV6 is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTE_INFO is not set
-CONFIG_IPV6_ROUTER_PREF=y
-# CONFIG_IPV6_SIT is not set
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPW2100_DEBUG is not set
-# CONFIG_IPW2100 is not set
-CONFIG_IPW2100_MONITOR=y
-# CONFIG_IPW2200_DEBUG is not set
-# CONFIG_IPW2200 is not set
-CONFIG_IPW2200_MONITOR=y
-# CONFIG_IPW2200_PROMISCUOUS is not set
-# CONFIG_IPW2200_QOS is not set
-# CONFIG_IPW2200_RADIOTAP is not set
-# CONFIG_IPX is not set
-# CONFIG_IRDA is not set
-# CONFIG_ISCSI_TCP is not set
-# CONFIG_ISDN is not set
-# CONFIG_ISO9660_FS is not set
-# CONFIG_IXGB is not set
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_JBD is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_FS=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_STATISTICS is not set
-CONFIG_JOLIET=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_KALLSYMS is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_KEXEC is not set
-# CONFIG_KEYS is not set
-CONFIG_KMOD=y
-# CONFIG_LAPB is not set
-# CONFIG_LASAT is not set
-CONFIG_LBD=y
-# CONFIG_LDM_PARTITION is not set
-CONFIG_LEDS_CLASS=y
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_MORSE is not set
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_LIBCRC32C is not set
-# CONFIG_LIBERTAS is not set
-# CONFIG_LIBERTAS_USB is not set
-# CONFIG_LLC2 is not set
-CONFIG_LLC=y
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_LOCKDEP_SUPPORT=y
-# CONFIG_LOCKD is not set
-CONFIG_LOCKD_V4=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_LSF is not set
-# CONFIG_LXT_PHY is not set
-# CONFIG_MAC80211_DEBUG is not set
-# CONFIG_MAC80211 is not set
-# CONFIG_MAC80211_LEDS is not set
-# CONFIG_MAC_EMUMOUSEBTN is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_MARKEINS is not set
-# CONFIG_MARKERS is not set
-# CONFIG_MARVELL_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-# CONFIG_MD is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_MFD_SM501 is not set
-CONFIG_MII=y
-CONFIG_MINI_FO=y
-# CONFIG_MINIX_FS is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_MIPS_FPU_EMU is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_MKISS is not set
-# CONFIG_MMC_ARMMMCI is not set
-# CONFIG_MMC_AT91 is not set
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_MMC_BLOCK is not set
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-CONFIG_MMU=y
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MSDOS_FS is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_BLKDEVS=y
-# CONFIG_MTD_BLOCK2MTD is not set
-CONFIG_MTD_BLOCK=y
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP 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_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CHAR=y
-# CONFIG_MTD_CMDLINE_PARTS is not set
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_INTEL_VR_NOR is not set
-# CONFIG_MTD_JEDECPROBE is not set
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_NAND_CAFE is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_ONENAND is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PLATRAM is not set
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS is not set
-CONFIG_MTD_REDBOOT_PARTS_READONLY=y
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_ROM is not set
-CONFIG_MTD_ROOTFS_ROOT_DEV=y
-CONFIG_MTD_ROOTFS_SPLIT=y
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_UBI is not set
-CONFIG_MTD=y
-# CONFIG_MVSWITCH_PHY is not set
-# CONFIG_MWAVE is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NAMESPACES is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NET_9P is not set
-# CONFIG_NET_ACT_GACT is not set
-# CONFIG_NET_ACT_IPT is not set
-# CONFIG_NET_ACT_MIRRED is not set
-# CONFIG_NET_ACT_NAT is not set
-# CONFIG_NET_ACT_PEDIT is not set
-CONFIG_NET_ACT_POLICE=y
-# CONFIG_NET_ACT_SIMP is not set
-CONFIG_NET_CLS_ACT=y
-# CONFIG_NET_CLS_BASIC is not set
-# CONFIG_NET_CLS_FLOW is not set
-# CONFIG_NET_CLS_FW is not set
-CONFIG_NET_CLS_IND=y
-CONFIG_NET_CLS_POLICE=y
-# CONFIG_NET_CLS_ROUTE4 is not set
-CONFIG_NET_CLS_ROUTE=y
-# CONFIG_NET_CLS_RSVP6 is not set
-# CONFIG_NET_CLS_RSVP is not set
-# CONFIG_NET_CLS_TCINDEX is not set
-# CONFIG_NET_CLS_U32 is not set
-CONFIG_NET_CLS=y
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETDEBUG is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_NETDEV_1000=y
-# CONFIG_NETDEVICES_MULTIQUEUE is not set
-CONFIG_NETDEVICES=y
-# CONFIG_NET_EMATCH_CMP is not set
-# CONFIG_NET_EMATCH_META is not set
-# CONFIG_NET_EMATCH_NBYTE is not set
-CONFIG_NET_EMATCH_STACK=32
-# CONFIG_NET_EMATCH_TEXT is not set
-# CONFIG_NET_EMATCH_U32 is not set
-CONFIG_NET_EMATCH=y
-CONFIG_NET_ESTIMATOR=y
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_FC is not set
-CONFIG_NETFILTER_ADVANCED=y
-# CONFIG_NETFILTER_DEBUG is not set
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7 is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER=y
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_NET_IPGRE is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_KEY is not set
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_NETPOLL is not set
-CONFIG_NET_RADIO=y
-# CONFIG_NETROM is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_NET_SCH_ATM is not set
-# CONFIG_NET_SCH_CBQ is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_DSMARK is not set
-CONFIG_NET_SCHED=y
-# CONFIG_NET_SCH_ESFQ is not set
-CONFIG_NET_SCH_ESFQ_NFCT=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_NET_SCH_GRED is not set
-# CONFIG_NET_SCH_HFSC is not set
-# CONFIG_NET_SCH_HTB is not set
-# CONFIG_NET_SCH_INGRESS is not set
-# CONFIG_NET_SCH_NETEM is not set
-# CONFIG_NET_SCH_PRIO is not set
-# CONFIG_NET_SCH_RED is not set
-# CONFIG_NET_SCH_RR is not set
-# CONFIG_NET_SCH_SFQ is not set
-# CONFIG_NET_SCH_TBF is not set
-# CONFIG_NET_SCH_TEQL is not set
-# CONFIG_NET_TULIP is not set
-CONFIG_NET_WIRELESS_RTNETLINK=y
-CONFIG_NET_WIRELESS=y
-CONFIG_NETWORK_FILESYSTEMS=y
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETXEN_NIC is not set
-CONFIG_NET=y
-# CONFIG_NEW_GPIO is not set
-CONFIG_NEW_LEDS=y
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-CONFIG_NF_CONNTRACK_ENABLED=y
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IPV4 is not set
-# CONFIG_NF_CONNTRACK_IPV6 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_NF_CONNTRACK_RTSP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-CONFIG_NF_CONNTRACK_SUPPORT=y
-# CONFIG_NF_CONNTRACK_TFTP is not set
-CONFIG_NF_CT_ACCT=y
-# CONFIG_NF_CT_NETLINK is not set
-# CONFIG_NF_CT_PROTO_GRE is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT is not set
-CONFIG_NF_NAT_NEEDED=y
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_PROTO_GRE is not set
-# CONFIG_NF_NAT_RTSP is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NFS_ACL_SUPPORT is not set
-CONFIG_NFS_COMMON=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_NFSD_V2_ACL is not set
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFS_FS is not set
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFTL is not set
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_NORTEL_HERMES is not set
-# CONFIG_NOZOMI is not set
-# CONFIG_NS83820 is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_NVRAM is not set
-# CONFIG_OCF_BENCH is not set
-# CONFIG_OCF_EP80579 is not set
-# CONFIG_OCF_HIFNHIPP is not set
-# CONFIG_OCF_HIFN is not set
-# CONFIG_OCF_IXP4XX is not set
-# CONFIG_OCF_OCF is not set
-# CONFIG_OCF_OCFNULL is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_OCF_SAFE is not set
-# CONFIG_OCF_TALITOS is not set
-# CONFIG_OSF_PARTITION is not set
-CONFIG_PACKET_MMAP=y
-CONFIG_PACKET=y
-# CONFIG_PAGE_SIZE_16KB is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_64KB is not set
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PARPORT is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CS5535 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_ISAPNP is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_PCMCIA is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_PATA_QDI is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
-# CONFIG_PC300TOO is not set
-# CONFIG_PCCARD is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_PCI is not set
-# CONFIG_PCI_ATMEL is not set
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_LEGACY is not set
-# CONFIG_PCI_MSI is not set
-CONFIG_PCI_SYSCALL=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_DEBUG is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_PCMCIA_IOCTL is not set
-# CONFIG_PCMCIA is not set
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_PCNET32 is not set
-# CONFIG_PCSPKR_PLATFORM is not set
-# CONFIG_PD6729 is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_PHONE is not set
-# CONFIG_PHYLIB is not set
-# CONFIG_PID_NS is not set
-CONFIG_PLIST=y
-# CONFIG_PLX_HERMES is not set
-# CONFIG_PM is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_DEFLATE is not set
-CONFIG_PPP_FILTER=y
-# CONFIG_PPP is not set
-# CONFIG_PPP_MPPE is not set
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPPOATM is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_PRINTK=y
-# CONFIG_PRISM54 is not set
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROFILING is not set
-# CONFIG_QEMU is not set
-# CONFIG_QLA3XXX is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_QUOTA is not set
-# CONFIG_R3964 is not set
-# CONFIG_R8169 is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_RAID_ATTRS is not set
-CONFIG_RAMFS=y
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_RELAY is not set
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_RFKILL is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_ROSE is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_RTC_CLASS is not set
-# CONFIG_RTC_DEBUG is not set
-CONFIG_RTC_DRV_CMOS=y
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_PCF50606 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_HCTOSYS=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-CONFIG_RTC_INTF_DEV=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTL8187 is not set
-CONFIG_RT_MUTEXES=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_S2IO is not set
-# CONFIG_SAMPLES is not set
-# CONFIG_SATA_AHCI is not set
-# CONFIG_SATA_INIC162X is not set
-# CONFIG_SATA_MV is not set
-# CONFIG_SATA_NV is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_SIL24 is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_SVW is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SC92031 is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DEBUG is not set
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_ESP_CORE is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_LOGGING is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_LPFC is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_MVSAS is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_PAS16 is not set
-CONFIG_SCSI_PROC_FS=y
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_SRP is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-CONFIG_SCSI_WAIT_SCAN=m
-# CONFIG_SECCOMP is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_SECURITY is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_CORETEMP is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_M41T00 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-CONFIG_SERIAL_8250_NR_UARTS=2
-# CONFIG_SERIAL_8250_PCI is not set
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_SERIAL_UARTLITE is not set
-# CONFIG_SERIO is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SHAPER is not set
-CONFIG_SHMEM=y
-CONFIG_SIGNALFD=y
-# CONFIG_SIS190 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-CONFIG_SLAB=y
-# CONFIG_SLHC is not set
-# CONFIG_SLIP is not set
-# CONFIG_SLOB is not set
-# CONFIG_SLUB is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_SMP is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_DEBUG is not set
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_HIFIER is not set
-# CONFIG_SND_HWDEP is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB is not set
-# CONFIG_SND is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_MIRO is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MPU401 is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_OPL3SA2 is not set
-# CONFIG_SND_OPTI92X_AD1848 is not set
-# CONFIG_SND_OPTI92X_CS4231 is not set
-# CONFIG_SND_OPTI93X is not set
-CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_OXYGEN is not set
-# CONFIG_SND_PCM is not set
-# CONFIG_SND_PCM_OSS is not set
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_PDAUDIOCF is not set
-# CONFIG_SND_RAWMIDI is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RTCTIMER is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_TIMER is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-# CONFIG_SND_USB_USX2Y is not set
-# CONFIG_SND_VERBOSE_PRINTK is not set
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VIRTUOSO is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_WAVEFRONT is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_SOUND is not set
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_STATIC is not set
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_DEBUG is not set
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_SPI_TLE62X0 is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-# CONFIG_SQUASHFS_VMALLOC is not set
-CONFIG_SQUASHFS=y
-# CONFIG_SSB_DEBUG is not set
-# CONFIG_SSB_DRIVER_MIPS is not set
-# CONFIG_SSB is not set
-# CONFIG_SSB_PCMCIAHOST is not set
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB_SILENT is not set
-# CONFIG_SSFDC is not set
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_STANDALONE=y
-# CONFIG_STRIP is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_SUNRPC_GSS is not set
-# CONFIG_SUNRPC is not set
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SWAP=y
-# CONFIG_SYNCLINK_CS is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_SYSCTL=y
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-CONFIG_SYSFS=y
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_SYSV_FS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_SYSVIPC=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_TCG_TPM is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_CUBIC is not set
-# CONFIG_TCP_CONG_HSTCP is not set
-# CONFIG_TCP_CONG_HTCP is not set
-# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
-# CONFIG_TCP_CONG_LP is not set
-# CONFIG_TCP_CONG_SCALABLE is not set
-# CONFIG_TCP_CONG_VEGAS is not set
-# CONFIG_TCP_CONG_VENO is not set
-CONFIG_TCP_CONG_WESTWOOD=y
-# CONFIG_TCP_CONG_YEAH is not set
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_TEXTSEARCH_BM is not set
-# CONFIG_TEXTSEARCH_FSM is not set
-# CONFIG_TEXTSEARCH_KMP is not set
-CONFIG_TEXTSEARCH=y
-# CONFIG_THERMAL is not set
-CONFIG_TICK_ONESHOT=y
-# CONFIG_TIFM_CORE is not set
-# CONFIG_TIGON3 is not set
-CONFIG_TIMERFD=y
-# CONFIG_TINY_SHMEM is not set
-# CONFIG_TIPC is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-# CONFIG_TMPFS_POSIX_ACL is not set
-CONFIG_TMPFS=y
-# CONFIG_TPS65010 is not set
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_TR is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-# CONFIG_TUN is not set
-# CONFIG_UDF_FS is not set
-CONFIG_UDF_NLS=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_UFS_FS is not set
-# CONFIG_UIO is not set
-# CONFIG_ULTRIX_PARTITION is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_UNIXWARE_DISKLABEL is not set
-CONFIG_UNIX=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_APPLETOUCH is not set
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATM is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BANDWIDTH is not set
-CONFIG_USB_BELKIN=y
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CXACRU is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_DEVICE_CLASS is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_EZUSB=y
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HID is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_KC2190 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LIBUSUAL is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_NET_AX8817X is not set
-# CONFIG_USB_NET_CDCETHER is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-# CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_OHCI_HCD_SSB is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-# CONFIG_USB_STKWEBCAM is not set
-CONFIG_USB_STORAGE_ALAUDA=y
-CONFIG_USB_STORAGE_DATAFAB=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_FREECOM=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_KARMA=y
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-CONFIG_USB_STORAGE_USBAT=y
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_UEAGLEATM is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_VICAM is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_XUSBATM is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_VETH is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_VIDEO_ADV7170 is not set
-# CONFIG_VIDEO_ADV7175 is not set
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_BT819 is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BT856 is not set
-# CONFIG_VIDEO_BT866 is not set
-# CONFIG_VIDEO_CAFE_CCIC is not set
-# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_CX2341X is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_CX88 is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_VIDEO_DPC is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-# CONFIG_VIDEO_HEXIUM_ORION is not set
-# CONFIG_VIDEO_IVTV is not set
-# CONFIG_VIDEO_KS0127 is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_MXB is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_VIDEO_OV7670 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA7111 is not set
-# CONFIG_VIDEO_SAA7114 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_SAA7134 is not set
-# CONFIG_VIDEO_SAA7185 is not set
-# CONFIG_VIDEO_SAA7191 is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_TDA7432 is not set
-# CONFIG_VIDEO_TDA9840 is not set
-# CONFIG_VIDEO_TDA9875 is not set
-# CONFIG_VIDEO_TEA6415C is not set
-# CONFIG_VIDEO_TEA6420 is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_TVAUDIO is not set
-# CONFIG_VIDEO_TVP5150 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_V4L1_COMPAT=y
-# CONFIG_VIDEO_V4L1 is not set
-CONFIG_VIDEO_V4L2=y
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_VP27SMPX is not set
-# CONFIG_VIDEO_VPX3220 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_ZORAN is not set
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_VITESSE_PHY is not set
-CONFIG_VLAN_8021Q=y
-# CONFIG_VM_EVENT_COUNTERS is not set
-# CONFIG_VT is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_W1 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_GPIO is not set
-# CONFIG_W1_MASTER_MATROX is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W83627HF_WDT is not set
-# CONFIG_W83697HF_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_W83977F_WDT is not set
-# CONFIG_WAN is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WDTPCI is not set
-CONFIG_WIRELESS_EXT=y
-CONFIG_WLAN_80211=y
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WR_PPMC is not set
-# CONFIG_X25 is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_USER is not set
-CONFIG_XFRM=y
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_SECURITY is not set
-# CONFIG_YAFFS_FS is not set
-# CONFIG_YAM is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_YENTA is not set
-# CONFIG_YENTA_O2 is not set
-# CONFIG_YENTA_RICOH is not set
-# CONFIG_YENTA_TI is not set
-# CONFIG_YENTA_TOSHIBA is not set
-# CONFIG_ZD1211RW_DEBUG is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_ZISOFS_FS is not set
-CONFIG_ZISOFS=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ZONE_DMA=y
diff --git a/target/linux/generic-2.6/config-2.6.31 b/target/linux/generic-2.6/config-2.6.31
deleted file mode 100644 (file)
index 585f2a5..0000000
+++ /dev/null
@@ -1,2711 +0,0 @@
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_9P_FS is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_ACENIC is not set
-# CONFIG_ACER_WMI is not set
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADM6996_PHY is not set
-# CONFIG_ADM8211 is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_AF_RXRPC is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_AGP is not set
-CONFIG_AIO=y
-# CONFIG_AIRO_CS is not set
-# CONFIG_AIRO is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_ALTERA_PCIE_CHDMA is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ANDROID is not set
-CONFIG_ANON_INODES=y
-# CONFIG_APPLICOM is not set
-# CONFIG_AR8216_PHY is not set
-# CONFIG_AR9170_USB is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCNET is not set
-# CONFIG_ARM_UNWIND is not set
-CONFIG_ARPD=y
-# CONFIG_ARTHUR is not set
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_ASUS_OLED is not set
-# CONFIG_ASYNC_TX_DMA is not set
-# CONFIG_AT24 is not set
-# CONFIG_AT76C50X_USB is not set
-# CONFIG_ATA_ACPI is not set
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_ATA is not set
-# CONFIG_ATALK is not set
-# CONFIG_ATA_NONSTANDARD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ATA_PIIX is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_ATA_SFF=y
-# CONFIG_ATH5K is not set
-# CONFIG_ATH9K is not set
-# CONFIG_ATL1C is not set
-# CONFIG_ATL1E is not set
-# CONFIG_ATL1 is not set
-# CONFIG_ATL2 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-CONFIG_ATM_BR2684_IPFILTER=y
-# CONFIG_ATM_BR2684 is not set
-# CONFIG_ATM_CLIP is not set
-CONFIG_ATM_CLIP_NO_ICMP=y
-# CONFIG_ATM_DRIVERS is not set
-# CONFIG_ATM_DUMMY is not set
-# CONFIG_ATMEL is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_FORE200E is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_LANE is not set
-# CONFIG_ATM_MPOA is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_SOLOS is not set
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_AUDIT is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_AX25_DAMA_SLAVE is not set
-# CONFIG_AX25 is not set
-# CONFIG_AX88796 is not set
-# CONFIG_B3DFG is not set
-# CONFIG_B43 is not set
-# CONFIG_B43LEGACY is not set
-# CONFIG_B44 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-CONFIG_BASE_FULL=y
-CONFIG_BASE_SMALL=0
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_BATTERY_BQ27000_HDQ is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-CONFIG_BCM43XX_DEBUG=y
-CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
-# CONFIG_BCM43XX_DMA_MODE is not set
-CONFIG_BCM43XX_DMA=y
-# CONFIG_BCM43XX is not set
-# CONFIG_BCM43XX_PIO_MODE is not set
-CONFIG_BCM43XX_PIO=y
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_BINARY_PRINTF is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_BLINK is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_BLK_DEV_CS5536 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_BLK_DEV_HD_ONLY is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_IDEACPI is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_INTEGRITY is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_BLK_DEV_IT8172 is not set
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_XIP is not set
-CONFIG_BLK_DEV=y
-CONFIG_BLOCK=y
-# CONFIG_BNX2 is not set
-# CONFIG_BONDING is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_BPQETHER is not set
-# CONFIG_BRIDGE_EBT_802_3 is not set
-# CONFIG_BRIDGE_EBT_AMONG is not set
-# CONFIG_BRIDGE_EBT_ARP is not set
-# CONFIG_BRIDGE_EBT_ARPREPLY is not set
-# CONFIG_BRIDGE_EBT_BROUTE is not set
-# CONFIG_BRIDGE_EBT_DNAT is not set
-# CONFIG_BRIDGE_EBT_IP6 is not set
-# CONFIG_BRIDGE_EBT_IP is not set
-# CONFIG_BRIDGE_EBT_LIMIT is not set
-# CONFIG_BRIDGE_EBT_LOG is not set
-# CONFIG_BRIDGE_EBT_MARK is not set
-# CONFIG_BRIDGE_EBT_MARK_T is not set
-# CONFIG_BRIDGE_EBT_NFLOG is not set
-# CONFIG_BRIDGE_EBT_PKTTYPE is not set
-# CONFIG_BRIDGE_EBT_REDIRECT is not set
-# CONFIG_BRIDGE_EBT_SNAT is not set
-# CONFIG_BRIDGE_EBT_STP is not set
-# CONFIG_BRIDGE_EBT_T_FILTER is not set
-# CONFIG_BRIDGE_EBT_T_NAT is not set
-# CONFIG_BRIDGE_EBT_ULOG is not set
-# CONFIG_BRIDGE_EBT_VLAN is not set
-# CONFIG_BRIDGE_NETFILTER is not set
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-CONFIG_BRIDGE=y
-# CONFIG_BROADCOM_PHY is not set
-CONFIG_BROKEN_ON_SMP=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_CMTP is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBTSDIO is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIBTUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_BT_HIDP is not set
-# CONFIG_BT is not set
-# CONFIG_BT_L2CAP is not set
-# CONFIG_BT_RFCOMM is not set
-CONFIG_BT_RFCOMM_TTY=y
-# CONFIG_BTRFS_FS is not set
-# CONFIG_BT_SCO is not set
-CONFIG_BUG=y
-# CONFIG_C2PORT is not set
-# CONFIG_CAN is not set
-# CONFIG_CAPI_AVM is not set
-# CONFIG_CAPI_EICON is not set
-# CONFIG_CAPI_TRACE is not set
-CONFIG_CARDBUS=y
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_CASSINI is not set
-# CONFIG_CB710_CORE is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_CFG80211 is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_CIFS is not set
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_STATS2 is not set
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-CONFIG_CLASSIC_RCU=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_CLS_U32_PERF=y
-CONFIG_CMDLINE=""
-# CONFIG_CNIC is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_COMEDI is not set
-# CONFIG_COMPAT_BRK is not set
-CONFIG_COMPAT_NET_DEV_OPS=y
-# CONFIG_CONFIGFS_FS is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_CONSTRUCTORS=y
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_COPS is not set
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_CRASH_DUMP is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC_ITU_T is not set
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CROSSCOMPILE=y
-# CONFIG_CRYPTO_AEAD is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_AES is not set
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_ALGAPI=y
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_BLKCIPHER is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRC32C_INTEL is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_FIPS is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_HASH is not set
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_MANAGER is not set
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_PCBC is not set
-CONFIG_CRYPTO_PCOMP=y
-# CONFIG_CRYPTO_PRNG is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_RNG is not set
-# CONFIG_CRYPTO_SALSA20_586 is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SEQIV is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_TWOFISH_COMMON is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-CONFIG_CRYPTO_UNLZMA=y
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ZLIB=y
-# CONFIG_CUSE is not set
-# CONFIG_DAB is not set
-# CONFIG_DAVICOM_PHY is not set
-# CONFIG_DCB is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-# CONFIG_DECNET is not set
-CONFIG_DECOMPRESS_LZMA_NEEDED=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_BIC is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_CUBIC is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_HTCP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-# CONFIG_DEFAULT_NOOP is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="westwood"
-# CONFIG_DEFAULT_VEGAS is not set
-CONFIG_DEFAULT_WESTWOOD=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-# CONFIG_DEVKMEM is not set
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_DGRS is not set
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_DL2K is not set
-# CONFIG_DLM is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_DMA_ENGINE is not set
-# CONFIG_DMASCC is not set
-# CONFIG_DMATEST is not set
-# CONFIG_DNET is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_DRAGONRISE_FF is not set
-# CONFIG_DRM is not set
-# CONFIG_DS1682 is not set
-# CONFIG_DST is not set
-# CONFIG_DTLK is not set
-# CONFIG_DUMMY is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DVB is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_E1000E is not set
-# CONFIG_E1000 is not set
-# CONFIG_E100 is not set
-# CONFIG_ECHO is not set
-# CONFIG_ECONET is not set
-# CONFIG_EDAC is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_ELF_CORE is not set
-CONFIG_EMBEDDED=y
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# CONFIG_ENC28J60 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_EPIC100 is not set
-CONFIG_EPOLL=y
-# CONFIG_EQUALIZER is not set
-# CONFIG_ET131X is not set
-# CONFIG_ETHOC is not set
-CONFIG_EVENTFD=y
-# CONFIG_EVENT_TRACER is not set
-CONFIG_EXPERIMENTAL=y
-# CONFIG_EXPORTFS is not set
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_EXT4_FS is not set
-CONFIG_EXTRA_FIRMWARE=""
-CONFIG_EXTRA_TARGETS=""
-# CONFIG_EZX_PCAP is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_FAT_FS is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ARK is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_FB_CARMINE is not set
-# CONFIG_FB_CFB_COPYAREA is not set
-# CONFIG_FB_CFB_FILLRECT is not set
-# CONFIG_FB_CFB_IMAGEBLIT is not set
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_EARLYSUSPEND is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_GOLDFISH is not set
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_IBM_GXT4500 is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_N411 is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_OF is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_PS3 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_VIA is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_VT8623 is not set
-# CONFIG_FCOE_FNIC is not set
-# CONFIG_FCOE is not set
-# CONFIG_FDDI is not set
-# CONFIG_FEALNX is not set
-CONFIG_FIB_RULES=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_FIREWIRE is not set
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-# CONFIG_FIXED_PHY is not set
-CONFIG_FLATMEM_MANUAL=y
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_FORCEDETH is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-# CONFIG_FREEZER is not set
-# CONFIG_FSCACHE is not set
-CONFIG_FSNOTIFY=y
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_FTL is not set
-# CONFIG_FTRACE is not set
-# CONFIG_FTRACE_STARTUP_TEST is not set
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_FUSE_FS is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SAS is not set
-# CONFIG_FUSION_SPI is not set
-CONFIG_FUTEX=y
-CONFIG_FW_LOADER=y
-CONFIG_GACT_PROB=y
-# CONFIG_GAMEPORT is not set
-# CONFIG_GCOV_KERNEL is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GIGASET_DEBUG is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_GPIO_BT8XX is not set
-# CONFIG_GPIO_DEVICE is not set
-# CONFIG_GPIOLIB is not set
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_SYSFS is not set
-# CONFIG_GPIO_XILINX is not set
-# CONFIG_GREENASIA_FF is not set
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_HAMACHI is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HAVE_AOUT is not set
-CONFIG_HAVE_MLOCKED_PAGE_BIT=y
-CONFIG_HAVE_MLOCK=y
-# CONFIG_HCALL_STATS is not set
-# CONFIG_HDLC_CISCO is not set
-# CONFIG_HDLC_FR is not set
-# CONFIG_HDLC is not set
-# CONFIG_HDLC_PPP is not set
-# CONFIG_HDLC_RAW_ETH is not set
-# CONFIG_HDLC_RAW is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_HECI is not set
-# CONFIG_HERMES is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_HID_A4TECH is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_BRIGHT is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_COMPAT is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HID_DELL is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_FF is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PID is not set
-# CONFIG_HIDRAW is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_HID_THRUSTMASTER is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_WACOM is not set
-# CONFIG_HID_ZEROPLUS is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_HIGH_RES_TIMERS=y
-# CONFIG_HIPPI is not set
-# CONFIG_HOSTAP_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_PCI is not set
-# CONFIG_HOSTAP_PLX is not set
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_HOTPLUG_PCI is not set
-CONFIG_HOTPLUG=y
-# CONFIG_HP100 is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_HP_ILO is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_HVC_UDBG is not set
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_HW_RANDOM_AMD is not set
-# CONFIG_HW_RANDOM_GEODE is not set
-# CONFIG_HW_RANDOM_INTEL is not set
-# CONFIG_HW_RANDOM_TIMERIOMEM is not set
-# CONFIG_HW_RANDOM_VIA is not set
-# CONFIG_HYSDN is not set
-CONFIG_HZ=100
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ_100=y
-# CONFIG_HZ_1024 is not set
-# CONFIG_HZ_128 is not set
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_48 is not set
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCA is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_CHARDEV is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_HELPER_AUTO is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_IBM_IIC is not set
-# CONFIG_I2C_ISCH is not set
-# CONFIG_I2C is not set
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2O is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_IBM_ASM is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_IDE_GD is not set
-# CONFIG_IDE is not set
-CONFIG_IDE_MAX_HWIFS=4
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_IDE_PHISON is not set
-CONFIG_IDE_PROC_FS=y
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IEEE1394_DV1394 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_IEEE1394_OHCI1394 is not set
-# CONFIG_IEEE1394_PCILYNX is not set
-# CONFIG_IEEE1394_RAWIO is not set
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_CRYPT_WEP is not set
-# CONFIG_IEEE80211_DEBUG is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_IFB is not set
-# CONFIG_IGB is not set
-# CONFIG_IGBVF is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_IKCONFIG_PROC is not set
-# CONFIG_IMAGE_CMDLINE_HACK is not set
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-# CONFIG_IMQ_BEHAVIOR_AB is not set
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-# CONFIG_IMQ is not set
-CONFIG_IMQ_NUM_DEVS=2
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_INET6_XFRM_MODE_BEET is not set
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_TCP_DIAG is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET=y
-# CONFIG_INFINIBAND is not set
-# CONFIG_INFTL is not set
-CONFIG_INIT_ENV_ARG_LIMIT=32
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
-CONFIG_INITRAMFS_COMPRESSION_NONE=y
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_INPUT_APANEL is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATLAS_BTNS is not set
-# CONFIG_INPUT_CM109 is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_MIMIO is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_PCSPKR is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_WISTRON_BTNS is not set
-# CONFIG_INSTRUMENTATION is not set
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IP1000 is not set
-# CONFIG_IP175C_PHY is not set
-# CONFIG_IP6_NF_FILTER is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP6_NF_MANGLE is not set
-# CONFIG_IP6_NF_MATCH_AH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_LIMIT is not set
-# CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_RAW is not set
-# CONFIG_IP6_NF_TARGET_HL is not set
-# CONFIG_IP6_NF_TARGET_IMQ is not set
-# CONFIG_IP6_NF_TARGET_LOG is not set
-# CONFIG_IP6_NF_TARGET_REJECT is not set
-# CONFIG_IP6_NF_TARGET_ROUTE is not set
-CONFIG_IP_ADVANCED_ROUTER=y
-# CONFIG_IPC_NS is not set
-# CONFIG_IP_DCCP is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_ARPFILTER is not set
-# CONFIG_IP_NF_ARP_MANGLE is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_CT_ACCT=y
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FILTER is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
-# CONFIG_IP_NF_MATCH_IPP2P is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_SET is not set
-# CONFIG_IP_NF_MATCH_TIME is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_NAT_AMANDA is not set
-# CONFIG_IP_NF_NAT_FTP is not set
-# CONFIG_IP_NF_NAT_H323 is not set
-# CONFIG_IP_NF_NAT_IRC is not set
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_NAT_PPTP is not set
-# CONFIG_IP_NF_NAT_SIP is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-# CONFIG_IP_NF_NAT_TFTP is not set
-CONFIG_IP_NF_NAT=y
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_SECURITY is not set
-CONFIG_IP_NF_SET_HASHSIZE=1024
-# CONFIG_IP_NF_SET_IPHASH is not set
-# CONFIG_IP_NF_SET_IPMAP is not set
-# CONFIG_IP_NF_SET_IPPORTHASH is not set
-# CONFIG_IP_NF_SET_IPTREE is not set
-# CONFIG_IP_NF_SET_IPTREEMAP is not set
-# CONFIG_IP_NF_SET is not set
-# CONFIG_IP_NF_SET_MACIPMAP is not set
-CONFIG_IP_NF_SET_MAX=256
-# CONFIG_IP_NF_SET_NETHASH is not set
-# CONFIG_IP_NF_SET_PORTMAP is not set
-# CONFIG_IP_NF_SIP is not set
-# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_IMQ is not set
-# CONFIG_IP_NF_TARGET_LOG is not set
-# CONFIG_IP_NF_TARGET_MASQUERADE is not set
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_ROUTE is not set
-# CONFIG_IP_NF_TARGET_SAME is not set
-# CONFIG_IP_NF_TARGET_SET is not set
-# CONFIG_IP_NF_TARGET_TOS is not set
-# CONFIG_IP_NF_TARGET_TTL is not set
-# CONFIG_IP_NF_TARGET_ULOG is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_IP_PNP is not set
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
-# CONFIG_IP_ROUTE_MULTIPATH_DRR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RANDOM is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_WRANDOM is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_SCTP is not set
-CONFIG_IPSEC_NAT_TRAVERSAL=y
-# CONFIG_IPV6 is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTE_INFO is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_SIT is not set
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPW2100_DEBUG is not set
-# CONFIG_IPW2100 is not set
-CONFIG_IPW2100_MONITOR=y
-# CONFIG_IPW2200_DEBUG is not set
-# CONFIG_IPW2200 is not set
-CONFIG_IPW2200_MONITOR=y
-# CONFIG_IPW2200_PROMISCUOUS is not set
-# CONFIG_IPW2200_QOS is not set
-# CONFIG_IPW2200_RADIOTAP is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_IPX is not set
-# CONFIG_IRDA is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_ISCSI_TCP is not set
-CONFIG_ISDN=y
-# CONFIG_ISDN_AUDIO is not set
-# CONFIG_ISDN_CAPI_CAPIDRV is not set
-# CONFIG_ISDN_DIVERSION is not set
-# CONFIG_ISDN_DRV_ACT2000 is not set
-# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
-# CONFIG_ISDN_DRV_EICON is not set
-# CONFIG_ISDN_DRV_HISAX is not set
-# CONFIG_ISDN_DRV_ICN is not set
-# CONFIG_ISDN_DRV_LOOP is not set
-# CONFIG_ISDN_DRV_PCBIT is not set
-# CONFIG_ISDN_DRV_SC is not set
-# CONFIG_ISDN_DRV_TPAM is not set
-# CONFIG_ISDN_WITH_ABC is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_ISO9660_FS is not set
-# CONFIG_IWL3945 is not set
-# CONFIG_IWLAGN is not set
-# CONFIG_IWLCORE is not set
-# CONFIG_IWLWIFI is not set
-# CONFIG_IWLWIFI_LEDS is not set
-# CONFIG_IXGB is not set
-# CONFIG_JBD2_DEBUG is not set
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_JBD is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_FS=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_JME is not set
-CONFIG_JOLIET=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_KALLSYMS is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_KERNEL_BZIP2 is not set
-# CONFIG_KERNEL_GZIP is not set
-CONFIG_KERNEL_LZMA=y
-# CONFIG_KERNEL_LZO is not set
-# CONFIG_KEXEC is not set
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYS is not set
-# CONFIG_KMEMTRACE is not set
-CONFIG_KMOD=y
-# CONFIG_KPROBES is not set
-# CONFIG_KS8842 is not set
-# CONFIG_KS8851 is not set
-# CONFIG_LANMEDIA is not set
-# CONFIG_LAPB is not set
-# CONFIG_LASAT is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_LBDAF=y
-# CONFIG_LCD_LTV350QV is not set
-# CONFIG_LCD_TDO24M is not set
-# CONFIG_LCD_VGG2432A4 is not set
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_LEDS_ALIX is not set
-# CONFIG_LEDS_BD2802 is not set
-CONFIG_LEDS_CLASS=y
-# CONFIG_LEDS_DAC124S085 is not set
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_LP5521 is not set
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_MORSE is not set
-CONFIG_LEDS_TRIGGER_NETDEV=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_LIB80211_CRYPT_CCMP is not set
-# CONFIG_LIB80211_CRYPT_TKIP is not set
-# CONFIG_LIB80211_CRYPT_WEP is not set
-# CONFIG_LIB80211_DEBUG is not set
-# CONFIG_LIB80211 is not set
-# CONFIG_LIBCRC32C is not set
-# CONFIG_LIBERTAS is not set
-# CONFIG_LIBERTAS_THINFIRM is not set
-# CONFIG_LIBERTAS_USB is not set
-# CONFIG_LIBFC is not set
-# CONFIG_LIBFCOE is not set
-# CONFIG_LIBIPW_DEBUG is not set
-# CONFIG_LINE6_USB is not set
-# CONFIG_LLC2 is not set
-CONFIG_LLC=y
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_LOCKDEP_SUPPORT=y
-# CONFIG_LOCKD is not set
-CONFIG_LOCKD_V4=y
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_LOGIRUMBLEPAD2_FF is not set
-# CONFIG_LOGITECH_FF is not set
-# CONFIG_LOGO is not set
-# CONFIG_LSF is not set
-# CONFIG_LSI_ET1011C_PHY is not set
-# CONFIG_LTPC is not set
-# CONFIG_LXT_PHY is not set
-CONFIG_MAC80211_DEFAULT_PS_VALUE=1
-CONFIG_MAC80211_DEFAULT_PS=y
-# CONFIG_MAC80211 is not set
-# CONFIG_MAC_EMUMOUSEBTN is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_MARKEINS is not set
-# CONFIG_MARKERS is not set
-# CONFIG_MARVELL_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-# CONFIG_MD is not set
-# CONFIG_ME4000 is not set
-# CONFIG_MEDIA_ATTACH is not set
-# CONFIG_MEDIA_SUPPORT is not set
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_MEILHAUS is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MG_DISK is not set
-# CONFIG_MIGRATION is not set
-CONFIG_MII=y
-CONFIG_MINI_FO=y
-# CONFIG_MINIX_FS is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_MIPS_FPU_EMU is not set
-CONFIG_MISC_DEVICES=y
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_MISDN_HFCPCI is not set
-# CONFIG_MISDN_HFCUSB is not set
-# CONFIG_MISDN is not set
-# CONFIG_MKISS is not set
-# CONFIG_MMC_ARMMMCI is not set
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_MMC_BLOCK is not set
-# CONFIG_MMC_CB710 is not set
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC is not set
-# CONFIG_MMC_S3C is not set
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_SDRICOH_CS is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_TEST is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-# CONFIG_MMC_VIA_SDMMC is not set
-CONFIG_MMU=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_SYNAPTICS_I2C is not set
-# CONFIG_MSDOS_FS is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_AR7_PARTS is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_BLKDEVS=y
-# CONFIG_MTD_BLOCK2MTD is not set
-CONFIG_MTD_BLOCK=y
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP 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_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CHAR=y
-# CONFIG_MTD_CMDLINE_PARTS is not set
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_INTEL_VR_NOR is not set
-# CONFIG_MTD_JEDECPROBE is not set
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_MYLOADER_PARTS is not set
-# CONFIG_MTD_NAND_CAFE is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_ONENAND is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PLATRAM is not set
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_ROM is not set
-CONFIG_MTD_ROOTFS_ROOT_DEV=y
-CONFIG_MTD_ROOTFS_SPLIT=y
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_UBI is not set
-CONFIG_MTD=y
-# CONFIG_MVSWITCH_PHY is not set
-# CONFIG_MWAVE is not set
-# CONFIG_MWL8K is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NAMESPACES is not set
-# CONFIG_NATIONAL_PHY is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NEC_MARKEINS is not set
-# CONFIG_NET_9P is not set
-# CONFIG_NET_ACT_GACT is not set
-# CONFIG_NET_ACT_IPT is not set
-# CONFIG_NET_ACT_MIRRED is not set
-# CONFIG_NET_ACT_NAT is not set
-# CONFIG_NET_ACT_PEDIT is not set
-# CONFIG_NET_ACT_POLICE is not set
-# CONFIG_NET_ACT_SIMP is not set
-CONFIG_NET_ACT_SKBEDIT=y
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_CLS_BASIC=y
-# CONFIG_NET_CLS_FLOW is not set
-# CONFIG_NET_CLS_FW is not set
-CONFIG_NET_CLS_IND=y
-# CONFIG_NET_CLS_ROUTE4 is not set
-# CONFIG_NET_CLS_RSVP6 is not set
-# CONFIG_NET_CLS_RSVP is not set
-# CONFIG_NET_CLS_TCINDEX is not set
-# CONFIG_NET_CLS_U32 is not set
-CONFIG_NET_CLS=y
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETDEBUG is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEVICES_MULTIQUEUE=y
-CONFIG_NETDEVICES=y
-# CONFIG_NET_DROP_MONITOR is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_NET_EMATCH_CMP is not set
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_EMATCH_META is not set
-# CONFIG_NET_EMATCH_NBYTE is not set
-CONFIG_NET_EMATCH_STACK=32
-# CONFIG_NET_EMATCH_TEXT is not set
-# CONFIG_NET_EMATCH_U32 is not set
-CONFIG_NET_ESTIMATOR=y
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_FC is not set
-CONFIG_NETFILTER_ADVANCED=y
-# CONFIG_NETFILTER_DEBUG is not set
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_TPROXY is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_HL is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7 is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OSF is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_HL is not set
-# CONFIG_NETFILTER_XT_TARGET_IMQ is not set
-# CONFIG_NETFILTER_XT_TARGET_LED is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER=y
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_NET_IPGRE is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_KEY is not set
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_NETPOLL is not set
-CONFIG_NET_RADIO=y
-# CONFIG_NETROM is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_NET_SCH_ATM is not set
-# CONFIG_NET_SCH_CBQ is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_DRR is not set
-# CONFIG_NET_SCH_DSMARK is not set
-CONFIG_NET_SCHED=y
-# CONFIG_NET_SCH_ESFQ is not set
-CONFIG_NET_SCH_ESFQ_NFCT=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_NET_SCH_GRED is not set
-# CONFIG_NET_SCH_HFSC is not set
-# CONFIG_NET_SCH_HTB is not set
-# CONFIG_NET_SCH_INGRESS is not set
-# CONFIG_NET_SCH_MULTIQ is not set
-# CONFIG_NET_SCH_NETEM is not set
-# CONFIG_NET_SCH_PRIO is not set
-# CONFIG_NET_SCH_RED is not set
-# CONFIG_NET_SCH_RR is not set
-# CONFIG_NET_SCH_SFQ is not set
-# CONFIG_NET_SCH_TBF is not set
-# CONFIG_NET_SCH_TEQL is not set
-# CONFIG_NET_TULIP is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_WIRELESS_RTNETLINK=y
-CONFIG_NET_WIRELESS=y
-CONFIG_NETWORK_FILESYSTEMS=y
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETXEN_NIC is not set
-CONFIG_NET=y
-# CONFIG_NEW_GPIO is not set
-CONFIG_NEW_LEDS=y
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-CONFIG_NF_CONNTRACK_ENABLED=y
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IPV4 is not set
-# CONFIG_NF_CONNTRACK_IPV6 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_NF_CONNTRACK_RTSP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-CONFIG_NF_CONNTRACK_SUPPORT=y
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_ACCT is not set
-# CONFIG_NF_CT_NETLINK is not set
-# CONFIG_NF_CT_PROTO_DCCP is not set
-# CONFIG_NF_CT_PROTO_GRE is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_DEFRAG_IPV4 is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT is not set
-CONFIG_NF_NAT_NEEDED=y
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_PROTO_GRE is not set
-# CONFIG_NF_NAT_RTSP is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NFS_ACL_SUPPORT is not set
-CONFIG_NFS_COMMON=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_NFSD_V2_ACL is not set
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFS_FS is not set
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4_1 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFTL is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_NL80211=y
-CONFIG_NLATTR=y
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_NOP_USB_XCEIV is not set
-# CONFIG_NORTEL_HERMES is not set
-# CONFIG_NOZOMI is not set
-# CONFIG_NS83820 is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_NVRAM is not set
-# CONFIG_OCF_BENCH is not set
-# CONFIG_OCF_EP80579 is not set
-# CONFIG_OCF_HIFNHIPP is not set
-# CONFIG_OCF_HIFN is not set
-# CONFIG_OCF_IXP4XX is not set
-# CONFIG_OCF_OCF is not set
-# CONFIG_OCF_OCFNULL is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_OCF_SAFE is not set
-# CONFIG_OCF_TALITOS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_OPROFILE is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_P54_COMMON is not set
-CONFIG_PACKET_MMAP=y
-CONFIG_PACKET=y
-# CONFIG_PAGE_SIZE_16KB is not set
-# CONFIG_PAGE_SIZE_32KB is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_64KB is not set
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PANTHERLORD_FF is not set
-# CONFIG_PARPORT is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CS5535 is not set
-# CONFIG_PATA_CS5536 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_ISAPNP is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_PCMCIA is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_PATA_QDI is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SCH is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
-# CONFIG_PC300TOO is not set
-# CONFIG_PCCARD is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_PCI is not set
-# CONFIG_PCI200SYN is not set
-# CONFIG_PCI_ATMEL is not set
-# CONFIG_PCI_DISABLE_COMMON_QUIRKS is not set
-# CONFIG_PCIEASPM is not set
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_IOV is not set
-# CONFIG_PCI_LEGACY is not set
-# CONFIG_PCI_MSI is not set
-# CONFIG_PCIPCWATCHDOG is not set
-CONFIG_PCI_QUIRKS=y
-# CONFIG_PCI_STUB is not set
-CONFIG_PCI_SYSCALL=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_DEBUG is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_PCMCIA_IOCTL is not set
-# CONFIG_PCMCIA is not set
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_PCNET32 is not set
-# CONFIG_PCSPKR_PLATFORM is not set
-# CONFIG_PD6729 is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_PHONE is not set
-# CONFIG_PHONET is not set
-# CONFIG_PHYLIB is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-# CONFIG_PID_NS is not set
-# CONFIG_PLAN9AUTH is not set
-CONFIG_PLIST=y
-# CONFIG_PLX_HERMES is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PM is not set
-# CONFIG_POHMELFS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_PPC_16K_PAGES is not set
-# CONFIG_PPC_256K_PAGES is not set
-CONFIG_PPC_4K_PAGES=y
-CONFIG_PPC4xx_GPIO=y
-# CONFIG_PPC_64K_PAGES is not set
-# CONFIG_PPC_EMULATED_STATS is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_DEFLATE is not set
-CONFIG_PPP_FILTER=y
-# CONFIG_PPP is not set
-# CONFIG_PPP_MPPE is not set
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPPOATM is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPS is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_PREEMPT_RCU_TRACE is not set
-# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_PRINTK=y
-# CONFIG_PRISM2_USB is not set
-# CONFIG_PRISM54 is not set
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROFILING is not set
-# CONFIG_QEMU is not set
-# CONFIG_QLA3XXX is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_QUOTA is not set
-# CONFIG_R3964 is not set
-# CONFIG_R6040 is not set
-# CONFIG_R8169 is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_RAID_ATTRS is not set
-CONFIG_RAMFS=y
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-# CONFIG_RD_BZIP2 is not set
-# CONFIG_RDC_17F3101X is not set
-# CONFIG_RD_GZIP is not set
-CONFIG_RD_LZMA=y
-# CONFIG_RD_LZO is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_REDWOOD is not set
-# CONFIG_REGULATOR_BQ24022 is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_RELAY is not set
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_RFKILL_INPUT is not set
-# CONFIG_RFKILL is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_ROSE is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_RT2860 is not set
-# CONFIG_RT2870 is not set
-# CONFIG_RT2X00 is not set
-# CONFIG_RT3070 is not set
-# CONFIG_RTC_CLASS is not set
-# CONFIG_RTC_DEBUG is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-CONFIG_RTC_DRV_CMOS=y
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_PCF50606 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_RTC7301 is not set
-# CONFIG_RTC_DRV_RX8025 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_HCTOSYS=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-CONFIG_RTC_INTF_DEV=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTL8180 is not set
-# CONFIG_RTL8187 is not set
-# CONFIG_RTL8187SE is not set
-# CONFIG_RTL8192SU is not set
-# CONFIG_RTL8306_PHY is not set
-# CONFIG_RTL8366_SMI is not set
-# CONFIG_RTL8366S_PHY_DEBUG_FS is not set
-# CONFIG_RTL8366S_PHY is not set
-# CONFIG_RTL8366RB_PHY is not set
-CONFIG_RT_MUTEXES=y
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_S2IO is not set
-# CONFIG_SAMPLES is not set
-# CONFIG_SATA_AHCI is not set
-# CONFIG_SATA_INIC162X is not set
-# CONFIG_SATA_MV is not set
-# CONFIG_SATA_NV is not set
-# CONFIG_SATA_PMP is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_SIL24 is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_SVW is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SC92031 is not set
-# CONFIG_SCC is not set
-# CONFIG_SCHED_BFS is not set
-CONFIG_SCHED_CFS=y
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_SCSI_BNX2_ISCSI is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_DH is not set
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_ESP_CORE is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_MPT2SAS is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_MVSAS is not set
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_OSD_INITIATOR is not set
-# CONFIG_SCSI_PAS16 is not set
-CONFIG_SCSI_PROC_FS=y
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_SRP is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-CONFIG_SCSI_WAIT_SCAN=m
-# CONFIG_SECCOMP is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATK0110 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_CORETEMP is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_LIS3LV02D is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LM95241 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_M41T00 is not set
-# CONFIG_SENSORS_MAX1111 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-CONFIG_SERIAL_8250_NR_UARTS=2
-# CONFIG_SERIAL_8250_PCI is not set
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-# CONFIG_SERIAL_MAX3100 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
-# CONFIG_SERIAL_UARTLITE is not set
-# CONFIG_SERIO is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SHAPER is not set
-CONFIG_SHMEM=y
-CONFIG_SIGNALFD=y
-# CONFIG_SIMPLE_GPIO is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2_DEBUG is not set
-# CONFIG_SKY2 is not set
-CONFIG_SLABINFO=y
-CONFIG_SLAB=y
-# CONFIG_SLHC is not set
-# CONFIG_SLICOSS is not set
-# CONFIG_SLIP is not set
-# CONFIG_SLOB is not set
-# CONFIG_SLOW_WORK is not set
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_SLUB is not set
-# CONFIG_SMARTJOYPLUS_FF is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMC91X is not set
-# CONFIG_SMP is not set
-# CONFIG_SMSC911X is not set
-# CONFIG_SMSC9420 is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ARM is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AW2 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_CTXFI is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_HIFIER is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_HWDEP is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_INDIGODJX is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGOIOX is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB is not set
-# CONFIG_SND_ISA is not set
-# CONFIG_SND is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_LX6464ES is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_MIPS is not set
-# CONFIG_SND_MIRO is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MPU401 is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_OPL3SA2 is not set
-# CONFIG_SND_OPTI92X_AD1848 is not set
-# CONFIG_SND_OPTI92X_CS4231 is not set
-# CONFIG_SND_OPTI93X is not set
-CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_OXYGEN is not set
-CONFIG_SND_PCI=y
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_PCM is not set
-# CONFIG_SND_PCM_OSS is not set
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_PDAUDIOCF is not set
-# CONFIG_SND_RAWMIDI is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RTCTIMER is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_SIS7019 is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_SPI is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_TIMER is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-# CONFIG_SND_USB_US122L is not set
-# CONFIG_SND_USB_USX2Y is not set
-CONFIG_SND_USB=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VIRTUOSO is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_WAVEFRONT is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_SOC_CAMERA is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_SONY_LAPTOP is not set
-# CONFIG_SONYPI is not set
-# CONFIG_SOUND is not set
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_STATIC is not set
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_DEBUG is not set
-# CONFIG_SPI_GPIO_OLD is not set
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_SPI_ORION is not set
-# CONFIG_SPI_TLE62X0 is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-CONFIG_SQUASHFS_LZMA=y
-CONFIG_SQUASHFS_SUPPORT_ZLIB=y
-# CONFIG_SQUASHFS_VMALLOC is not set
-CONFIG_SQUASHFS=y
-# CONFIG_SSB_BLOCKIO is not set
-# CONFIG_SSB_DEBUG is not set
-# CONFIG_SSB is not set
-# CONFIG_SSB_PCMCIAHOST is not set
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB_SILENT is not set
-# CONFIG_SSFDC is not set
-# CONFIG_STACK_TRACER is not set
-CONFIG_STACKTRACE_SUPPORT=y
-# CONFIG_STAGING_EXCLUDE_BUILD is not set
-CONFIG_STAGING=y
-CONFIG_STANDALONE=y
-CONFIG_STDBINUTILS=y
-# CONFIG_STE10XP is not set
-CONFIG_STP=y
-CONFIG_STRIP_ASM_SYMS=y
-# CONFIG_STRIP is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_SUNRPC_GSS is not set
-# CONFIG_SUNRPC is not set
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SWAP=y
-# CONFIG_SWCONFIG is not set
-# CONFIG_SYNCLINK_CS is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_SYSCTL=y
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-CONFIG_SYSFS=y
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_SYSV_FS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_SYSVIPC=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TCIC is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_CUBIC is not set
-# CONFIG_TCP_CONG_HSTCP is not set
-# CONFIG_TCP_CONG_HTCP is not set
-# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
-# CONFIG_TCP_CONG_LP is not set
-# CONFIG_TCP_CONG_SCALABLE is not set
-# CONFIG_TCP_CONG_VEGAS is not set
-# CONFIG_TCP_CONG_VENO is not set
-CONFIG_TCP_CONG_WESTWOOD=y
-# CONFIG_TCP_CONG_YEAH is not set
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_TEXTSEARCH_BM is not set
-# CONFIG_TEXTSEARCH_FSM is not set
-# CONFIG_TEXTSEARCH_KMP is not set
-CONFIG_TEXTSEARCH=y
-# CONFIG_THERMAL_HWMON is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THRUSTMASTER_FF is not set
-CONFIG_TICK_ONESHOT=y
-# CONFIG_TIFM_CORE is not set
-# CONFIG_TIGON3 is not set
-CONFIG_TIMERFD=y
-# CONFIG_TINY_SHMEM is not set
-# CONFIG_TIPC is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-# CONFIG_TMPFS_POSIX_ACL is not set
-CONFIG_TMPFS=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_FILTER is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_S3C2410 is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TRACE_BRANCH_PROFILING is not set
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_TRANZPORT is not set
-# CONFIG_TREE_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_TR is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-# CONFIG_TUN is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-# CONFIG_UCB1400_CORE is not set
-# CONFIG_UDF_FS is not set
-CONFIG_UDF_NLS=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_UFS_FS is not set
-# CONFIG_UIO is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_UNEVICTABLE_LRU is not set
-# CONFIG_UNION_MOUNT is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_UNIXWARE_DISKLABEL is not set
-CONFIG_UNIX=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_APPLETOUCH is not set
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATMEL is not set
-# CONFIG_USB_ATM is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BANDWIDTH is not set
-CONFIG_USB_BELKIN=y
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CPC is not set
-# CONFIG_USB_CXACRU is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_DEVICE_CLASS is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_EHCI_HCD_PPC_OF is not set
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_EZUSB=y
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_GSPCA_CONEX is not set
-# CONFIG_USB_GSPCA_ETOMS is not set
-# CONFIG_USB_GSPCA_FINEPIX is not set
-# CONFIG_USB_GSPCA is not set
-# CONFIG_USB_GSPCA_MARS is not set
-# CONFIG_USB_GSPCA_MR97310A is not set
-# CONFIG_USB_GSPCA_OV519 is not set
-# CONFIG_USB_GSPCA_OV534 is not set
-# CONFIG_USB_GSPCA_PAC207 is not set
-# CONFIG_USB_GSPCA_PAC7311 is not set
-CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
-# CONFIG_USB_GSPCA_SN9C20X is not set
-# CONFIG_USB_GSPCA_SONIXB is not set
-# CONFIG_USB_GSPCA_SONIXJ is not set
-# CONFIG_USB_GSPCA_SPCA500 is not set
-# CONFIG_USB_GSPCA_SPCA501 is not set
-# CONFIG_USB_GSPCA_SPCA505 is not set
-# CONFIG_USB_GSPCA_SPCA506 is not set
-# CONFIG_USB_GSPCA_SPCA508 is not set
-# CONFIG_USB_GSPCA_SPCA561 is not set
-# CONFIG_USB_GSPCA_SQ905C is not set
-# CONFIG_USB_GSPCA_SQ905 is not set
-# CONFIG_USB_GSPCA_STK014 is not set
-# CONFIG_USB_GSPCA_SUNPLUS is not set
-# CONFIG_USB_GSPCA_T613 is not set
-# CONFIG_USB_GSPCA_TV8532 is not set
-# CONFIG_USB_GSPCA_VC032X is not set
-# CONFIG_USB_GSPCA_ZC3XX is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HID is not set
-# CONFIG_USB_HSO is not set
-# CONFIG_USB_HWA_HCD is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_IP_COMMON is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_KC2190 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LIBUSUAL is not set
-# CONFIG_USB_M5602 is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_NET_AX8817X is not set
-# CONFIG_USB_NET_CDC_EEM is not set
-# CONFIG_USB_NET_CDCETHER is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_INT51X1 is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-# CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_OHCI_HCD_PCI is not set
-# CONFIG_USB_OHCI_HCD_PPC_OF is not set
-# CONFIG_USB_OHCI_HCD_PPC_SOC is not set
-# CONFIG_USB_OHCI_HCD_SSB is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_OXU210HP_HCD is not set
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_PWC_INPUT_EVDEV is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_S2255 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CP210X is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_QUALCOMM is not set
-# CONFIG_USB_SERIAL_QUATECH2 is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# CONFIG_USB_SERIAL_SYMBOL is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-# CONFIG_USB_STKWEBCAM is not set
-CONFIG_USB_STORAGE_ALAUDA=y
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_FREECOM=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_KARMA=y
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-# CONFIG_USB_STORAGE_SIERRA is not set
-CONFIG_USB_STORAGE_USBAT=y
-# CONFIG_USB_STV06XX is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_TMC is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_UEAGLEATM is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_VICAM is not set
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-# CONFIG_USB_VIDEO_CLASS is not set
-# CONFIG_USB_VST is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_WHCI_HCD is not set
-# CONFIG_USB_WUSB_CBAF is not set
-# CONFIG_USB_WUSB is not set
-# CONFIG_USB_XHCI_HCD is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_XUSBATM is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USE_GENERIC_SMP_HELPERS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_UWB is not set
-# CONFIG_VETH is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_VIDEO_ADV7170 is not set
-# CONFIG_VIDEO_ADV7175 is not set
-# CONFIG_VIDEO_ADV7343 is not set
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_ALLOW_V4L1 is not set
-# CONFIG_VIDEO_BT819 is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BT856 is not set
-# CONFIG_VIDEO_BT866 is not set
-# CONFIG_VIDEO_CAFE_CCIC is not set
-# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_CX231XX is not set
-# CONFIG_VIDEO_CX2341X is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_CX88 is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_VIDEO_DPC is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-# CONFIG_VIDEO_GO7007 is not set
-# CONFIG_VIDEO_HDPVR is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-# CONFIG_VIDEO_HEXIUM_ORION is not set
-# CONFIG_VIDEO_IVTV is not set
-# CONFIG_VIDEO_KS0127 is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_MEDIA is not set
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_MXB is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_VIDEO_OV7670 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_SAA6588 is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA7111 is not set
-# CONFIG_VIDEO_SAA7114 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_SAA7134 is not set
-# CONFIG_VIDEO_SAA717X is not set
-# CONFIG_VIDEO_SAA7185 is not set
-# CONFIG_VIDEO_SAA7191 is not set
-# CONFIG_VIDEO_SH_MOBILE_CEU is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_TDA7432 is not set
-# CONFIG_VIDEO_TDA9840 is not set
-# CONFIG_VIDEO_TDA9875 is not set
-# CONFIG_VIDEO_TEA6415C is not set
-# CONFIG_VIDEO_TEA6420 is not set
-# CONFIG_VIDEO_THS7303 is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_TVAUDIO is not set
-# CONFIG_VIDEO_TVP514X is not set
-# CONFIG_VIDEO_TVP5150 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_V4L1_COMPAT=y
-# CONFIG_VIDEO_V4L1 is not set
-# CONFIG_VIDEO_V4L2_COMMON is not set
-# CONFIG_VIDEO_V4L2 is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_VP27SMPX is not set
-# CONFIG_VIDEO_VPX3220 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIRQ_DEBUG is not set
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_VIRTUALIZATION is not set
-# CONFIG_VITESSE_PHY is not set
-# CONFIG_VLAN_8021Q_GVRP is not set
-CONFIG_VLAN_8021Q=y
-# CONFIG_VM_EVENT_COUNTERS is not set
-# CONFIG_VMSPLIT_1G is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_2G_OPT is not set
-# CONFIG_VMSPLIT_3G_OPT is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VT6655 is not set
-# CONFIG_VT is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_W1_CON is not set
-# CONFIG_W1 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_GPIO is not set
-# CONFIG_W1_MASTER_MATROX is not set
-# CONFIG_W1_SLAVE_BQ27000 is not set
-# CONFIG_W1_SLAVE_DS2431 is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W83627HF_WDT is not set
-# CONFIG_W83697HF_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_W83977F_WDT is not set
-# CONFIG_WAN is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_WANXL is not set
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WDTPCI is not set
-# CONFIG_WIMAX is not set
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS=y
-CONFIG_WLAN_80211=y
-# CONFIG_WLAN_PRE80211 is not set
-# CONFIG_WORKQUEUE_TRACER is not set
-# CONFIG_WR_PPMC is not set
-# CONFIG_X25 is not set
-# CONFIG_XFRM_IPCOMP is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_USER is not set
-CONFIG_XFRM=y
-# CONFIG_XFS_DEBUG is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_SECURITY is not set
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_YAFFS_FS is not set
-# CONFIG_YAM is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_YENTA is not set
-# CONFIG_YENTA_O2 is not set
-# CONFIG_YENTA_RICOH is not set
-# CONFIG_YENTA_TI is not set
-# CONFIG_YENTA_TOSHIBA is not set
-# CONFIG_ZD1211RW_DEBUG is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_ZEROPLUS_FF is not set
-# CONFIG_ZISOFS_FS is not set
-CONFIG_ZISOFS=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ZONE_DMA=y
diff --git a/target/linux/generic-2.6/config-2.6.33 b/target/linux/generic-2.6/config-2.6.33
deleted file mode 100644 (file)
index e154e92..0000000
+++ /dev/null
@@ -1,2872 +0,0 @@
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_9P_FS is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_AB4500_CORE is not set
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_ACENIC is not set
-# CONFIG_ACPI_POWER_METER is not set
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADM6996_PHY is not set
-# CONFIG_ADM8211 is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_AF_RXRPC is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_AGP is not set
-CONFIG_AIO=y
-# CONFIG_AIRO_CS is not set
-# CONFIG_AIRO is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_ALTERA_PCIE_CHDMA is not set
-# CONFIG_R8187SE is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ANDROID is not set
-CONFIG_ANON_INODES=y
-# CONFIG_APPLICOM is not set
-# CONFIG_AR8216_PHY is not set
-# CONFIG_AR9170_USB is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_S5PC1XX is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_U8500 is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCNET is not set
-# CONFIG_ARM_UNWIND is not set
-CONFIG_ARPD=y
-# CONFIG_ARTHUR is not set
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_ASUS_OLED is not set
-# CONFIG_ASYNC_TX_DMA is not set
-# CONFIG_AT24 is not set
-# CONFIG_AT76C50X_USB is not set
-# CONFIG_ATA_ACPI is not set
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_ATA is not set
-# CONFIG_ATALK is not set
-# CONFIG_ATA_NONSTANDARD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ATA_PIIX is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_ATA_SFF=y
-# CONFIG_ATA_VERBOSE_ERROR is not set
-# CONFIG_ATH5K is not set
-# CONFIG_ATH9K is not set
-# CONFIG_ATL1C is not set
-# CONFIG_ATL1E is not set
-# CONFIG_ATL1 is not set
-# CONFIG_ATL2 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-CONFIG_ATM_BR2684_IPFILTER=y
-# CONFIG_ATM_BR2684 is not set
-# CONFIG_ATM_CLIP is not set
-CONFIG_ATM_CLIP_NO_ICMP=y
-# CONFIG_ATM_DRIVERS is not set
-# CONFIG_ATM_DUMMY is not set
-# CONFIG_ATMEL is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_FORE200E is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_LANE is not set
-# CONFIG_ATM_MPOA is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_SOLOS is not set
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_AUDIT is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_AX25_DAMA_SLAVE is not set
-# CONFIG_AX25 is not set
-# CONFIG_AX88796 is not set
-# CONFIG_B3DFG is not set
-# CONFIG_B43 is not set
-# CONFIG_B43LEGACY is not set
-# CONFIG_B44 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-CONFIG_BASE_FULL=y
-CONFIG_BASE_SMALL=0
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_BATTERY_BQ27000_HDQ is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-CONFIG_BCM43XX_DEBUG=y
-CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
-# CONFIG_BCM43XX_DMA_MODE is not set
-CONFIG_BCM43XX_DMA=y
-# CONFIG_BCM43XX is not set
-# CONFIG_BCM43XX_PIO_MODE is not set
-CONFIG_BCM43XX_PIO=y
-# CONFIG_BE2ISCSI is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_BINARY_PRINTF is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_BLINK is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_BLK_DEV_CS5536 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_BLK_DEV_HD_ONLY is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_IDEACPI is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_INTEGRITY is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_BLK_DEV_IT8172 is not set
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_XIP is not set
-CONFIG_BLK_DEV=y
-CONFIG_BLOCK=y
-# CONFIG_BNX2 is not set
-# CONFIG_BONDING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_BPQETHER is not set
-# CONFIG_BRIDGE_EBT_802_3 is not set
-# CONFIG_BRIDGE_EBT_AMONG is not set
-# CONFIG_BRIDGE_EBT_ARP is not set
-# CONFIG_BRIDGE_EBT_ARPREPLY is not set
-# CONFIG_BRIDGE_EBT_BROUTE is not set
-# CONFIG_BRIDGE_EBT_DNAT is not set
-# CONFIG_BRIDGE_EBT_IP6 is not set
-# CONFIG_BRIDGE_EBT_IP is not set
-# CONFIG_BRIDGE_EBT_LIMIT is not set
-# CONFIG_BRIDGE_EBT_LOG is not set
-# CONFIG_BRIDGE_EBT_MARK is not set
-# CONFIG_BRIDGE_EBT_MARK_T is not set
-# CONFIG_BRIDGE_EBT_NFLOG is not set
-# CONFIG_BRIDGE_EBT_PKTTYPE is not set
-# CONFIG_BRIDGE_EBT_REDIRECT is not set
-# CONFIG_BRIDGE_EBT_SNAT is not set
-# CONFIG_BRIDGE_EBT_STP is not set
-# CONFIG_BRIDGE_EBT_T_FILTER is not set
-# CONFIG_BRIDGE_EBT_T_NAT is not set
-# CONFIG_BRIDGE_EBT_ULOG is not set
-# CONFIG_BRIDGE_EBT_VLAN is not set
-# CONFIG_BRIDGE_NETFILTER is not set
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-CONFIG_BRIDGE=y
-# CONFIG_BROADCOM_PHY is not set
-CONFIG_BROKEN_ON_SMP=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BT_ATH3K is not set
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_CMTP is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBTSDIO is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIBTUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_BT_HIDP is not set
-# CONFIG_BT is not set
-# CONFIG_BT_L2CAP is not set
-# CONFIG_BT_MRVL is not set
-# CONFIG_BT_RFCOMM is not set
-CONFIG_BT_RFCOMM_TTY=y
-# CONFIG_BTRFS_FS is not set
-# CONFIG_BT_SCO is not set
-CONFIG_BUG=y
-# CONFIG_C2PORT is not set
-# CONFIG_CAN is not set
-# CONFIG_CAPI_AVM is not set
-# CONFIG_CAPI_EICON is not set
-# CONFIG_CAPI_TRACE is not set
-CONFIG_CARDBUS=y
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_CASSINI is not set
-# CONFIG_CB710_CORE is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_CFG80211 is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_CIFS is not set
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_STATS2 is not set
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CLASSIC_RCU=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_CLS_U32_PERF=y
-CONFIG_CMDLINE=""
-# CONFIG_CNIC is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_COMEDI is not set
-# CONFIG_COMPAT_BRK is not set
-CONFIG_COMPAT_NET_DEV_OPS=y
-# CONFIG_CONFIGFS_FS is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_CONSTRUCTORS=y
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_CRASH_DUMP is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC_ITU_T is not set
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CROSSCOMPILE=y
-# CONFIG_CRYPTO_AEAD is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_AES is not set
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_ALGAPI=y
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_BLKCIPHER is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRC32C_INTEL is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_FIPS is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set
-# CONFIG_CRYPTO_HASH is not set
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_MANAGER is not set
-CONFIG_CRYPTO_MANAGER_NO_TESTS=y
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_PCBC is not set
-CONFIG_CRYPTO_PCOMP=y
-# CONFIG_CRYPTO_PRNG is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_RNG is not set
-# CONFIG_CRYPTO_SALSA20_586 is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SEQIV is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_TWOFISH_COMMON is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-CONFIG_CRYPTO_UNLZMA=y
-# CONFIG_CRYPTO_VMAC is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ZLIB=y
-# CONFIG_CUSE is not set
-# CONFIG_DAB is not set
-# CONFIG_DAVICOM_PHY is not set
-# CONFIG_DCB is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_CREDENTIALS is not set
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_DEBUG_NOTIFIERS is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_SG is not set
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
-# CONFIG_DECNET is not set
-CONFIG_DECOMPRESS_LZMA_NEEDED=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_BIC is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_CUBIC is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_HTCP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-# CONFIG_DEFAULT_NOOP is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="westwood"
-# CONFIG_DEFAULT_VEGAS is not set
-CONFIG_DEFAULT_WESTWOOD=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-# CONFIG_DETECT_HUNG_TASK is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_DEVKMEM is not set
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_DEVTMPFS_MOUNT is not set
-# CONFIG_DEVTMPFS is not set
-# CONFIG_DGRS is not set
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_DL2K is not set
-# CONFIG_DLM is not set
-# CONFIG_DMA_API_DEBUG is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_DMA_ENGINE is not set
-# CONFIG_DMASCC is not set
-# CONFIG_DMATEST is not set
-# CONFIG_DM_LOG_USERSPACE is not set
-# CONFIG_DNET is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_DRAGONRISE_FF is not set
-# CONFIG_DRM is not set
-# CONFIG_DS1682 is not set
-# CONFIG_DST is not set
-# CONFIG_DTLK is not set
-# CONFIG_DUMMY is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DVB is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_E1000E is not set
-# CONFIG_E1000 is not set
-# CONFIG_E100 is not set
-# CONFIG_ECHO is not set
-# CONFIG_ECONET is not set
-# CONFIG_EDAC is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_ELF_CORE is not set
-CONFIG_EMBEDDED=y
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# CONFIG_ENC28J60 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_EPIC100 is not set
-CONFIG_EPOLL=y
-# CONFIG_EQUALIZER is not set
-# CONFIG_ET131X is not set
-# CONFIG_ETHOC is not set
-CONFIG_EVENTFD=y
-# CONFIG_EVENT_TRACER is not set
-CONFIG_EXPERIMENTAL=y
-# CONFIG_EXPORTFS is not set
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4_DEBUG is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_EXT4_FS is not set
-# CONFIG_EXT4_USE_FOR_EXT23 is not set
-CONFIG_EXTRA_FIRMWARE=""
-CONFIG_EXTRA_TARGETS=""
-# CONFIG_EZX_PCAP is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_FAT_FS is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ARK is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_FB_CARMINE is not set
-# CONFIG_FB_CFB_COPYAREA is not set
-# CONFIG_FB_CFB_FILLRECT is not set
-# CONFIG_FB_CFB_IMAGEBLIT is not set
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_EARLYSUSPEND is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_GOLDFISH is not set
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_IBM_GXT4500 is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_N411 is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_OF is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_PS3 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_UDL is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_VIA is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_VT8623 is not set
-# CONFIG_FCOE_FNIC is not set
-# CONFIG_FCOE is not set
-# CONFIG_FDDI is not set
-# CONFIG_FEALNX is not set
-CONFIG_FIB_RULES=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_FIREWIRE is not set
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-# CONFIG_FIXED_PHY is not set
-CONFIG_FLATMEM_MANUAL=y
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_FORCEDETH is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-# CONFIG_FREEZER is not set
-# CONFIG_FSCACHE is not set
-CONFIG_FSNOTIFY=y
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_FTL is not set
-# CONFIG_FTRACE is not set
-# CONFIG_FTRACE_STARTUP_TEST is not set
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_FUSE_FS is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SAS is not set
-# CONFIG_FUSION_SPI is not set
-CONFIG_FUTEX=y
-CONFIG_FW_LOADER=y
-CONFIG_GACT_PROB=y
-# CONFIG_GAMEPORT is not set
-# CONFIG_GCOV_KERNEL is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GIGASET_CAPI is not set 
-# CONFIG_GIGASET_DEBUG is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_GPIO_ADP5588 is not set
-# CONFIG_GPIO_BT8XX is not set
-# CONFIG_GPIO_CS5535 is not set
-# CONFIG_GPIO_DEVICE is not set
-# CONFIG_GPIO_LANGWELL is not set
-# CONFIG_GPIOLIB is not set
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_MC33880 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_SYSFS is not set
-# CONFIG_GPIO_XILINX is not set
-# CONFIG_GREENASIA_FF is not set
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_HAMACHI is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HAVE_AOUT is not set
-CONFIG_HAVE_MLOCKED_PAGE_BIT=y
-CONFIG_HAVE_MLOCK=y
-# CONFIG_HCALL_STATS is not set
-# CONFIG_HDLC_CISCO is not set
-# CONFIG_HDLC_FR is not set
-# CONFIG_HDLC is not set
-# CONFIG_HDLC_PPP is not set
-# CONFIG_HDLC_RAW_ETH is not set
-# CONFIG_HDLC_RAW is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_HECI is not set
-# CONFIG_HERMES is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_HID_A4TECH is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_BRIGHT is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_COMPAT is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HID_DELL is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_FF is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PID is not set
-# CONFIG_HIDRAW is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_HID_THRUSTMASTER is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_WACOM is not set
-# CONFIG_HID_ZEROPLUS is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_HIGH_RES_TIMERS=y
-# CONFIG_HIPPI is not set
-# CONFIG_HOSTAP_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_PCI is not set
-# CONFIG_HOSTAP_PLX is not set
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_HOTPLUG_PCI is not set
-CONFIG_HOTPLUG=y
-# CONFIG_HP100 is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_HP_ILO is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_HVC_UDBG is not set
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_HW_RANDOM_AMD is not set
-# CONFIG_HW_RANDOM_GEODE is not set
-# CONFIG_HW_RANDOM_INTEL is not set
-# CONFIG_HW_RANDOM_TIMERIOMEM is not set
-# CONFIG_HW_RANDOM_VIA is not set
-# CONFIG_HYPERV is not set
-# CONFIG_HYSDN is not set
-CONFIG_HZ=100
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ_100=y
-# CONFIG_HZ_1024 is not set
-# CONFIG_HZ_128 is not set
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_48 is not set
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCA is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_CHARDEV is not set
-# CONFIG_I2C_COMPAT is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_HELPER_AUTO is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_IBM_IIC is not set
-# CONFIG_I2C_ISCH is not set
-# CONFIG_I2C is not set
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2O is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_IBM_ASM is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_IDE_GD is not set
-# CONFIG_IDE is not set
-CONFIG_IDE_MAX_HWIFS=4
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_IDE_PHISON is not set
-CONFIG_IDE_PROC_FS=y
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IEEE1394_DV1394 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_IEEE1394_OHCI1394 is not set
-# CONFIG_IEEE1394_PCILYNX is not set
-# CONFIG_IEEE1394_RAWIO is not set
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_CRYPT_WEP is not set
-# CONFIG_IEEE80211_DEBUG is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_IFB is not set
-# CONFIG_IGB is not set
-# CONFIG_IGBVF is not set
-# CONFIG_IIO is not set
-# CONFIG_RAMZSWAP is not set
-# CONFIG_BATMAN_ADV is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_IKCONFIG_PROC is not set
-# CONFIG_IMAGE_CMDLINE_HACK is not set
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-# CONFIG_IMQ_BEHAVIOR_AB is not set
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-# CONFIG_IMQ is not set
-CONFIG_IMQ_NUM_DEVS=2
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_INET6_XFRM_MODE_BEET is not set
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_TCP_DIAG is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET=y
-# CONFIG_INFINIBAND is not set
-# CONFIG_INFTL is not set
-CONFIG_INIT_ENV_ARG_LIMIT=32
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
-CONFIG_INITRAMFS_COMPRESSION_NONE=y
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_INPUT_APANEL is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATLAS_BTNS is not set
-# CONFIG_INPUT_CM109 is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_GPIO is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_MIMIO is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_PCSPKR is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_SPARSEKMAP is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_WINBOND_CIR is not set
-# CONFIG_INPUT_WISTRON_BTNS is not set
-# CONFIG_INSTRUMENTATION is not set
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IP1000 is not set
-# CONFIG_IP175C_PHY is not set
-# CONFIG_IP6_NF_FILTER is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP6_NF_MANGLE is not set
-# CONFIG_IP6_NF_MATCH_AH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_LIMIT is not set
-# CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_RAW is not set
-# CONFIG_IP6_NF_TARGET_HL is not set
-# CONFIG_IP6_NF_TARGET_IMQ is not set
-# CONFIG_IP6_NF_TARGET_LOG is not set
-# CONFIG_IP6_NF_TARGET_REJECT is not set
-# CONFIG_IP6_NF_TARGET_ROUTE is not set
-CONFIG_IP_ADVANCED_ROUTER=y
-# CONFIG_IPC_NS is not set
-# CONFIG_IP_DCCP is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_ARPFILTER is not set
-# CONFIG_IP_NF_ARP_MANGLE is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_CT_ACCT=y
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FILTER is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
-# CONFIG_IP_NF_MATCH_IPP2P is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_SET is not set
-# CONFIG_IP_NF_MATCH_TIME is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_NAT_AMANDA is not set
-# CONFIG_IP_NF_NAT_FTP is not set
-# CONFIG_IP_NF_NAT_H323 is not set
-# CONFIG_IP_NF_NAT_IRC is not set
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_NAT_PPTP is not set
-# CONFIG_IP_NF_NAT_SIP is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-# CONFIG_IP_NF_NAT_TFTP is not set
-CONFIG_IP_NF_NAT=y
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_SECURITY is not set
-CONFIG_IP_NF_SET_HASHSIZE=1024
-# CONFIG_IP_NF_SET_IPHASH is not set
-# CONFIG_IP_NF_SET_IPMAP is not set
-# CONFIG_IP_NF_SET_IPPORTHASH is not set
-# CONFIG_IP_NF_SET_IPTREE is not set
-# CONFIG_IP_NF_SET_IPTREEMAP is not set
-# CONFIG_IP_NF_SET is not set
-# CONFIG_IP_NF_SET_MACIPMAP is not set
-CONFIG_IP_NF_SET_MAX=256
-# CONFIG_IP_NF_SET_NETHASH is not set
-# CONFIG_IP_NF_SET_PORTMAP is not set
-# CONFIG_IP_NF_SIP is not set
-# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_IMQ is not set
-# CONFIG_IP_NF_TARGET_LOG is not set
-# CONFIG_IP_NF_TARGET_MASQUERADE is not set
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_ROUTE is not set
-# CONFIG_IP_NF_TARGET_SAME is not set
-# CONFIG_IP_NF_TARGET_SET is not set
-# CONFIG_IP_NF_TARGET_TOS is not set
-# CONFIG_IP_NF_TARGET_TTL is not set
-# CONFIG_IP_NF_TARGET_ULOG is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_IP_PNP is not set
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
-# CONFIG_IP_ROUTE_MULTIPATH_DRR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RANDOM is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_WRANDOM is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_SCTP is not set
-CONFIG_IPSEC_NAT_TRAVERSAL=y
-# CONFIG_IPV6 is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTE_INFO is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_SIT is not set
-# CONFIG_IPV6_SIT_6RD is not set
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPW2100_DEBUG is not set
-# CONFIG_IPW2100 is not set
-CONFIG_IPW2100_MONITOR=y
-# CONFIG_IPW2200_DEBUG is not set
-# CONFIG_IPW2200 is not set
-CONFIG_IPW2200_MONITOR=y
-# CONFIG_IPW2200_PROMISCUOUS is not set
-# CONFIG_IPW2200_QOS is not set
-# CONFIG_IPW2200_RADIOTAP is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_IPX is not set
-# CONFIG_IRDA is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_ISCSI_TCP is not set
-CONFIG_ISDN=y
-# CONFIG_ISDN_AUDIO is not set
-# CONFIG_ISDN_CAPI_CAPIDRV is not set
-# CONFIG_ISDN_DIVERSION is not set
-# CONFIG_ISDN_DRV_ACT2000 is not set
-# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
-# CONFIG_ISDN_DRV_EICON is not set
-# CONFIG_ISDN_DRV_HISAX is not set
-# CONFIG_ISDN_DRV_ICN is not set
-# CONFIG_ISDN_DRV_LOOP is not set
-# CONFIG_ISDN_DRV_PCBIT is not set
-# CONFIG_ISDN_DRV_SC is not set
-# CONFIG_ISDN_DRV_TPAM is not set
-# CONFIG_ISDN_WITH_ABC is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_ISO9660_FS is not set
-# CONFIG_IWL3945 is not set
-# CONFIG_IWLAGN is not set
-# CONFIG_IWLCORE is not set
-# CONFIG_IWLWIFI is not set
-# CONFIG_IWLWIFI_LEDS is not set
-# CONFIG_IWMC3200TOP is not set
-# CONFIG_IXGB is not set
-# CONFIG_JBD2_DEBUG is not set
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_JBD is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_FS=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_JME is not set
-CONFIG_JOLIET=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_KALLSYMS is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_KERNEL_BZIP2 is not set
-# CONFIG_KERNEL_GZIP is not set
-CONFIG_KERNEL_LZMA=y
-# CONFIG_KERNEL_LZO is not set
-# CONFIG_KEXEC is not set
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYS is not set
-# CONFIG_KGDB is not set
-# CONFIG_KMEMTRACE is not set
-CONFIG_KMOD=y
-# CONFIG_KPROBES is not set
-# CONFIG_KS8842 is not set
-# CONFIG_KS8851 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_KSM is not set
-# CONFIG_LANMEDIA is not set
-# CONFIG_LAPB is not set
-# CONFIG_LASAT is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_LBDAF=y
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_LEDS_ALIX is not set
-# CONFIG_LEDS_BD2802 is not set
-CONFIG_LEDS_CLASS=y
-# CONFIG_LEDS_DAC124S085 is not set
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_LT3593 is not set
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_LP5521 is not set
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_MORSE is not set
-CONFIG_LEDS_TRIGGER_NETDEV=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_LIB80211_CRYPT_CCMP is not set
-# CONFIG_LIB80211_CRYPT_TKIP is not set
-# CONFIG_LIB80211_CRYPT_WEP is not set
-# CONFIG_LIB80211_DEBUG is not set
-# CONFIG_LIB80211 is not set
-# CONFIG_LIBCRC32C is not set
-# CONFIG_LIBERTAS is not set
-# CONFIG_LIBERTAS_THINFIRM is not set
-# CONFIG_LIBERTAS_USB is not set
-# CONFIG_LIBFC is not set
-# CONFIG_LIBFCOE is not set
-# CONFIG_LIBIPW_DEBUG is not set
-# CONFIG_LINE6_USB is not set
-# CONFIG_LLC2 is not set
-CONFIG_LLC=y
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_LOCKDEP_SUPPORT=y
-# CONFIG_LOCKD is not set
-CONFIG_LOCKD_V4=y
-# CONFIG_LOCK_STAT is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_LOGIRUMBLEPAD2_FF is not set
-# CONFIG_LOGITECH_FF is not set
-# CONFIG_LOGO is not set
-# CONFIG_LSF is not set
-# CONFIG_LSI_ET1011C_PHY is not set
-# CONFIG_LTPC is not set
-# CONFIG_LXT_PHY is not set
-CONFIG_MAC80211_DEFAULT_PS_VALUE=1
-CONFIG_MAC80211_DEFAULT_PS=y
-# CONFIG_MAC80211 is not set
-# CONFIG_MAC_EMUMOUSEBTN is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_MARKEINS is not set
-# CONFIG_MARKERS is not set
-# CONFIG_MARVELL_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-# CONFIG_MD is not set
-# CONFIG_ME4000 is not set
-# CONFIG_MEDIA_ATTACH is not set
-# CONFIG_MEDIA_SUPPORT is not set
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_MEILHAUS is not set
-# CONFIG_MEMORY_FAILURE is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_MFD_88PM8607 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_MC13783 is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_WM831X is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MG_DISK is not set
-# CONFIG_MIGRATION is not set
-CONFIG_MII=y
-CONFIG_MINI_FO=y
-# CONFIG_MINIX_FS is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_MIPS_FPU_EMU is not set
-CONFIG_MISC_DEVICES=y
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_MISDN_AVMFRITZ is not set
-# CONFIG_MISDN_HFCPCI is not set
-# CONFIG_MISDN_HFCUSB is not set
-# CONFIG_MISDN_INFINEON is not set
-# CONFIG_MISDN is not set
-# CONFIG_MISDN_NETJET is not set
-# CONFIG_MISDN_SPEEDFAX is not set
-# CONFIG_MISDN_W6692 is not set
-# CONFIG_MKISS is not set
-# CONFIG_MMC_ARMMMCI is not set
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_MMC_BLOCK is not set
-# CONFIG_MMC_CB710 is not set
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC is not set
-# CONFIG_MMC_MVSDIO is not set
-# CONFIG_MMC_S3C is not set
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_SDRICOH_CS is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_TEST is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-# CONFIG_MMC_VIA_SDMMC is not set
-CONFIG_MMU=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_PS2_SENTELIC is not set
-# CONFIG_MOUSE_SYNAPTICS_I2C is not set
-# CONFIG_MSDOS_FS is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_AR7_PARTS is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_BLKDEVS=y
-# CONFIG_MTD_BLOCK2MTD is not set
-CONFIG_MTD_BLOCK=y
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP 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_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CHAR=y
-# CONFIG_MTD_CMDLINE_PARTS is not set
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_INTEL_VR_NOR is not set
-# CONFIG_MTD_JEDECPROBE is not set
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_MYLOADER_PARTS is not set
-# CONFIG_MTD_NAND_CAFE is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_ONENAND is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PLATRAM is not set
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_ROM is not set
-CONFIG_MTD_ROOTFS_ROOT_DEV=y
-CONFIG_MTD_ROOTFS_SPLIT=y
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_UBI is not set
-CONFIG_MTD=y
-# CONFIG_MV643XX_ETH is not set
-# CONFIG_MVSWITCH_PHY is not set
-# CONFIG_MWAVE is not set
-# CONFIG_MWL8K is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NAMESPACES is not set
-# CONFIG_NATIONAL_PHY is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NEC_MARKEINS is not set
-# CONFIG_NET_9P is not set
-# CONFIG_NET_ACT_GACT is not set
-# CONFIG_NET_ACT_IPT is not set
-# CONFIG_NET_ACT_MIRRED is not set
-# CONFIG_NET_ACT_NAT is not set
-# CONFIG_NET_ACT_PEDIT is not set
-# CONFIG_NET_ACT_POLICE is not set
-# CONFIG_NET_ACT_SIMP is not set
-CONFIG_NET_ACT_SKBEDIT=y
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_CLS_BASIC=y
-# CONFIG_NET_CLS_FLOW is not set
-# CONFIG_NET_CLS_FW is not set
-CONFIG_NET_CLS_IND=y
-# CONFIG_NET_CLS_ROUTE4 is not set
-# CONFIG_NET_CLS_RSVP6 is not set
-# CONFIG_NET_CLS_RSVP is not set
-# CONFIG_NET_CLS_TCINDEX is not set
-# CONFIG_NET_CLS_U32 is not set
-CONFIG_NET_CLS=y
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETDEBUG is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEVICES_MULTIQUEUE=y
-CONFIG_NETDEVICES=y
-# CONFIG_NET_DROP_MONITOR is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_NET_EMATCH_CMP is not set
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_EMATCH_META is not set
-# CONFIG_NET_EMATCH_NBYTE is not set
-CONFIG_NET_EMATCH_STACK=32
-# CONFIG_NET_EMATCH_TEXT is not set
-# CONFIG_NET_EMATCH_U32 is not set
-CONFIG_NET_ESTIMATOR=y
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_FC is not set
-CONFIG_NETFILTER_ADVANCED=y
-# CONFIG_NETFILTER_DEBUG is not set
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_TPROXY is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_HL is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7 is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OSF is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_HL is not set
-# CONFIG_NETFILTER_XT_TARGET_IMQ is not set
-# CONFIG_NETFILTER_XT_TARGET_LED is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER=y
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_NET_IPGRE is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_KEY is not set
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_NETPOLL is not set
-CONFIG_NET_RADIO=y
-# CONFIG_NETROM is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_NET_SCH_ATM is not set
-# CONFIG_NET_SCH_CBQ is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_DRR is not set
-# CONFIG_NET_SCH_DSMARK is not set
-CONFIG_NET_SCHED=y
-# CONFIG_NET_SCH_ESFQ is not set
-CONFIG_NET_SCH_ESFQ_NFCT=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_NET_SCH_GRED is not set
-# CONFIG_NET_SCH_HFSC is not set
-# CONFIG_NET_SCH_HTB is not set
-# CONFIG_NET_SCH_INGRESS is not set
-# CONFIG_NET_SCH_MULTIQ is not set
-# CONFIG_NET_SCH_NETEM is not set
-# CONFIG_NET_SCH_PRIO is not set
-# CONFIG_NET_SCH_RED is not set
-# CONFIG_NET_SCH_RR is not set
-# CONFIG_NET_SCH_SFQ is not set
-# CONFIG_NET_SCH_TBF is not set
-# CONFIG_NET_SCH_TEQL is not set
-# CONFIG_NET_TULIP is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_WIRELESS_RTNETLINK=y
-CONFIG_NET_WIRELESS=y
-CONFIG_NETWORK_FILESYSTEMS=y
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETXEN_NIC is not set
-CONFIG_NET=y
-# CONFIG_NEW_GPIO is not set
-CONFIG_NEW_LEDS=y
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-CONFIG_NF_CONNTRACK_ENABLED=y
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IPV4 is not set
-# CONFIG_NF_CONNTRACK_IPV6 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_NF_CONNTRACK_RTSP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-CONFIG_NF_CONNTRACK_SUPPORT=y
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_ACCT is not set
-# CONFIG_NF_CT_NETLINK is not set
-# CONFIG_NF_CT_PROTO_DCCP is not set
-# CONFIG_NF_CT_PROTO_GRE is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_DEFRAG_IPV4 is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT is not set
-CONFIG_NF_NAT_NEEDED=y
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_PROTO_GRE is not set
-# CONFIG_NF_NAT_RTSP is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NFS_ACL_SUPPORT is not set
-CONFIG_NFS_COMMON=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_NFSD_V2_ACL is not set
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFS_FS is not set
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4_1 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFTL is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_NL80211=y
-CONFIG_NLATTR=y
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_NOP_USB_XCEIV is not set
-# CONFIG_NORTEL_HERMES is not set
-# CONFIG_NOZOMI is not set
-# CONFIG_NS83820 is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_NVRAM is not set
-# CONFIG_OC_ETM is not set
-# CONFIG_OCF_BENCH is not set
-# CONFIG_OCF_EP80579 is not set
-# CONFIG_OCF_HIFNHIPP is not set
-# CONFIG_OCF_HIFN is not set
-# CONFIG_OCF_IXP4XX is not set
-# CONFIG_OCF_OCF is not set
-# CONFIG_OCF_OCFNULL is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_OCF_SAFE is not set
-# CONFIG_OCF_TALITOS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_ORION_WATCHDOG is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_P54_COMMON is not set
-CONFIG_PACKET_MMAP=y
-CONFIG_PACKET=y
-# CONFIG_PAGE_POISONING is not set
-# CONFIG_PAGE_SIZE_16KB is not set
-# CONFIG_PAGE_SIZE_32KB is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_64KB is not set
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PANTHERLORD_FF is not set
-# CONFIG_PARPORT is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_ATP867X is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CS5535 is not set
-# CONFIG_PATA_CS5536 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_ISAPNP is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_PCMCIA is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_PATA_QDI is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RDC is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SCH is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_TOSHIBA is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
-# CONFIG_PC300TOO is not set
-# CONFIG_PCCARD is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_PCI is not set
-# CONFIG_PCI200SYN is not set
-# CONFIG_PCI_ATMEL is not set
-# CONFIG_PCI_DEBUG is not set
-# CONFIG_PCI_DISABLE_COMMON_QUIRKS is not set
-# CONFIG_PCIEAER_INJECT is not set
-# CONFIG_PCIEASPM is not set
-# CONFIG_PCIE_ECRC is not set
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_IOV is not set
-# CONFIG_PCI_LEGACY is not set
-# CONFIG_PCI_MSI is not set
-# CONFIG_PCIPCWATCHDOG is not set
-CONFIG_PCI_QUIRKS=y
-# CONFIG_PCI_STUB is not set
-CONFIG_PCI_SYSCALL=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_DEBUG is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_PCMCIA_IOCTL is not set
-# CONFIG_PCMCIA is not set
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_PCNET32 is not set
-# CONFIG_PCSPKR_PLATFORM is not set
-# CONFIG_PD6729 is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_PERF_COUNTERS is not set
-# CONFIG_PERF_EVENTS is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_PHONE is not set
-# CONFIG_PHONET is not set
-# CONFIG_PHYLIB is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-# CONFIG_PID_NS is not set
-# CONFIG_PLAN9AUTH is not set
-CONFIG_PLIST=y
-# CONFIG_PLX_HERMES is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PM is not set
-# CONFIG_POHMELFS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_PPC_16K_PAGES is not set
-# CONFIG_PPC_256K_PAGES is not set
-CONFIG_PPC_4K_PAGES=y
-CONFIG_PPC4xx_GPIO=y
-# CONFIG_PPC_64K_PAGES is not set
-# CONFIG_PPC_DISABLE_WERROR is not set
-# CONFIG_PPC_EMULATED_STATS is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_DEFLATE is not set
-CONFIG_PPP_FILTER=y
-# CONFIG_PPP is not set
-# CONFIG_PPP_MPPE is not set
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPPOATM is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPS is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_PREEMPT_RCU_TRACE is not set
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_TI_DAC7512 is not set
-CONFIG_TINY_RCU=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_PRINTK=y
-# CONFIG_PRISM2_USB is not set
-# CONFIG_PRISM54 is not set
-# CONFIG_PROBE_INITRD_HEADER is not set
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROFILING is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_QEMU is not set
-# CONFIG_QLA3XXX is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_QT2160 is not set
-# CONFIG_QUOTA is not set
-# CONFIG_R3964 is not set
-# CONFIG_R6040 is not set
-# CONFIG_R8169 is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_RAID_ATTRS is not set
-CONFIG_RAMFS=y
-# CONFIG_RAR_REGISTER is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-CONFIG_RCU_FANOUT=32
-# CONFIG_RCU_FANOUT_EXACT is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_RCU_TRACE is not set
-# CONFIG_RD_BZIP2 is not set
-# CONFIG_RDC_17F3101X is not set
-# CONFIG_RD_GZIP is not set
-CONFIG_RD_LZMA=y
-# CONFIG_RD_LZO is not set
-# CONFIG_RDS is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_REDWOOD is not set
-# CONFIG_REGULATOR_BQ24022 is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_RELAY is not set
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_RFKILL_INPUT is not set
-# CONFIG_RFKILL is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_ROSE is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_RT2860 is not set
-# CONFIG_RT2870 is not set
-# CONFIG_RT2X00 is not set
-# CONFIG_RT3070 is not set
-# CONFIG_RT3090 is not set
-# CONFIG_RTC_CLASS is not set
-# CONFIG_RTC_DEBUG is not set
-# CONFIG_RTC_DRV_BQ32K is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-CONFIG_RTC_DRV_CMOS=y
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_MSM6242 is not set
-# CONFIG_RTC_DRV_PCF2123 is not set
-# CONFIG_RTC_DRV_PCF50606 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RP5C01 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_RTC7301 is not set
-# CONFIG_RTC_DRV_RX8025 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_HCTOSYS=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-CONFIG_RTC_INTF_DEV=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTL8180 is not set
-# CONFIG_RTL8187 is not set
-# CONFIG_RTL8187SE is not set
-# CONFIG_RTL8192E is not set
-# CONFIG_RTL8192U is not set
-# CONFIG_RTL8192SU is not set
-# CONFIG_RTL8306_PHY is not set
-# CONFIG_RTL8366_SMI is not set
-# CONFIG_RTL8366S_PHY_DEBUG_FS is not set
-# CONFIG_RTL8366S_PHY is not set
-# CONFIG_RTL8366RB_PHY is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_RUNTIME_DEBUG is not set
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_S2IO is not set
-# CONFIG_SAMPLES is not set
-# CONFIG_SATA_AHCI is not set
-# CONFIG_SATA_INIC162X is not set
-# CONFIG_SATA_MV is not set
-# CONFIG_SATA_NV is not set
-# CONFIG_SATA_PMP is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_SIL24 is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_SVW is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SBC_FITPC2_WATCHDOG is not set
-# CONFIG_SC92031 is not set
-# CONFIG_SCC is not set
-# CONFIG_SCHED_BFS is not set
-CONFIG_SCHED_CFS=y
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_3W_SAS is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_SCSI_BFA_FC is not set
-# CONFIG_SCSI_BNX2_ISCSI is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_DH is not set
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_ESP_CORE is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_HPSA is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_MPT2SAS is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_MVSAS is not set
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_OSD_INITIATOR is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PM8001 is not set
-# CONFIG_SCSI_PMCRAID is not set
-CONFIG_SCSI_PROC_FS=y
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_SRP is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-CONFIG_SCSI_WAIT_SCAN=m
-# CONFIG_SECCOMP is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_AMC6821 is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATK0110 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_CORETEMP is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_LIS3LV02D is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LM95241 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_M41T00 is not set
-# CONFIG_SENSORS_MAX1111 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-CONFIG_SERIAL_8250_NR_UARTS=2
-# CONFIG_SERIAL_8250_PCI is not set
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-# CONFIG_SERIAL_MAX3100 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
-# CONFIG_SERIAL_UARTLITE is not set
-# CONFIG_SERIO is not set
-# CONFIG_SFI is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SHAPER is not set
-CONFIG_SHMEM=y
-CONFIG_SIGNALFD=y
-# CONFIG_SIMPLE_GPIO is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2_DEBUG is not set
-# CONFIG_SKY2 is not set
-CONFIG_SLABINFO=y
-CONFIG_SLAB=y
-# CONFIG_SLHC is not set
-# CONFIG_SLICOSS is not set
-# CONFIG_SLIP is not set
-# CONFIG_SLOB is not set
-# CONFIG_SLOW_WORK_DEBUG is not set
-# CONFIG_SLOW_WORK is not set
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_SLUB is not set
-# CONFIG_SMARTJOYPLUS_FF is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMC91X is not set
-# CONFIG_SMP is not set
-# CONFIG_SMSC911X is not set
-# CONFIG_SMSC9420 is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ARM is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AW2 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_CTXFI is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_HIFIER is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_HWDEP is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_INDIGODJX is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGOIOX is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB is not set
-# CONFIG_SND_ISA is not set
-# CONFIG_SND is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_LX6464ES is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_MIPS is not set
-# CONFIG_SND_MIRO is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MPU401 is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_OPL3SA2 is not set
-# CONFIG_SND_OPTI92X_AD1848 is not set
-# CONFIG_SND_OPTI92X_CS4231 is not set
-# CONFIG_SND_OPTI93X is not set
-CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_OXYGEN is not set
-CONFIG_SND_PCI=y
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_PCM is not set
-# CONFIG_SND_PCM_OSS is not set
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_PDAUDIOCF is not set
-# CONFIG_SND_RAWMIDI is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RTCTIMER is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_SIS7019 is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_SPI is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_TIMER is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-# CONFIG_SND_USB_US122L is not set
-# CONFIG_SND_USB_USX2Y is not set
-CONFIG_SND_USB=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VIRTUOSO is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_WAVEFRONT is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_SOC_CAMERA is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_SONYPI is not set
-# CONFIG_SONY_LAPTOP is not set
-# CONFIG_SOUND is not set
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_STATIC is not set
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_DEBUG is not set
-# CONFIG_SPI_DESIGNWARE is not set
-# CONFIG_SPI_GPIO_OLD is not set
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_SPI_ORION is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_SPI_XILINX is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-CONFIG_SQUASHFS_LZMA=y
-CONFIG_SQUASHFS_SUPPORT_ZLIB=y
-# CONFIG_SQUASHFS_VMALLOC is not set
-CONFIG_SQUASHFS=y
-# CONFIG_SSB_BLOCKIO is not set
-# CONFIG_SSB_DEBUG is not set
-# CONFIG_SSB is not set
-# CONFIG_SSB_PCMCIAHOST is not set
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB_SDIOHOST is not set
-# CONFIG_SSB_SILENT is not set
-# CONFIG_SSFDC is not set
-# CONFIG_STACK_TRACER is not set
-CONFIG_STACKTRACE_SUPPORT=y
-# CONFIG_STAGING_EXCLUDE_BUILD is not set
-CONFIG_STAGING=y
-CONFIG_STANDALONE=y
-CONFIG_STDBINUTILS=y
-# CONFIG_STE10XP is not set
-CONFIG_STP=y
-CONFIG_STRIP_ASM_SYMS=y
-# CONFIG_STRIP is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_SUNRPC_GSS is not set
-# CONFIG_SUNRPC is not set
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SWAP=y
-# CONFIG_SWCONFIG is not set
-# CONFIG_SYNCLINK_CS is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_SYSCTL=y
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-CONFIG_SYSFS=y
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_SYSV_FS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_SYSVIPC=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TCIC is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_CUBIC is not set
-# CONFIG_TCP_CONG_HSTCP is not set
-# CONFIG_TCP_CONG_HTCP is not set
-# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
-# CONFIG_TCP_CONG_LP is not set
-# CONFIG_TCP_CONG_SCALABLE is not set
-# CONFIG_TCP_CONG_VEGAS is not set
-# CONFIG_TCP_CONG_VENO is not set
-CONFIG_TCP_CONG_WESTWOOD=y
-# CONFIG_TCP_CONG_YEAH is not set
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_TEXTSEARCH_BM is not set
-# CONFIG_TEXTSEARCH_FSM is not set
-# CONFIG_TEXTSEARCH_KMP is not set
-CONFIG_TEXTSEARCH=y
-# CONFIG_THERMAL_HWMON is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THRUSTMASTER_FF is not set
-CONFIG_TICK_ONESHOT=y
-# CONFIG_TIFM_CORE is not set
-# CONFIG_TIGON3 is not set
-CONFIG_TIMERFD=y
-# CONFIG_TINY_SHMEM is not set
-# CONFIG_TIPC is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-# CONFIG_TMPFS_POSIX_ACL is not set
-CONFIG_TMPFS=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_FILTER is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_S3C2410 is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TRACE_BRANCH_PROFILING is not set
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_TRANZPORT is not set
-# CONFIG_TREE_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_TR is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-# CONFIG_TUN is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-# CONFIG_UCB1400_CORE is not set 
-# CONFIG_UDF_FS is not set
-CONFIG_UDF_NLS=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_UFS_FS is not set
-# CONFIG_UIO is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_UNEVICTABLE_LRU is not set
-# CONFIG_UNION_MOUNT is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_UNIXWARE_DISKLABEL is not set
-CONFIG_UNIX=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_APPLETOUCH is not set
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATMEL is not set
-# CONFIG_USB_ATM is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BANDWIDTH is not set
-CONFIG_USB_BELKIN=y
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CPC is not set
-# CONFIG_USB_CXACRU is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_DEVICE_CLASS is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_EHCI_HCD_PPC_OF is not set
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_EZUSB=y
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GL860 is not set
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_GSPCA_CONEX is not set
-# CONFIG_USB_GSPCA_ETOMS is not set
-# CONFIG_USB_GSPCA_FINEPIX is not set
-# CONFIG_USB_GSPCA is not set
-# CONFIG_USB_GSPCA_JEILINJ is not set
-# CONFIG_USB_GSPCA_MARS is not set
-# CONFIG_USB_GSPCA_MR97310A is not set
-# CONFIG_USB_GSPCA_OV519 is not set
-# CONFIG_USB_GSPCA_OV534 is not set
-# CONFIG_USB_GSPCA_PAC207 is not set
-# CONFIG_USB_GSPCA_PAC7302 is not set
-# CONFIG_USB_GSPCA_PAC7311 is not set
-CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
-# CONFIG_USB_GSPCA_SN9C20X is not set
-# CONFIG_USB_GSPCA_SONIXB is not set
-# CONFIG_USB_GSPCA_SONIXJ is not set
-# CONFIG_USB_GSPCA_SPCA500 is not set
-# CONFIG_USB_GSPCA_SPCA501 is not set
-# CONFIG_USB_GSPCA_SPCA505 is not set
-# CONFIG_USB_GSPCA_SPCA506 is not set
-# CONFIG_USB_GSPCA_SPCA508 is not set
-# CONFIG_USB_GSPCA_SPCA561 is not set
-# CONFIG_USB_GSPCA_SQ905C is not set
-# CONFIG_USB_GSPCA_SQ905 is not set
-# CONFIG_USB_GSPCA_STK014 is not set
-# CONFIG_USB_GSPCA_STV0680 is not set
-# CONFIG_USB_GSPCA_SUNPLUS is not set
-# CONFIG_USB_GSPCA_T613 is not set
-# CONFIG_USB_GSPCA_TV8532 is not set
-# CONFIG_USB_GSPCA_VC032X is not set
-# CONFIG_USB_GSPCA_ZC3XX is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HID is not set
-# CONFIG_USB_HSO is not set
-# CONFIG_USB_HWA_HCD is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_IP_COMMON is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1362_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_KC2190 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LIBUSUAL is not set
-# CONFIG_USB_M5602 is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_NET_AX8817X is not set
-# CONFIG_USB_NET_CDC_EEM is not set
-# CONFIG_USB_NET_CDCETHER is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_INT51X1 is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-# CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_OHCI_HCD_PCI is not set
-# CONFIG_USB_OHCI_HCD_PPC_OF is not set
-# CONFIG_USB_OHCI_HCD_PPC_SOC is not set
-# CONFIG_USB_OHCI_HCD_SSB is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_OXU210HP_HCD is not set
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_PWC_INPUT_EVDEV is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_S2255 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CP210X is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_QUALCOMM is not set
-# CONFIG_USB_SERIAL_QUATECH2 is not set
-# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# CONFIG_USB_SERIAL_SYMBOL is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-# CONFIG_USB_STKWEBCAM is not set
-CONFIG_USB_STORAGE_ALAUDA=y
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_FREECOM=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_KARMA=y
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-# CONFIG_USB_STORAGE_SIERRA is not set
-CONFIG_USB_STORAGE_USBAT=y
-# CONFIG_USB_STV06XX is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_TMC is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_UEAGLEATM is not set
-# CONFIG_USB_ULPI is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_VICAM is not set
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-# CONFIG_USB_VIDEO_CLASS is not set
-# CONFIG_USB_VST is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_WHCI_HCD is not set
-# CONFIG_USB_WUSB_CBAF is not set
-# CONFIG_USB_WUSB is not set
-# CONFIG_USB_XHCI_HCD is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_XUSBATM is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USE_GENERIC_SMP_HELPERS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_UWB is not set
-# CONFIG_VETH is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_VGA_ARB is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_VIDEO_ADV7170 is not set
-# CONFIG_VIDEO_ADV7175 is not set
-# CONFIG_VIDEO_ADV7180 is not set
-# CONFIG_VIDEO_ADV7343 is not set
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_ALLOW_V4L1 is not set
-# CONFIG_VIDEO_BT819 is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BT856 is not set
-# CONFIG_VIDEO_BT866 is not set
-# CONFIG_VIDEO_CAFE_CCIC is not set
-# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_CX231XX is not set
-# CONFIG_VIDEO_CX2341X is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_CX88 is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_VIDEO_DPC is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-# CONFIG_VIDEO_GO7007 is not set
-# CONFIG_VIDEO_HDPVR is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-# CONFIG_VIDEO_HEXIUM_ORION is not set
-# CONFIG_VIDEO_IR_I2C is not set
-# CONFIG_VIDEO_IVTV is not set
-# CONFIG_VIDEO_KS0127 is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_MEDIA is not set
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_MXB is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_VIDEO_OV7670 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_SAA6588 is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA7111 is not set
-# CONFIG_VIDEO_SAA7114 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_SAA7134 is not set
-# CONFIG_VIDEO_SAA717X is not set
-# CONFIG_VIDEO_SAA7185 is not set
-# CONFIG_VIDEO_SAA7191 is not set
-# CONFIG_VIDEO_SH_MOBILE_CEU is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_TDA7432 is not set
-# CONFIG_VIDEO_TDA9840 is not set
-# CONFIG_VIDEO_TDA9875 is not set
-# CONFIG_VIDEO_TEA6415C is not set
-# CONFIG_VIDEO_TEA6420 is not set
-# CONFIG_VIDEO_THS7303 is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_TVAUDIO is not set
-# CONFIG_VIDEO_TVP514X is not set
-# CONFIG_VIDEO_TVP5150 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_V4L1_COMPAT=y
-# CONFIG_VIDEO_V4L1 is not set
-# CONFIG_VIDEO_V4L2_COMMON is not set
-# CONFIG_VIDEO_V4L2 is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_VP27SMPX is not set
-# CONFIG_VIDEO_VPX3220 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIRQ_DEBUG is not set
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_VIRTUALIZATION is not set
-# CONFIG_VITESSE_PHY is not set
-# CONFIG_VLAN_8021Q_GVRP is not set
-CONFIG_VLAN_8021Q=y
-# CONFIG_VME_BUS is not set
-# CONFIG_VM_EVENT_COUNTERS is not set
-# CONFIG_VMSPLIT_1G is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_2G_OPT is not set
-# CONFIG_VMSPLIT_3G_OPT is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMXNET3 is not set
-# CONFIG_VT6655 is not set
-# CONFIG_VT6656 is not set
-# CONFIG_VT is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_W1_CON is not set
-# CONFIG_W1 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_GPIO is not set
-# CONFIG_W1_MASTER_MATROX is not set
-# CONFIG_W1_SLAVE_BQ27000 is not set
-# CONFIG_W1_SLAVE_DS2431 is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W83627HF_WDT is not set
-# CONFIG_W83697HF_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_W83977F_WDT is not set
-# CONFIG_WAN is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_WANXL is not set
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WDTPCI is not set
-# CONFIG_WIMAX is not set
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS=y
-CONFIG_WLAN_80211=y
-# CONFIG_WLAN_PRE80211 is not set
-CONFIG_WLAN=y
-# CONFIG_WORKQUEUE_TRACER is not set
-# CONFIG_WR_PPMC is not set
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-CONFIG_WEXT_PRIV=y
-CONFIG_WEXT_SPY=y
-# CONFIG_X25 is not set
-# CONFIG_XFRM_IPCOMP is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_USER is not set
-CONFIG_XFRM=y
-# CONFIG_XFS_DEBUG is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_SECURITY is not set
-# CONFIG_XILINX_EMACLITE is not set
-# CONFIG_XILINX_LL_TEMAC is not set
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_YAFFS_FS is not set
-# CONFIG_YAM is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_YENTA is not set
-# CONFIG_YENTA_O2 is not set
-# CONFIG_YENTA_RICOH is not set
-# CONFIG_YENTA_TI is not set
-# CONFIG_YENTA_TOSHIBA is not set
-# CONFIG_ZD1211RW_DEBUG is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_ZEROPLUS_FF is not set
-# CONFIG_ZISOFS_FS is not set
-CONFIG_ZISOFS=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ZONE_DMA=y
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
diff --git a/target/linux/generic-2.6/config-2.6.34 b/target/linux/generic-2.6/config-2.6.34
deleted file mode 100644 (file)
index 03ed787..0000000
+++ /dev/null
@@ -1,2871 +0,0 @@
-# CONFIG_6PACK is not set
-# CONFIG_8139CP is not set
-# CONFIG_8139TOO is not set
-# CONFIG_9P_FS is not set
-# CONFIG_AB3100_CORE is not set
-# CONFIG_AB4500_CORE is not set
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_ACENIC is not set
-# CONFIG_ACPI_POWER_METER is not set
-# CONFIG_ACORN_PARTITION is not set
-# CONFIG_AD525X_DPOT is not set
-# CONFIG_ADAPTEC_STARFIRE is not set
-# CONFIG_ADFS_FS is not set
-# CONFIG_ADM6996_PHY is not set
-# CONFIG_ADM8211 is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_AF_RXRPC is not set
-# CONFIG_AFS_FS is not set
-# CONFIG_AGP is not set
-CONFIG_AIO=y
-# CONFIG_AIRO_CS is not set
-# CONFIG_AIRO is not set
-# CONFIG_ALIM7101_WDT is not set
-# CONFIG_ALTERA_PCIE_CHDMA is not set
-# CONFIG_R8187SE is not set
-# CONFIG_AMD8111_ETH is not set
-# CONFIG_AMIGA_PARTITION is not set
-# CONFIG_ANDROID is not set
-CONFIG_ANON_INODES=y
-# CONFIG_APPLICOM is not set
-# CONFIG_AR8216_PHY is not set
-# CONFIG_AR9170_USB is not set
-# CONFIG_ARCH_AAEC2000 is not set
-# CONFIG_ARCH_AT91 is not set
-# CONFIG_ARCH_BCMRING is not set
-# CONFIG_ARCH_CLPS711X is not set
-# CONFIG_ARCH_DAVINCI is not set
-# CONFIG_ARCH_DOVE is not set
-# CONFIG_ARCH_EBSA110 is not set
-# CONFIG_ARCH_EP93XX is not set
-CONFIG_ARCH_FLATMEM_ENABLE=y
-# CONFIG_ARCH_FOOTBRIDGE is not set
-# CONFIG_ARCH_GEMINI is not set
-# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
-# CONFIG_ARCH_INTEGRATOR is not set
-# CONFIG_ARCH_IOP13XX is not set
-# CONFIG_ARCH_IOP32X is not set
-# CONFIG_ARCH_IOP33X is not set
-# CONFIG_ARCH_IXP2000 is not set
-# CONFIG_ARCH_IXP23XX is not set
-# CONFIG_ARCH_IXP4XX is not set
-# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_L7200 is not set
-# CONFIG_ARCH_LH7A40X is not set
-# CONFIG_ARCH_LOKI is not set
-# CONFIG_ARCH_MMP is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
-# CONFIG_ARCH_NETX is not set
-# CONFIG_ARCH_NOMADIK is not set
-# CONFIG_ARCH_NS9XXX is not set
-# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_ORION5X is not set
-# CONFIG_ARCH_PNX4008 is not set
-# CONFIG_ARCH_PXA is not set
-# CONFIG_ARCH_REALVIEW is not set
-# CONFIG_ARCH_RPC is not set
-# CONFIG_ARCH_S3C2410 is not set
-# CONFIG_ARCH_S3C64XX is not set
-# CONFIG_ARCH_S5PC1XX is not set
-# CONFIG_ARCH_SA1100 is not set
-# CONFIG_ARCH_SHARK is not set
-# CONFIG_ARCH_STMP3XXX is not set
-# CONFIG_ARCH_U300 is not set
-# CONFIG_ARCH_U8500 is not set
-# CONFIG_ARCH_VERSATILE is not set
-# CONFIG_ARCH_W90X900 is not set
-# CONFIG_ARCNET is not set
-# CONFIG_ARM_UNWIND is not set
-CONFIG_ARPD=y
-# CONFIG_ARTHUR is not set
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_ASUS_OLED is not set
-# CONFIG_ASYNC_TX_DMA is not set
-# CONFIG_AT24 is not set
-# CONFIG_AT76C50X_USB is not set
-# CONFIG_ATA_ACPI is not set
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_ATA is not set
-# CONFIG_ATALK is not set
-# CONFIG_ATA_NONSTANDARD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_ATA_PIIX is not set
-# CONFIG_ATARI_PARTITION is not set
-CONFIG_ATA_SFF=y
-# CONFIG_ATA_VERBOSE_ERROR is not set
-# CONFIG_ATH5K is not set
-# CONFIG_ATH9K is not set
-# CONFIG_ATL1C is not set
-# CONFIG_ATL1E is not set
-# CONFIG_ATL1 is not set
-# CONFIG_ATL2 is not set
-# CONFIG_ATM_AMBASSADOR is not set
-CONFIG_ATM_BR2684_IPFILTER=y
-# CONFIG_ATM_BR2684 is not set
-# CONFIG_ATM_CLIP is not set
-CONFIG_ATM_CLIP_NO_ICMP=y
-# CONFIG_ATM_DRIVERS is not set
-# CONFIG_ATM_DUMMY is not set
-# CONFIG_ATMEL is not set
-# CONFIG_ATM_ENI is not set
-# CONFIG_ATM_FIRESTREAM is not set
-# CONFIG_ATM_FORE200E is not set
-# CONFIG_ATM_FORE200E_MAYBE is not set
-# CONFIG_ATM_HE is not set
-# CONFIG_ATM_HORIZON is not set
-# CONFIG_ATM_IA is not set
-# CONFIG_ATM_IDT77252 is not set
-# CONFIG_ATM is not set
-# CONFIG_ATM_LANAI is not set
-# CONFIG_ATM_LANE is not set
-# CONFIG_ATM_MPOA is not set
-# CONFIG_ATM_NICSTAR is not set
-# CONFIG_ATM_SOLOS is not set
-# CONFIG_ATM_TCP is not set
-# CONFIG_ATM_ZATM is not set
-# CONFIG_AUDIT is not set
-# CONFIG_AUTOFS4_FS is not set
-# CONFIG_AUTOFS_FS is not set
-# CONFIG_AUXDISPLAY is not set
-# CONFIG_AX25_DAMA_SLAVE is not set
-# CONFIG_AX25 is not set
-# CONFIG_AX88796 is not set
-# CONFIG_B3DFG is not set
-# CONFIG_B43 is not set
-# CONFIG_B43LEGACY is not set
-# CONFIG_B44 is not set
-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-CONFIG_BASE_FULL=y
-CONFIG_BASE_SMALL=0
-# CONFIG_BASLER_EXCITE is not set
-# CONFIG_BATTERY_BQ27000_HDQ is not set
-# CONFIG_BATTERY_BQ27x00 is not set
-# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_DS2782 is not set
-# CONFIG_BATTERY_MAX17040 is not set
-# CONFIG_BAYCOM_EPP is not set
-# CONFIG_BAYCOM_PAR is not set
-# CONFIG_BAYCOM_SER_FDX is not set
-# CONFIG_BAYCOM_SER_HDX is not set
-CONFIG_BCM43XX_DEBUG=y
-CONFIG_BCM43XX_DMA_AND_PIO_MODE=y
-# CONFIG_BCM43XX_DMA_MODE is not set
-CONFIG_BCM43XX_DMA=y
-# CONFIG_BCM43XX is not set
-# CONFIG_BCM43XX_PIO_MODE is not set
-CONFIG_BCM43XX_PIO=y
-# CONFIG_BE2ISCSI is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_BINARY_PRINTF is not set
-# CONFIG_BINFMT_AOUT is not set
-CONFIG_BINFMT_ELF=y
-# CONFIG_BINFMT_MISC is not set
-# CONFIG_BLINK is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-# CONFIG_BLK_DEV_4DRIVES is not set
-# CONFIG_BLK_DEV_AEC62XX is not set
-# CONFIG_BLK_DEV_ALI14XX is not set
-# CONFIG_BLK_DEV_ALI15X3 is not set
-# CONFIG_BLK_DEV_AMD74XX is not set
-# CONFIG_BLK_DEV_ATIIXP is not set
-# CONFIG_BLK_DEV_BSG is not set
-# CONFIG_BLK_DEV_CMD640 is not set
-# CONFIG_BLK_DEV_CMD64X is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-# CONFIG_BLK_DEV_CS5520 is not set
-# CONFIG_BLK_DEV_CS5530 is not set
-# CONFIG_BLK_DEV_CS5535 is not set
-# CONFIG_BLK_DEV_CS5536 is not set
-# CONFIG_BLK_DEV_CY82C693 is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_DELKIN is not set
-# CONFIG_BLK_DEV_DTC2278 is not set
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_GENERIC is not set
-# CONFIG_BLK_DEV_HD_IDE is not set
-# CONFIG_BLK_DEV_HD is not set
-# CONFIG_BLK_DEV_HD_ONLY is not set
-# CONFIG_BLK_DEV_HPT34X is not set
-# CONFIG_BLK_DEV_HPT366 is not set
-# CONFIG_BLK_DEV_HT6560B is not set
-# CONFIG_BLK_DEV_IDEACPI is not set
-# CONFIG_BLK_DEV_IDECD is not set
-# CONFIG_BLK_DEV_IDECS is not set
-# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
-# CONFIG_BLK_DEV_IDEFLOPPY is not set
-# CONFIG_BLK_DEV_IDEPCI is not set
-# CONFIG_BLK_DEV_IDEPNP is not set
-# CONFIG_BLK_DEV_IDE_SATA is not set
-# CONFIG_BLK_DEV_IDESCSI is not set
-# CONFIG_BLK_DEV_IDETAPE is not set
-CONFIG_BLK_DEV_INITRD=y
-# CONFIG_BLK_DEV_INTEGRITY is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-# CONFIG_BLK_DEV_IT8172 is not set
-# CONFIG_BLK_DEV_IT8213 is not set
-# CONFIG_BLK_DEV_IT821X is not set
-# CONFIG_BLK_DEV_JMICRON is not set
-# CONFIG_BLK_DEV_LOOP is not set
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_NS87415 is not set
-# CONFIG_BLK_DEV_OFFBOARD is not set
-# CONFIG_BLK_DEV_OPTI621 is not set
-# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-# CONFIG_BLK_DEV_PIIX is not set
-# CONFIG_BLK_DEV_PLATFORM is not set
-# CONFIG_BLK_DEV_QD65XX is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_BLK_DEV_RZ1000 is not set
-# CONFIG_BLK_DEV_SC1200 is not set
-# CONFIG_BLK_DEV_SD is not set
-# CONFIG_BLK_DEV_SIIMAGE is not set
-# CONFIG_BLK_DEV_SIS5513 is not set
-# CONFIG_BLK_DEV_SL82C105 is not set
-# CONFIG_BLK_DEV_SLC90E66 is not set
-# CONFIG_BLK_DEV_SR is not set
-# CONFIG_BLK_DEV_SVWKS is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_TC86C001 is not set
-# CONFIG_BLK_DEV_TRIFLEX is not set
-# CONFIG_BLK_DEV_TRM290 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_UMC8672 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_VIA82CXXX is not set
-# CONFIG_BLK_DEV_XIP is not set
-CONFIG_BLK_DEV=y
-CONFIG_BLOCK=y
-# CONFIG_BNX2 is not set
-# CONFIG_BONDING is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_BPQETHER is not set
-# CONFIG_BRIDGE_EBT_802_3 is not set
-# CONFIG_BRIDGE_EBT_AMONG is not set
-# CONFIG_BRIDGE_EBT_ARP is not set
-# CONFIG_BRIDGE_EBT_ARPREPLY is not set
-# CONFIG_BRIDGE_EBT_BROUTE is not set
-# CONFIG_BRIDGE_EBT_DNAT is not set
-# CONFIG_BRIDGE_EBT_IP6 is not set
-# CONFIG_BRIDGE_EBT_IP is not set
-# CONFIG_BRIDGE_EBT_LIMIT is not set
-# CONFIG_BRIDGE_EBT_LOG is not set
-# CONFIG_BRIDGE_EBT_MARK is not set
-# CONFIG_BRIDGE_EBT_MARK_T is not set
-# CONFIG_BRIDGE_EBT_NFLOG is not set
-# CONFIG_BRIDGE_EBT_PKTTYPE is not set
-# CONFIG_BRIDGE_EBT_REDIRECT is not set
-# CONFIG_BRIDGE_EBT_SNAT is not set
-# CONFIG_BRIDGE_EBT_STP is not set
-# CONFIG_BRIDGE_EBT_T_FILTER is not set
-# CONFIG_BRIDGE_EBT_T_NAT is not set
-# CONFIG_BRIDGE_EBT_ULOG is not set
-# CONFIG_BRIDGE_EBT_VLAN is not set
-# CONFIG_BRIDGE_NETFILTER is not set
-# CONFIG_BRIDGE_NF_EBTABLES is not set
-CONFIG_BRIDGE=y
-# CONFIG_BROADCOM_PHY is not set
-CONFIG_BROKEN_ON_SMP=y
-# CONFIG_BSD_DISKLABEL is not set
-# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-CONFIG_BSD_PROCESS_ACCT=y
-# CONFIG_BT_ATH3K is not set
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_BNEP_MC_FILTER=y
-CONFIG_BT_BNEP_PROTO_FILTER=y
-# CONFIG_BT_CMTP is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBTSDIO is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIBTUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-CONFIG_BT_HCIUART_BCSP=y
-CONFIG_BT_HCIUART_H4=y
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIUART_LL is not set
-# CONFIG_BT_HCIUSB is not set
-CONFIG_BT_HCIUSB_SCO=y
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_BT_HIDP is not set
-# CONFIG_BT is not set
-# CONFIG_BT_L2CAP is not set
-# CONFIG_BT_MRVL is not set
-# CONFIG_BT_RFCOMM is not set
-CONFIG_BT_RFCOMM_TTY=y
-# CONFIG_BTRFS_FS is not set
-# CONFIG_BT_SCO is not set
-CONFIG_BUG=y
-# CONFIG_C2PORT is not set
-# CONFIG_CAN is not set
-# CONFIG_CAPI_AVM is not set
-# CONFIG_CAPI_EICON is not set
-# CONFIG_CAPI_TRACE is not set
-CONFIG_CARDBUS=y
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_CASSINI is not set
-# CONFIG_CB710_CORE is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_CFG80211 is not set
-# CONFIG_CGROUPS is not set
-# CONFIG_CHELSIO_T1 is not set
-# CONFIG_CHELSIO_T3 is not set
-# CONFIG_CHR_DEV_OSST is not set
-# CONFIG_CHR_DEV_SCH is not set
-# CONFIG_CHR_DEV_SG is not set
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CICADA_PHY is not set
-# CONFIG_CIFS_DEBUG2 is not set
-# CONFIG_CIFS_EXPERIMENTAL is not set
-# CONFIG_CIFS is not set
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_STATS2 is not set
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_WEAK_PW_HASH is not set
-# CONFIG_CIFS_XATTR is not set
-# CONFIG_CLASSIC_RCU=y
-CONFIG_CLS_U32_MARK=y
-CONFIG_CLS_U32_PERF=y
-CONFIG_CMDLINE=""
-# CONFIG_CNIC is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_COMEDI is not set
-# CONFIG_COMPAT_BRK is not set
-CONFIG_COMPAT_NET_DEV_OPS=y
-# CONFIG_CONFIGFS_FS is not set
-# CONFIG_CONNECTOR is not set
-CONFIG_CONSTRUCTORS=y
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
-# CONFIG_CPU_DCACHE_DISABLE is not set
-# CONFIG_CPU_FREQ is not set
-# CONFIG_CPU_IDLE is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_CRASH_DUMP is not set
-# CONFIG_CRC16 is not set
-CONFIG_CRC32=y
-# CONFIG_CRC7 is not set
-# CONFIG_CRC_CCITT is not set
-# CONFIG_CRC_ITU_T is not set
-# CONFIG_CRC_T10DIF is not set
-CONFIG_CROSSCOMPILE=y
-# CONFIG_CRYPTO_AEAD is not set
-# CONFIG_CRYPTO_AES_586 is not set
-# CONFIG_CRYPTO_AES is not set
-CONFIG_CRYPTO_ALGAPI2=y
-CONFIG_CRYPTO_ALGAPI=y
-# CONFIG_CRYPTO_ANSI_CPRNG is not set
-# CONFIG_CRYPTO_ANUBIS is not set
-# CONFIG_CRYPTO_ARC4 is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_BLKCIPHER is not set
-# CONFIG_CRYPTO_BLOWFISH is not set
-# CONFIG_CRYPTO_CAMELLIA is not set
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-# CONFIG_CRYPTO_CBC is not set
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_CRC32C_INTEL is not set
-# CONFIG_CRYPTO_CRC32C is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-# CONFIG_CRYPTO_DEFLATE is not set
-# CONFIG_CRYPTO_DES is not set
-# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-# CONFIG_CRYPTO_ECB is not set
-# CONFIG_CRYPTO_FCRYPT is not set
-# CONFIG_CRYPTO_FIPS is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_GF128MUL is not set
-# CONFIG_CRYPTO_GHASH is not set
-# CONFIG_CRYPTO_GHASH_CLMUL_NI_INTEL is not set
-# CONFIG_CRYPTO_HASH is not set
-# CONFIG_CRYPTO_HMAC is not set
-# CONFIG_CRYPTO_HW is not set
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_LRW is not set
-# CONFIG_CRYPTO_LZO is not set
-# CONFIG_CRYPTO_MANAGER2 is not set
-# CONFIG_CRYPTO_MANAGER is not set
-CONFIG_CRYPTO_MANAGER_NO_TESTS=y
-# CONFIG_CRYPTO_MD4 is not set
-# CONFIG_CRYPTO_MD5 is not set
-# CONFIG_CRYPTO_MICHAEL_MIC is not set
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_PCBC is not set
-CONFIG_CRYPTO_PCOMP=y
-# CONFIG_CRYPTO_PRNG is not set
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-# CONFIG_CRYPTO_RNG is not set
-# CONFIG_CRYPTO_SALSA20_586 is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SEED is not set
-# CONFIG_CRYPTO_SEQIV is not set
-# CONFIG_CRYPTO_SERPENT is not set
-# CONFIG_CRYPTO_SHA1 is not set
-# CONFIG_CRYPTO_SHA256 is not set
-# CONFIG_CRYPTO_SHA512 is not set
-# CONFIG_CRYPTO_TEA is not set
-# CONFIG_CRYPTO_TEST is not set
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-# CONFIG_CRYPTO_TWOFISH_COMMON is not set
-# CONFIG_CRYPTO_TWOFISH is not set
-CONFIG_CRYPTO_UNLZMA=y
-# CONFIG_CRYPTO_VMAC is not set
-# CONFIG_CRYPTO_WP512 is not set
-# CONFIG_CRYPTO_XCBC is not set
-# CONFIG_CRYPTO_XTS is not set
-CONFIG_CRYPTO=y
-CONFIG_CRYPTO_ZLIB=y
-# CONFIG_CUSE is not set
-# CONFIG_DAB is not set
-# CONFIG_DAVICOM_PHY is not set
-# CONFIG_DCB is not set
-# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
-# CONFIG_DEBUG_BUGVERBOSE is not set
-# CONFIG_DEBUG_CREDENTIALS is not set
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_DEBUG_ERRORS is not set
-# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
-CONFIG_DEBUG_FS=y
-# CONFIG_DEBUG_GPIO is not set
-# CONFIG_DEBUG_KERNEL is not set
-# CONFIG_DEBUG_KMEMLEAK is not set
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_LL is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_DEBUG_NOTIFIERS is not set
-# CONFIG_DEBUG_MEMORY_INIT is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_SG is not set
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DEBUG_SLAB is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_PREEMPT is not set
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
-# CONFIG_DECNET is not set
-CONFIG_DECOMPRESS_LZMA_NEEDED=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_BIC is not set
-# CONFIG_DEFAULT_CFQ is not set
-# CONFIG_DEFAULT_CUBIC is not set
-CONFIG_DEFAULT_DEADLINE=y
-# CONFIG_DEFAULT_HTCP is not set
-CONFIG_DEFAULT_IOSCHED="deadline"
-CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
-# CONFIG_DEFAULT_NOOP is not set
-# CONFIG_DEFAULT_RENO is not set
-CONFIG_DEFAULT_TCP_CONG="westwood"
-# CONFIG_DEFAULT_VEGAS is not set
-CONFIG_DEFAULT_WESTWOOD=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-# CONFIG_DETECT_HUNG_TASK is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_DEVKMEM is not set
-# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
-# CONFIG_DEVTMPFS_MOUNT is not set
-# CONFIG_DEVTMPFS is not set
-# CONFIG_DGRS is not set
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_DISPLAY_SUPPORT is not set
-# CONFIG_DL2K is not set
-# CONFIG_DLM is not set
-# CONFIG_DMA_API_DEBUG is not set
-# CONFIG_DMADEVICES is not set
-# CONFIG_DMA_ENGINE is not set
-# CONFIG_DMASCC is not set
-# CONFIG_DMATEST is not set
-# CONFIG_DM_LOG_USERSPACE is not set
-# CONFIG_DNET is not set
-# CONFIG_DNOTIFY is not set
-# CONFIG_DRAGONRISE_FF is not set
-# CONFIG_DRM is not set
-# CONFIG_DS1682 is not set
-# CONFIG_DST is not set
-# CONFIG_DTLK is not set
-# CONFIG_DUMMY is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_DVB is not set
-# CONFIG_DYNAMIC_DEBUG is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
-# CONFIG_E1000E is not set
-# CONFIG_E1000 is not set
-# CONFIG_E100 is not set
-# CONFIG_ECHO is not set
-# CONFIG_ECONET is not set
-# CONFIG_EDAC is not set
-# CONFIG_EEPRO100 is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_EEPROM_AT24 is not set
-# CONFIG_EEPROM_AT25 is not set
-# CONFIG_EEPROM_LEGACY is not set
-# CONFIG_EEPROM_MAX6875 is not set
-# CONFIG_EFI_PARTITION is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_ELF_CORE is not set
-CONFIG_EMBEDDED=y
-# CONFIG_ENABLE_MUST_CHECK is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-# CONFIG_ENC28J60 is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_EPIC100 is not set
-CONFIG_EPOLL=y
-# CONFIG_EQUALIZER is not set
-# CONFIG_ET131X is not set
-# CONFIG_ETHOC is not set
-CONFIG_EVENTFD=y
-# CONFIG_EVENT_TRACER is not set
-CONFIG_EXPERIMENTAL=y
-# CONFIG_EXPORTFS is not set
-# CONFIG_EXT2_FS is not set
-# CONFIG_EXT2_FS_XATTR is not set
-# CONFIG_EXT2_FS_XIP is not set
-# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
-# CONFIG_EXT3_FS is not set
-# CONFIG_EXT3_FS_XATTR is not set
-# CONFIG_EXT4_DEBUG is not set
-# CONFIG_EXT4DEV_FS is not set
-# CONFIG_EXT4_FS is not set
-# CONFIG_EXT4_USE_FOR_EXT23 is not set
-CONFIG_EXTRA_FIRMWARE=""
-CONFIG_EXTRA_TARGETS=""
-# CONFIG_EZX_PCAP is not set
-# CONFIG_FAIR_GROUP_SCHED is not set
-# CONFIG_FAULT_INJECTION is not set
-CONFIG_FAT_DEFAULT_CODEPAGE=437
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-# CONFIG_FAT_FS is not set
-# CONFIG_FB_3DFX is not set
-# CONFIG_FB_ARC is not set
-# CONFIG_FB_ARK is not set
-# CONFIG_FB_ASILIANT is not set
-# CONFIG_FB_ATY128 is not set
-# CONFIG_FB_ATY is not set
-# CONFIG_FB_BACKLIGHT is not set
-# CONFIG_FB_BOOT_VESA_SUPPORT is not set
-# CONFIG_FB_BROADSHEET is not set
-# CONFIG_FB_CARMINE is not set
-# CONFIG_FB_CFB_COPYAREA is not set
-# CONFIG_FB_CFB_FILLRECT is not set
-# CONFIG_FB_CFB_IMAGEBLIT is not set
-# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
-# CONFIG_FB_CIRRUS is not set
-# CONFIG_FB_CYBER2000 is not set
-# CONFIG_FB_DDC is not set
-# CONFIG_FB_EARLYSUSPEND is not set
-# CONFIG_FB_FOREIGN_ENDIAN is not set
-# CONFIG_FB_GEODE is not set
-# CONFIG_FB_GOLDFISH is not set
-# CONFIG_FB_HGA is not set
-# CONFIG_FB_IBM_GXT4500 is not set
-# CONFIG_FB_IMSTT is not set
-# CONFIG_FB is not set
-# CONFIG_FB_KYRO is not set
-# CONFIG_FB_LE80578 is not set
-# CONFIG_FB_MACMODES is not set
-# CONFIG_FB_MATROX is not set
-# CONFIG_FB_MB862XX is not set
-# CONFIG_FB_METRONOME is not set
-# CONFIG_FB_MODE_HELPERS is not set
-# CONFIG_FB_N411 is not set
-# CONFIG_FB_NEOMAGIC is not set
-# CONFIG_FB_NVIDIA is not set
-# CONFIG_FB_OF is not set
-# CONFIG_FB_PM2 is not set
-# CONFIG_FB_PM3 is not set
-# CONFIG_FB_PS3 is not set
-# CONFIG_FB_PXA is not set
-# CONFIG_FB_RADEON is not set
-# CONFIG_FB_RIVA is not set
-# CONFIG_FB_S1D13XXX is not set
-# CONFIG_FB_S3 is not set
-# CONFIG_FB_SAVAGE is not set
-# CONFIG_FB_SIS is not set
-# CONFIG_FB_SVGALIB is not set
-# CONFIG_FB_SYS_COPYAREA is not set
-# CONFIG_FB_SYS_FILLRECT is not set
-# CONFIG_FB_SYS_FOPS is not set
-# CONFIG_FB_SYS_IMAGEBLIT is not set
-# CONFIG_FB_TILEBLITTING is not set
-# CONFIG_FB_TRIDENT is not set
-# CONFIG_FB_UDL is not set
-# CONFIG_FB_VGA16 is not set
-# CONFIG_FB_VIA is not set
-# CONFIG_FB_VIRTUAL is not set
-# CONFIG_FB_VOODOO1 is not set
-# CONFIG_FB_VT8623 is not set
-# CONFIG_FCOE_FNIC is not set
-# CONFIG_FCOE is not set
-# CONFIG_FDDI is not set
-# CONFIG_FEALNX is not set
-CONFIG_FIB_RULES=y
-CONFIG_FILE_LOCKING=y
-# CONFIG_FIREWIRE is not set
-# CONFIG_FIRMWARE_IN_KERNEL is not set
-# CONFIG_FIXED_PHY is not set
-CONFIG_FLATMEM_MANUAL=y
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-# CONFIG_FORCEDETH is not set
-CONFIG_FRAME_WARN=1024
-# CONFIG_FRAMEBUFFER_CONSOLE is not set
-# CONFIG_FREEZER is not set
-# CONFIG_FSCACHE is not set
-CONFIG_FSNOTIFY=y
-# CONFIG_FS_POSIX_ACL is not set
-# CONFIG_FTL is not set
-# CONFIG_FTRACE is not set
-# CONFIG_FTRACE_STARTUP_TEST is not set
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_FUSE_FS is not set
-# CONFIG_FUSION_FC is not set
-# CONFIG_FUSION is not set
-# CONFIG_FUSION_SAS is not set
-# CONFIG_FUSION_SPI is not set
-CONFIG_FUTEX=y
-CONFIG_FW_LOADER=y
-CONFIG_GACT_PROB=y
-# CONFIG_GAMEPORT is not set
-# CONFIG_GCOV_KERNEL is not set
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_HWEIGHT=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_TIME=y
-# CONFIG_GIGASET_DEBUG is not set
-# CONFIG_GFS2_FS is not set
-# CONFIG_GPIO_ADP5588 is not set
-# CONFIG_GPIO_BT8XX is not set
-# CONFIG_GPIO_CS5535 is not set
-# CONFIG_GPIO_DEVICE is not set
-# CONFIG_GPIO_LANGWELL is not set
-# CONFIG_GPIOLIB is not set
-# CONFIG_GPIO_MAX7301 is not set
-# CONFIG_GPIO_MAX732X is not set
-# CONFIG_GPIO_MC33880 is not set
-# CONFIG_GPIO_MCP23S08 is not set
-# CONFIG_GPIO_PCA953X is not set
-# CONFIG_GPIO_PCF857X is not set
-# CONFIG_GPIO_SYSFS is not set
-# CONFIG_GPIO_XILINX is not set
-# CONFIG_GREENASIA_FF is not set
-# CONFIG_GROUP_SCHED is not set
-# CONFIG_HAMACHI is not set
-CONFIG_HAMRADIO=y
-# CONFIG_HAPPYMEAL is not set
-# CONFIG_HAVE_AOUT is not set
-CONFIG_HAVE_MLOCKED_PAGE_BIT=y
-CONFIG_HAVE_MLOCK=y
-# CONFIG_HCALL_STATS is not set
-# CONFIG_HDLC_CISCO is not set
-# CONFIG_HDLC_FR is not set
-# CONFIG_HDLC is not set
-# CONFIG_HDLC_PPP is not set
-# CONFIG_HDLC_RAW_ETH is not set
-# CONFIG_HDLC_RAW is not set
-# CONFIG_HEADERS_CHECK is not set
-# CONFIG_HECI is not set
-# CONFIG_HERMES is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_HID_A4TECH is not set
-# CONFIG_HID_APPLE is not set
-# CONFIG_HID_BELKIN is not set
-# CONFIG_HID_BRIGHT is not set
-# CONFIG_HID_CHERRY is not set
-# CONFIG_HID_CHICONY is not set
-# CONFIG_HID_COMPAT is not set
-# CONFIG_HID_CYPRESS is not set
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HID_DELL is not set
-# CONFIG_HID_DRAGONRISE is not set
-# CONFIG_HID_EZKEY is not set
-# CONFIG_HID_FF is not set
-# CONFIG_HID_GREENASIA is not set
-# CONFIG_HID_GYRATION is not set
-# CONFIG_HID is not set
-# CONFIG_HID_KENSINGTON is not set
-# CONFIG_HID_KYE is not set
-# CONFIG_HID_LOGITECH is not set
-# CONFIG_HID_MICROSOFT is not set
-# CONFIG_HID_MONTEREY is not set
-# CONFIG_HID_NTRIG is not set
-# CONFIG_HID_PANTHERLORD is not set
-# CONFIG_HID_PETALYNX is not set
-# CONFIG_HID_PID is not set
-# CONFIG_HIDRAW is not set
-# CONFIG_HID_SAMSUNG is not set
-# CONFIG_HID_SMARTJOYPLUS is not set
-# CONFIG_HID_SONY is not set
-# CONFIG_HID_SUNPLUS is not set
-# CONFIG_HID_SUPPORT is not set
-# CONFIG_HID_THRUSTMASTER is not set
-# CONFIG_HID_TOPSEED is not set
-# CONFIG_HID_TWINHAN is not set
-# CONFIG_HID_WACOM is not set
-# CONFIG_HID_ZEROPLUS is not set
-# CONFIG_HIGHMEM is not set
-CONFIG_HIGH_RES_TIMERS=y
-# CONFIG_HIPPI is not set
-# CONFIG_HOSTAP_CS is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_HOSTAP_PCI is not set
-# CONFIG_HOSTAP_PLX is not set
-# CONFIG_HOTPLUG_CPU is not set
-# CONFIG_HOTPLUG_PCI is not set
-CONFIG_HOTPLUG=y
-# CONFIG_HP100 is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_HP_ILO is not set
-# CONFIG_HTC_EGPIO is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_HVC_UDBG is not set
-# CONFIG_HWMON is not set
-# CONFIG_HWMON_VID is not set
-# CONFIG_HW_RANDOM_AMD is not set
-# CONFIG_HW_RANDOM_GEODE is not set
-# CONFIG_HW_RANDOM_INTEL is not set
-# CONFIG_HW_RANDOM_TIMERIOMEM is not set
-# CONFIG_HW_RANDOM_VIA is not set
-# CONFIG_HYPERV is not set
-# CONFIG_HYSDN is not set
-CONFIG_HZ=100
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ_100=y
-# CONFIG_HZ_1024 is not set
-# CONFIG_HZ_128 is not set
-# CONFIG_HZ_250 is not set
-# CONFIG_HZ_256 is not set
-# CONFIG_HZ_300 is not set
-# CONFIG_HZ_48 is not set
-# CONFIG_I2C_ALGOBIT is not set
-# CONFIG_I2C_ALGOPCA is not set
-# CONFIG_I2C_ALGOPCF is not set
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_CHARDEV is not set
-# CONFIG_I2C_COMPAT is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_ELEKTOR is not set
-# CONFIG_I2C_GPIO is not set
-# CONFIG_I2C_HELPER_AUTO is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_I810 is not set
-# CONFIG_I2C_IBM_IIC is not set
-# CONFIG_I2C_ISCH is not set
-# CONFIG_I2C is not set
-# CONFIG_I2C_MPC is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_PROSAVAGE is not set
-# CONFIG_I2C_SAVAGE4 is not set
-# CONFIG_I2C_SIMTEC is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-# CONFIG_I2C_VOODOO3 is not set
-# CONFIG_I2O is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_IBM_ASM is not set
-# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
-# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
-# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
-# CONFIG_IBM_NEW_EMAC_RGMII is not set
-# CONFIG_IBM_NEW_EMAC_TAH is not set
-# CONFIG_IBM_NEW_EMAC_ZMII is not set
-# CONFIG_ICPLUS_PHY is not set
-# CONFIG_ICS932S401 is not set
-# CONFIG_IDEDISK_MULTI_MODE is not set
-# CONFIG_IDEDMA_IVB is not set
-# CONFIG_IDEDMA_ONLYDISK is not set
-# CONFIG_IDE_GD is not set
-# CONFIG_IDE is not set
-CONFIG_IDE_MAX_HWIFS=4
-# CONFIG_IDEPCI_SHARE_IRQ is not set
-# CONFIG_IDE_PHISON is not set
-CONFIG_IDE_PROC_FS=y
-# CONFIG_IDE_TASK_IOCTL is not set
-# CONFIG_IEEE1394_DV1394 is not set
-# CONFIG_IEEE1394_ETH1394 is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_IEEE1394_OHCI1394 is not set
-# CONFIG_IEEE1394_PCILYNX is not set
-# CONFIG_IEEE1394_RAWIO is not set
-# CONFIG_IEEE1394_VERBOSEDEBUG is not set
-# CONFIG_IEEE1394_VIDEO1394 is not set
-# CONFIG_IEEE80211_CRYPT_CCMP is not set
-# CONFIG_IEEE80211_CRYPT_TKIP is not set
-# CONFIG_IEEE80211_CRYPT_WEP is not set
-# CONFIG_IEEE80211_DEBUG is not set
-# CONFIG_IEEE80211 is not set
-# CONFIG_IEEE80211_SOFTMAC_DEBUG is not set
-# CONFIG_IEEE80211_SOFTMAC is not set
-# CONFIG_IEEE802154 is not set
-# CONFIG_IFB is not set
-# CONFIG_IGB is not set
-# CONFIG_IGBVF is not set
-# CONFIG_IIO is not set
-# CONFIG_RAMZSWAP is not set
-# CONFIG_BATMAN_ADV is not set
-# CONFIG_IKCONFIG is not set
-# CONFIG_IKCONFIG_PROC is not set
-# CONFIG_IMAGE_CMDLINE_HACK is not set
-# CONFIG_IMQ_BEHAVIOR_AA is not set
-# CONFIG_IMQ_BEHAVIOR_AB is not set
-# CONFIG_IMQ_BEHAVIOR_BA is not set
-# CONFIG_IMQ_BEHAVIOR_BB is not set
-# CONFIG_IMQ is not set
-CONFIG_IMQ_NUM_DEVS=2
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-# CONFIG_INET6_TUNNEL is not set
-# CONFIG_INET6_XFRM_MODE_BEET is not set
-# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-# CONFIG_INET6_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET6_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET_AH is not set
-# CONFIG_INET_DIAG is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_LRO is not set
-# CONFIG_INET_TCP_DIAG is not set
-# CONFIG_INET_TUNNEL is not set
-# CONFIG_INET_XFRM_MODE_BEET is not set
-# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET=y
-# CONFIG_INFINIBAND is not set
-# CONFIG_INFTL is not set
-CONFIG_INIT_ENV_ARG_LIMIT=32
-# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
-# CONFIG_INITRAMFS_COMPRESSION_GZIP is not set
-# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
-CONFIG_INITRAMFS_COMPRESSION_NONE=y
-# CONFIG_INOTIFY is not set
-# CONFIG_INOTIFY_USER is not set
-# CONFIG_INPUT_APANEL is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATLAS_BTNS is not set
-# CONFIG_INPUT_CM109 is not set
-# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_EVDEV is not set
-# CONFIG_INPUT_FF_MEMLESS is not set
-# CONFIG_INPUT_GPIO is not set
-# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
-# CONFIG_INPUT is not set
-# CONFIG_INPUT_JOYDEV is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_KEYBOARD is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_MIMIO is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_MOUSEDEV is not set
-# CONFIG_INPUT_MOUSE is not set
-# CONFIG_INPUT_PCSPKR is not set
-# CONFIG_INPUT_POLLDEV is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_SPARSEKMAP is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-# CONFIG_INPUT_TSDEV is not set
-# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_WINBOND_CIR is not set
-# CONFIG_INPUT_WISTRON_BTNS is not set
-# CONFIG_INSTRUMENTATION is not set
-# CONFIG_IOSCHED_AS is not set
-# CONFIG_IOSCHED_CFQ is not set
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_NOOP=y
-# CONFIG_IP1000 is not set
-# CONFIG_IP175C_PHY is not set
-# CONFIG_IP6_NF_FILTER is not set
-# CONFIG_IP6_NF_IPTABLES is not set
-# CONFIG_IP6_NF_MANGLE is not set
-# CONFIG_IP6_NF_MATCH_AH is not set
-# CONFIG_IP6_NF_MATCH_EUI64 is not set
-# CONFIG_IP6_NF_MATCH_FRAG is not set
-# CONFIG_IP6_NF_MATCH_HL is not set
-# CONFIG_IP6_NF_MATCH_IPV6HEADER is not set
-# CONFIG_IP6_NF_MATCH_LIMIT is not set
-# CONFIG_IP6_NF_MATCH_MH is not set
-# CONFIG_IP6_NF_MATCH_OPTS is not set
-# CONFIG_IP6_NF_MATCH_OWNER is not set
-# CONFIG_IP6_NF_MATCH_RT is not set
-# CONFIG_IP6_NF_QUEUE is not set
-# CONFIG_IP6_NF_RAW is not set
-# CONFIG_IP6_NF_TARGET_HL is not set
-# CONFIG_IP6_NF_TARGET_IMQ is not set
-# CONFIG_IP6_NF_TARGET_LOG is not set
-# CONFIG_IP6_NF_TARGET_REJECT is not set
-# CONFIG_IP6_NF_TARGET_ROUTE is not set
-CONFIG_IP_ADVANCED_ROUTER=y
-# CONFIG_IPC_NS is not set
-# CONFIG_IP_DCCP is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-# CONFIG_IPMI_HANDLER is not set
-CONFIG_IP_MROUTE=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_MULTIPLE_TABLES=y
-# CONFIG_IP_NF_AMANDA is not set
-# CONFIG_IP_NF_ARPFILTER is not set
-# CONFIG_IP_NF_ARP_MANGLE is not set
-# CONFIG_IP_NF_ARPTABLES is not set
-# CONFIG_IP_NF_CONNTRACK_EVENTS is not set
-CONFIG_IP_NF_CONNTRACK_MARK=y
-CONFIG_IP_NF_CONNTRACK=y
-CONFIG_IP_NF_CT_ACCT=y
-# CONFIG_IP_NF_CT_PROTO_SCTP is not set
-# CONFIG_IP_NF_FILTER is not set
-# CONFIG_IP_NF_FTP is not set
-# CONFIG_IP_NF_H323 is not set
-# CONFIG_IP_NF_IPTABLES is not set
-# CONFIG_IP_NF_IRC is not set
-# CONFIG_IP_NF_MANGLE is not set
-# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-# CONFIG_IP_NF_MATCH_AH is not set
-# CONFIG_IP_NF_MATCH_ECN is not set
-# CONFIG_IP_NF_MATCH_HASHLIMIT is not set
-# CONFIG_IP_NF_MATCH_IPP2P is not set
-# CONFIG_IP_NF_MATCH_OWNER is not set
-# CONFIG_IP_NF_MATCH_RECENT is not set
-# CONFIG_IP_NF_MATCH_SET is not set
-# CONFIG_IP_NF_MATCH_TIME is not set
-# CONFIG_IP_NF_MATCH_TOS is not set
-# CONFIG_IP_NF_MATCH_TTL is not set
-# CONFIG_IP_NF_NAT_AMANDA is not set
-# CONFIG_IP_NF_NAT_FTP is not set
-# CONFIG_IP_NF_NAT_H323 is not set
-# CONFIG_IP_NF_NAT_IRC is not set
-CONFIG_IP_NF_NAT_NEEDED=y
-# CONFIG_IP_NF_NAT_PPTP is not set
-# CONFIG_IP_NF_NAT_SIP is not set
-# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
-# CONFIG_IP_NF_NAT_TFTP is not set
-CONFIG_IP_NF_NAT=y
-# CONFIG_IP_NF_NETBIOS_NS is not set
-# CONFIG_IP_NF_PPTP is not set
-# CONFIG_IP_NF_QUEUE is not set
-# CONFIG_IP_NF_RAW is not set
-# CONFIG_IP_NF_SECURITY is not set
-CONFIG_IP_NF_SET_HASHSIZE=1024
-# CONFIG_IP_NF_SET_IPHASH is not set
-# CONFIG_IP_NF_SET_IPMAP is not set
-# CONFIG_IP_NF_SET_IPPORTHASH is not set
-# CONFIG_IP_NF_SET_IPTREE is not set
-# CONFIG_IP_NF_SET_IPTREEMAP is not set
-# CONFIG_IP_NF_SET is not set
-# CONFIG_IP_NF_SET_MACIPMAP is not set
-CONFIG_IP_NF_SET_MAX=256
-# CONFIG_IP_NF_SET_NETHASH is not set
-# CONFIG_IP_NF_SET_PORTMAP is not set
-# CONFIG_IP_NF_SIP is not set
-# CONFIG_IP_NF_TARGET_CLUSTERIP is not set
-# CONFIG_IP_NF_TARGET_ECN is not set
-# CONFIG_IP_NF_TARGET_IMQ is not set
-# CONFIG_IP_NF_TARGET_LOG is not set
-# CONFIG_IP_NF_TARGET_MASQUERADE is not set
-# CONFIG_IP_NF_TARGET_NETMAP is not set
-# CONFIG_IP_NF_TARGET_REDIRECT is not set
-# CONFIG_IP_NF_TARGET_REJECT is not set
-# CONFIG_IP_NF_TARGET_ROUTE is not set
-# CONFIG_IP_NF_TARGET_SAME is not set
-# CONFIG_IP_NF_TARGET_SET is not set
-# CONFIG_IP_NF_TARGET_TOS is not set
-# CONFIG_IP_NF_TARGET_TTL is not set
-# CONFIG_IP_NF_TARGET_ULOG is not set
-# CONFIG_IP_NF_TFTP is not set
-# CONFIG_IP_PIMSM_V1 is not set
-# CONFIG_IP_PIMSM_V2 is not set
-# CONFIG_IP_PNP is not set
-CONFIG_IP_ROUTE_FWMARK=y
-CONFIG_IP_ROUTE_MULTIPATH_CACHED=y
-# CONFIG_IP_ROUTE_MULTIPATH_DRR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RANDOM is not set
-# CONFIG_IP_ROUTE_MULTIPATH_RR is not set
-# CONFIG_IP_ROUTE_MULTIPATH_WRANDOM is not set
-CONFIG_IP_ROUTE_MULTIPATH=y
-CONFIG_IP_ROUTE_VERBOSE=y
-# CONFIG_IP_SCTP is not set
-CONFIG_IPSEC_NAT_TRAVERSAL=y
-# CONFIG_IPV6 is not set
-# CONFIG_IPV6_MIP6 is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTE_INFO is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_SIT is not set
-# CONFIG_IPV6_SIT_6RD is not set
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IP_VS is not set
-# CONFIG_IPW2100_DEBUG is not set
-# CONFIG_IPW2100 is not set
-CONFIG_IPW2100_MONITOR=y
-# CONFIG_IPW2200_DEBUG is not set
-# CONFIG_IPW2200 is not set
-CONFIG_IPW2200_MONITOR=y
-# CONFIG_IPW2200_PROMISCUOUS is not set
-# CONFIG_IPW2200_QOS is not set
-# CONFIG_IPW2200_RADIOTAP is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_IPX is not set
-# CONFIG_IRDA is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_ISCSI_TCP is not set
-CONFIG_ISDN=y
-# CONFIG_ISDN_AUDIO is not set
-# CONFIG_ISDN_CAPI_CAPIDRV is not set
-# CONFIG_ISDN_DIVERSION is not set
-# CONFIG_ISDN_DRV_ACT2000 is not set
-# CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON is not set
-# CONFIG_ISDN_DRV_EICON is not set
-# CONFIG_ISDN_DRV_HISAX is not set
-# CONFIG_ISDN_DRV_ICN is not set
-# CONFIG_ISDN_DRV_LOOP is not set
-# CONFIG_ISDN_DRV_PCBIT is not set
-# CONFIG_ISDN_DRV_SC is not set
-# CONFIG_ISDN_DRV_TPAM is not set
-# CONFIG_ISDN_WITH_ABC is not set
-# CONFIG_ISL29003 is not set
-# CONFIG_ISO9660_FS is not set
-# CONFIG_IWL3945 is not set
-# CONFIG_IWLAGN is not set
-# CONFIG_IWLCORE is not set
-# CONFIG_IWLWIFI is not set
-# CONFIG_IWLWIFI_LEDS is not set
-# CONFIG_IWMC3200TOP is not set
-# CONFIG_IXGB is not set
-# CONFIG_JBD2_DEBUG is not set
-# CONFIG_JBD_DEBUG is not set
-# CONFIG_JBD is not set
-# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
-# CONFIG_JFFS2_CMODE_NONE is not set
-CONFIG_JFFS2_CMODE_PRIORITY=y
-# CONFIG_JFFS2_CMODE_SIZE is not set
-CONFIG_JFFS2_COMPRESSION_OPTIONS=y
-CONFIG_JFFS2_FS_DEBUG=0
-# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
-CONFIG_JFFS2_FS_WRITEBUFFER=y
-# CONFIG_JFFS2_FS_XATTR is not set
-CONFIG_JFFS2_FS=y
-# CONFIG_JFFS2_LZO is not set
-CONFIG_JFFS2_RTIME=y
-# CONFIG_JFFS2_RUBIN is not set
-CONFIG_JFFS2_SUMMARY=y
-CONFIG_JFFS2_ZLIB=y
-# CONFIG_JFFS_FS is not set
-# CONFIG_JFS_DEBUG is not set
-# CONFIG_JFS_FS is not set
-# CONFIG_JFS_POSIX_ACL is not set
-# CONFIG_JFS_SECURITY is not set
-# CONFIG_JFS_STATISTICS is not set
-# CONFIG_JME is not set
-CONFIG_JOLIET=y
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-# CONFIG_KALLSYMS is not set
-# CONFIG_KARMA_PARTITION is not set
-# CONFIG_KERNEL_BZIP2 is not set
-# CONFIG_KERNEL_GZIP is not set
-CONFIG_KERNEL_LZMA=y
-# CONFIG_KERNEL_LZO is not set
-# CONFIG_KEXEC is not set
-# CONFIG_KEYBOARD_ADP5588 is not set
-# CONFIG_KEYBOARD_LM8323 is not set
-# CONFIG_KEYBOARD_MAX7359 is not set
-# CONFIG_KEYBOARD_OPENCORES is not set
-# CONFIG_KEYS is not set
-# CONFIG_KGDB is not set
-# CONFIG_KMEMTRACE is not set
-CONFIG_KMOD=y
-# CONFIG_KPROBES is not set
-# CONFIG_KS8842 is not set
-# CONFIG_KS8851 is not set
-# CONFIG_KS8851_MLL is not set
-# CONFIG_KSM is not set
-# CONFIG_LANMEDIA is not set
-# CONFIG_LAPB is not set
-# CONFIG_LASAT is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_LBDAF=y
-# CONFIG_LDM_PARTITION is not set
-# CONFIG_LEDS_ALIX is not set
-# CONFIG_LEDS_BD2802 is not set
-CONFIG_LEDS_CLASS=y
-# CONFIG_LEDS_DAC124S085 is not set
-CONFIG_LEDS_GPIO_PLATFORM=y
-# CONFIG_LEDS_LT3593 is not set
-# CONFIG_LEDS_LP3944 is not set
-# CONFIG_LEDS_LP5521 is not set
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_PCA955X is not set
-# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-# CONFIG_LEDS_TRIGGER_GPIO is not set
-CONFIG_LEDS_TRIGGER_HEARTBEAT=y
-# CONFIG_LEDS_TRIGGER_IDE_DISK is not set
-# CONFIG_LEDS_TRIGGER_MORSE is not set
-CONFIG_LEDS_TRIGGER_NETDEV=y
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=y
-# CONFIG_LEGACY_PTYS is not set
-# CONFIG_LIB80211_CRYPT_CCMP is not set
-# CONFIG_LIB80211_CRYPT_TKIP is not set
-# CONFIG_LIB80211_CRYPT_WEP is not set
-# CONFIG_LIB80211_DEBUG is not set
-# CONFIG_LIB80211 is not set
-# CONFIG_LIBCRC32C is not set
-# CONFIG_LIBERTAS is not set
-# CONFIG_LIBERTAS_THINFIRM is not set
-# CONFIG_LIBERTAS_USB is not set
-# CONFIG_LIBFC is not set
-# CONFIG_LIBFCOE is not set
-# CONFIG_LIBIPW_DEBUG is not set
-# CONFIG_LINE6_USB is not set
-# CONFIG_LLC2 is not set
-CONFIG_LLC=y
-CONFIG_LOCALVERSION=""
-# CONFIG_LOCALVERSION_AUTO is not set
-CONFIG_LOCKDEP_SUPPORT=y
-# CONFIG_LOCKD is not set
-CONFIG_LOCKD_V4=y
-# CONFIG_LOCK_STAT is not set
-CONFIG_LOG_BUF_SHIFT=14
-# CONFIG_LOGIRUMBLEPAD2_FF is not set
-# CONFIG_LOGITECH_FF is not set
-# CONFIG_LOGO is not set
-# CONFIG_LSF is not set
-# CONFIG_LSI_ET1011C_PHY is not set
-# CONFIG_LTPC is not set
-# CONFIG_LXT_PHY is not set
-CONFIG_MAC80211_DEFAULT_PS_VALUE=1
-CONFIG_MAC80211_DEFAULT_PS=y
-# CONFIG_MAC80211 is not set
-# CONFIG_MAC_EMUMOUSEBTN is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-# CONFIG_MAC_PARTITION is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_MAGIC_SYSRQ is not set
-# CONFIG_MARKEINS is not set
-# CONFIG_MARKERS is not set
-# CONFIG_MARVELL_PHY is not set
-# CONFIG_MDIO_BITBANG is not set
-# CONFIG_MD is not set
-# CONFIG_ME4000 is not set
-# CONFIG_MEDIA_ATTACH is not set
-# CONFIG_MEDIA_SUPPORT is not set
-# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
-# CONFIG_MEGARAID_LEGACY is not set
-# CONFIG_MEGARAID_NEWGEN is not set
-# CONFIG_MEGARAID_SAS is not set
-# CONFIG_MEILHAUS is not set
-# CONFIG_MEMORY_FAILURE is not set
-# CONFIG_MEMSTICK is not set
-# CONFIG_MFD_88PM8607 is not set
-# CONFIG_MFD_ASIC3 is not set
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_MC13783 is not set
-# CONFIG_MFD_PCF50633 is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_MFD_TC6387XB is not set
-# CONFIG_MFD_TC6393XB is not set
-# CONFIG_MFD_TMIO is not set
-# CONFIG_MFD_WM831X is not set
-# CONFIG_MFD_WM8350_I2C is not set
-# CONFIG_MFD_WM8400 is not set
-# CONFIG_MG_DISK is not set
-# CONFIG_MIGRATION is not set
-CONFIG_MII=y
-CONFIG_MINI_FO=y
-# CONFIG_MINIX_FS is not set
-# CONFIG_MINIX_SUBPARTITION is not set
-# CONFIG_MIPS_FPU_EMU is not set
-CONFIG_MISC_DEVICES=y
-CONFIG_MISC_FILESYSTEMS=y
-# CONFIG_MISDN_AVMFRITZ is not set
-# CONFIG_MISDN_HFCPCI is not set
-# CONFIG_MISDN_HFCUSB is not set
-# CONFIG_MISDN_INFINEON is not set
-# CONFIG_MISDN is not set
-# CONFIG_MISDN_NETJET is not set
-# CONFIG_MISDN_SPEEDFAX is not set
-# CONFIG_MISDN_W6692 is not set
-# CONFIG_MKISS is not set
-# CONFIG_MMC_ARMMMCI is not set
-CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_MMC_BLOCK is not set
-# CONFIG_MMC_CB710 is not set
-# CONFIG_MMC_DEBUG is not set
-# CONFIG_MMC is not set
-# CONFIG_MMC_MVSDIO is not set
-# CONFIG_MMC_S3C is not set
-# CONFIG_MMC_SDHCI is not set
-# CONFIG_MMC_SDRICOH_CS is not set
-# CONFIG_MMC_SPI is not set
-# CONFIG_MMC_TEST is not set
-# CONFIG_MMC_UNSAFE_RESUME is not set
-# CONFIG_MMC_VIA_SDMMC is not set
-CONFIG_MMU=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-# CONFIG_MODULE_FORCE_UNLOAD is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_MODULES=y
-CONFIG_MODULE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_PS2_SENTELIC is not set
-# CONFIG_MOUSE_SYNAPTICS_I2C is not set
-# CONFIG_MSDOS_FS is not set
-CONFIG_MSDOS_PARTITION=y
-# CONFIG_MTD_ABSENT is not set
-# CONFIG_MTD_AFS_PARTS is not set
-# CONFIG_MTD_ALAUDA is not set
-# CONFIG_MTD_AR7_PARTS is not set
-# CONFIG_MTD_ARM_INTEGRATOR is not set
-CONFIG_MTD_BLKDEVS=y
-# CONFIG_MTD_BLOCK2MTD is not set
-CONFIG_MTD_BLOCK=y
-# CONFIG_MTD_CFI_ADV_OPTIONS is not set
-CONFIG_MTD_CFI_AMDSTD=y
-# CONFIG_MTD_CFI_BE_BYTE_SWAP 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_CFI_INTELEXT=y
-# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
-CONFIG_MTD_CFI_NOSWAP=y
-# CONFIG_MTD_CFI_STAA is not set
-CONFIG_MTD_CFI_UTIL=y
-CONFIG_MTD_CFI=y
-CONFIG_MTD_CHAR=y
-# CONFIG_MTD_CMDLINE_PARTS is not set
-CONFIG_MTD_COMPLEX_MAPPINGS=y
-# CONFIG_MTD_CONCAT is not set
-# CONFIG_MTD_DATAFLASH is not set
-# CONFIG_MTD_DEBUG is not set
-# CONFIG_MTD_DOC2000 is not set
-# CONFIG_MTD_DOC2001 is not set
-# CONFIG_MTD_DOC2001PLUS is not set
-CONFIG_MTD_GEN_PROBE=y
-# CONFIG_MTD_GPIO_ADDR is not set
-# CONFIG_MTD_INTEL_VR_NOR is not set
-# CONFIG_MTD_JEDECPROBE is not set
-# CONFIG_MTD_LPDDR is not set
-# CONFIG_MTD_M25P80 is not set
-# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_1=y
-CONFIG_MTD_MAP_BANK_WIDTH_2=y
-# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
-CONFIG_MTD_MAP_BANK_WIDTH_4=y
-# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
-# CONFIG_MTD_MTDRAM is not set
-# CONFIG_MTD_MYLOADER_PARTS is not set
-# CONFIG_MTD_NAND_CAFE is not set
-# CONFIG_MTD_NAND_DISKONCHIP is not set
-# CONFIG_MTD_NAND_ECC_SMC is not set
-# CONFIG_MTD_NAND_GPIO is not set
-CONFIG_MTD_NAND_IDS=y
-# CONFIG_MTD_NAND is not set
-# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-# CONFIG_MTD_NAND_NANDSIM is not set
-# CONFIG_MTD_NAND_PLATFORM is not set
-# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-# CONFIG_MTD_ONENAND is not set
-# CONFIG_MTD_OOPS is not set
-# CONFIG_MTD_OTP is not set
-CONFIG_MTD_PARTITIONS=y
-# CONFIG_MTD_PCI is not set
-# CONFIG_MTD_PHRAM is not set
-# CONFIG_MTD_PHYSMAP_COMPAT is not set
-# CONFIG_MTD_PHYSMAP is not set
-# CONFIG_MTD_PLATRAM is not set
-# CONFIG_MTD_PMC551 is not set
-# CONFIG_MTD_RAM is not set
-CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1
-# CONFIG_MTD_REDBOOT_PARTS is not set
-# CONFIG_MTD_REDBOOT_PARTS_READONLY is not set
-# CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED is not set
-# CONFIG_MTD_ROM is not set
-CONFIG_MTD_ROOTFS_ROOT_DEV=y
-CONFIG_MTD_ROOTFS_SPLIT=y
-# CONFIG_MTD_SLRAM is not set
-# CONFIG_MTD_SST25L is not set
-# CONFIG_MTD_TESTS is not set
-# CONFIG_MTD_UBI is not set
-CONFIG_MTD=y
-# CONFIG_MV643XX_ETH is not set
-# CONFIG_MVSWITCH_PHY is not set
-# CONFIG_MWAVE is not set
-# CONFIG_MWL8K is not set
-# CONFIG_MYRI10GE is not set
-# CONFIG_NAMESPACES is not set
-# CONFIG_NATIONAL_PHY is not set
-# CONFIG_NATSEMI is not set
-# CONFIG_NCP_FS is not set
-# CONFIG_NE2K_PCI is not set
-# CONFIG_NEC_MARKEINS is not set
-# CONFIG_NET_9P is not set
-# CONFIG_NET_ACT_GACT is not set
-# CONFIG_NET_ACT_IPT is not set
-# CONFIG_NET_ACT_MIRRED is not set
-# CONFIG_NET_ACT_NAT is not set
-# CONFIG_NET_ACT_PEDIT is not set
-# CONFIG_NET_ACT_POLICE is not set
-# CONFIG_NET_ACT_SIMP is not set
-CONFIG_NET_ACT_SKBEDIT=y
-CONFIG_NET_CLS_ACT=y
-CONFIG_NET_CLS_BASIC=y
-# CONFIG_NET_CLS_FLOW is not set
-# CONFIG_NET_CLS_FW is not set
-CONFIG_NET_CLS_IND=y
-# CONFIG_NET_CLS_ROUTE4 is not set
-# CONFIG_NET_CLS_RSVP6 is not set
-# CONFIG_NET_CLS_RSVP is not set
-# CONFIG_NET_CLS_TCINDEX is not set
-# CONFIG_NET_CLS_U32 is not set
-CONFIG_NET_CLS=y
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETDEBUG is not set
-# CONFIG_NETDEV_10000 is not set
-CONFIG_NETDEV_1000=y
-CONFIG_NETDEVICES_MULTIQUEUE=y
-CONFIG_NETDEVICES=y
-# CONFIG_NET_DROP_MONITOR is not set
-# CONFIG_NET_DSA is not set
-# CONFIG_NET_EMATCH_CMP is not set
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_EMATCH_META is not set
-# CONFIG_NET_EMATCH_NBYTE is not set
-CONFIG_NET_EMATCH_STACK=32
-# CONFIG_NET_EMATCH_TEXT is not set
-# CONFIG_NET_EMATCH_U32 is not set
-CONFIG_NET_ESTIMATOR=y
-CONFIG_NET_ETHERNET=y
-# CONFIG_NET_FC is not set
-CONFIG_NETFILTER_ADVANCED=y
-# CONFIG_NETFILTER_DEBUG is not set
-# CONFIG_NETFILTER_NETLINK is not set
-# CONFIG_NETFILTER_NETLINK_LOG is not set
-# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-# CONFIG_NETFILTER_TPROXY is not set
-# CONFIG_NETFILTER_XTABLES is not set
-# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
-# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNBYTES is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNMARK is not set
-# CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set
-# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_HELPER is not set
-# CONFIG_NETFILTER_XT_MATCH_HL is not set
-# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7_DEBUG is not set
-# CONFIG_NETFILTER_XT_MATCH_LAYER7 is not set
-# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-# CONFIG_NETFILTER_XT_MATCH_OSF is not set
-# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
-# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT is not set
-# CONFIG_NETFILTER_XT_MATCH_RECENT_PROC_COMPAT is not set
-# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-# CONFIG_NETFILTER_XT_MATCH_STATE is not set
-# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-# CONFIG_NETFILTER_XT_TARGET_CONNMARK is not set
-# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-# CONFIG_NETFILTER_XT_TARGET_HL is not set
-# CONFIG_NETFILTER_XT_TARGET_IMQ is not set
-# CONFIG_NETFILTER_XT_TARGET_LED is not set
-# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-# CONFIG_NETFILTER_XT_TARGET_NOTRACK is not set
-# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-CONFIG_NETFILTER=y
-CONFIG_NET_IPGRE_BROADCAST=y
-# CONFIG_NET_IPGRE is not set
-# CONFIG_NET_IPIP is not set
-# CONFIG_NET_ISA is not set
-# CONFIG_NET_KEY is not set
-# CONFIG_NET_KEY_MIGRATE is not set
-CONFIG_NET_PCI=y
-# CONFIG_NET_PCMCIA is not set
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_NETPOLL is not set
-CONFIG_NET_RADIO=y
-# CONFIG_NETROM is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_NET_SCH_ATM is not set
-# CONFIG_NET_SCH_CBQ is not set
-# CONFIG_NET_SCH_CLK_CPU is not set
-# CONFIG_NET_SCH_CLK_GETTIMEOFDAY is not set
-CONFIG_NET_SCH_CLK_JIFFIES=y
-# CONFIG_NET_SCH_DRR is not set
-# CONFIG_NET_SCH_DSMARK is not set
-CONFIG_NET_SCHED=y
-# CONFIG_NET_SCH_ESFQ is not set
-CONFIG_NET_SCH_ESFQ_NFCT=y
-CONFIG_NET_SCH_FIFO=y
-# CONFIG_NET_SCH_GRED is not set
-# CONFIG_NET_SCH_HFSC is not set
-# CONFIG_NET_SCH_HTB is not set
-# CONFIG_NET_SCH_INGRESS is not set
-# CONFIG_NET_SCH_MULTIQ is not set
-# CONFIG_NET_SCH_NETEM is not set
-# CONFIG_NET_SCH_PRIO is not set
-# CONFIG_NET_SCH_RED is not set
-# CONFIG_NET_SCH_RR is not set
-# CONFIG_NET_SCH_SFQ is not set
-# CONFIG_NET_SCH_TBF is not set
-# CONFIG_NET_SCH_TEQL is not set
-# CONFIG_NET_TULIP is not set
-# CONFIG_NET_VENDOR_3COM is not set
-CONFIG_NET_WIRELESS_RTNETLINK=y
-CONFIG_NET_WIRELESS=y
-CONFIG_NETWORK_FILESYSTEMS=y
-# CONFIG_NETWORK_SECMARK is not set
-# CONFIG_NETXEN_NIC is not set
-CONFIG_NET=y
-# CONFIG_NEW_GPIO is not set
-CONFIG_NEW_LEDS=y
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-CONFIG_NF_CONNTRACK_ENABLED=y
-# CONFIG_NF_CONNTRACK_EVENTS is not set
-# CONFIG_NF_CONNTRACK_FTP is not set
-# CONFIG_NF_CONNTRACK_H323 is not set
-# CONFIG_NF_CONNTRACK_IPV4 is not set
-# CONFIG_NF_CONNTRACK_IPV6 is not set
-# CONFIG_NF_CONNTRACK_IRC is not set
-# CONFIG_NF_CONNTRACK is not set
-CONFIG_NF_CONNTRACK_MARK=y
-# CONFIG_NF_CONNTRACK_NETBIOS_NS is not set
-# CONFIG_NF_CONNTRACK_PPTP is not set
-CONFIG_NF_CONNTRACK_PROC_COMPAT=y
-# CONFIG_NF_CONNTRACK_RTSP is not set
-# CONFIG_NF_CONNTRACK_SANE is not set
-# CONFIG_NF_CONNTRACK_SIP is not set
-CONFIG_NF_CONNTRACK_SUPPORT=y
-# CONFIG_NF_CONNTRACK_TFTP is not set
-# CONFIG_NF_CT_ACCT is not set
-# CONFIG_NF_CT_NETLINK is not set
-# CONFIG_NF_CT_PROTO_DCCP is not set
-# CONFIG_NF_CT_PROTO_GRE is not set
-# CONFIG_NF_CT_PROTO_SCTP is not set
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_DEFRAG_IPV4 is not set
-# CONFIG_NF_NAT_AMANDA is not set
-# CONFIG_NF_NAT_FTP is not set
-# CONFIG_NF_NAT_H323 is not set
-# CONFIG_NF_NAT_IRC is not set
-# CONFIG_NF_NAT is not set
-CONFIG_NF_NAT_NEEDED=y
-# CONFIG_NF_NAT_PPTP is not set
-# CONFIG_NF_NAT_PROTO_GRE is not set
-# CONFIG_NF_NAT_RTSP is not set
-# CONFIG_NF_NAT_SIP is not set
-# CONFIG_NF_NAT_SNMP_BASIC is not set
-# CONFIG_NF_NAT_TFTP is not set
-# CONFIG_NFS_ACL_SUPPORT is not set
-CONFIG_NFS_COMMON=y
-# CONFIG_NFS_DIRECTIO is not set
-# CONFIG_NFSD is not set
-CONFIG_NFSD_TCP=y
-# CONFIG_NFSD_V2_ACL is not set
-# CONFIG_NFSD_V3_ACL is not set
-CONFIG_NFSD_V3=y
-# CONFIG_NFSD_V4 is not set
-# CONFIG_NFS_FS is not set
-# CONFIG_NFS_V3_ACL is not set
-CONFIG_NFS_V3=y
-# CONFIG_NFS_V4_1 is not set
-# CONFIG_NFS_V4 is not set
-# CONFIG_NFTL is not set
-# CONFIG_NILFS2_FS is not set
-CONFIG_NL80211=y
-CONFIG_NLATTR=y
-# CONFIG_NLS_ASCII is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-# CONFIG_NLS_CODEPAGE_850 is not set
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-CONFIG_NLS_DEFAULT="iso8859-1"
-# CONFIG_NLS is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-# CONFIG_NLS_ISO8859_15 is not set
-# CONFIG_NLS_ISO8859_1 is not set
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-# CONFIG_NLS_UTF8 is not set
-# CONFIG_NO_HZ is not set
-# CONFIG_NOP_USB_XCEIV is not set
-# CONFIG_NORTEL_HERMES is not set
-# CONFIG_NOZOMI is not set
-# CONFIG_NS83820 is not set
-# CONFIG_NTFS_DEBUG is not set
-# CONFIG_NTFS_FS is not set
-# CONFIG_NTFS_RW is not set
-# CONFIG_NVRAM is not set
-# CONFIG_OC_ETM is not set
-# CONFIG_OCF_BENCH is not set
-# CONFIG_OCF_EP80579 is not set
-# CONFIG_OCF_HIFNHIPP is not set
-# CONFIG_OCF_HIFN is not set
-# CONFIG_OCF_IXP4XX is not set
-# CONFIG_OCF_OCF is not set
-# CONFIG_OCF_OCFNULL is not set
-# CONFIG_OCFS2_FS is not set
-# CONFIG_OCF_SAFE is not set
-# CONFIG_OCF_TALITOS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_ORION_WATCHDOG is not set
-# CONFIG_OSF_PARTITION is not set
-# CONFIG_P54_COMMON is not set
-CONFIG_PACKET_MMAP=y
-CONFIG_PACKET=y
-# CONFIG_PAGE_POISONING is not set
-# CONFIG_PAGE_SIZE_16KB is not set
-# CONFIG_PAGE_SIZE_32KB is not set
-CONFIG_PAGE_SIZE_4KB=y
-# CONFIG_PAGE_SIZE_64KB is not set
-# CONFIG_PAGE_SIZE_8KB is not set
-# CONFIG_PANTHERLORD_FF is not set
-# CONFIG_PARPORT is not set
-# CONFIG_PARPORT_PC is not set
-CONFIG_PARTITION_ADVANCED=y
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_ATP867X is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CS5535 is not set
-# CONFIG_PATA_CS5536 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_ISAPNP is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_OPTIDMA is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_PCMCIA is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_PLATFORM is not set
-# CONFIG_PATA_QDI is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RDC is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SCH is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_TOSHIBA is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
-# CONFIG_PC300TOO is not set
-# CONFIG_PCCARD is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_PCI200SYN is not set
-# CONFIG_PCI_ATMEL is not set
-# CONFIG_PCI_DEBUG is not set
-# CONFIG_PCI_DISABLE_COMMON_QUIRKS is not set
-# CONFIG_PCIEAER_INJECT is not set
-# CONFIG_PCIEASPM is not set
-# CONFIG_PCIE_ECRC is not set
-# CONFIG_PCI_HERMES is not set
-# CONFIG_PCI_IOV is not set
-# CONFIG_PCI_LEGACY is not set
-# CONFIG_PCI_MSI is not set
-# CONFIG_PCIPCWATCHDOG is not set
-CONFIG_PCI_QUIRKS=y
-# CONFIG_PCI_STUB is not set
-CONFIG_PCI_SYSCALL=y
-CONFIG_PCI=y
-# CONFIG_PCMCIA_AHA152X is not set
-# CONFIG_PCMCIA_ATMEL is not set
-# CONFIG_PCMCIA_DEBUG is not set
-# CONFIG_PCMCIA_FDOMAIN is not set
-# CONFIG_PCMCIA_HERMES is not set
-# CONFIG_PCMCIA_IOCTL is not set
-# CONFIG_PCMCIA is not set
-# CONFIG_PCMCIA_LOAD_CIS is not set
-# CONFIG_PCMCIA_NETWAVE is not set
-# CONFIG_PCMCIA_NINJA_SCSI is not set
-# CONFIG_PCMCIA_QLOGIC is not set
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_PCMCIA_SPECTRUM is not set
-# CONFIG_PCMCIA_SYM53C500 is not set
-# CONFIG_PCMCIA_WAVELAN is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_PCNET32 is not set
-# CONFIG_PCSPKR_PLATFORM is not set
-# CONFIG_PD6729 is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_PERF_COUNTERS is not set
-# CONFIG_PERF_EVENTS is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_PHONE is not set
-# CONFIG_PHONET is not set
-# CONFIG_PHYLIB is not set
-# CONFIG_PHYS_ADDR_T_64BIT is not set
-# CONFIG_PID_NS is not set
-# CONFIG_PLAN9AUTH is not set
-CONFIG_PLIST=y
-# CONFIG_PLX_HERMES is not set
-# CONFIG_PMIC_ADP5520 is not set
-# CONFIG_PMIC_DA903X is not set
-# CONFIG_PM is not set
-# CONFIG_POHMELFS is not set
-# CONFIG_POSIX_MQUEUE is not set
-# CONFIG_POWER_SUPPLY is not set
-# CONFIG_PPC_16K_PAGES is not set
-# CONFIG_PPC_256K_PAGES is not set
-CONFIG_PPC_4K_PAGES=y
-CONFIG_PPC4xx_GPIO=y
-# CONFIG_PPC_64K_PAGES is not set
-# CONFIG_PPC_DISABLE_WERROR is not set
-# CONFIG_PPC_EMULATED_STATS is not set
-# CONFIG_PPP_ASYNC is not set
-# CONFIG_PPP_BSDCOMP is not set
-# CONFIG_PPP_DEFLATE is not set
-CONFIG_PPP_FILTER=y
-# CONFIG_PPP is not set
-# CONFIG_PPP_MPPE is not set
-CONFIG_PPP_MULTILINK=y
-# CONFIG_PPPOATM is not set
-# CONFIG_PPPOE is not set
-# CONFIG_PPPOL2TP is not set
-# CONFIG_PPP_SYNC_TTY is not set
-# CONFIG_PPS is not set
-# CONFIG_PREEMPT is not set
-CONFIG_PREEMPT_NONE=y
-# CONFIG_PREEMPT_RCU is not set
-# CONFIG_PREEMPT_RCU_TRACE is not set
-# CONFIG_PREEMPT_VOLUNTARY is not set
-# CONFIG_TI_DAC7512 is not set
-CONFIG_TINY_RCU=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_PRINTK=y
-# CONFIG_PRISM2_USB is not set
-# CONFIG_PRISM54 is not set
-# CONFIG_PROBE_INITRD_HEADER is not set
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-# CONFIG_PROC_PAGE_MONITOR is not set
-CONFIG_PROC_SYSCTL=y
-# CONFIG_PROFILING is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_QEMU is not set
-# CONFIG_QLA3XXX is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_QSEMI_PHY is not set
-# CONFIG_QT2160 is not set
-# CONFIG_QUOTA is not set
-# CONFIG_R3964 is not set
-# CONFIG_R6040 is not set
-# CONFIG_R8169 is not set
-# CONFIG_RADIO_ADAPTERS is not set
-# CONFIG_RADIO_AZTECH is not set
-# CONFIG_RADIO_CADET is not set
-# CONFIG_RADIO_GEMTEK is not set
-# CONFIG_RADIO_GEMTEK_PCI is not set
-# CONFIG_RADIO_MAESTRO is not set
-# CONFIG_RADIO_MAXIRADIO is not set
-# CONFIG_RADIO_RTRACK2 is not set
-# CONFIG_RADIO_RTRACK is not set
-# CONFIG_RADIO_SF16FMI is not set
-# CONFIG_RADIO_SF16FMR2 is not set
-# CONFIG_RADIO_TERRATEC is not set
-# CONFIG_RADIO_TRUST is not set
-# CONFIG_RADIO_TYPHOON is not set
-# CONFIG_RADIO_ZOLTRIX is not set
-# CONFIG_RAID_ATTRS is not set
-CONFIG_RAMFS=y
-# CONFIG_RAR_REGISTER is not set
-# CONFIG_RAW_DRIVER is not set
-# CONFIG_RCU_CPU_STALL_DETECTOR is not set
-CONFIG_RCU_FANOUT=32
-# CONFIG_RCU_FANOUT_EXACT is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_RCU_TRACE is not set
-# CONFIG_RD_BZIP2 is not set
-# CONFIG_RDC_17F3101X is not set
-# CONFIG_RD_GZIP is not set
-CONFIG_RD_LZMA=y
-# CONFIG_RD_LZO is not set
-# CONFIG_RDS is not set
-# CONFIG_REALTEK_PHY is not set
-# CONFIG_REDWOOD is not set
-# CONFIG_REGULATOR_BQ24022 is not set
-# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
-# CONFIG_REGULATOR is not set
-# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
-# CONFIG_REISERFS_CHECK is not set
-# CONFIG_REISERFS_FS is not set
-# CONFIG_REISERFS_FS_XATTR is not set
-# CONFIG_REISERFS_PROC_INFO is not set
-# CONFIG_RELAY is not set
-# CONFIG_RESOURCES_64BIT is not set
-# CONFIG_RFD_FTL is not set
-# CONFIG_RFKILL_INPUT is not set
-# CONFIG_RFKILL is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_ROSE is not set
-# CONFIG_RPCSEC_GSS_KRB5 is not set
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-# CONFIG_RT2860 is not set
-# CONFIG_RT2870 is not set
-# CONFIG_RT2X00 is not set
-# CONFIG_RT3070 is not set
-# CONFIG_RT3090 is not set
-# CONFIG_RTC_CLASS is not set
-# CONFIG_RTC_DEBUG is not set
-# CONFIG_RTC_DRV_BQ32K is not set
-# CONFIG_RTC_DRV_BQ4802 is not set
-CONFIG_RTC_DRV_CMOS=y
-# CONFIG_RTC_DRV_DS1286 is not set
-# CONFIG_RTC_DRV_DS1305 is not set
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1390 is not set
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_DS3234 is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_M41T94 is not set
-# CONFIG_RTC_DRV_M48T35 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_MAX6902 is not set
-# CONFIG_RTC_DRV_MSM6242 is not set
-# CONFIG_RTC_DRV_PCF2123 is not set
-# CONFIG_RTC_DRV_PCF50606 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_R9701 is not set
-# CONFIG_RTC_DRV_RP5C01 is not set
-# CONFIG_RTC_DRV_RS5C348 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_RTC7301 is not set
-# CONFIG_RTC_DRV_RX8025 is not set
-# CONFIG_RTC_DRV_RX8581 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_TEST is not set
-# CONFIG_RTC_DRV_V3020 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-CONFIG_RTC_HCTOSYS=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-CONFIG_RTC_INTF_DEV=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_LIB=y
-# CONFIG_RTL8180 is not set
-# CONFIG_RTL8187 is not set
-# CONFIG_RTL8187SE is not set
-# CONFIG_RTL8192E is not set
-# CONFIG_RTL8192U is not set
-# CONFIG_RTL8192SU is not set
-# CONFIG_RTL8306_PHY is not set
-# CONFIG_RTL8366_SMI is not set
-# CONFIG_RTL8366S_PHY_DEBUG_FS is not set
-# CONFIG_RTL8366S_PHY is not set
-# CONFIG_RTL8366RB_PHY is not set
-CONFIG_RT_MUTEXES=y
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_RUNTIME_DEBUG is not set
-CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_S2IO is not set
-# CONFIG_SAMPLES is not set
-# CONFIG_SATA_AHCI is not set
-# CONFIG_SATA_INIC162X is not set
-# CONFIG_SATA_MV is not set
-# CONFIG_SATA_NV is not set
-# CONFIG_SATA_PMP is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_SIL24 is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_SVW is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SBC_FITPC2_WATCHDOG is not set
-# CONFIG_SC92031 is not set
-# CONFIG_SCC is not set
-# CONFIG_SCHED_BFS is not set
-CONFIG_SCHED_CFS=y
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_SCSI_3W_9XXX is not set
-# CONFIG_SCSI_3W_SAS is not set
-# CONFIG_SCSI_7000FASST is not set
-# CONFIG_SCSI_AACRAID is not set
-# CONFIG_SCSI_ACARD is not set
-# CONFIG_SCSI_ADVANSYS is not set
-# CONFIG_SCSI_AHA152X is not set
-# CONFIG_SCSI_AHA1542 is not set
-# CONFIG_SCSI_AIC79XX is not set
-# CONFIG_SCSI_AIC7XXX is not set
-# CONFIG_SCSI_AIC7XXX_OLD is not set
-# CONFIG_SCSI_AIC94XX is not set
-# CONFIG_SCSI_ARCMSR is not set
-# CONFIG_SCSI_BFA_FC is not set
-# CONFIG_SCSI_BNX2_ISCSI is not set
-# CONFIG_SCSI_BUSLOGIC is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_DC390T is not set
-# CONFIG_SCSI_DC395x is not set
-# CONFIG_SCSI_DEBUG is not set
-# CONFIG_SCSI_DH is not set
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_DMX3191D is not set
-# CONFIG_SCSI_DPT_I2O is not set
-# CONFIG_SCSI_DTC3280 is not set
-# CONFIG_SCSI_EATA is not set
-# CONFIG_SCSI_ESP_CORE is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_FUTURE_DOMAIN is not set
-# CONFIG_SCSI_GDTH is not set
-# CONFIG_SCSI_GENERIC_NCR5380 is not set
-# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
-# CONFIG_SCSI_HPTIOP is not set
-# CONFIG_SCSI_HPSA is not set
-# CONFIG_SCSI_IN2000 is not set
-# CONFIG_SCSI_INIA100 is not set
-# CONFIG_SCSI_INITIO is not set
-# CONFIG_SCSI_IPR is not set
-# CONFIG_SCSI_IPS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-CONFIG_SCSI_LOWLEVEL=y
-# CONFIG_SCSI_LPFC is not set
-# CONFIG_SCSI_MPT2SAS is not set
-CONFIG_SCSI_MULTI_LUN=y
-# CONFIG_SCSI_MVSAS is not set
-# CONFIG_SCSI_MVSAS_DEBUG is not set
-# CONFIG_SCSI_NCR53C406A is not set
-# CONFIG_SCSI_NETLINK is not set
-# CONFIG_SCSI_NSP32 is not set
-# CONFIG_SCSI_OSD_INITIATOR is not set
-# CONFIG_SCSI_PAS16 is not set
-# CONFIG_SCSI_PM8001 is not set
-# CONFIG_SCSI_PMCRAID is not set
-CONFIG_SCSI_PROC_FS=y
-# CONFIG_SCSI_PSI240I is not set
-# CONFIG_SCSI_QLA_FC is not set
-# CONFIG_SCSI_QLA_ISCSI is not set
-# CONFIG_SCSI_QLOGIC_1280 is not set
-# CONFIG_SCSI_QLOGIC_FAS is not set
-# CONFIG_SCSI_SAS_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-# CONFIG_SCSI_SEAGATE is not set
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_SRP is not set
-# CONFIG_SCSI_STEX is not set
-# CONFIG_SCSI_SYM53C416 is not set
-# CONFIG_SCSI_SYM53C8XX_2 is not set
-# CONFIG_SCSI_T128 is not set
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_U14_34F is not set
-# CONFIG_SCSI_ULTRASTOR is not set
-CONFIG_SCSI_WAIT_SCAN=m
-# CONFIG_SECCOMP is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY is not set
-CONFIG_SELECT_MEMORY_MODEL=y
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADCXX is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_ADT7462 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_ADT7475 is not set
-# CONFIG_SENSORS_AMC6821 is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATK0110 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_CORETEMP is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_DS1337 is not set
-# CONFIG_SENSORS_DS1374 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_G760A is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_LIS3LV02D is not set
-# CONFIG_SENSORS_LIS3_I2C is not set
-# CONFIG_SENSORS_LIS3_SPI is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM70 is not set
-# CONFIG_SENSORS_LM73 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_LM95241 is not set
-# CONFIG_SENSORS_LTC4215 is not set
-# CONFIG_SENSORS_LTC4245 is not set
-# CONFIG_SENSORS_M41T00 is not set
-# CONFIG_SENSORS_MAX1111 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_SHT15 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_TMP401 is not set
-# CONFIG_SENSORS_TMP421 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-CONFIG_SERIAL_8250_CONSOLE=y
-# CONFIG_SERIAL_8250_CS is not set
-CONFIG_SERIAL_8250_NR_UARTS=2
-# CONFIG_SERIAL_8250_PCI is not set
-CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-CONFIG_SERIAL_8250=y
-CONFIG_SERIAL_CORE_CONSOLE=y
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-# CONFIG_SERIAL_MAX3100 is not set
-# CONFIG_SERIAL_NONSTANDARD is not set
-# CONFIG_SERIAL_OF_PLATFORM_NWPSERIAL is not set
-# CONFIG_SERIAL_UARTLITE is not set
-# CONFIG_SERIO is not set
-# CONFIG_SFI is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_SGI_PARTITION is not set
-# CONFIG_SHAPER is not set
-CONFIG_SHMEM=y
-CONFIG_SIGNALFD=y
-# CONFIG_SIMPLE_GPIO is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SIS900 is not set
-# CONFIG_SK98LIN is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2_DEBUG is not set
-# CONFIG_SKY2 is not set
-CONFIG_SLABINFO=y
-CONFIG_SLAB=y
-# CONFIG_SLHC is not set
-# CONFIG_SLICOSS is not set
-# CONFIG_SLIP is not set
-# CONFIG_SLOB is not set
-# CONFIG_SLOW_WORK_DEBUG is not set
-# CONFIG_SLOW_WORK is not set
-# CONFIG_SLUB_DEBUG is not set
-# CONFIG_SLUB is not set
-# CONFIG_SMARTJOYPLUS_FF is not set
-# CONFIG_SMB_FS is not set
-# CONFIG_SMB_NLS_DEFAULT is not set
-# CONFIG_SMC911X is not set
-# CONFIG_SMC91X is not set
-# CONFIG_SMP is not set
-# CONFIG_SMSC911X is not set
-# CONFIG_SMSC9420 is not set
-# CONFIG_SMSC_PHY is not set
-# CONFIG_SND_AC97_POWER_SAVE is not set
-# CONFIG_SND_AD1816A is not set
-# CONFIG_SND_AD1848 is not set
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ADLIB is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ALS100 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ARM is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AW2 is not set
-# CONFIG_SND_AZT2320 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMI8330 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_CS4231 is not set
-# CONFIG_SND_CS4232 is not set
-# CONFIG_SND_CS4236 is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_CTXFI is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_DRIVERS=y
-# CONFIG_SND_DT019X is not set
-# CONFIG_SND_DUMMY is not set
-# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1688 is not set
-# CONFIG_SND_ES18XX is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_ES968 is not set
-# CONFIG_SND_FM801 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_GUSCLASSIC is not set
-# CONFIG_SND_GUSEXTREME is not set
-# CONFIG_SND_GUSMAX is not set
-# CONFIG_SND_HDA_INTEL is not set
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_HIFIER is not set
-# CONFIG_SND_HRTIMER is not set
-# CONFIG_SND_HWDEP is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_INDIGODJX is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGOIOX is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_INTERWAVE is not set
-# CONFIG_SND_INTERWAVE_STB is not set
-# CONFIG_SND_ISA is not set
-# CONFIG_SND is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_LX6464ES is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_MIPS is not set
-# CONFIG_SND_MIRO is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_MIXER_OSS is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MPU401 is not set
-# CONFIG_SND_MTPAV is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_OPL3SA2 is not set
-# CONFIG_SND_OPTI92X_AD1848 is not set
-# CONFIG_SND_OPTI92X_CS4231 is not set
-# CONFIG_SND_OPTI93X is not set
-CONFIG_SND_OSSEMUL=y
-# CONFIG_SND_OXYGEN is not set
-CONFIG_SND_PCI=y
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_PCM is not set
-# CONFIG_SND_PCM_OSS is not set
-CONFIG_SND_PCM_OSS_PLUGINS=y
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_PDAUDIOCF is not set
-# CONFIG_SND_RAWMIDI is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RTCTIMER is not set
-# CONFIG_SND_SB16 is not set
-# CONFIG_SND_SB8 is not set
-# CONFIG_SND_SBAWE is not set
-# CONFIG_SND_SEQUENCER is not set
-# CONFIG_SND_SERIAL_U16550 is not set
-# CONFIG_SND_SIS7019 is not set
-# CONFIG_SND_SGALAXY is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_SPI is not set
-# CONFIG_SND_SSCAPE is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_TIMER is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_USB_AUDIO is not set
-# CONFIG_SND_USB_CAIAQ is not set
-# CONFIG_SND_USB_US122L is not set
-# CONFIG_SND_USB_USX2Y is not set
-CONFIG_SND_USB=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VIRTUOSO is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_VXPOCKET is not set
-# CONFIG_SND_WAVEFRONT is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SNI_RM is not set
-# CONFIG_SOC_CAMERA is not set
-# CONFIG_SOFT_WATCHDOG is not set
-# CONFIG_SOLARIS_X86_PARTITION is not set
-# CONFIG_SONYPI is not set
-# CONFIG_SONY_LAPTOP is not set
-# CONFIG_SOUND is not set
-# CONFIG_SOUND_PRIME is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_STATIC is not set
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-# CONFIG_SPI_AT25 is not set
-# CONFIG_SPI_DEBUG is not set
-# CONFIG_SPI_DESIGNWARE is not set
-# CONFIG_SPI_GPIO_OLD is not set
-# CONFIG_SPI is not set
-# CONFIG_SPI_MASTER is not set
-# CONFIG_SPI_ORION is not set
-# CONFIG_SPI_TLE62X0 is not set
-# CONFIG_SPI_XILINX is not set
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_SQUASHFS_EMBEDDED is not set
-CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3
-CONFIG_SQUASHFS_LZMA=y
-CONFIG_SQUASHFS_SUPPORT_ZLIB=y
-# CONFIG_SQUASHFS_VMALLOC is not set
-CONFIG_SQUASHFS=y
-# CONFIG_SSB_BLOCKIO is not set
-# CONFIG_SSB_DEBUG is not set
-# CONFIG_SSB is not set
-# CONFIG_SSB_PCMCIAHOST is not set
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB_SDIOHOST is not set
-# CONFIG_SSB_SILENT is not set
-# CONFIG_SSFDC is not set
-# CONFIG_STACK_TRACER is not set
-CONFIG_STACKTRACE_SUPPORT=y
-# CONFIG_STAGING_EXCLUDE_BUILD is not set
-CONFIG_STAGING=y
-CONFIG_STANDALONE=y
-CONFIG_STDBINUTILS=y
-# CONFIG_STE10XP is not set
-CONFIG_STP=y
-CONFIG_STRIP_ASM_SYMS=y
-# CONFIG_STRIP is not set
-# CONFIG_SUNDANCE is not set
-# CONFIG_SUNGEM is not set
-# CONFIG_SUN_PARTITION is not set
-# CONFIG_SUNRPC_BIND34 is not set
-# CONFIG_SUNRPC_GSS is not set
-# CONFIG_SUNRPC is not set
-# CONFIG_SUNRPC_REGISTER_V4 is not set
-CONFIG_SUSPEND_UP_POSSIBLE=y
-CONFIG_SWAP=y
-# CONFIG_SWCONFIG is not set
-# CONFIG_SYNCLINK_CS is not set
-CONFIG_SYN_COOKIES=y
-CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_SYSCTL=y
-# CONFIG_SYSFS_DEPRECATED is not set
-# CONFIG_SYSFS_DEPRECATED_V2 is not set
-CONFIG_SYSFS=y
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_SYSV68_PARTITION is not set
-# CONFIG_SYSV_FS is not set
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_SYSVIPC=y
-# CONFIG_TASKSTATS is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TCIC is not set
-CONFIG_TCP_CONG_ADVANCED=y
-# CONFIG_TCP_CONG_BIC is not set
-# CONFIG_TCP_CONG_CUBIC is not set
-# CONFIG_TCP_CONG_HSTCP is not set
-# CONFIG_TCP_CONG_HTCP is not set
-# CONFIG_TCP_CONG_HYBLA is not set
-# CONFIG_TCP_CONG_ILLINOIS is not set
-# CONFIG_TCP_CONG_LP is not set
-# CONFIG_TCP_CONG_SCALABLE is not set
-# CONFIG_TCP_CONG_VEGAS is not set
-# CONFIG_TCP_CONG_VENO is not set
-CONFIG_TCP_CONG_WESTWOOD=y
-# CONFIG_TCP_CONG_YEAH is not set
-# CONFIG_TCP_MD5SIG is not set
-# CONFIG_TEXTSEARCH_BM is not set
-# CONFIG_TEXTSEARCH_FSM is not set
-# CONFIG_TEXTSEARCH_KMP is not set
-CONFIG_TEXTSEARCH=y
-# CONFIG_THERMAL_HWMON is not set
-# CONFIG_THERMAL is not set
-# CONFIG_THRUSTMASTER_FF is not set
-CONFIG_TICK_ONESHOT=y
-# CONFIG_TIFM_CORE is not set
-# CONFIG_TIGON3 is not set
-CONFIG_TIMERFD=y
-# CONFIG_TINY_SHMEM is not set
-# CONFIG_TIPC is not set
-# CONFIG_TLAN is not set
-# CONFIG_TMD_HERMES is not set
-# CONFIG_TMPFS_POSIX_ACL is not set
-CONFIG_TMPFS=y
-# CONFIG_TOUCHSCREEN_AD7877 is not set
-# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
-# CONFIG_TOUCHSCREEN_AD7879 is not set
-# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
-# CONFIG_TOUCHSCREEN_ADS7846 is not set
-# CONFIG_TOUCHSCREEN_EETI is not set
-# CONFIG_TOUCHSCREEN_ELO is not set
-# CONFIG_TOUCHSCREEN_FILTER is not set
-# CONFIG_TOUCHSCREEN_FUJITSU is not set
-# CONFIG_TOUCHSCREEN_GUNZE is not set
-# CONFIG_TOUCHSCREEN_INEXIO is not set
-# CONFIG_TOUCHSCREEN_MK712 is not set
-# CONFIG_TOUCHSCREEN_MTOUCH is not set
-# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_S3C2410 is not set
-# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
-# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
-# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
-# CONFIG_TOUCHSCREEN_TSC2007 is not set
-# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
-# CONFIG_TOUCHSCREEN_W90X900 is not set
-# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
-# CONFIG_TPS65010 is not set
-# CONFIG_TRACE_BRANCH_PROFILING is not set
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-CONFIG_TRACING_SUPPORT=y
-# CONFIG_TRANZPORT is not set
-# CONFIG_TREE_RCU is not set
-# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_TR is not set
-# CONFIG_TUNER_3036 is not set
-# CONFIG_TUNER_TEA5761 is not set
-# CONFIG_TUN is not set
-# CONFIG_TWL4030_CORE is not set
-# CONFIG_UACCESS_WITH_MEMCPY is not set
-# CONFIG_UDF_FS is not set
-CONFIG_UDF_NLS=y
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-# CONFIG_UFS_FS is not set
-# CONFIG_UIO is not set
-# CONFIG_ULTRIX_PARTITION is not set
-# CONFIG_UNEVICTABLE_LRU is not set
-# CONFIG_UNION_MOUNT is not set
-CONFIG_UNIX98_PTYS=y
-# CONFIG_UNIXWARE_DISKLABEL is not set
-CONFIG_UNIX=y
-# CONFIG_UNUSED_SYMBOLS is not set
-# CONFIG_USB_ACECAD is not set
-# CONFIG_USB_ACM is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_AIPTEK is not set
-CONFIG_USB_ALI_M5632=y
-CONFIG_USB_AN2720=y
-# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_APPLETOUCH is not set
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARMLINUX=y
-# CONFIG_USB_ATI_REMOTE2 is not set
-# CONFIG_USB_ATI_REMOTE is not set
-# CONFIG_USB_ATMEL is not set
-# CONFIG_USB_ATM is not set
-# CONFIG_USB_AUERSWALD is not set
-# CONFIG_USB_BANDWIDTH is not set
-CONFIG_USB_BELKIN=y
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_C67X00_HCD is not set
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_CPC is not set
-# CONFIG_USB_CXACRU is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_DABUSB is not set
-# CONFIG_USB_DEBUG is not set
-# CONFIG_USB_DEVICE_CLASS is not set
-CONFIG_USB_DEVICEFS=y
-# CONFIG_USB_DSBR is not set
-# CONFIG_USB_DYNAMIC_MINORS is not set
-# CONFIG_USB_EHCI_HCD_PPC_OF is not set
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-# CONFIG_USB_EHCI_SPLIT_ISO is not set
-# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EPSON2888 is not set
-# CONFIG_USB_ET61X251 is not set
-CONFIG_USB_EZUSB=y
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_USB_GADGET_DEBUG is not set
-# CONFIG_USB_GL860 is not set
-# CONFIG_USB_GPIO_VBUS is not set
-# CONFIG_USB_GSPCA_CONEX is not set
-# CONFIG_USB_GSPCA_ETOMS is not set
-# CONFIG_USB_GSPCA_FINEPIX is not set
-# CONFIG_USB_GSPCA is not set
-# CONFIG_USB_GSPCA_JEILINJ is not set
-# CONFIG_USB_GSPCA_MARS is not set
-# CONFIG_USB_GSPCA_MR97310A is not set
-# CONFIG_USB_GSPCA_OV519 is not set
-# CONFIG_USB_GSPCA_OV534 is not set
-# CONFIG_USB_GSPCA_PAC207 is not set
-# CONFIG_USB_GSPCA_PAC7302 is not set
-# CONFIG_USB_GSPCA_PAC7311 is not set
-CONFIG_USB_GSPCA_SN9C20X_EVDEV=y
-# CONFIG_USB_GSPCA_SN9C20X is not set
-# CONFIG_USB_GSPCA_SONIXB is not set
-# CONFIG_USB_GSPCA_SONIXJ is not set
-# CONFIG_USB_GSPCA_SPCA500 is not set
-# CONFIG_USB_GSPCA_SPCA501 is not set
-# CONFIG_USB_GSPCA_SPCA505 is not set
-# CONFIG_USB_GSPCA_SPCA506 is not set
-# CONFIG_USB_GSPCA_SPCA508 is not set
-# CONFIG_USB_GSPCA_SPCA561 is not set
-# CONFIG_USB_GSPCA_SQ905C is not set
-# CONFIG_USB_GSPCA_SQ905 is not set
-# CONFIG_USB_GSPCA_STK014 is not set
-# CONFIG_USB_GSPCA_STV0680 is not set
-# CONFIG_USB_GSPCA_SUNPLUS is not set
-# CONFIG_USB_GSPCA_T613 is not set
-# CONFIG_USB_GSPCA_TV8532 is not set
-# CONFIG_USB_GSPCA_VC032X is not set
-# CONFIG_USB_GSPCA_ZC3XX is not set
-# CONFIG_USB_HIDDEV is not set
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-CONFIG_USB_HIDINPUT=y
-# CONFIG_USB_HID is not set
-# CONFIG_USB_HSO is not set
-# CONFIG_USB_HWA_HCD is not set
-# CONFIG_USB_IBMCAM is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_IP_COMMON is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB is not set
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1362_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_KBD is not set
-# CONFIG_USB_KBTAB is not set
-# CONFIG_USB_KC2190 is not set
-# CONFIG_USB_KEYSPAN_REMOTE is not set
-# CONFIG_USB_KONICAWC is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LIBUSUAL is not set
-# CONFIG_USB_M5602 is not set
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-# CONFIG_USB_MON is not set
-# CONFIG_USB_MOUSE is not set
-# CONFIG_USB_MUSB_HDRC is not set
-# CONFIG_USB_NET_AX8817X is not set
-# CONFIG_USB_NET_CDC_EEM is not set
-# CONFIG_USB_NET_CDCETHER is not set
-# CONFIG_USB_NET_CDC_SUBSET is not set
-# CONFIG_USB_NET_DM9601 is not set
-# CONFIG_USB_NET_GL620A is not set
-# CONFIG_USB_NET_INT51X1 is not set
-# CONFIG_USB_NET_MCS7830 is not set
-# CONFIG_USB_NET_NET1080 is not set
-# CONFIG_USB_NET_PLUSB is not set
-# CONFIG_USB_NET_RNDIS_HOST is not set
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_USB_NET_SMSC95XX is not set
-# CONFIG_USB_NET_ZAURUS is not set
-# CONFIG_USB_OHCI_BIG_ENDIAN is not set
-# CONFIG_USB_OHCI_HCD is not set
-# CONFIG_USB_OHCI_HCD_PCI is not set
-# CONFIG_USB_OHCI_HCD_PPC_OF is not set
-# CONFIG_USB_OHCI_HCD_PPC_SOC is not set
-# CONFIG_USB_OHCI_HCD_SSB is not set
-CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-# CONFIG_USB_OTG_BLACKLIST_HUB is not set
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_OTG_WHITELIST is not set
-# CONFIG_USB_OV511 is not set
-# CONFIG_USB_OXU210HP_HCD is not set
-# CONFIG_USBPCWATCHDOG is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_POWERMATE is not set
-# CONFIG_USB_PRINTER is not set
-# CONFIG_USB_PWC_INPUT_EVDEV is not set
-# CONFIG_USB_QUICKCAM_MESSENGER is not set
-# CONFIG_USB_R8A66597_HCD is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_S2255 is not set
-# CONFIG_USB_SE401 is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_AIRPRIME is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CP210X is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-# CONFIG_USB_SERIAL_FTDI_SIO is not set
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-CONFIG_USB_SERIAL_GENERIC=y
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-CONFIG_USB_SERIAL_KEYSPAN_MPR=y
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-CONFIG_USB_SERIAL_KEYSPAN_USA18X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QI=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19QW=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19W=y
-CONFIG_USB_SERIAL_KEYSPAN_USA19=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XA=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28XB=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28X=y
-CONFIG_USB_SERIAL_KEYSPAN_USA28=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49WLC=y
-CONFIG_USB_SERIAL_KEYSPAN_USA49W=y
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_OPTICON is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_QUALCOMM is not set
-# CONFIG_USB_SERIAL_QUATECH2 is not set
-# CONFIG_USB_SERIAL_QUATECH_USB2 is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-CONFIG_USB_SERIAL_SAFE_PADDED=y
-# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# CONFIG_USB_SERIAL_SYMBOL is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SEVSEG is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_SN9C102 is not set
-# CONFIG_USB_SPEEDTOUCH is not set
-# CONFIG_USB_STKWEBCAM is not set
-CONFIG_USB_STORAGE_ALAUDA=y
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-CONFIG_USB_STORAGE_DATAFAB=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-CONFIG_USB_STORAGE_DPCM=y
-CONFIG_USB_STORAGE_FREECOM=y
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE is not set
-CONFIG_USB_STORAGE_JUMPSHOT=y
-CONFIG_USB_STORAGE_KARMA=y
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-CONFIG_USB_STORAGE_SDDR09=y
-CONFIG_USB_STORAGE_SDDR55=y
-# CONFIG_USB_STORAGE_SIERRA is not set
-CONFIG_USB_STORAGE_USBAT=y
-# CONFIG_USB_STV06XX is not set
-# CONFIG_USB_STV680 is not set
-# CONFIG_USB_SUPPORT is not set
-# CONFIG_USB_SUSPEND is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_TMC is not set
-# CONFIG_USB_TOUCHSCREEN is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_UEAGLEATM is not set
-# CONFIG_USB_ULPI is not set
-# CONFIG_USB_USBNET is not set
-# CONFIG_USB_USBNET_MII is not set
-# CONFIG_USB_VICAM is not set
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-# CONFIG_USB_VIDEO_CLASS is not set
-# CONFIG_USB_VST is not set
-# CONFIG_USB_W9968CF is not set
-# CONFIG_USB_WACOM is not set
-# CONFIG_USB_WDM is not set
-# CONFIG_USB_WHCI_HCD is not set
-# CONFIG_USB_WUSB_CBAF is not set
-# CONFIG_USB_WUSB is not set
-# CONFIG_USB_XHCI_HCD is not set
-# CONFIG_USB_XPAD is not set
-# CONFIG_USB_XUSBATM is not set
-# CONFIG_USB_YEALINK is not set
-# CONFIG_USB_ZC0301 is not set
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_ZR364XX is not set
-# CONFIG_USE_GENERIC_SMP_HELPERS is not set
-# CONFIG_UTS_NS is not set
-# CONFIG_UWB is not set
-# CONFIG_VETH is not set
-# CONFIG_VFAT_FS is not set
-# CONFIG_VGA_ARB is not set
-# CONFIG_VGASTATE is not set
-# CONFIG_VIA_RHINE is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_VIDEO_ADV7170 is not set
-# CONFIG_VIDEO_ADV7175 is not set
-# CONFIG_VIDEO_ADV7180 is not set
-# CONFIG_VIDEO_ADV7343 is not set
-# CONFIG_VIDEO_ADV_DEBUG is not set
-# CONFIG_VIDEO_ALLOW_V4L1 is not set
-# CONFIG_VIDEO_BT819 is not set
-# CONFIG_VIDEO_BT848 is not set
-# CONFIG_VIDEO_BT856 is not set
-# CONFIG_VIDEO_BT866 is not set
-# CONFIG_VIDEO_CAFE_CCIC is not set
-# CONFIG_VIDEO_CAPTURE_DRIVERS is not set
-# CONFIG_VIDEO_CPIA is not set
-# CONFIG_VIDEO_CS5345 is not set
-# CONFIG_VIDEO_CS53L32A is not set
-# CONFIG_VIDEO_CX231XX is not set
-# CONFIG_VIDEO_CX2341X is not set
-# CONFIG_VIDEO_CX25840 is not set
-# CONFIG_VIDEO_CX88 is not set
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_VIDEO_DPC is not set
-# CONFIG_VIDEO_EM28XX is not set
-# CONFIG_VIDEO_FIXED_MINOR_RANGES is not set
-# CONFIG_VIDEO_GO7007 is not set
-# CONFIG_VIDEO_HDPVR is not set
-# CONFIG_VIDEO_HELPER_CHIPS_AUTO is not set
-# CONFIG_VIDEO_HEXIUM_GEMINI is not set
-# CONFIG_VIDEO_HEXIUM_ORION is not set
-# CONFIG_VIDEO_IR_I2C is not set
-# CONFIG_VIDEO_IVTV is not set
-# CONFIG_VIDEO_KS0127 is not set
-# CONFIG_VIDEO_M52790 is not set
-# CONFIG_VIDEO_MEDIA is not set
-# CONFIG_VIDEO_MSP3400 is not set
-# CONFIG_VIDEO_MT9V011 is not set
-# CONFIG_VIDEO_MXB is not set
-# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-# CONFIG_VIDEO_OV7670 is not set
-# CONFIG_VIDEO_OVCAMCHIP is not set
-# CONFIG_VIDEO_PMS is not set
-# CONFIG_VIDEO_PVRUSB2 is not set
-# CONFIG_VIDEO_SAA5246A is not set
-# CONFIG_VIDEO_SAA5249 is not set
-# CONFIG_VIDEO_SAA6588 is not set
-# CONFIG_VIDEO_SAA7110 is not set
-# CONFIG_VIDEO_SAA7111 is not set
-# CONFIG_VIDEO_SAA7114 is not set
-# CONFIG_VIDEO_SAA711X is not set
-# CONFIG_VIDEO_SAA7127 is not set
-# CONFIG_VIDEO_SAA7134 is not set
-# CONFIG_VIDEO_SAA717X is not set
-# CONFIG_VIDEO_SAA7185 is not set
-# CONFIG_VIDEO_SAA7191 is not set
-# CONFIG_VIDEO_SH_MOBILE_CEU is not set
-# CONFIG_VIDEO_STRADIS is not set
-# CONFIG_VIDEO_TCM825X is not set
-# CONFIG_VIDEO_TDA7432 is not set
-# CONFIG_VIDEO_TDA9840 is not set
-# CONFIG_VIDEO_TDA9875 is not set
-# CONFIG_VIDEO_TEA6415C is not set
-# CONFIG_VIDEO_TEA6420 is not set
-# CONFIG_VIDEO_THS7303 is not set
-# CONFIG_VIDEO_TLV320AIC23B is not set
-# CONFIG_VIDEO_TVAUDIO is not set
-# CONFIG_VIDEO_TVP514X is not set
-# CONFIG_VIDEO_TVP5150 is not set
-# CONFIG_VIDEO_UPD64031A is not set
-# CONFIG_VIDEO_UPD64083 is not set
-# CONFIG_VIDEO_USBVISION is not set
-CONFIG_VIDEO_V4L1_COMPAT=y
-# CONFIG_VIDEO_V4L1 is not set
-# CONFIG_VIDEO_V4L2_COMMON is not set
-# CONFIG_VIDEO_V4L2 is not set
-# CONFIG_VIDEO_VIVI is not set
-# CONFIG_VIDEO_VP27SMPX is not set
-# CONFIG_VIDEO_VPX3220 is not set
-# CONFIG_VIDEO_WM8739 is not set
-# CONFIG_VIDEO_WM8775 is not set
-# CONFIG_VIDEO_ZORAN is not set
-# CONFIG_VIRQ_DEBUG is not set
-CONFIG_VIRT_TO_BUS=y
-# CONFIG_VIRTUALIZATION is not set
-# CONFIG_VITESSE_PHY is not set
-# CONFIG_VLAN_8021Q_GVRP is not set
-CONFIG_VLAN_8021Q=y
-# CONFIG_VME_BUS is not set
-# CONFIG_VM_EVENT_COUNTERS is not set
-# CONFIG_VMSPLIT_1G is not set
-# CONFIG_VMSPLIT_2G is not set
-# CONFIG_VMSPLIT_2G_OPT is not set
-# CONFIG_VMSPLIT_3G_OPT is not set
-CONFIG_VMSPLIT_3G=y
-# CONFIG_VMXNET3 is not set
-# CONFIG_VT6655 is not set
-# CONFIG_VT6656 is not set
-# CONFIG_VT is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_W1_CON is not set
-# CONFIG_W1 is not set
-# CONFIG_W1_MASTER_DS1WM is not set
-# CONFIG_W1_MASTER_DS2482 is not set
-# CONFIG_W1_MASTER_DS2490 is not set
-# CONFIG_W1_MASTER_GPIO is not set
-# CONFIG_W1_MASTER_MATROX is not set
-# CONFIG_W1_SLAVE_BQ27000 is not set
-# CONFIG_W1_SLAVE_DS2431 is not set
-# CONFIG_W1_SLAVE_DS2433 is not set
-# CONFIG_W1_SLAVE_DS2760 is not set
-# CONFIG_W1_SLAVE_SMEM is not set
-# CONFIG_W1_SLAVE_THERM is not set
-# CONFIG_W83627HF_WDT is not set
-# CONFIG_W83697HF_WDT is not set
-# CONFIG_W83877F_WDT is not set
-# CONFIG_W83977F_WDT is not set
-# CONFIG_WAN is not set
-# CONFIG_WAN_ROUTER is not set
-# CONFIG_WANXL is not set
-# CONFIG_WATCHDOG_NOWAYOUT is not set
-CONFIG_WATCHDOG=y
-# CONFIG_WDTPCI is not set
-# CONFIG_WIMAX is not set
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS=y
-CONFIG_WLAN_80211=y
-# CONFIG_WLAN_PRE80211 is not set
-CONFIG_WLAN=y
-# CONFIG_WORKQUEUE_TRACER is not set
-# CONFIG_WR_PPMC is not set
-CONFIG_WEXT_CORE=y
-CONFIG_WEXT_PROC=y
-CONFIG_WEXT_PRIV=y
-CONFIG_WEXT_SPY=y
-# CONFIG_X25 is not set
-# CONFIG_XFRM_IPCOMP is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_USER is not set
-CONFIG_XFRM=y
-# CONFIG_XFS_DEBUG is not set
-# CONFIG_XFS_FS is not set
-# CONFIG_XFS_POSIX_ACL is not set
-# CONFIG_XFS_QUOTA is not set
-# CONFIG_XFS_RT is not set
-# CONFIG_XFS_SECURITY is not set
-# CONFIG_XILINX_EMACLITE is not set
-# CONFIG_XILINX_LL_TEMAC is not set
-# CONFIG_XIP_KERNEL is not set
-# CONFIG_YAFFS_FS is not set
-# CONFIG_YAM is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_YENTA is not set
-# CONFIG_YENTA_O2 is not set
-# CONFIG_YENTA_RICOH is not set
-# CONFIG_YENTA_TI is not set
-# CONFIG_YENTA_TOSHIBA is not set
-# CONFIG_ZD1211RW_DEBUG is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_ZEROPLUS_FF is not set
-# CONFIG_ZISOFS_FS is not set
-CONFIG_ZISOFS=y
-CONFIG_ZLIB_DEFLATE=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_ZONE_DMA=y
-CONFIG_DEFAULT_SECURITY_DAC=y
-CONFIG_DEFAULT_SECURITY=""
-# CONFIG_NETFILTER_XT_TARGET_CT is not set
diff --git a/target/linux/generic-2.6/files-2.6.25/drivers/char/gpio_dev.c b/target/linux/generic-2.6/files-2.6.25/drivers/char/gpio_dev.c
deleted file mode 100644 (file)
index 4dc6374..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * character device wrapper for generic gpio layer
- *
- * 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, MA02111-1307USA
- *
- * Feedback, Bugs...  blogic@openwrt.org
- *
- */
-
-#include <linux/module.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <asm/uaccess.h>
-#include <asm/io.h>
-#include <asm/gpio.h>
-#include <asm/atomic.h>
-#include <linux/init.h>
-#include <linux/genhd.h>
-#include <linux/device.h>
-#include <linux/platform_device.h>
-#include <linux/gpio_dev.h>
-
-#define DRVNAME                "gpiodev"
-#define DEVNAME                "gpio"
-
-static int dev_major;
-static unsigned int gpio_access_mask;
-static struct class *gpiodev_class;
-
-/* Counter is 1, if the device is not opened and zero (or less) if opened. */
-static atomic_t gpio_open_cnt = ATOMIC_INIT(1);
-
-static int
-gpio_ioctl(struct inode * inode, struct file * file, unsigned int cmd, unsigned long arg)
-{
-       int retval = 0;
-
-       if (((1 << arg) & gpio_access_mask) != (1 << arg))
-       {
-               retval = -EINVAL;
-               goto out;
-       }
-
-       switch (cmd)
-       {
-       case GPIO_GET:
-               retval = gpio_get_value(arg);
-               break;
-
-       case GPIO_SET:
-               gpio_set_value(arg, 1);
-               break;
-
-       case GPIO_CLEAR:
-               gpio_set_value(arg, 0);
-               break;
-
-       case GPIO_DIR_IN:
-               gpio_direction_input(arg);
-               break;
-
-       case GPIO_DIR_OUT:
-               gpio_direction_output(arg, 0);
-               break;
-
-       default:
-               retval = -EINVAL;
-               break;
-       }
-
-out:
-       return retval;
-}
-
-static int
-gpio_open(struct inode *inode, struct file *file)
-{
-       int result = 0;
-       unsigned int dev_minor = MINOR(inode->i_rdev);
-
-       if (dev_minor != 0)
-       {
-               printk(KERN_ERR DRVNAME ": trying to access unknown minor device -> %d\n", dev_minor);
-               result = -ENODEV;
-               goto out;
-       }
-
-       /* FIXME: We should really allow multiple applications to open the device
-        *        at the same time, as long as the apps access different IO pins.
-        *        The generic gpio-registration functions can be used for that.
-        *        Two new IOCTLs have to be introduced for that. Need to check userspace
-        *        compatibility first. --mb */
-       if (!atomic_dec_and_test(&gpio_open_cnt)) {
-               atomic_inc(&gpio_open_cnt);
-               printk(KERN_ERR DRVNAME ": Device with minor ID %d already in use\n", dev_minor);
-               result = -EBUSY;
-               goto out;
-       }
-
-out:
-       return result;
-}
-
-static int
-gpio_close(struct inode * inode, struct file * file)
-{
-       smp_mb__before_atomic_inc();
-       atomic_inc(&gpio_open_cnt);
-
-       return 0;
-}
-
-struct file_operations gpio_fops = {
-       ioctl:          gpio_ioctl,
-       open:           gpio_open,
-       release:        gpio_close
-};
-
-static int
-gpio_probe(struct platform_device *dev)
-{
-       int result = 0;
-
-       dev_major = register_chrdev(0, DEVNAME, &gpio_fops);
-       if (!dev_major)
-       {
-               printk(KERN_ERR DRVNAME ": Error whilst opening %s \n", DEVNAME);
-               result = -ENODEV;
-               goto out;
-       }
-
-       gpiodev_class = class_create(THIS_MODULE, DRVNAME);
-       class_device_create(gpiodev_class, NULL, MKDEV(dev_major, 0), NULL, DEVNAME);
-
-       printk(KERN_INFO DRVNAME ": gpio device registered with major %d\n", dev_major);
-
-       if (dev->num_resources != 1)
-       {
-               printk(KERN_ERR DRVNAME ": device may only have 1 resource\n");
-               result = -ENODEV;
-               goto out;
-       }
-
-       gpio_access_mask = dev->resource[0].start;
-
-       printk(KERN_INFO DRVNAME ": gpio platform device registered with access mask %08X\n", gpio_access_mask);
-out:
-       return result;
-}
-
-static int
-gpio_remove(struct platform_device *dev)
-{
-       unregister_chrdev(dev_major, DEVNAME);
-       return 0;
-}
-
-static struct
-platform_driver gpio_driver = {
-       .probe = gpio_probe,
-       .remove = gpio_remove,
-       .driver = {
-               .name = "GPIODEV",
-               .owner = THIS_MODULE,
-       },
-};
-
-static int __init
-gpio_mod_init(void)
-{
-       int ret = platform_driver_register(&gpio_driver);
-       if (ret)
-               printk(KERN_INFO DRVNAME ": Error registering platfom driver!");
-
-       return ret;
-}
-
-static void __exit
-gpio_mod_exit(void)
-{
-       platform_driver_unregister(&gpio_driver);
-}
-
-module_init (gpio_mod_init);
-module_exit (gpio_mod_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("John Crispin / OpenWrt");
-MODULE_DESCRIPTION("Character device for for generic gpio api");
diff --git a/target/linux/generic-2.6/files-2.6.25/drivers/input/misc/gpio_buttons.c b/target/linux/generic-2.6/files-2.6.25/drivers/input/misc/gpio_buttons.c
deleted file mode 100644 (file)
index 83a8178..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- *  Driver for buttons on GPIO lines not capable of generating interrupts
- *
- *  Copyright (C) 2007,2008 Gabor Juhos <juhosg at openwrt.org>
- *
- *  This file was based on: /drivers/input/misc/cobalt_btns.c
- *     Copyright (C) 2007 Yoichi Yuasa <yoichi_yuasa@tripeaks.co.jp>
- *
- *  also was based on: /drivers/input/keyboard/gpio_keys.c
- *     Copyright 2005 Phil Blundell
- *
- *  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/init.h>
-
-#include <linux/input.h>
-#include <linux/input-polldev.h>
-#include <linux/ioport.h>
-#include <linux/platform_device.h>
-
-#include <linux/gpio_buttons.h>
-
-#include <asm/gpio.h>
-
-#define DRV_NAME       "gpio-buttons"
-#define DRV_VERSION    "0.1.1"
-#define PFX            DRV_NAME ": "
-
-struct gpio_buttons_dev {
-       struct input_polled_dev *poll_dev;
-       struct gpio_buttons_platform_data *pdata;
-};
-
-static void gpio_buttons_poll(struct input_polled_dev *dev)
-{
-       struct gpio_buttons_dev *bdev = dev->private;
-       struct gpio_buttons_platform_data *pdata = bdev->pdata;
-       struct input_dev *input = dev->input;
-       int i;
-
-       for (i = 0; i < bdev->pdata->nbuttons; i++) {
-               struct gpio_button *button = &pdata->buttons[i];
-               unsigned int type = button->type ?: EV_KEY;
-               int state;
-
-               state = gpio_get_value(button->gpio) ? 1 : 0;
-               state ^= button->active_low;
-
-               if (state) {
-                       button->count++;
-               } else {
-                       if (button->count >= button->threshold) {
-                               input_event(input, type, button->code, 1);
-                               input_sync(input);
-                       }
-                       button->count = 0;
-               }
-
-               if (button->count == button->threshold) {
-                       input_event(input, type, button->code, 0);
-                       input_sync(input);
-               }
-       }
-}
-
-static int __devinit gpio_buttons_probe(struct platform_device *pdev)
-{
-       struct gpio_buttons_platform_data *pdata = pdev->dev.platform_data;
-       struct gpio_buttons_dev *bdev;
-       struct input_polled_dev *poll_dev;
-       struct input_dev *input;
-       int error, i;
-
-
-       if (!pdata)
-               return -ENXIO;
-
-       bdev = kzalloc(sizeof(*bdev), GFP_KERNEL);
-       if (!bdev) {
-               printk(KERN_ERR DRV_NAME "no memory for device\n");
-               return -ENOMEM;
-       }
-
-       poll_dev = input_allocate_polled_device();
-       if (!poll_dev) {
-               printk(KERN_ERR DRV_NAME "no memory for polled device\n");
-               error = -ENOMEM;
-               goto err_free_bdev;
-       }
-
-       poll_dev->private = bdev;
-       poll_dev->poll = gpio_buttons_poll;
-       poll_dev->poll_interval = pdata->poll_interval;
-
-       input = poll_dev->input;
-
-       input->evbit[0] = BIT(EV_KEY);
-       input->name = pdev->name;
-       input->phys = "gpio-buttons/input0";
-       input->dev.parent = &pdev->dev;
-
-       input->id.bustype = BUS_HOST;
-       input->id.vendor = 0x0001;
-       input->id.product = 0x0001;
-       input->id.version = 0x0100;
-
-       for (i = 0; i < pdata->nbuttons; i++) {
-               struct gpio_button *button = &pdata->buttons[i];
-               unsigned int gpio = button->gpio;
-               unsigned int type = button->type ?: EV_KEY;
-
-               error = gpio_request(gpio, button->desc ?
-                               button->desc : DRV_NAME);
-               if (error) {
-                       printk(KERN_ERR PFX "unable to claim gpio %u, "
-                               "error %d\n", gpio, error);
-                       goto err_free_gpio;
-               }
-
-               error = gpio_direction_input(gpio);
-               if (error) {
-                       printk(KERN_ERR PFX "unable to set direction on "
-                               "gpio %u, error %d\n", gpio, error);
-                       goto err_free_gpio;
-               }
-
-               input_set_capability(input, type, button->code);
-               button->count = 0;
-       }
-
-       bdev->poll_dev = poll_dev;
-       bdev->pdata = pdata;
-       platform_set_drvdata(pdev, bdev);
-
-       error = input_register_polled_device(poll_dev);
-       if (error) {
-               printk(KERN_ERR PFX "unable to register polled device, "
-                       "error %d\n", error);
-               goto err_free_gpio;
-       }
-
-       return 0;
-
-err_free_gpio:
-       for (i = i - 1; i >= 0; i--)
-               gpio_free(pdata->buttons[i].gpio);
-
-       input_free_polled_device(poll_dev);
-
-err_free_bdev:
-       kfree(bdev);
-
-       platform_set_drvdata(pdev, NULL);
-       return error;
-}
-
-static int __devexit gpio_buttons_remove(struct platform_device *pdev)
-{
-       struct gpio_buttons_dev *bdev = platform_get_drvdata(pdev);
-       struct gpio_buttons_platform_data *pdata = bdev->pdata;
-       int i;
-
-       input_unregister_polled_device(bdev->poll_dev);
-
-       for (i = 0; i < pdata->nbuttons; i++)
-               gpio_free(pdata->buttons[i].gpio);
-
-       input_free_polled_device(bdev->poll_dev);
-
-       kfree(bdev);
-       platform_set_drvdata(pdev, NULL);
-
-       return 0;
-}
-
-static struct platform_driver gpio_buttons_driver = {
-       .probe  = gpio_buttons_probe,
-       .remove = __devexit_p(gpio_buttons_remove),
-       .driver = {
-               .name   = DRV_NAME,
-               .owner  = THIS_MODULE,
-       },
-};
-
-static int __init gpio_buttons_init(void)
-{
-       printk(KERN_INFO DRV_NAME " driver version " DRV_VERSION "\n");
-       return platform_driver_register(&gpio_buttons_driver);
-}
-
-static void __exit gpio_buttons_exit(void)
-{
-       platform_driver_unregister(&gpio_buttons_driver);
-}
-
-module_init(gpio_buttons_init);
-module_exit(gpio_buttons_exit);
-
-MODULE_LICENSE("GPL");
-MODULE_AUTHOR("Gabor Juhos <juhosg at openwrt.org>");
-MODULE_VERSION(DRV_VERSION);
-MODULE_DESCRIPTION("Polled buttons driver for CPU GPIOs");
-
diff --git a/target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-default-on.c b/target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-default-on.c
deleted file mode 100644 (file)
index 92995e4..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * LED Kernel Default ON Trigger
- *
- * Copyright 2008 Nick Forbes <nick.forbes@incepta.com>
- *
- * Based on Richard Purdie's ledtrig-timer.c.
- *
- * 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/kernel.h>
-#include <linux/init.h>
-#include <linux/leds.h>
-#include "leds.h"
-
-static void defon_trig_activate(struct led_classdev *led_cdev)
-{
-       led_set_brightness(led_cdev, LED_FULL);
-}
-
-static struct led_trigger defon_led_trigger = {
-       .name     = "default-on",
-       .activate = defon_trig_activate,
-};
-
-static int __init defon_trig_init(void)
-{
-       return led_trigger_register(&defon_led_trigger);
-}
-
-static void __exit defon_trig_exit(void)
-{
-       led_trigger_unregister(&defon_led_trigger);
-}
-
-module_init(defon_trig_init);
-module_exit(defon_trig_exit);
-
-MODULE_AUTHOR("Nick Forbes <nick.forbes@incepta.com>");
-MODULE_DESCRIPTION("Default-ON LED trigger");
-MODULE_LICENSE("GPL");
diff --git a/target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-morse.c b/target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-morse.c
deleted file mode 100644 (file)
index cb47480..0000000
+++ /dev/null
@@ -1,365 +0,0 @@
-/*
- *  LED Morse Trigger
- *
- *  Copyright (C) 2007 Gabor Juhos <juhosg at openwrt.org>
- *
- *  This file was based on: drivers/led/ledtrig-timer.c
- *     Copyright 2005-2006 Openedhand Ltd.
- *     Author: Richard Purdie <rpurdie@openedhand.com>
- *
- *  also based on the patch '[PATCH] 2.5.59 morse code panics' posted
- *  in the LKML by Tomas Szepe at Thu, 30 Jan 2003
- *     Copyright (C) 2002 Andrew Rodland <arodland@noln.com>
- *     Copyright (C) 2003 Tomas Szepe <szepe@pinerecords.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/version.h>
-#include <linux/module.h>
-#include <linux/jiffies.h>
-#include <linux/init.h>
-#include <linux/list.h>
-#include <linux/spinlock.h>
-#include <linux/device.h>
-#include <linux/sysdev.h>
-#include <linux/timer.h>
-#include <linux/ctype.h>
-#include <linux/leds.h>
-
-#include "leds.h"
-
-#define MORSE_DELAY_BASE       (HZ/2)
-
-#define MORSE_STATE_BLINK_START        0
-#define MORSE_STATE_BLINK_STOP 1
-
-#define MORSE_DIT_LEN  1
-#define MORSE_DAH_LEN  3
-#define MORSE_SPACE_LEN        7
-
-struct morse_trig_data {
-       unsigned long delay;
-       char *msg;
-
-       unsigned char morse;
-       unsigned char state;
-       char *msgpos;
-       struct timer_list timer;
-};
-
-const unsigned char morsetable[] = {
-       0122, 0, 0310, 0, 0, 0163,                              /* "#$%&' */
-       055, 0155, 0, 0, 0163, 0141, 0152, 0051,                /* ()*+,-./ */
-       077, 076, 074, 070, 060, 040, 041, 043, 047, 057,       /* 0-9 */
-       0107, 0125, 0, 0061, 0, 0114, 0,                        /* :;<=>?@ */
-       006, 021, 025, 011, 002, 024, 013, 020, 004,            /* A-I */
-       036, 015, 022, 007, 005, 017, 026, 033, 012,            /* J-R */
-       010, 003, 014, 030, 016, 031, 035, 023,                 /* S-Z */
-       0, 0, 0, 0, 0154                                        /* [\]^_ */
-};
-
-static inline unsigned char tomorse(char c) {
-       if (c >= 'a' && c <= 'z')
-               c = c - 'a' + 'A';
-       if (c >= '"' && c <= '_') {
-               return morsetable[c - '"'];
-       } else
-               return 0;
-}
-
-static inline unsigned long dit_len(struct morse_trig_data *morse_data)
-{
-       return MORSE_DIT_LEN*morse_data->delay;
-}
-
-static inline unsigned long dah_len(struct morse_trig_data *morse_data)
-{
-       return MORSE_DAH_LEN*morse_data->delay;
-}
-
-static inline unsigned long space_len(struct morse_trig_data *morse_data)
-{
-       return MORSE_SPACE_LEN*morse_data->delay;
-}
-
-static void morse_timer_function(unsigned long data)
-{
-       struct led_classdev *led_cdev = (struct led_classdev *)data;
-       struct morse_trig_data *morse_data = led_cdev->trigger_data;
-       unsigned long brightness = LED_OFF;
-       unsigned long delay = 0;
-
-       if (!morse_data->msg)
-               goto set_led;
-
-       switch (morse_data->state) {
-       case MORSE_STATE_BLINK_START:
-               /* Starting a new blink.  We have a valid code in morse. */
-               delay = (morse_data->morse & 001) ? dah_len(morse_data):
-                       dit_len(morse_data);
-               brightness = LED_FULL;
-               morse_data->state = MORSE_STATE_BLINK_STOP;
-               morse_data->morse >>= 1;
-               break;
-       case MORSE_STATE_BLINK_STOP:
-               /* Coming off of a blink. */
-               morse_data->state = MORSE_STATE_BLINK_START;
-
-               if (morse_data->morse > 1) {
-                       /* Not done yet, just a one-dit pause. */
-                       delay = dit_len(morse_data);
-                       break;
-               }
-
-               /* Get a new char, figure out how much space. */
-               /* First time through */
-               if (!morse_data->msgpos)
-                       morse_data->msgpos = (char *)morse_data->msg;
-
-               if (!*morse_data->msgpos) {
-                       /* Repeating */
-                       morse_data->msgpos = (char *)morse_data->msg;
-                       delay = space_len(morse_data);
-               } else {
-                       /* Inter-letter space */
-                       delay = dah_len(morse_data);
-               }
-
-               if (!(morse_data->morse = tomorse(*morse_data->msgpos))) {
-                       delay = space_len(morse_data);
-                       /* And get us back here */
-                       morse_data->state = MORSE_STATE_BLINK_STOP;
-               }
-               morse_data->msgpos++;
-               break;
-       }
-
-       mod_timer(&morse_data->timer, jiffies + msecs_to_jiffies(delay));
-
-set_led:
-       led_set_brightness(led_cdev, brightness);
-}
-
-static ssize_t _morse_delay_show(struct led_classdev *led_cdev, char *buf)
-{
-       struct morse_trig_data *morse_data = led_cdev->trigger_data;
-
-       sprintf(buf, "%lu\n", morse_data->delay);
-
-       return strlen(buf) + 1;
-}
-
-static ssize_t _morse_delay_store(struct led_classdev *led_cdev,
-               const char *buf, size_t size)
-{
-       struct morse_trig_data *morse_data = led_cdev->trigger_data;
-       char *after;
-       unsigned long state = simple_strtoul(buf, &after, 10);
-       size_t count = after - buf;
-       int ret = -EINVAL;
-
-       if (*after && isspace(*after))
-               count++;
-
-       if (count == size) {
-               morse_data->delay = state;
-               mod_timer(&morse_data->timer, jiffies + 1);
-               ret = count;
-       }
-
-       return ret;
-}
-
-static ssize_t _morse_msg_show(struct led_classdev *led_cdev, char *buf)
-{
-       struct morse_trig_data *morse_data = led_cdev->trigger_data;
-
-       if (!morse_data->msg)
-               sprintf(buf, "<none>\n");
-       else
-               sprintf(buf, "%s\n", morse_data->msg);
-
-       return strlen(buf) + 1;
-}
-
-static ssize_t _morse_msg_store(struct led_classdev *led_cdev,
-               const char *buf, size_t size)
-{
-       struct morse_trig_data *morse_data = led_cdev->trigger_data;
-       char *m;
-
-       m = kmalloc(size, GFP_KERNEL);
-       if (!m)
-               return -ENOMEM;
-
-       memcpy(m,buf,size);
-       m[size]='\0';
-
-       if (morse_data->msg)
-               kfree(morse_data->msg);
-
-       morse_data->msg = m;
-       morse_data->msgpos = NULL;
-       morse_data->state = MORSE_STATE_BLINK_STOP;
-
-       mod_timer(&morse_data->timer, jiffies + 1);
-
-       return size;
-}
-
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,23)
-static ssize_t morse_delay_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct led_classdev *led_cdev = dev_get_drvdata(dev);
-
-       return _morse_delay_show(led_cdev, buf);
-}
-
-static ssize_t morse_delay_store(struct device *dev,
-               struct device_attribute *attr, const char *buf, size_t size)
-{
-       struct led_classdev *led_cdev = dev_get_drvdata(dev);
-
-       return _morse_delay_store(led_cdev, buf, size);
-}
-
-static ssize_t morse_msg_show(struct device *dev,
-               struct device_attribute *attr, char *buf)
-{
-       struct led_classdev *led_cdev = dev_get_drvdata(dev);
-
-       return _morse_msg_show(led_cdev, buf);
-}
-
-static ssize_t morse_msg_store(struct device *dev,
-               struct device_attribute *attr, const char *buf, size_t size)
-{
-       struct led_classdev *led_cdev = dev_get_drvdata(dev);
-
-       return _morse_msg_store(led_cdev, buf, size);
-}
-
-static DEVICE_ATTR(delay, 0644, morse_delay_show, morse_delay_store);
-static DEVICE_ATTR(message, 0644, morse_msg_show, morse_msg_store);
-
-#define led_device_create_file(leddev, attr) \
-       device_create_file(leddev->dev, &dev_attr_ ## attr)
-#define led_device_remove_file(leddev, attr) \
-       device_remove_file(leddev->dev, &dev_attr_ ## attr)
-
-#else
-static ssize_t morse_delay_show(struct class_device *dev, char *buf)
-{
-       struct led_classdev *led_cdev = class_get_devdata(dev);
-
-       return _morse_delay_show(led_cdev, buf);
-}
-
-static ssize_t morse_delay_store(struct class_device *dev, const char *buf,
-               size_t size)
-{
-       struct led_classdev *led_cdev = class_get_devdata(dev);
-
-       return _morse_delay_store(led_cdev, buf, size);
-}
-
-static ssize_t morse_msg_show(struct class_device *dev, char *buf)
-{
-       struct led_classdev *led_cdev = class_get_devdata(dev);
-
-       return _morse_msg_show(led_cdev, buf);
-}
-
-static ssize_t morse_msg_store(struct class_device *dev, const char *buf,
-                               size_t size)
-{
-       struct led_classdev *led_cdev = class_get_devdata(dev);
-
-       return _morse_msg_store(led_cdev, buf, size);
-}
-
-static CLASS_DEVICE_ATTR(delay, 0644, morse_delay_show, morse_delay_store);
-static CLASS_DEVICE_ATTR(message, 0644, morse_msg_show, morse_msg_store);
-
-#define led_device_create_file(leddev, attr) \
-       class_device_create_file(leddev->class_dev, &class_device_attr_ ## attr)
-#define led_device_remove_file(leddev, attr) \
-       class_device_remove_file(leddev->class_dev, &class_device_attr_ ## attr)
-
-#endif
-
-static void morse_trig_activate(struct led_classdev *led_cdev)
-{
-       struct morse_trig_data *morse_data;
-       int rc;
-
-       morse_data = kzalloc(sizeof(*morse_data), GFP_KERNEL);
-       if (!morse_data)
-               return;
-
-       morse_data->delay = MORSE_DELAY_BASE;
-       init_timer(&morse_data->timer);
-       morse_data->timer.function = morse_timer_function;
-       morse_data->timer.data = (unsigned long)led_cdev;
-
-       rc = led_device_create_file(led_cdev, delay);
-       if (rc) goto err;
-
-       rc = led_device_create_file(led_cdev, message);
-       if (rc) goto err_delay;
-
-       led_cdev->trigger_data = morse_data;
-
-       return;
-
-err_delay:
-       led_device_remove_file(led_cdev, delay);
-err:
-       kfree(morse_data);
-}
-
-static void morse_trig_deactivate(struct led_classdev *led_cdev)
-{
-       struct morse_trig_data *morse_data = led_cdev->trigger_data;
-
-       if (!morse_data)
-               return;
-
-       led_device_remove_file(led_cdev, message);
-       led_device_remove_file(led_cdev, delay);
-
-       del_timer_sync(&morse_data->timer);
-       if (morse_data->msg)
-               kfree(morse_data->msg);
-
-       kfree(morse_data);
-}
-
-static struct led_trigger morse_led_trigger = {
-       .name           = "morse",
-       .activate       = morse_trig_activate,
-       .deactivate     = morse_trig_deactivate,
-};
-
-static int __init morse_trig_init(void)
-{
-       return led_trigger_register(&morse_led_trigger);
-}
-
-static void __exit morse_trig_exit(void)
-{
-       led_trigger_unregister(&morse_led_trigger);
-}
-
-module_init(morse_trig_init);
-module_exit(morse_trig_exit);
-
-MODULE_AUTHOR("Gabor Juhos <juhosg at openwrt.org>");
-MODULE_DESCRIPTION("Morse LED trigger");
-MODULE_LICENSE("GPL");
diff --git a/target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-netdev.c b/target/linux/generic-2.6/files-2.6.25/drivers/leds/ledtrig-netdev.c
deleted file mode 100644 (file)
index 285d0f7..0000000
+++ /dev/null
@@ -1,437 +0,0 @@
-/*
- * 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 "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;
-}
-  
-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 */
-               trigger_data->net_dev = dev_get_by_name(trigger_data->device_name);
-               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 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 = trigger_data->net_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 --git a/target/linux/generic-2.6/patches-2.6.25/001-squashfs.patch b/target/linux/generic-2.6/patches-2.6.25/001-squashfs.patch
deleted file mode 100644 (file)
index b2be831..0000000
+++ /dev/null
@@ -1,4170 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -1367,6 +1367,71 @@ config CRAMFS
-         If unsure, say N.
-+config SQUASHFS
-+      tristate "SquashFS 3.0 - Squashed file system support"
-+      select ZLIB_INFLATE
-+      help
-+        Saying Y here includes support for SquashFS 3.0 (a Compressed Read-Only File
-+        System).  Squashfs is a highly compressed read-only filesystem for Linux.
-+        It uses zlib compression to compress both files, inodes and directories.
-+        Inodes in the system are very small and all blocks are packed to minimise
-+        data overhead. Block sizes greater than 4K are supported up to a maximum of 64K.
-+        SquashFS 3.0 supports 64 bit filesystems and files (larger than 4GB), full
-+        uid/gid information, hard links and timestamps.
-+
-+        Squashfs is intended for general read-only filesystem use, for archival
-+        use (i.e. in cases where a .tar.gz file may be used), and in embedded
-+        systems where low overhead is needed.  Further information and filesystem tools
-+        are available from http://squashfs.sourceforge.net.
-+
-+        If you want to compile this as a module ( = code which can be
-+        inserted in and removed from the running kernel whenever you want),
-+        say M here and read <file:Documentation/modules.txt>.  The module
-+        will be called squashfs.  Note that the root file system (the one
-+        containing the directory /) cannot be compiled as a module.
-+
-+        If unsure, say N.
-+
-+config SQUASHFS_EMBEDDED
-+
-+      bool "Additional options for memory-constrained systems"
-+      depends on SQUASHFS
-+      default n
-+      help
-+        Saying Y here allows you to specify cache sizes and how Squashfs
-+        allocates memory.  This is only intended for memory constrained
-+        systems.
-+
-+        If unsure, say N.
-+
-+config SQUASHFS_FRAGMENT_CACHE_SIZE
-+      int "Number of fragments cached" if SQUASHFS_EMBEDDED
-+      depends on SQUASHFS
-+      default "3"
-+      help
-+        By default SquashFS caches the last 3 fragments read from
-+        the filesystem.  Increasing this amount may mean SquashFS
-+        has to re-read fragments less often from disk, at the expense
-+        of extra system memory.  Decreasing this amount will mean
-+        SquashFS uses less memory at the expense of extra reads from disk.
-+
-+        Note there must be at least one cached fragment.  Anything
-+        much more than three will probably not make much difference.
-+
-+config SQUASHFS_VMALLOC
-+      bool "Use Vmalloc rather than Kmalloc" if SQUASHFS_EMBEDDED
-+      depends on SQUASHFS
-+      default n
-+      help
-+        By default SquashFS uses kmalloc to obtain fragment cache memory.
-+        Kmalloc memory is the standard kernel allocator, but it can fail
-+        on memory constrained systems.  Because of the way Vmalloc works,
-+        Vmalloc can succeed when kmalloc fails.  Specifying this option
-+        will make SquashFS always use Vmalloc to allocate the
-+        fragment cache memory.
-+
-+        If unsure, say N.
-+
- config VXFS_FS
-       tristate "FreeVxFS file system support (VERITAS VxFS(TM) compatible)"
-       depends on BLOCK
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -73,6 +73,7 @@ obj-$(CONFIG_JBD)            += jbd/
- obj-$(CONFIG_JBD2)            += jbd2/
- obj-$(CONFIG_EXT2_FS)         += ext2/
- obj-$(CONFIG_CRAMFS)          += cramfs/
-+obj-$(CONFIG_SQUASHFS)                += squashfs/
- obj-y                         += ramfs/
- obj-$(CONFIG_HUGETLBFS)               += hugetlbfs/
- obj-$(CONFIG_CODA_FS)         += coda/
---- /dev/null
-+++ b/fs/squashfs/inode.c
-@@ -0,0 +1,2122 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * inode.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+
-+static void squashfs_put_super(struct super_block *);
-+static int squashfs_statfs(struct dentry *, struct kstatfs *);
-+static int squashfs_symlink_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage(struct file *file, struct page *page);
-+static int squashfs_readpage4K(struct file *file, struct page *page);
-+static int squashfs_readdir(struct file *, void *, filldir_t);
-+static struct inode *squashfs_alloc_inode(struct super_block *sb);
-+static void squashfs_destroy_inode(struct inode *inode);
-+static int init_inodecache(void);
-+static void destroy_inodecache(void);
-+static struct dentry *squashfs_lookup(struct inode *, struct dentry *,
-+                              struct nameidata *);
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode);
-+static long long read_blocklist(struct inode *inode, int index,
-+                              int readahead_blks, char *block_list,
-+                              unsigned short **block_p, unsigned int *bsize);
-+static int squashfs_get_sb(struct file_system_type *, int,
-+                      const char *, void *, struct vfsmount *);
-+
-+
-+static z_stream stream;
-+
-+static struct file_system_type squashfs_fs_type = {
-+      .owner = THIS_MODULE,
-+      .name = "squashfs",
-+      .get_sb = squashfs_get_sb,
-+      .kill_sb = kill_block_super,
-+      .fs_flags = FS_REQUIRES_DEV
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+      DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static struct super_operations squashfs_ops = {
-+      .alloc_inode = squashfs_alloc_inode,
-+      .destroy_inode = squashfs_destroy_inode,
-+      .statfs = squashfs_statfs,
-+      .put_super = squashfs_put_super,
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_symlink_aops = {
-+      .readpage = squashfs_symlink_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops = {
-+      .readpage = squashfs_readpage
-+};
-+
-+SQSH_EXTERN struct address_space_operations squashfs_aops_4K = {
-+      .readpage = squashfs_readpage4K
-+};
-+
-+static struct file_operations squashfs_dir_ops = {
-+      .read = generic_read_dir,
-+      .readdir = squashfs_readdir
-+};
-+
-+SQSH_EXTERN struct inode_operations squashfs_dir_inode_ops = {
-+      .lookup = squashfs_lookup
-+};
-+
-+
-+static struct buffer_head *get_block_length(struct super_block *s,
-+                              int *cur_index, int *offset, int *c_byte)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      unsigned short temp;
-+      struct buffer_head *bh;
-+
-+      if (!(bh = sb_bread(s, *cur_index)))
-+              goto out;
-+
-+      if (msblk->devblksize - *offset == 1) {
-+              if (msblk->swap)
-+                      ((unsigned char *) &temp)[1] = *((unsigned char *)
-+                              (bh->b_data + *offset));
-+              else
-+                      ((unsigned char *) &temp)[0] = *((unsigned char *)
-+                              (bh->b_data + *offset));
-+              brelse(bh);
-+              if (!(bh = sb_bread(s, ++(*cur_index))))
-+                      goto out;
-+              if (msblk->swap)
-+                      ((unsigned char *) &temp)[0] = *((unsigned char *)
-+                              bh->b_data);
-+              else
-+                      ((unsigned char *) &temp)[1] = *((unsigned char *)
-+                              bh->b_data);
-+              *c_byte = temp;
-+              *offset = 1;
-+      } else {
-+              if (msblk->swap) {
-+                      ((unsigned char *) &temp)[1] = *((unsigned char *)
-+                              (bh->b_data + *offset));
-+                      ((unsigned char *) &temp)[0] = *((unsigned char *)
-+                              (bh->b_data + *offset + 1));
-+              } else {
-+                      ((unsigned char *) &temp)[0] = *((unsigned char *)
-+                              (bh->b_data + *offset));
-+                      ((unsigned char *) &temp)[1] = *((unsigned char *)
-+                              (bh->b_data + *offset + 1));
-+              }
-+              *c_byte = temp;
-+              *offset += 2;
-+      }
-+
-+      if (SQUASHFS_CHECK_DATA(msblk->sblk.flags)) {
-+              if (*offset == msblk->devblksize) {
-+                      brelse(bh);
-+                      if (!(bh = sb_bread(s, ++(*cur_index))))
-+                              goto out;
-+                      *offset = 0;
-+              }
-+              if (*((unsigned char *) (bh->b_data + *offset)) !=
-+                                              SQUASHFS_MARKER_BYTE) {
-+                      ERROR("Metadata block marker corrupt @ %x\n",
-+                                              *cur_index);
-+                      brelse(bh);
-+                      goto out;
-+              }
-+              (*offset)++;
-+      }
-+      return bh;
-+
-+out:
-+      return NULL;
-+}
-+
-+
-+SQSH_EXTERN unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+                      long long index, unsigned int length,
-+                      long long *next_index)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct buffer_head *bh[((SQUASHFS_FILE_MAX_SIZE - 1) >>
-+                      msblk->devblksize_log2) + 2];
-+      unsigned int offset = index & ((1 << msblk->devblksize_log2) - 1);
-+      unsigned int cur_index = index >> msblk->devblksize_log2;
-+      int bytes, avail_bytes, b = 0, k;
-+      char *c_buffer;
-+      unsigned int compressed;
-+      unsigned int c_byte = length;
-+
-+      if (c_byte) {
-+              bytes = msblk->devblksize - offset;
-+              compressed = SQUASHFS_COMPRESSED_BLOCK(c_byte);
-+              c_buffer = compressed ? msblk->read_data : buffer;
-+              c_byte = SQUASHFS_COMPRESSED_SIZE_BLOCK(c_byte);
-+
-+              TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+                                      ? "" : "un", (unsigned int) c_byte);
-+
-+              if (!(bh[0] = sb_getblk(s, cur_index)))
-+                      goto block_release;
-+
-+              for (b = 1; bytes < c_byte; b++) {
-+                      if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+                              goto block_release;
-+                      bytes += msblk->devblksize;
-+              }
-+              ll_rw_block(READ, b, bh);
-+      } else {
-+              if (!(bh[0] = get_block_length(s, &cur_index, &offset,
-+                                                              &c_byte)))
-+                      goto read_failure;
-+
-+              bytes = msblk->devblksize - offset;
-+              compressed = SQUASHFS_COMPRESSED(c_byte);
-+              c_buffer = compressed ? msblk->read_data : buffer;
-+              c_byte = SQUASHFS_COMPRESSED_SIZE(c_byte);
-+
-+              TRACE("Block @ 0x%llx, %scompressed size %d\n", index, compressed
-+                                      ? "" : "un", (unsigned int) c_byte);
-+
-+              for (b = 1; bytes < c_byte; b++) {
-+                      if (!(bh[b] = sb_getblk(s, ++cur_index)))
-+                              goto block_release;
-+                      bytes += msblk->devblksize;
-+              }
-+              ll_rw_block(READ, b - 1, bh + 1);
-+      }
-+
-+      if (compressed)
-+              down(&msblk->read_data_mutex);
-+
-+      for (bytes = 0, k = 0; k < b; k++) {
-+              avail_bytes = (c_byte - bytes) > (msblk->devblksize - offset) ?
-+                                      msblk->devblksize - offset :
-+                                      c_byte - bytes;
-+              wait_on_buffer(bh[k]);
-+              if (!buffer_uptodate(bh[k]))
-+                      goto block_release;
-+              memcpy(c_buffer + bytes, bh[k]->b_data + offset, avail_bytes);
-+              bytes += avail_bytes;
-+              offset = 0;
-+              brelse(bh[k]);
-+      }
-+
-+      /*
-+       * uncompress block
-+       */
-+      if (compressed) {
-+              int zlib_err;
-+
-+              stream.next_in = c_buffer;
-+              stream.avail_in = c_byte;
-+              stream.next_out = buffer;
-+              stream.avail_out = msblk->read_size;
-+
-+              if (((zlib_err = zlib_inflateInit(&stream)) != Z_OK) ||
-+                              ((zlib_err = zlib_inflate(&stream, Z_FINISH))
-+                               != Z_STREAM_END) || ((zlib_err =
-+                              zlib_inflateEnd(&stream)) != Z_OK)) {
-+                      ERROR("zlib_fs returned unexpected result 0x%x\n",
-+                              zlib_err);
-+                      bytes = 0;
-+              } else
-+                      bytes = stream.total_out;
-+
-+              up(&msblk->read_data_mutex);
-+      }
-+
-+      if (next_index)
-+              *next_index = index + c_byte + (length ? 0 :
-+                              (SQUASHFS_CHECK_DATA(msblk->sblk.flags)
-+                               ? 3 : 2));
-+      return bytes;
-+
-+block_release:
-+      while (--b >= 0)
-+              brelse(bh[b]);
-+
-+read_failure:
-+      ERROR("sb_bread failed reading block 0x%x\n", cur_index);
-+      return 0;
-+}
-+
-+
-+SQSH_EXTERN int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+                              long long block, unsigned int offset,
-+                              int length, long long *next_block,
-+                              unsigned int *next_offset)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      int n, i, bytes, return_length = length;
-+      long long next_index;
-+
-+      TRACE("Entered squashfs_get_cached_block [%llx:%x]\n", block, offset);
-+
-+      while ( 1 ) {
-+              for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+                      if (msblk->block_cache[i].block == block)
-+                              break;
-+
-+              down(&msblk->block_cache_mutex);
-+
-+              if (i == SQUASHFS_CACHED_BLKS) {
-+                      /* read inode header block */
-+                      for (i = msblk->next_cache, n = SQUASHFS_CACHED_BLKS;
-+                                      n ; n --, i = (i + 1) %
-+                                      SQUASHFS_CACHED_BLKS)
-+                              if (msblk->block_cache[i].block !=
-+                                                      SQUASHFS_USED_BLK)
-+                                      break;
-+
-+                      if (n == 0) {
-+                              wait_queue_t wait;
-+
-+                              init_waitqueue_entry(&wait, current);
-+                              add_wait_queue(&msblk->waitq, &wait);
-+                              set_current_state(TASK_UNINTERRUPTIBLE);
-+                              up(&msblk->block_cache_mutex);
-+                              schedule();
-+                              set_current_state(TASK_RUNNING);
-+                              remove_wait_queue(&msblk->waitq, &wait);
-+                              continue;
-+                      }
-+                      msblk->next_cache = (i + 1) % SQUASHFS_CACHED_BLKS;
-+
-+                      if (msblk->block_cache[i].block ==
-+                                                      SQUASHFS_INVALID_BLK) {
-+                              if (!(msblk->block_cache[i].data =
-+                                              kmalloc(SQUASHFS_METADATA_SIZE,
-+                                              GFP_KERNEL))) {
-+                                      ERROR("Failed to allocate cache"
-+                                                      "block\n");
-+                                      up(&msblk->block_cache_mutex);
-+                                      goto out;
-+                              }
-+                      }
-+
-+                      msblk->block_cache[i].block = SQUASHFS_USED_BLK;
-+                      up(&msblk->block_cache_mutex);
-+
-+                      if (!(msblk->block_cache[i].length =
-+                                              squashfs_read_data(s,
-+                                              msblk->block_cache[i].data,
-+                                              block, 0, &next_index))) {
-+                              ERROR("Unable to read cache block [%llx:%x]\n",
-+                                              block, offset);
-+                              goto out;
-+                      }
-+
-+                      down(&msblk->block_cache_mutex);
-+                      wake_up(&msblk->waitq);
-+                      msblk->block_cache[i].block = block;
-+                      msblk->block_cache[i].next_index = next_index;
-+                      TRACE("Read cache block [%llx:%x]\n", block, offset);
-+              }
-+
-+              if (msblk->block_cache[i].block != block) {
-+                      up(&msblk->block_cache_mutex);
-+                      continue;
-+              }
-+
-+              if ((bytes = msblk->block_cache[i].length - offset) >= length) {
-+                      if (buffer)
-+                              memcpy(buffer, msblk->block_cache[i].data +
-+                                              offset, length);
-+                      if (msblk->block_cache[i].length - offset == length) {
-+                              *next_block = msblk->block_cache[i].next_index;
-+                              *next_offset = 0;
-+                      } else {
-+                              *next_block = block;
-+                              *next_offset = offset + length;
-+                      }
-+                      up(&msblk->block_cache_mutex);
-+                      goto finish;
-+              } else {
-+                      if (buffer) {
-+                              memcpy(buffer, msblk->block_cache[i].data +
-+                                              offset, bytes);
-+                              buffer += bytes;
-+                      }
-+                      block = msblk->block_cache[i].next_index;
-+                      up(&msblk->block_cache_mutex);
-+                      length -= bytes;
-+                      offset = 0;
-+              }
-+      }
-+
-+finish:
-+      return return_length;
-+out:
-+      return 0;
-+}
-+
-+
-+static int get_fragment_location(struct super_block *s, unsigned int fragment,
-+                              long long *fragment_start_block,
-+                              unsigned int *fragment_size)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      long long start_block =
-+              msblk->fragment_index[SQUASHFS_FRAGMENT_INDEX(fragment)];
-+      int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET(fragment);
-+      struct squashfs_fragment_entry fragment_entry;
-+
-+      if (msblk->swap) {
-+              struct squashfs_fragment_entry sfragment_entry;
-+
-+              if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+                                      start_block, offset,
-+                                      sizeof(sfragment_entry), &start_block,
-+                                      &offset))
-+                      goto out;
-+              SQUASHFS_SWAP_FRAGMENT_ENTRY(&fragment_entry, &sfragment_entry);
-+      } else
-+              if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+                                      start_block, offset,
-+                                      sizeof(fragment_entry), &start_block,
-+                                      &offset))
-+                      goto out;
-+
-+      *fragment_start_block = fragment_entry.start_block;
-+      *fragment_size = fragment_entry.size;
-+
-+      return 1;
-+
-+out:
-+      return 0;
-+}
-+
-+
-+SQSH_EXTERN void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+                                      squashfs_fragment_cache *fragment)
-+{
-+      down(&msblk->fragment_mutex);
-+      fragment->locked --;
-+      wake_up(&msblk->fragment_wait_queue);
-+      up(&msblk->fragment_mutex);
-+}
-+
-+
-+SQSH_EXTERN struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+                                      *s, long long start_block,
-+                                      int length)
-+{
-+      int i, n;
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+
-+      while ( 1 ) {
-+              down(&msblk->fragment_mutex);
-+
-+              for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS &&
-+                              msblk->fragment[i].block != start_block; i++);
-+
-+              if (i == SQUASHFS_CACHED_FRAGMENTS) {
-+                      for (i = msblk->next_fragment, n =
-+                              SQUASHFS_CACHED_FRAGMENTS; n &&
-+                              msblk->fragment[i].locked; n--, i = (i + 1) %
-+                              SQUASHFS_CACHED_FRAGMENTS);
-+
-+                      if (n == 0) {
-+                              wait_queue_t wait;
-+
-+                              init_waitqueue_entry(&wait, current);
-+                              add_wait_queue(&msblk->fragment_wait_queue,
-+                                                                      &wait);
-+                              set_current_state(TASK_UNINTERRUPTIBLE);
-+                              up(&msblk->fragment_mutex);
-+                              schedule();
-+                              set_current_state(TASK_RUNNING);
-+                              remove_wait_queue(&msblk->fragment_wait_queue,
-+                                                                      &wait);
-+                              continue;
-+                      }
-+                      msblk->next_fragment = (msblk->next_fragment + 1) %
-+                              SQUASHFS_CACHED_FRAGMENTS;
-+
-+                      if (msblk->fragment[i].data == NULL)
-+                              if (!(msblk->fragment[i].data = SQUASHFS_ALLOC
-+                                              (SQUASHFS_FILE_MAX_SIZE))) {
-+                                      ERROR("Failed to allocate fragment "
-+                                                      "cache block\n");
-+                                      up(&msblk->fragment_mutex);
-+                                      goto out;
-+                              }
-+
-+                      msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+                      msblk->fragment[i].locked = 1;
-+                      up(&msblk->fragment_mutex);
-+
-+                      if (!(msblk->fragment[i].length = squashfs_read_data(s,
-+                                              msblk->fragment[i].data,
-+                                              start_block, length, NULL))) {
-+                              ERROR("Unable to read fragment cache block "
-+                                                      "[%llx]\n", start_block);
-+                              msblk->fragment[i].locked = 0;
-+                              goto out;
-+                      }
-+
-+                      msblk->fragment[i].block = start_block;
-+                      TRACE("New fragment %d, start block %lld, locked %d\n",
-+                                              i, msblk->fragment[i].block,
-+                                              msblk->fragment[i].locked);
-+                      break;
-+              }
-+
-+              msblk->fragment[i].locked++;
-+              up(&msblk->fragment_mutex);
-+              TRACE("Got fragment %d, start block %lld, locked %d\n", i,
-+                                              msblk->fragment[i].block,
-+                                              msblk->fragment[i].locked);
-+              break;
-+      }
-+
-+      return &msblk->fragment[i];
-+
-+out:
-+      return NULL;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+              struct squashfs_base_inode_header *inodeb)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct inode *i = new_inode(s);
-+
-+      if (i) {
-+              i->i_ino = inodeb->inode_number;
-+              i->i_mtime.tv_sec = inodeb->mtime;
-+              i->i_atime.tv_sec = inodeb->mtime;
-+              i->i_ctime.tv_sec = inodeb->mtime;
-+              i->i_uid = msblk->uid[inodeb->uid];
-+              i->i_mode = inodeb->mode;
-+              i->i_size = 0;
-+              if (inodeb->guid == SQUASHFS_GUIDS)
-+                      i->i_gid = i->i_uid;
-+              else
-+                      i->i_gid = msblk->guid[inodeb->guid];
-+      }
-+
-+      return i;
-+}
-+
-+
-+static struct inode *squashfs_iget(struct super_block *s, squashfs_inode_t inode)
-+{
-+      struct inode *i;
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      long long block = SQUASHFS_INODE_BLK(inode) +
-+              sblk->inode_table_start;
-+      unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+      long long next_block;
-+      unsigned int next_offset;
-+      union squashfs_inode_header id, sid;
-+      struct squashfs_base_inode_header *inodeb = &id.base,
-+                                        *sinodeb = &sid.base;
-+
-+      TRACE("Entered squashfs_iget\n");
-+
-+      if (msblk->swap) {
-+              if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+                                      offset, sizeof(*sinodeb), &next_block,
-+                                      &next_offset))
-+                      goto failed_read;
-+              SQUASHFS_SWAP_BASE_INODE_HEADER(inodeb, sinodeb,
-+                                      sizeof(*sinodeb));
-+      } else
-+              if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+                                      offset, sizeof(*inodeb), &next_block,
-+                                      &next_offset))
-+                      goto failed_read;
-+
-+      switch(inodeb->inode_type) {
-+              case SQUASHFS_FILE_TYPE: {
-+                      unsigned int frag_size;
-+                      long long frag_blk;
-+                      struct squashfs_reg_inode_header *inodep = &id.reg;
-+                      struct squashfs_reg_inode_header *sinodep = &sid.reg;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_REG_INODE_HEADER(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      frag_blk = SQUASHFS_INVALID_BLK;
-+                      if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+                                      !get_fragment_location(s,
-+                                      inodep->fragment, &frag_blk, &frag_size))
-+                              goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = 1;
-+                      i->i_size = inodep->file_size;
-+                      i->i_fop = &generic_ro_fops;
-+                      i->i_mode |= S_IFREG;
-+                      i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+                      SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+                      SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+                      SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+                      SQUASHFS_I(i)->offset = next_offset;
-+                      if (sblk->block_size > 4096)
-+                              i->i_data.a_ops = &squashfs_aops;
-+                      else
-+                              i->i_data.a_ops = &squashfs_aops_4K;
-+
-+                      TRACE("File inode %x:%x, start_block %llx, "
-+                                      "block_list_start %llx, offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->start_block, next_block,
-+                                      next_offset);
-+                      break;
-+              }
-+              case SQUASHFS_LREG_TYPE: {
-+                      unsigned int frag_size;
-+                      long long frag_blk;
-+                      struct squashfs_lreg_inode_header *inodep = &id.lreg;
-+                      struct squashfs_lreg_inode_header *sinodep = &sid.lreg;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_LREG_INODE_HEADER(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      frag_blk = SQUASHFS_INVALID_BLK;
-+                      if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+                                      !get_fragment_location(s,
-+                                      inodep->fragment, &frag_blk, &frag_size))
-+                              goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = inodep->nlink;
-+                      i->i_size = inodep->file_size;
-+                      i->i_fop = &generic_ro_fops;
-+                      i->i_mode |= S_IFREG;
-+                      i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+                      SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+                      SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+                      SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+                      SQUASHFS_I(i)->offset = next_offset;
-+                      if (sblk->block_size > 4096)
-+                              i->i_data.a_ops = &squashfs_aops;
-+                      else
-+                              i->i_data.a_ops = &squashfs_aops_4K;
-+
-+                      TRACE("File inode %x:%x, start_block %llx, "
-+                                      "block_list_start %llx, offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->start_block, next_block,
-+                                      next_offset);
-+                      break;
-+              }
-+              case SQUASHFS_DIR_TYPE: {
-+                      struct squashfs_dir_inode_header *inodep = &id.dir;
-+                      struct squashfs_dir_inode_header *sinodep = &sid.dir;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_DIR_INODE_HEADER(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = inodep->nlink;
-+                      i->i_size = inodep->file_size;
-+                      i->i_op = &squashfs_dir_inode_ops;
-+                      i->i_fop = &squashfs_dir_ops;
-+                      i->i_mode |= S_IFDIR;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->offset = inodep->offset;
-+                      SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+                      SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+                      TRACE("Directory inode %x:%x, start_block %x, offset "
-+                                      "%x\n", SQUASHFS_INODE_BLK(inode),
-+                                      offset, inodep->start_block,
-+                                      inodep->offset);
-+                      break;
-+              }
-+              case SQUASHFS_LDIR_TYPE: {
-+                      struct squashfs_ldir_inode_header *inodep = &id.ldir;
-+                      struct squashfs_ldir_inode_header *sinodep = &sid.ldir;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_LDIR_INODE_HEADER(inodep,
-+                                              sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = inodep->nlink;
-+                      i->i_size = inodep->file_size;
-+                      i->i_op = &squashfs_dir_inode_ops;
-+                      i->i_fop = &squashfs_dir_ops;
-+                      i->i_mode |= S_IFDIR;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->offset = inodep->offset;
-+                      SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+                      SQUASHFS_I(i)->u.s2.directory_index_offset =
-+                                                              next_offset;
-+                      SQUASHFS_I(i)->u.s2.directory_index_count =
-+                                                              inodep->i_count;
-+                      SQUASHFS_I(i)->u.s2.parent_inode = inodep->parent_inode;
-+
-+                      TRACE("Long directory inode %x:%x, start_block %x, "
-+                                      "offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->start_block, inodep->offset);
-+                      break;
-+              }
-+              case SQUASHFS_SYMLINK_TYPE: {
-+                      struct squashfs_symlink_inode_header *inodep =
-+                                                              &id.symlink;
-+                      struct squashfs_symlink_inode_header *sinodep =
-+                                                              &sid.symlink;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_SYMLINK_INODE_HEADER(inodep,
-+                                                              sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = inodep->nlink;
-+                      i->i_size = inodep->symlink_size;
-+                      i->i_op = &page_symlink_inode_operations;
-+                      i->i_data.a_ops = &squashfs_symlink_aops;
-+                      i->i_mode |= S_IFLNK;
-+                      SQUASHFS_I(i)->start_block = next_block;
-+                      SQUASHFS_I(i)->offset = next_offset;
-+
-+                      TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+                                      "offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      next_block, next_offset);
-+                      break;
-+               }
-+               case SQUASHFS_BLKDEV_TYPE:
-+               case SQUASHFS_CHRDEV_TYPE: {
-+                      struct squashfs_dev_inode_header *inodep = &id.dev;
-+                      struct squashfs_dev_inode_header *sinodep = &sid.dev;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_DEV_INODE_HEADER(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = inodep->nlink;
-+                      i->i_mode |= (inodeb->inode_type ==
-+                                      SQUASHFS_CHRDEV_TYPE) ?  S_IFCHR :
-+                                      S_IFBLK;
-+                      init_special_inode(i, i->i_mode,
-+                                      old_decode_dev(inodep->rdev));
-+
-+                      TRACE("Device inode %x:%x, rdev %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->rdev);
-+                      break;
-+               }
-+               case SQUASHFS_FIFO_TYPE:
-+               case SQUASHFS_SOCKET_TYPE: {
-+                      struct squashfs_ipc_inode_header *inodep = &id.ipc;
-+                      struct squashfs_ipc_inode_header *sinodep = &sid.ipc;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_IPC_INODE_HEADER(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if ((i = squashfs_new_inode(s, inodeb)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_nlink = inodep->nlink;
-+                      i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+                                                      ? S_IFIFO : S_IFSOCK;
-+                      init_special_inode(i, i->i_mode, 0);
-+                      break;
-+               }
-+               default:
-+                      ERROR("Unknown inode type %d in squashfs_iget!\n",
-+                                      inodeb->inode_type);
-+                      goto failed_read1;
-+      }
-+
-+      insert_inode_hash(i);
-+      return i;
-+
-+failed_read:
-+      ERROR("Unable to read inode [%llx:%x]\n", block, offset);
-+
-+failed_read1:
-+      return NULL;
-+}
-+
-+
-+static int read_fragment_index_table(struct super_block *s)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+      /* Allocate fragment index table */
-+      if (!(msblk->fragment_index = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES
-+                                      (sblk->fragments), GFP_KERNEL))) {
-+              ERROR("Failed to allocate uid/gid table\n");
-+              return 0;
-+      }
-+
-+      if (SQUASHFS_FRAGMENT_INDEX_BYTES(sblk->fragments) &&
-+                                      !squashfs_read_data(s, (char *)
-+                                      msblk->fragment_index,
-+                                      sblk->fragment_table_start,
-+                                      SQUASHFS_FRAGMENT_INDEX_BYTES
-+                                      (sblk->fragments) |
-+                                      SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+              ERROR("unable to read fragment index table\n");
-+              return 0;
-+      }
-+
-+      if (msblk->swap) {
-+              int i;
-+              long long fragment;
-+
-+              for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES(sblk->fragments);
-+                                                                      i++) {
-+                      SQUASHFS_SWAP_FRAGMENT_INDEXES((&fragment),
-+                                              &msblk->fragment_index[i], 1);
-+                      msblk->fragment_index[i] = fragment;
-+              }
-+      }
-+
-+      return 1;
-+}
-+
-+
-+static int supported_squashfs_filesystem(struct squashfs_sb_info *msblk, int silent)
-+{
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+      msblk->iget = squashfs_iget;
-+      msblk->read_blocklist = read_blocklist;
-+      msblk->read_fragment_index_table = read_fragment_index_table;
-+
-+      if (sblk->s_major == 1) {
-+              if (!squashfs_1_0_supported(msblk)) {
-+                      SERROR("Major/Minor mismatch, Squashfs 1.0 filesystems "
-+                              "are unsupported\n");
-+                      SERROR("Please recompile with "
-+                              "Squashfs 1.0 support enabled\n");
-+                      return 0;
-+              }
-+      } else if (sblk->s_major == 2) {
-+              if (!squashfs_2_0_supported(msblk)) {
-+                      SERROR("Major/Minor mismatch, Squashfs 2.0 filesystems "
-+                              "are unsupported\n");
-+                      SERROR("Please recompile with "
-+                              "Squashfs 2.0 support enabled\n");
-+                      return 0;
-+              }
-+      } else if(sblk->s_major != SQUASHFS_MAJOR || sblk->s_minor >
-+                      SQUASHFS_MINOR) {
-+              SERROR("Major/Minor mismatch, trying to mount newer %d.%d "
-+                              "filesystem\n", sblk->s_major, sblk->s_minor);
-+              SERROR("Please update your kernel\n");
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+
-+static int squashfs_fill_super(struct super_block *s, void *data, int silent)
-+{
-+      struct squashfs_sb_info *msblk;
-+      struct squashfs_super_block *sblk;
-+      int i;
-+      char b[BDEVNAME_SIZE];
-+      struct inode *root;
-+
-+      TRACE("Entered squashfs_read_superblock\n");
-+
-+      if (!(s->s_fs_info = kmalloc(sizeof(struct squashfs_sb_info),
-+                                              GFP_KERNEL))) {
-+              ERROR("Failed to allocate superblock\n");
-+              goto failure;
-+      }
-+      memset(s->s_fs_info, 0, sizeof(struct squashfs_sb_info));
-+      msblk = s->s_fs_info;
-+      sblk = &msblk->sblk;
-+
-+      msblk->devblksize = sb_min_blocksize(s, BLOCK_SIZE);
-+      msblk->devblksize_log2 = ffz(~msblk->devblksize);
-+
-+      init_MUTEX(&msblk->read_data_mutex);
-+      init_MUTEX(&msblk->read_page_mutex);
-+      init_MUTEX(&msblk->block_cache_mutex);
-+      init_MUTEX(&msblk->fragment_mutex);
-+      init_MUTEX(&msblk->meta_index_mutex);
-+
-+      init_waitqueue_head(&msblk->waitq);
-+      init_waitqueue_head(&msblk->fragment_wait_queue);
-+
-+      if (!squashfs_read_data(s, (char *) sblk, SQUASHFS_START,
-+                                      sizeof(struct squashfs_super_block) |
-+                                      SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+              SERROR("unable to read superblock\n");
-+              goto failed_mount;
-+      }
-+
-+      /* Check it is a SQUASHFS superblock */
-+      msblk->swap = 0;
-+      if ((s->s_magic = sblk->s_magic) != SQUASHFS_MAGIC) {
-+              if (sblk->s_magic == SQUASHFS_MAGIC_SWAP) {
-+                      struct squashfs_super_block ssblk;
-+
-+                      WARNING("Mounting a different endian SQUASHFS "
-+                              "filesystem on %s\n", bdevname(s->s_bdev, b));
-+
-+                      SQUASHFS_SWAP_SUPER_BLOCK(&ssblk, sblk);
-+                      memcpy(sblk, &ssblk, sizeof(struct squashfs_super_block));
-+                      msblk->swap = 1;
-+              } else  {
-+                      SERROR("Can't find a SQUASHFS superblock on %s\n",
-+                                                      bdevname(s->s_bdev, b));
-+                      goto failed_mount;
-+              }
-+      }
-+
-+      /* Check the MAJOR & MINOR versions */
-+      if(!supported_squashfs_filesystem(msblk, silent))
-+              goto failed_mount;
-+
-+      TRACE("Found valid superblock on %s\n", bdevname(s->s_bdev, b));
-+      TRACE("Inodes are %scompressed\n",
-+                                      SQUASHFS_UNCOMPRESSED_INODES
-+                                      (sblk->flags) ? "un" : "");
-+      TRACE("Data is %scompressed\n",
-+                                      SQUASHFS_UNCOMPRESSED_DATA(sblk->flags)
-+                                      ? "un" : "");
-+      TRACE("Check data is %s present in the filesystem\n",
-+                                      SQUASHFS_CHECK_DATA(sblk->flags) ?
-+                                      "" : "not");
-+      TRACE("Filesystem size %lld bytes\n", sblk->bytes_used);
-+      TRACE("Block size %d\n", sblk->block_size);
-+      TRACE("Number of inodes %d\n", sblk->inodes);
-+      if (sblk->s_major > 1)
-+              TRACE("Number of fragments %d\n", sblk->fragments);
-+      TRACE("Number of uids %d\n", sblk->no_uids);
-+      TRACE("Number of gids %d\n", sblk->no_guids);
-+      TRACE("sblk->inode_table_start %llx\n", sblk->inode_table_start);
-+      TRACE("sblk->directory_table_start %llx\n", sblk->directory_table_start);
-+      if (sblk->s_major > 1)
-+              TRACE("sblk->fragment_table_start %llx\n",
-+                                      sblk->fragment_table_start);
-+      TRACE("sblk->uid_start %llx\n", sblk->uid_start);
-+
-+      s->s_flags |= MS_RDONLY;
-+      s->s_op = &squashfs_ops;
-+
-+      /* Init inode_table block pointer array */
-+      if (!(msblk->block_cache = kmalloc(sizeof(struct squashfs_cache) *
-+                                      SQUASHFS_CACHED_BLKS, GFP_KERNEL))) {
-+              ERROR("Failed to allocate block cache\n");
-+              goto failed_mount;
-+      }
-+
-+      for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+              msblk->block_cache[i].block = SQUASHFS_INVALID_BLK;
-+
-+      msblk->next_cache = 0;
-+
-+      /* Allocate read_data block */
-+      msblk->read_size = (sblk->block_size < SQUASHFS_METADATA_SIZE) ?
-+                                      SQUASHFS_METADATA_SIZE :
-+                                      sblk->block_size;
-+
-+      if (!(msblk->read_data = kmalloc(msblk->read_size, GFP_KERNEL))) {
-+              ERROR("Failed to allocate read_data block\n");
-+              goto failed_mount;
-+      }
-+
-+      /* Allocate read_page block */
-+      if (!(msblk->read_page = kmalloc(sblk->block_size, GFP_KERNEL))) {
-+              ERROR("Failed to allocate read_page block\n");
-+              goto failed_mount;
-+      }
-+
-+      /* Allocate uid and gid tables */
-+      if (!(msblk->uid = kmalloc((sblk->no_uids + sblk->no_guids) *
-+                                      sizeof(unsigned int), GFP_KERNEL))) {
-+              ERROR("Failed to allocate uid/gid table\n");
-+              goto failed_mount;
-+      }
-+      msblk->guid = msblk->uid + sblk->no_uids;
-+
-+      if (msblk->swap) {
-+              unsigned int suid[sblk->no_uids + sblk->no_guids];
-+
-+              if (!squashfs_read_data(s, (char *) &suid, sblk->uid_start,
-+                                      ((sblk->no_uids + sblk->no_guids) *
-+                                       sizeof(unsigned int)) |
-+                                      SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+                      ERROR("unable to read uid/gid table\n");
-+                      goto failed_mount;
-+              }
-+
-+              SQUASHFS_SWAP_DATA(msblk->uid, suid, (sblk->no_uids +
-+                      sblk->no_guids), (sizeof(unsigned int) * 8));
-+      } else
-+              if (!squashfs_read_data(s, (char *) msblk->uid, sblk->uid_start,
-+                                      ((sblk->no_uids + sblk->no_guids) *
-+                                       sizeof(unsigned int)) |
-+                                      SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+                      ERROR("unable to read uid/gid table\n");
-+                      goto failed_mount;
-+              }
-+
-+
-+      if (sblk->s_major == 1 && squashfs_1_0_supported(msblk))
-+              goto allocate_root;
-+
-+      if (!(msblk->fragment = kmalloc(sizeof(struct squashfs_fragment_cache) *
-+                              SQUASHFS_CACHED_FRAGMENTS, GFP_KERNEL))) {
-+              ERROR("Failed to allocate fragment block cache\n");
-+              goto failed_mount;
-+      }
-+
-+      for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++) {
-+              msblk->fragment[i].locked = 0;
-+              msblk->fragment[i].block = SQUASHFS_INVALID_BLK;
-+              msblk->fragment[i].data = NULL;
-+      }
-+
-+      msblk->next_fragment = 0;
-+
-+      /* Allocate fragment index table */
-+      if (msblk->read_fragment_index_table(s) == 0)
-+              goto failed_mount;
-+
-+allocate_root:
-+      if ((root = (msblk->iget)(s, sblk->root_inode)) == NULL)
-+              goto failed_mount;
-+
-+      if ((s->s_root = d_alloc_root(root)) == NULL) {
-+              ERROR("Root inode create failed\n");
-+              iput(root);
-+              goto failed_mount;
-+      }
-+
-+      TRACE("Leaving squashfs_read_super\n");
-+      return 0;
-+
-+failed_mount:
-+      kfree(msblk->fragment_index);
-+      kfree(msblk->fragment);
-+      kfree(msblk->uid);
-+      kfree(msblk->read_page);
-+      kfree(msblk->read_data);
-+      kfree(msblk->block_cache);
-+      kfree(msblk->fragment_index_2);
-+      kfree(s->s_fs_info);
-+      s->s_fs_info = NULL;
-+      return -EINVAL;
-+
-+failure:
-+      return -ENOMEM;
-+}
-+
-+
-+static int squashfs_statfs(struct dentry *dentry, struct kstatfs *buf)
-+{
-+      struct squashfs_sb_info *msblk = dentry->d_inode->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+      TRACE("Entered squashfs_statfs\n");
-+
-+      buf->f_type = SQUASHFS_MAGIC;
-+      buf->f_bsize = sblk->block_size;
-+      buf->f_blocks = ((sblk->bytes_used - 1) >> sblk->block_log) + 1;
-+      buf->f_bfree = buf->f_bavail = 0;
-+      buf->f_files = sblk->inodes;
-+      buf->f_ffree = 0;
-+      buf->f_namelen = SQUASHFS_NAME_LEN;
-+
-+      return 0;
-+}
-+
-+
-+static int squashfs_symlink_readpage(struct file *file, struct page *page)
-+{
-+      struct inode *inode = page->mapping->host;
-+      int index = page->index << PAGE_CACHE_SHIFT, length, bytes;
-+      long long block = SQUASHFS_I(inode)->start_block;
-+      int offset = SQUASHFS_I(inode)->offset;
-+      void *pageaddr = kmap(page);
-+
-+      TRACE("Entered squashfs_symlink_readpage, page index %ld, start block "
-+                              "%llx, offset %x\n", page->index,
-+                              SQUASHFS_I(inode)->start_block,
-+                              SQUASHFS_I(inode)->offset);
-+
-+      for (length = 0; length < index; length += bytes) {
-+              if (!(bytes = squashfs_get_cached_block(inode->i_sb, NULL,
-+                              block, offset, PAGE_CACHE_SIZE, &block,
-+                              &offset))) {
-+                      ERROR("Unable to read symbolic link [%llx:%x]\n", block,
-+                                      offset);
-+                      goto skip_read;
-+              }
-+      }
-+
-+      if (length != index) {
-+              ERROR("(squashfs_symlink_readpage) length != index\n");
-+              bytes = 0;
-+              goto skip_read;
-+      }
-+
-+      bytes = (i_size_read(inode) - length) > PAGE_CACHE_SIZE ? PAGE_CACHE_SIZE :
-+                                      i_size_read(inode) - length;
-+
-+      if (!(bytes = squashfs_get_cached_block(inode->i_sb, pageaddr, block,
-+                                      offset, bytes, &block, &offset)))
-+              ERROR("Unable to read symbolic link [%llx:%x]\n", block, offset);
-+
-+skip_read:
-+      memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+      kunmap(page);
-+      SetPageUptodate(page);
-+      unlock_page(page);
-+
-+      return 0;
-+}
-+
-+
-+struct meta_index *locate_meta_index(struct inode *inode, int index, int offset)
-+{
-+      struct meta_index *meta = NULL;
-+      struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+      int i;
-+
-+      down(&msblk->meta_index_mutex);
-+
-+      TRACE("locate_meta_index: index %d, offset %d\n", index, offset);
-+
-+      if(msblk->meta_index == NULL)
-+              goto not_allocated;
-+
-+      for (i = 0; i < SQUASHFS_META_NUMBER; i ++)
-+              if (msblk->meta_index[i].inode_number == inode->i_ino &&
-+                              msblk->meta_index[i].offset >= offset &&
-+                              msblk->meta_index[i].offset <= index &&
-+                              msblk->meta_index[i].locked == 0) {
-+                      TRACE("locate_meta_index: entry %d, offset %d\n", i,
-+                                      msblk->meta_index[i].offset);
-+                      meta = &msblk->meta_index[i];
-+                      offset = meta->offset;
-+              }
-+
-+      if (meta)
-+              meta->locked = 1;
-+
-+not_allocated:
-+      up(&msblk->meta_index_mutex);
-+
-+      return meta;
-+}
-+
-+
-+struct meta_index *empty_meta_index(struct inode *inode, int offset, int skip)
-+{
-+      struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+      struct meta_index *meta = NULL;
-+      int i;
-+
-+      down(&msblk->meta_index_mutex);
-+
-+      TRACE("empty_meta_index: offset %d, skip %d\n", offset, skip);
-+
-+      if(msblk->meta_index == NULL) {
-+              if (!(msblk->meta_index = kmalloc(sizeof(struct meta_index) *
-+                                      SQUASHFS_META_NUMBER, GFP_KERNEL))) {
-+                      ERROR("Failed to allocate meta_index\n");
-+                      goto failed;
-+              }
-+              for(i = 0; i < SQUASHFS_META_NUMBER; i++) {
-+                      msblk->meta_index[i].inode_number = 0;
-+                      msblk->meta_index[i].locked = 0;
-+              }
-+              msblk->next_meta_index = 0;
-+      }
-+
-+      for(i = SQUASHFS_META_NUMBER; i &&
-+                      msblk->meta_index[msblk->next_meta_index].locked; i --)
-+              msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+                      SQUASHFS_META_NUMBER;
-+
-+      if(i == 0) {
-+              TRACE("empty_meta_index: failed!\n");
-+              goto failed;
-+      }
-+
-+      TRACE("empty_meta_index: returned meta entry %d, %p\n",
-+                      msblk->next_meta_index,
-+                      &msblk->meta_index[msblk->next_meta_index]);
-+
-+      meta = &msblk->meta_index[msblk->next_meta_index];
-+      msblk->next_meta_index = (msblk->next_meta_index + 1) %
-+                      SQUASHFS_META_NUMBER;
-+
-+      meta->inode_number = inode->i_ino;
-+      meta->offset = offset;
-+      meta->skip = skip;
-+      meta->entries = 0;
-+      meta->locked = 1;
-+
-+failed:
-+      up(&msblk->meta_index_mutex);
-+      return meta;
-+}
-+
-+
-+void release_meta_index(struct inode *inode, struct meta_index *meta)
-+{
-+      meta->locked = 0;
-+}
-+
-+
-+static int read_block_index(struct super_block *s, int blocks, char *block_list,
-+              long long *start_block, int *offset)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      unsigned int *block_listp;
-+      int block = 0;
-+
-+      if (msblk->swap) {
-+              char sblock_list[blocks << 2];
-+
-+              if (!squashfs_get_cached_block(s, sblock_list, *start_block,
-+                              *offset, blocks << 2, start_block, offset)) {
-+                      ERROR("Unable to read block list [%llx:%x]\n",
-+                              *start_block, *offset);
-+                      goto failure;
-+              }
-+              SQUASHFS_SWAP_INTS(((unsigned int *)block_list),
-+                              ((unsigned int *)sblock_list), blocks);
-+      } else
-+              if (!squashfs_get_cached_block(s, block_list, *start_block,
-+                              *offset, blocks << 2, start_block, offset)) {
-+                      ERROR("Unable to read block list [%llx:%x]\n",
-+                              *start_block, *offset);
-+                      goto failure;
-+              }
-+
-+      for (block_listp = (unsigned int *) block_list; blocks;
-+                              block_listp++, blocks --)
-+              block += SQUASHFS_COMPRESSED_SIZE_BLOCK(*block_listp);
-+
-+      return block;
-+
-+failure:
-+      return -1;
-+}
-+
-+
-+#define SIZE 256
-+
-+static inline int calculate_skip(int blocks) {
-+      int skip = (blocks - 1) / ((SQUASHFS_SLOTS * SQUASHFS_META_ENTRIES + 1) * SQUASHFS_META_INDEXES);
-+      return skip >= 7 ? 7 : skip + 1;
-+}
-+
-+
-+static int get_meta_index(struct inode *inode, int index,
-+              long long *index_block, int *index_offset,
-+              long long *data_block, char *block_list)
-+{
-+      struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      int skip = calculate_skip(i_size_read(inode) >> sblk->block_log);
-+      int offset = 0;
-+      struct meta_index *meta;
-+      struct meta_entry *meta_entry;
-+      long long cur_index_block = SQUASHFS_I(inode)->u.s1.block_list_start;
-+      int cur_offset = SQUASHFS_I(inode)->offset;
-+      long long cur_data_block = SQUASHFS_I(inode)->start_block;
-+      int i;
-+
-+      index /= SQUASHFS_META_INDEXES * skip;
-+
-+      while ( offset < index ) {
-+              meta = locate_meta_index(inode, index, offset + 1);
-+
-+              if (meta == NULL) {
-+                      if ((meta = empty_meta_index(inode, offset + 1,
-+                                                      skip)) == NULL)
-+                              goto all_done;
-+              } else {
-+                      offset = index < meta->offset + meta->entries ? index :
-+                              meta->offset + meta->entries - 1;
-+                      meta_entry = &meta->meta_entry[offset - meta->offset];
-+                      cur_index_block = meta_entry->index_block + sblk->inode_table_start;
-+                      cur_offset = meta_entry->offset;
-+                      cur_data_block = meta_entry->data_block;
-+                      TRACE("get_meta_index: offset %d, meta->offset %d, "
-+                              "meta->entries %d\n", offset, meta->offset,
-+                              meta->entries);
-+                      TRACE("get_meta_index: index_block 0x%llx, offset 0x%x"
-+                              " data_block 0x%llx\n", cur_index_block,
-+                              cur_offset, cur_data_block);
-+              }
-+
-+              for (i = meta->offset + meta->entries; i <= index &&
-+                              i < meta->offset + SQUASHFS_META_ENTRIES; i++) {
-+                      int blocks = skip * SQUASHFS_META_INDEXES;
-+
-+                      while (blocks) {
-+                              int block = blocks > (SIZE >> 2) ? (SIZE >> 2) :
-+                                      blocks;
-+                              int res = read_block_index(inode->i_sb, block,
-+                                      block_list, &cur_index_block,
-+                                      &cur_offset);
-+
-+                              if (res == -1)
-+                                      goto failed;
-+
-+                              cur_data_block += res;
-+                              blocks -= block;
-+                      }
-+
-+                      meta_entry = &meta->meta_entry[i - meta->offset];
-+                      meta_entry->index_block = cur_index_block - sblk->inode_table_start;
-+                      meta_entry->offset = cur_offset;
-+                      meta_entry->data_block = cur_data_block;
-+                      meta->entries ++;
-+                      offset ++;
-+              }
-+
-+              TRACE("get_meta_index: meta->offset %d, meta->entries %d\n",
-+                              meta->offset, meta->entries);
-+
-+              release_meta_index(inode, meta);
-+      }
-+
-+all_done:
-+      *index_block = cur_index_block;
-+      *index_offset = cur_offset;
-+      *data_block = cur_data_block;
-+
-+      return offset * SQUASHFS_META_INDEXES * skip;
-+
-+failed:
-+      release_meta_index(inode, meta);
-+      return -1;
-+}
-+
-+
-+static long long read_blocklist(struct inode *inode, int index,
-+                              int readahead_blks, char *block_list,
-+                              unsigned short **block_p, unsigned int *bsize)
-+{
-+      long long block_ptr;
-+      int offset;
-+      long long block;
-+      int res = get_meta_index(inode, index, &block_ptr, &offset, &block,
-+              block_list);
-+
-+      TRACE("read_blocklist: res %d, index %d, block_ptr 0x%llx, offset"
-+                     " 0x%x, block 0x%llx\n", res, index, block_ptr, offset,
-+                     block);
-+
-+      if(res == -1)
-+              goto failure;
-+
-+      index -= res;
-+
-+      while ( index ) {
-+              int blocks = index > (SIZE >> 2) ? (SIZE >> 2) : index;
-+              int res = read_block_index(inode->i_sb, blocks, block_list,
-+                      &block_ptr, &offset);
-+              if (res == -1)
-+                      goto failure;
-+              block += res;
-+              index -= blocks;
-+      }
-+
-+      if (read_block_index(inode->i_sb, 1, block_list,
-+                      &block_ptr, &offset) == -1)
-+              goto failure;
-+      *bsize = *((unsigned int *) block_list);
-+
-+      return block;
-+
-+failure:
-+      return 0;
-+}
-+
-+
-+static int squashfs_readpage(struct file *file, struct page *page)
-+{
-+      struct inode *inode = page->mapping->host;
-+      struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      unsigned char block_list[SIZE];
-+      long long block;
-+      unsigned int bsize, i = 0, bytes = 0, byte_offset = 0;
-+      int index = page->index >> (sblk->block_log - PAGE_CACHE_SHIFT);
-+      void *pageaddr;
-+      struct squashfs_fragment_cache *fragment = NULL;
-+      char *data_ptr = msblk->read_page;
-+
-+      int mask = (1 << (sblk->block_log - PAGE_CACHE_SHIFT)) - 1;
-+      int start_index = page->index & ~mask;
-+      int end_index = start_index | mask;
-+
-+      TRACE("Entered squashfs_readpage, page index %lx, start block %llx\n",
-+                                      page->index,
-+                                      SQUASHFS_I(inode)->start_block);
-+
-+      if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+                                      PAGE_CACHE_SHIFT))
-+              goto skip_read;
-+
-+      if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+                                      || index < (i_size_read(inode) >>
-+                                      sblk->block_log)) {
-+              if ((block = (msblk->read_blocklist)(inode, index, 1,
-+                                      block_list, NULL, &bsize)) == 0)
-+                      goto skip_read;
-+
-+              down(&msblk->read_page_mutex);
-+
-+              if (!(bytes = squashfs_read_data(inode->i_sb, msblk->read_page,
-+                                      block, bsize, NULL))) {
-+                      ERROR("Unable to read page, block %llx, size %x\n", block,
-+                                      bsize);
-+                      up(&msblk->read_page_mutex);
-+                      goto skip_read;
-+              }
-+      } else {
-+              if ((fragment = get_cached_fragment(inode->i_sb,
-+                                      SQUASHFS_I(inode)->
-+                                      u.s1.fragment_start_block,
-+                                      SQUASHFS_I(inode)->u.s1.fragment_size))
-+                                      == NULL) {
-+                      ERROR("Unable to read page, block %llx, size %x\n",
-+                                      SQUASHFS_I(inode)->
-+                                      u.s1.fragment_start_block,
-+                                      (int) SQUASHFS_I(inode)->
-+                                      u.s1.fragment_size);
-+                      goto skip_read;
-+              }
-+              bytes = SQUASHFS_I(inode)->u.s1.fragment_offset +
-+                                      (i_size_read(inode) & (sblk->block_size
-+                                      - 1));
-+              byte_offset = SQUASHFS_I(inode)->u.s1.fragment_offset;
-+              data_ptr = fragment->data;
-+      }
-+
-+      for (i = start_index; i <= end_index && byte_offset < bytes;
-+                                      i++, byte_offset += PAGE_CACHE_SIZE) {
-+              struct page *push_page;
-+              int available_bytes = (bytes - byte_offset) > PAGE_CACHE_SIZE ?
-+                                      PAGE_CACHE_SIZE : bytes - byte_offset;
-+
-+              TRACE("bytes %d, i %d, byte_offset %d, available_bytes %d\n",
-+                                      bytes, i, byte_offset, available_bytes);
-+
-+              if (i == page->index)  {
-+                      pageaddr = kmap_atomic(page, KM_USER0);
-+                      memcpy(pageaddr, data_ptr + byte_offset,
-+                                      available_bytes);
-+                      memset(pageaddr + available_bytes, 0,
-+                                      PAGE_CACHE_SIZE - available_bytes);
-+                      kunmap_atomic(pageaddr, KM_USER0);
-+                      flush_dcache_page(page);
-+                      SetPageUptodate(page);
-+                      unlock_page(page);
-+              } else if ((push_page =
-+                              grab_cache_page_nowait(page->mapping, i))) {
-+                      pageaddr = kmap_atomic(push_page, KM_USER0);
-+
-+                      memcpy(pageaddr, data_ptr + byte_offset,
-+                                      available_bytes);
-+                      memset(pageaddr + available_bytes, 0,
-+                                      PAGE_CACHE_SIZE - available_bytes);
-+                      kunmap_atomic(pageaddr, KM_USER0);
-+                      flush_dcache_page(push_page);
-+                      SetPageUptodate(push_page);
-+                      unlock_page(push_page);
-+                      page_cache_release(push_page);
-+              }
-+      }
-+
-+      if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+                                      || index < (i_size_read(inode) >>
-+                                      sblk->block_log))
-+              up(&msblk->read_page_mutex);
-+      else
-+              release_cached_fragment(msblk, fragment);
-+
-+      return 0;
-+
-+skip_read:
-+      pageaddr = kmap_atomic(page, KM_USER0);
-+      memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+      kunmap_atomic(pageaddr, KM_USER0);
-+      flush_dcache_page(page);
-+      SetPageUptodate(page);
-+      unlock_page(page);
-+
-+      return 0;
-+}
-+
-+
-+static int squashfs_readpage4K(struct file *file, struct page *page)
-+{
-+      struct inode *inode = page->mapping->host;
-+      struct squashfs_sb_info *msblk = inode->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      unsigned char block_list[SIZE];
-+      long long block;
-+      unsigned int bsize, bytes = 0;
-+      void *pageaddr;
-+
-+      TRACE("Entered squashfs_readpage4K, page index %lx, start block %llx\n",
-+                                      page->index,
-+                                      SQUASHFS_I(inode)->start_block);
-+
-+      if (page->index >= ((i_size_read(inode) + PAGE_CACHE_SIZE - 1) >>
-+                                      PAGE_CACHE_SHIFT)) {
-+              pageaddr = kmap_atomic(page, KM_USER0);
-+              goto skip_read;
-+      }
-+
-+      if (SQUASHFS_I(inode)->u.s1.fragment_start_block == SQUASHFS_INVALID_BLK
-+                                      || page->index < (i_size_read(inode) >>
-+                                      sblk->block_log)) {
-+              block = (msblk->read_blocklist)(inode, page->index, 1,
-+                                      block_list, NULL, &bsize);
-+
-+              down(&msblk->read_page_mutex);
-+              bytes = squashfs_read_data(inode->i_sb, msblk->read_page, block,
-+                                      bsize, NULL);
-+              pageaddr = kmap_atomic(page, KM_USER0);
-+              if (bytes)
-+                      memcpy(pageaddr, msblk->read_page, bytes);
-+              else
-+                      ERROR("Unable to read page, block %llx, size %x\n",
-+                                      block, bsize);
-+              up(&msblk->read_page_mutex);
-+      } else {
-+              struct squashfs_fragment_cache *fragment =
-+                      get_cached_fragment(inode->i_sb,
-+                                      SQUASHFS_I(inode)->
-+                                      u.s1.fragment_start_block,
-+                                      SQUASHFS_I(inode)-> u.s1.fragment_size);
-+              pageaddr = kmap_atomic(page, KM_USER0);
-+              if (fragment) {
-+                      bytes = i_size_read(inode) & (sblk->block_size - 1);
-+                      memcpy(pageaddr, fragment->data + SQUASHFS_I(inode)->
-+                                      u.s1.fragment_offset, bytes);
-+                      release_cached_fragment(msblk, fragment);
-+              } else
-+                      ERROR("Unable to read page, block %llx, size %x\n",
-+                                      SQUASHFS_I(inode)->
-+                                      u.s1.fragment_start_block, (int)
-+                                      SQUASHFS_I(inode)-> u.s1.fragment_size);
-+      }
-+
-+skip_read:
-+      memset(pageaddr + bytes, 0, PAGE_CACHE_SIZE - bytes);
-+      kunmap_atomic(pageaddr, KM_USER0);
-+      flush_dcache_page(page);
-+      SetPageUptodate(page);
-+      unlock_page(page);
-+
-+      return 0;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+                              *next_block, unsigned int *next_offset,
-+                              long long index_start,
-+                              unsigned int index_offset, int i_count,
-+                              long long f_pos)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      int i, length = 0;
-+      struct squashfs_dir_index index;
-+
-+      TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+                                      i_count, (unsigned int) f_pos);
-+
-+      f_pos =- 3;
-+      if (f_pos == 0)
-+              goto finish;
-+
-+      for (i = 0; i < i_count; i++) {
-+              if (msblk->swap) {
-+                      struct squashfs_dir_index sindex;
-+                      squashfs_get_cached_block(s, (char *) &sindex,
-+                                      index_start, index_offset,
-+                                      sizeof(sindex), &index_start,
-+                                      &index_offset);
-+                      SQUASHFS_SWAP_DIR_INDEX(&index, &sindex);
-+              } else
-+                      squashfs_get_cached_block(s, (char *) &index,
-+                                      index_start, index_offset,
-+                                      sizeof(index), &index_start,
-+                                      &index_offset);
-+
-+              if (index.index > f_pos)
-+                      break;
-+
-+              squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+                                      index.size + 1, &index_start,
-+                                      &index_offset);
-+
-+              length = index.index;
-+              *next_block = index.start_block + sblk->directory_table_start;
-+      }
-+
-+      *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+      return length + 3;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+                              *next_block, unsigned int *next_offset,
-+                              long long index_start,
-+                              unsigned int index_offset, int i_count,
-+                              const char *name, int size)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      int i, length = 0;
-+      char buffer[sizeof(struct squashfs_dir_index) + SQUASHFS_NAME_LEN + 1];
-+      struct squashfs_dir_index *index = (struct squashfs_dir_index *) buffer;
-+      char str[SQUASHFS_NAME_LEN + 1];
-+
-+      TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+      strncpy(str, name, size);
-+      str[size] = '\0';
-+
-+      for (i = 0; i < i_count; i++) {
-+              if (msblk->swap) {
-+                      struct squashfs_dir_index sindex;
-+                      squashfs_get_cached_block(s, (char *) &sindex,
-+                                      index_start, index_offset,
-+                                      sizeof(sindex), &index_start,
-+                                      &index_offset);
-+                      SQUASHFS_SWAP_DIR_INDEX(index, &sindex);
-+              } else
-+                      squashfs_get_cached_block(s, (char *) index,
-+                                      index_start, index_offset,
-+                                      sizeof(struct squashfs_dir_index),
-+                                      &index_start, &index_offset);
-+
-+              squashfs_get_cached_block(s, index->name, index_start,
-+                                      index_offset, index->size + 1,
-+                                      &index_start, &index_offset);
-+
-+              index->name[index->size + 1] = '\0';
-+
-+              if (strcmp(index->name, str) > 0)
-+                      break;
-+
-+              length = index->index;
-+              *next_block = index->start_block + sblk->directory_table_start;
-+      }
-+
-+      *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+      return length + 3;
-+}
-+
-+
-+static int squashfs_readdir(struct file *file, void *dirent, filldir_t filldir)
-+{
-+      struct inode *i = file->f_dentry->d_inode;
-+      struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      long long next_block = SQUASHFS_I(i)->start_block +
-+              sblk->directory_table_start;
-+      int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+              dir_count;
-+      struct squashfs_dir_header dirh;
-+      char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN + 1];
-+      struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+      TRACE("Entered squashfs_readdir [%llx:%x]\n", next_block, next_offset);
-+
-+      while(file->f_pos < 3) {
-+              char *name;
-+              int size, i_ino;
-+
-+              if(file->f_pos == 0) {
-+                      name = ".";
-+                      size = 1;
-+                      i_ino = i->i_ino;
-+              } else {
-+                      name = "..";
-+                      size = 2;
-+                      i_ino = SQUASHFS_I(i)->u.s2.parent_inode;
-+              }
-+              TRACE("Calling filldir(%x, %s, %d, %d, %d, %d)\n",
-+                              (unsigned int) dirent, name, size, (int)
-+                              file->f_pos, i_ino,
-+                              squashfs_filetype_table[1]);
-+
-+              if (filldir(dirent, name, size,
-+                              file->f_pos, i_ino,
-+                              squashfs_filetype_table[1]) < 0) {
-+                              TRACE("Filldir returned less than 0\n");
-+                              goto finish;
-+              }
-+              file->f_pos += size;
-+              dirs_read++;
-+      }
-+
-+      length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_start,
-+                              SQUASHFS_I(i)->u.s2.directory_index_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_count,
-+                              file->f_pos);
-+
-+      while (length < i_size_read(i)) {
-+              /* read directory header */
-+              if (msblk->swap) {
-+                      struct squashfs_dir_header sdirh;
-+
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+                                      next_block, next_offset, sizeof(sdirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(sdirh);
-+                      SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+              } else {
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+                                      next_block, next_offset, sizeof(dirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(dirh);
-+              }
-+
-+              dir_count = dirh.count + 1;
-+              while (dir_count--) {
-+                      if (msblk->swap) {
-+                              struct squashfs_dir_entry sdire;
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              &sdire, next_block, next_offset,
-+                                              sizeof(sdire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(sdire);
-+                              SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+                      } else {
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              dire, next_block, next_offset,
-+                                              sizeof(*dire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(*dire);
-+                      }
-+
-+                      if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+                                              next_block, next_offset,
-+                                              dire->size + 1, &next_block,
-+                                              &next_offset))
-+                              goto failed_read;
-+
-+                      length += dire->size + 1;
-+
-+                      if (file->f_pos >= length)
-+                              continue;
-+
-+                      dire->name[dire->size + 1] = '\0';
-+
-+                      TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d, %d)\n",
-+                                      (unsigned int) dirent, dire->name,
-+                                      dire->size + 1, (int) file->f_pos,
-+                                      dirh.start_block, dire->offset,
-+                                      dirh.inode_number + dire->inode_number,
-+                                      squashfs_filetype_table[dire->type]);
-+
-+                      if (filldir(dirent, dire->name, dire->size + 1,
-+                                      file->f_pos,
-+                                      dirh.inode_number + dire->inode_number,
-+                                      squashfs_filetype_table[dire->type])
-+                                      < 0) {
-+                              TRACE("Filldir returned less than 0\n");
-+                              goto finish;
-+                      }
-+                      file->f_pos = length;
-+                      dirs_read++;
-+              }
-+      }
-+
-+finish:
-+      return dirs_read;
-+
-+failed_read:
-+      ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+              next_offset);
-+      return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup(struct inode *i, struct dentry *dentry,
-+                              struct nameidata *nd)
-+{
-+      const unsigned char *name = dentry->d_name.name;
-+      int len = dentry->d_name.len;
-+      struct inode *inode = NULL;
-+      struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      long long next_block = SQUASHFS_I(i)->start_block +
-+                              sblk->directory_table_start;
-+      int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+                              dir_count;
-+      struct squashfs_dir_header dirh;
-+      char buffer[sizeof(struct squashfs_dir_entry) + SQUASHFS_NAME_LEN];
-+      struct squashfs_dir_entry *dire = (struct squashfs_dir_entry *) buffer;
-+
-+      TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+      if (len > SQUASHFS_NAME_LEN)
-+              goto exit_loop;
-+
-+      length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_start,
-+                              SQUASHFS_I(i)->u.s2.directory_index_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+                              len);
-+
-+      while (length < i_size_read(i)) {
-+              /* read directory header */
-+              if (msblk->swap) {
-+                      struct squashfs_dir_header sdirh;
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+                                      next_block, next_offset, sizeof(sdirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(sdirh);
-+                      SQUASHFS_SWAP_DIR_HEADER(&dirh, &sdirh);
-+              } else {
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+                                      next_block, next_offset, sizeof(dirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(dirh);
-+              }
-+
-+              dir_count = dirh.count + 1;
-+              while (dir_count--) {
-+                      if (msblk->swap) {
-+                              struct squashfs_dir_entry sdire;
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              &sdire, next_block,next_offset,
-+                                              sizeof(sdire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(sdire);
-+                              SQUASHFS_SWAP_DIR_ENTRY(dire, &sdire);
-+                      } else {
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              dire, next_block,next_offset,
-+                                              sizeof(*dire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(*dire);
-+                      }
-+
-+                      if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+                                      next_block, next_offset, dire->size + 1,
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += dire->size + 1;
-+
-+                      if (name[0] < dire->name[0])
-+                              goto exit_loop;
-+
-+                      if ((len == dire->size + 1) && !strncmp(name,
-+                                              dire->name, len)) {
-+                              squashfs_inode_t ino =
-+                                      SQUASHFS_MKINODE(dirh.start_block,
-+                                      dire->offset);
-+
-+                              TRACE("calling squashfs_iget for directory "
-+                                      "entry %s, inode %x:%x, %d\n", name,
-+                                      dirh.start_block, dire->offset,
-+                                      dirh.inode_number + dire->inode_number);
-+
-+                              inode = (msblk->iget)(i->i_sb, ino);
-+
-+                              goto exit_loop;
-+                      }
-+              }
-+      }
-+
-+exit_loop:
-+      d_add(dentry, inode);
-+      return ERR_PTR(0);
-+
-+failed_read:
-+      ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+              next_offset);
-+      goto exit_loop;
-+}
-+
-+
-+static void squashfs_put_super(struct super_block *s)
-+{
-+      int i;
-+
-+      if (s->s_fs_info) {
-+              struct squashfs_sb_info *sbi = s->s_fs_info;
-+              if (sbi->block_cache)
-+                      for (i = 0; i < SQUASHFS_CACHED_BLKS; i++)
-+                              if (sbi->block_cache[i].block !=
-+                                                      SQUASHFS_INVALID_BLK)
-+                                      kfree(sbi->block_cache[i].data);
-+              if (sbi->fragment)
-+                      for (i = 0; i < SQUASHFS_CACHED_FRAGMENTS; i++)
-+                              SQUASHFS_FREE(sbi->fragment[i].data);
-+              kfree(sbi->fragment);
-+              kfree(sbi->block_cache);
-+              kfree(sbi->read_data);
-+              kfree(sbi->read_page);
-+              kfree(sbi->uid);
-+              kfree(sbi->fragment_index);
-+              kfree(sbi->fragment_index_2);
-+              kfree(sbi->meta_index);
-+              kfree(s->s_fs_info);
-+              s->s_fs_info = NULL;
-+      }
-+}
-+
-+
-+static int squashfs_get_sb(struct file_system_type *fs_type,
-+                      int flags, const char *dev_name, void *data,
-+                      struct vfsmount *mnt)
-+{
-+      return get_sb_bdev(fs_type, flags, dev_name, data, squashfs_fill_super, mnt);
-+}
-+
-+
-+static int __init init_squashfs_fs(void)
-+{
-+      int err = init_inodecache();
-+      if (err)
-+              goto out;
-+
-+      printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-+              "Phillip Lougher\n");
-+
-+      if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-+              ERROR("Failed to allocate zlib workspace\n");
-+              destroy_inodecache();
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      if ((err = register_filesystem(&squashfs_fs_type))) {
-+              vfree(stream.workspace);
-+              destroy_inodecache();
-+      }
-+
-+out:
-+      return err;
-+}
-+
-+
-+static void __exit exit_squashfs_fs(void)
-+{
-+      vfree(stream.workspace);
-+      unregister_filesystem(&squashfs_fs_type);
-+      destroy_inodecache();
-+}
-+
-+
-+static struct kmem_cache * squashfs_inode_cachep;
-+
-+
-+static struct inode *squashfs_alloc_inode(struct super_block *sb)
-+{
-+      struct squashfs_inode_info *ei;
-+      ei = kmem_cache_alloc(squashfs_inode_cachep, GFP_KERNEL);
-+      if (!ei)
-+              return NULL;
-+      return &ei->vfs_inode;
-+}
-+
-+
-+static void squashfs_destroy_inode(struct inode *inode)
-+{
-+      kmem_cache_free(squashfs_inode_cachep, SQUASHFS_I(inode));
-+}
-+
-+
-+static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags)
-+{
-+      struct squashfs_inode_info *ei = foo;
-+
-+      inode_init_once(&ei->vfs_inode);
-+}
-+
-+
-+static int __init init_inodecache(void)
-+{
-+      squashfs_inode_cachep = kmem_cache_create("squashfs_inode_cache",
-+           sizeof(struct squashfs_inode_info),
-+           0, SLAB_HWCACHE_ALIGN|SLAB_RECLAIM_ACCOUNT,
-+           init_once);
-+      if (squashfs_inode_cachep == NULL)
-+              return -ENOMEM;
-+      return 0;
-+}
-+
-+
-+static void destroy_inodecache(void)
-+{
-+      kmem_cache_destroy(squashfs_inode_cachep);
-+}
-+
-+
-+module_init(init_squashfs_fs);
-+module_exit(exit_squashfs_fs);
-+MODULE_DESCRIPTION("squashfs, a compressed read-only filesystem");
-+MODULE_AUTHOR("Phillip Lougher <phillip@lougher.org.uk>");
-+MODULE_LICENSE("GPL");
---- /dev/null
-+++ b/fs/squashfs/Makefile
-@@ -0,0 +1,7 @@
-+#
-+# Makefile for the linux squashfs routines.
-+#
-+
-+obj-$(CONFIG_SQUASHFS) += squashfs.o
-+squashfs-y += inode.o
-+squashfs-y += squashfs2_0.o
---- /dev/null
-+++ b/fs/squashfs/squashfs2_0.c
-@@ -0,0 +1,758 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs2_0.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/module.h>
-+#include <linux/errno.h>
-+#include <linux/slab.h>
-+#include <linux/fs.h>
-+#include <linux/smp_lock.h>
-+#include <linux/slab.h>
-+#include <linux/squashfs_fs_sb.h>
-+#include <linux/squashfs_fs_i.h>
-+#include <linux/buffer_head.h>
-+#include <linux/vfs.h>
-+#include <linux/init.h>
-+#include <linux/dcache.h>
-+#include <linux/wait.h>
-+#include <linux/zlib.h>
-+#include <linux/blkdev.h>
-+#include <linux/vmalloc.h>
-+#include <asm/uaccess.h>
-+#include <asm/semaphore.h>
-+
-+#include "squashfs.h"
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir);
-+static struct dentry *squashfs_lookup_2(struct inode *, struct dentry *,
-+                              struct nameidata *);
-+
-+static struct file_operations squashfs_dir_ops_2 = {
-+      .read = generic_read_dir,
-+      .readdir = squashfs_readdir_2
-+};
-+
-+static struct inode_operations squashfs_dir_inode_ops_2 = {
-+      .lookup = squashfs_lookup_2
-+};
-+
-+static unsigned char squashfs_filetype_table[] = {
-+      DT_UNKNOWN, DT_DIR, DT_REG, DT_LNK, DT_BLK, DT_CHR, DT_FIFO, DT_SOCK
-+};
-+
-+static int read_fragment_index_table_2(struct super_block *s)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+      if (!(msblk->fragment_index_2 = kmalloc(SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+                                      (sblk->fragments), GFP_KERNEL))) {
-+              ERROR("Failed to allocate uid/gid table\n");
-+              return 0;
-+      }
-+
-+      if (SQUASHFS_FRAGMENT_INDEX_BYTES_2(sblk->fragments) &&
-+                                      !squashfs_read_data(s, (char *)
-+                                      msblk->fragment_index_2,
-+                                      sblk->fragment_table_start,
-+                                      SQUASHFS_FRAGMENT_INDEX_BYTES_2
-+                                      (sblk->fragments) |
-+                                      SQUASHFS_COMPRESSED_BIT_BLOCK, NULL)) {
-+              ERROR("unable to read fragment index table\n");
-+              return 0;
-+      }
-+
-+      if (msblk->swap) {
-+              int i;
-+              unsigned int fragment;
-+
-+              for (i = 0; i < SQUASHFS_FRAGMENT_INDEXES_2(sblk->fragments);
-+                                                                      i++) {
-+                      SQUASHFS_SWAP_FRAGMENT_INDEXES_2((&fragment),
-+                                              &msblk->fragment_index_2[i], 1);
-+                      msblk->fragment_index_2[i] = fragment;
-+              }
-+      }
-+
-+      return 1;
-+}
-+
-+
-+static int get_fragment_location_2(struct super_block *s, unsigned int fragment,
-+                              long long *fragment_start_block,
-+                              unsigned int *fragment_size)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      long long start_block =
-+              msblk->fragment_index_2[SQUASHFS_FRAGMENT_INDEX_2(fragment)];
-+      int offset = SQUASHFS_FRAGMENT_INDEX_OFFSET_2(fragment);
-+      struct squashfs_fragment_entry_2 fragment_entry;
-+
-+      if (msblk->swap) {
-+              struct squashfs_fragment_entry_2 sfragment_entry;
-+
-+              if (!squashfs_get_cached_block(s, (char *) &sfragment_entry,
-+                                      start_block, offset,
-+                                      sizeof(sfragment_entry), &start_block,
-+                                      &offset))
-+                      goto out;
-+              SQUASHFS_SWAP_FRAGMENT_ENTRY_2(&fragment_entry, &sfragment_entry);
-+      } else
-+              if (!squashfs_get_cached_block(s, (char *) &fragment_entry,
-+                                      start_block, offset,
-+                                      sizeof(fragment_entry), &start_block,
-+                                      &offset))
-+                      goto out;
-+
-+      *fragment_start_block = fragment_entry.start_block;
-+      *fragment_size = fragment_entry.size;
-+
-+      return 1;
-+
-+out:
-+      return 0;
-+}
-+
-+
-+static struct inode *squashfs_new_inode(struct super_block *s,
-+              struct squashfs_base_inode_header_2 *inodeb, unsigned int ino)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      struct inode *i = new_inode(s);
-+
-+      if (i) {
-+              i->i_ino = ino;
-+              i->i_mtime.tv_sec = sblk->mkfs_time;
-+              i->i_atime.tv_sec = sblk->mkfs_time;
-+              i->i_ctime.tv_sec = sblk->mkfs_time;
-+              i->i_uid = msblk->uid[inodeb->uid];
-+              i->i_mode = inodeb->mode;
-+              i->i_nlink = 1;
-+              i->i_size = 0;
-+              if (inodeb->guid == SQUASHFS_GUIDS)
-+                      i->i_gid = i->i_uid;
-+              else
-+                      i->i_gid = msblk->guid[inodeb->guid];
-+      }
-+
-+      return i;
-+}
-+
-+
-+static struct inode *squashfs_iget_2(struct super_block *s, squashfs_inode_t inode)
-+{
-+      struct inode *i;
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      unsigned int block = SQUASHFS_INODE_BLK(inode) +
-+              sblk->inode_table_start;
-+      unsigned int offset = SQUASHFS_INODE_OFFSET(inode);
-+      unsigned int ino = SQUASHFS_MK_VFS_INODE(block
-+              - sblk->inode_table_start, offset);
-+      long long next_block;
-+      unsigned int next_offset;
-+      union squashfs_inode_header_2 id, sid;
-+      struct squashfs_base_inode_header_2 *inodeb = &id.base,
-+                                        *sinodeb = &sid.base;
-+
-+      TRACE("Entered squashfs_iget\n");
-+
-+      if (msblk->swap) {
-+              if (!squashfs_get_cached_block(s, (char *) sinodeb, block,
-+                                      offset, sizeof(*sinodeb), &next_block,
-+                                      &next_offset))
-+                      goto failed_read;
-+              SQUASHFS_SWAP_BASE_INODE_HEADER_2(inodeb, sinodeb,
-+                                      sizeof(*sinodeb));
-+      } else
-+              if (!squashfs_get_cached_block(s, (char *) inodeb, block,
-+                                      offset, sizeof(*inodeb), &next_block,
-+                                      &next_offset))
-+                      goto failed_read;
-+
-+      switch(inodeb->inode_type) {
-+              case SQUASHFS_FILE_TYPE: {
-+                      struct squashfs_reg_inode_header_2 *inodep = &id.reg;
-+                      struct squashfs_reg_inode_header_2 *sinodep = &sid.reg;
-+                      long long frag_blk;
-+                      unsigned int frag_size;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_REG_INODE_HEADER_2(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      frag_blk = SQUASHFS_INVALID_BLK;
-+                      if (inodep->fragment != SQUASHFS_INVALID_FRAG &&
-+                                      !get_fragment_location_2(s,
-+                                      inodep->fragment, &frag_blk, &frag_size))
-+                              goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_size = inodep->file_size;
-+                      i->i_fop = &generic_ro_fops;
-+                      i->i_mode |= S_IFREG;
-+                      i->i_mtime.tv_sec = inodep->mtime;
-+                      i->i_atime.tv_sec = inodep->mtime;
-+                      i->i_ctime.tv_sec = inodep->mtime;
-+                      i->i_blocks = ((i->i_size - 1) >> 9) + 1;
-+                      i->i_blksize = PAGE_CACHE_SIZE;
-+                      SQUASHFS_I(i)->u.s1.fragment_start_block = frag_blk;
-+                      SQUASHFS_I(i)->u.s1.fragment_size = frag_size;
-+                      SQUASHFS_I(i)->u.s1.fragment_offset = inodep->offset;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->u.s1.block_list_start = next_block;
-+                      SQUASHFS_I(i)->offset = next_offset;
-+                      if (sblk->block_size > 4096)
-+                              i->i_data.a_ops = &squashfs_aops;
-+                      else
-+                              i->i_data.a_ops = &squashfs_aops_4K;
-+
-+                      TRACE("File inode %x:%x, start_block %x, "
-+                                      "block_list_start %llx, offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->start_block, next_block,
-+                                      next_offset);
-+                      break;
-+              }
-+              case SQUASHFS_DIR_TYPE: {
-+                      struct squashfs_dir_inode_header_2 *inodep = &id.dir;
-+                      struct squashfs_dir_inode_header_2 *sinodep = &sid.dir;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_DIR_INODE_HEADER_2(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_size = inodep->file_size;
-+                      i->i_op = &squashfs_dir_inode_ops_2;
-+                      i->i_fop = &squashfs_dir_ops_2;
-+                      i->i_mode |= S_IFDIR;
-+                      i->i_mtime.tv_sec = inodep->mtime;
-+                      i->i_atime.tv_sec = inodep->mtime;
-+                      i->i_ctime.tv_sec = inodep->mtime;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->offset = inodep->offset;
-+                      SQUASHFS_I(i)->u.s2.directory_index_count = 0;
-+                      SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+                      TRACE("Directory inode %x:%x, start_block %x, offset "
-+                                      "%x\n", SQUASHFS_INODE_BLK(inode),
-+                                      offset, inodep->start_block,
-+                                      inodep->offset);
-+                      break;
-+              }
-+              case SQUASHFS_LDIR_TYPE: {
-+                      struct squashfs_ldir_inode_header_2 *inodep = &id.ldir;
-+                      struct squashfs_ldir_inode_header_2 *sinodep = &sid.ldir;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_LDIR_INODE_HEADER_2(inodep,
-+                                              sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_size = inodep->file_size;
-+                      i->i_op = &squashfs_dir_inode_ops_2;
-+                      i->i_fop = &squashfs_dir_ops_2;
-+                      i->i_mode |= S_IFDIR;
-+                      i->i_mtime.tv_sec = inodep->mtime;
-+                      i->i_atime.tv_sec = inodep->mtime;
-+                      i->i_ctime.tv_sec = inodep->mtime;
-+                      SQUASHFS_I(i)->start_block = inodep->start_block;
-+                      SQUASHFS_I(i)->offset = inodep->offset;
-+                      SQUASHFS_I(i)->u.s2.directory_index_start = next_block;
-+                      SQUASHFS_I(i)->u.s2.directory_index_offset =
-+                                                              next_offset;
-+                      SQUASHFS_I(i)->u.s2.directory_index_count =
-+                                                              inodep->i_count;
-+                      SQUASHFS_I(i)->u.s2.parent_inode = 0;
-+
-+                      TRACE("Long directory inode %x:%x, start_block %x, "
-+                                      "offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->start_block, inodep->offset);
-+                      break;
-+              }
-+              case SQUASHFS_SYMLINK_TYPE: {
-+                      struct squashfs_symlink_inode_header_2 *inodep =
-+                                                              &id.symlink;
-+                      struct squashfs_symlink_inode_header_2 *sinodep =
-+                                                              &sid.symlink;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(inodep,
-+                                                              sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_size = inodep->symlink_size;
-+                      i->i_op = &page_symlink_inode_operations;
-+                      i->i_data.a_ops = &squashfs_symlink_aops;
-+                      i->i_mode |= S_IFLNK;
-+                      SQUASHFS_I(i)->start_block = next_block;
-+                      SQUASHFS_I(i)->offset = next_offset;
-+
-+                      TRACE("Symbolic link inode %x:%x, start_block %llx, "
-+                                      "offset %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      next_block, next_offset);
-+                      break;
-+               }
-+               case SQUASHFS_BLKDEV_TYPE:
-+               case SQUASHFS_CHRDEV_TYPE: {
-+                      struct squashfs_dev_inode_header_2 *inodep = &id.dev;
-+                      struct squashfs_dev_inode_header_2 *sinodep = &sid.dev;
-+
-+                      if (msblk->swap) {
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              sinodep, block, offset,
-+                                              sizeof(*sinodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+                              SQUASHFS_SWAP_DEV_INODE_HEADER_2(inodep, sinodep);
-+                      } else
-+                              if (!squashfs_get_cached_block(s, (char *)
-+                                              inodep, block, offset,
-+                                              sizeof(*inodep), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                      if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_mode |= (inodeb->inode_type ==
-+                                      SQUASHFS_CHRDEV_TYPE) ?  S_IFCHR :
-+                                      S_IFBLK;
-+                      init_special_inode(i, i->i_mode,
-+                                      old_decode_dev(inodep->rdev));
-+
-+                      TRACE("Device inode %x:%x, rdev %x\n",
-+                                      SQUASHFS_INODE_BLK(inode), offset,
-+                                      inodep->rdev);
-+                      break;
-+               }
-+               case SQUASHFS_FIFO_TYPE:
-+               case SQUASHFS_SOCKET_TYPE: {
-+                      if ((i = squashfs_new_inode(s, inodeb, ino)) == NULL)
-+                              goto failed_read1;
-+
-+                      i->i_mode |= (inodeb->inode_type == SQUASHFS_FIFO_TYPE)
-+                                                      ? S_IFIFO : S_IFSOCK;
-+                      init_special_inode(i, i->i_mode, 0);
-+                      break;
-+               }
-+               default:
-+                      ERROR("Unknown inode type %d in squashfs_iget!\n",
-+                                      inodeb->inode_type);
-+                      goto failed_read1;
-+      }
-+
-+      insert_inode_hash(i);
-+      return i;
-+
-+failed_read:
-+      ERROR("Unable to read inode [%x:%x]\n", block, offset);
-+
-+failed_read1:
-+      return NULL;
-+}
-+
-+
-+static int get_dir_index_using_offset(struct super_block *s, long long
-+                              *next_block, unsigned int *next_offset,
-+                              long long index_start,
-+                              unsigned int index_offset, int i_count,
-+                              long long f_pos)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      int i, length = 0;
-+      struct squashfs_dir_index_2 index;
-+
-+      TRACE("Entered get_dir_index_using_offset, i_count %d, f_pos %d\n",
-+                                      i_count, (unsigned int) f_pos);
-+
-+      if (f_pos == 0)
-+              goto finish;
-+
-+      for (i = 0; i < i_count; i++) {
-+              if (msblk->swap) {
-+                      struct squashfs_dir_index_2 sindex;
-+                      squashfs_get_cached_block(s, (char *) &sindex,
-+                                      index_start, index_offset,
-+                                      sizeof(sindex), &index_start,
-+                                      &index_offset);
-+                      SQUASHFS_SWAP_DIR_INDEX_2(&index, &sindex);
-+              } else
-+                      squashfs_get_cached_block(s, (char *) &index,
-+                                      index_start, index_offset,
-+                                      sizeof(index), &index_start,
-+                                      &index_offset);
-+
-+              if (index.index > f_pos)
-+                      break;
-+
-+              squashfs_get_cached_block(s, NULL, index_start, index_offset,
-+                                      index.size + 1, &index_start,
-+                                      &index_offset);
-+
-+              length = index.index;
-+              *next_block = index.start_block + sblk->directory_table_start;
-+      }
-+
-+      *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+
-+finish:
-+      return length;
-+}
-+
-+
-+static int get_dir_index_using_name(struct super_block *s, long long
-+                              *next_block, unsigned int *next_offset,
-+                              long long index_start,
-+                              unsigned int index_offset, int i_count,
-+                              const char *name, int size)
-+{
-+      struct squashfs_sb_info *msblk = s->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      int i, length = 0;
-+      char buffer[sizeof(struct squashfs_dir_index_2) + SQUASHFS_NAME_LEN + 1];
-+      struct squashfs_dir_index_2 *index = (struct squashfs_dir_index_2 *) buffer;
-+      char str[SQUASHFS_NAME_LEN + 1];
-+
-+      TRACE("Entered get_dir_index_using_name, i_count %d\n", i_count);
-+
-+      strncpy(str, name, size);
-+      str[size] = '\0';
-+
-+      for (i = 0; i < i_count; i++) {
-+              if (msblk->swap) {
-+                      struct squashfs_dir_index_2 sindex;
-+                      squashfs_get_cached_block(s, (char *) &sindex,
-+                                      index_start, index_offset,
-+                                      sizeof(sindex), &index_start,
-+                                      &index_offset);
-+                      SQUASHFS_SWAP_DIR_INDEX_2(index, &sindex);
-+              } else
-+                      squashfs_get_cached_block(s, (char *) index,
-+                                      index_start, index_offset,
-+                                      sizeof(struct squashfs_dir_index_2),
-+                                      &index_start, &index_offset);
-+
-+              squashfs_get_cached_block(s, index->name, index_start,
-+                                      index_offset, index->size + 1,
-+                                      &index_start, &index_offset);
-+
-+              index->name[index->size + 1] = '\0';
-+
-+              if (strcmp(index->name, str) > 0)
-+                      break;
-+
-+              length = index->index;
-+              *next_block = index->start_block + sblk->directory_table_start;
-+      }
-+
-+      *next_offset = (length + *next_offset) % SQUASHFS_METADATA_SIZE;
-+      return length;
-+}
-+
-+
-+static int squashfs_readdir_2(struct file *file, void *dirent, filldir_t filldir)
-+{
-+      struct inode *i = file->f_dentry->d_inode;
-+      struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      long long next_block = SQUASHFS_I(i)->start_block +
-+              sblk->directory_table_start;
-+      int next_offset = SQUASHFS_I(i)->offset, length = 0, dirs_read = 0,
-+              dir_count;
-+      struct squashfs_dir_header_2 dirh;
-+      char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN + 1];
-+      struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+
-+      TRACE("Entered squashfs_readdir_2 [%llx:%x]\n", next_block, next_offset);
-+
-+      length = get_dir_index_using_offset(i->i_sb, &next_block, &next_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_start,
-+                              SQUASHFS_I(i)->u.s2.directory_index_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_count,
-+                              file->f_pos);
-+
-+      while (length < i_size_read(i)) {
-+              /* read directory header */
-+              if (msblk->swap) {
-+                      struct squashfs_dir_header_2 sdirh;
-+
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+                                      next_block, next_offset, sizeof(sdirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(sdirh);
-+                      SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+              } else {
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+                                      next_block, next_offset, sizeof(dirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(dirh);
-+              }
-+
-+              dir_count = dirh.count + 1;
-+              while (dir_count--) {
-+                      if (msblk->swap) {
-+                              struct squashfs_dir_entry_2 sdire;
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              &sdire, next_block, next_offset,
-+                                              sizeof(sdire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(sdire);
-+                              SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+                      } else {
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              dire, next_block, next_offset,
-+                                              sizeof(*dire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(*dire);
-+                      }
-+
-+                      if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+                                              next_block, next_offset,
-+                                              dire->size + 1, &next_block,
-+                                              &next_offset))
-+                              goto failed_read;
-+
-+                      length += dire->size + 1;
-+
-+                      if (file->f_pos >= length)
-+                              continue;
-+
-+                      dire->name[dire->size + 1] = '\0';
-+
-+                      TRACE("Calling filldir(%x, %s, %d, %d, %x:%x, %d)\n",
-+                                      (unsigned int) dirent, dire->name,
-+                                      dire->size + 1, (int) file->f_pos,
-+                                      dirh.start_block, dire->offset,
-+                                      squashfs_filetype_table[dire->type]);
-+
-+                      if (filldir(dirent, dire->name, dire->size + 1,
-+                                      file->f_pos, SQUASHFS_MK_VFS_INODE(
-+                                      dirh.start_block, dire->offset),
-+                                      squashfs_filetype_table[dire->type])
-+                                      < 0) {
-+                              TRACE("Filldir returned less than 0\n");
-+                              goto finish;
-+                      }
-+                      file->f_pos = length;
-+                      dirs_read++;
-+              }
-+      }
-+
-+finish:
-+      return dirs_read;
-+
-+failed_read:
-+      ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+              next_offset);
-+      return 0;
-+}
-+
-+
-+static struct dentry *squashfs_lookup_2(struct inode *i, struct dentry *dentry,
-+                              struct nameidata *nd)
-+{
-+      const unsigned char *name = dentry->d_name.name;
-+      int len = dentry->d_name.len;
-+      struct inode *inode = NULL;
-+      struct squashfs_sb_info *msblk = i->i_sb->s_fs_info;
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+      long long next_block = SQUASHFS_I(i)->start_block +
-+                              sblk->directory_table_start;
-+      int next_offset = SQUASHFS_I(i)->offset, length = 0,
-+                              dir_count;
-+      struct squashfs_dir_header_2 dirh;
-+      char buffer[sizeof(struct squashfs_dir_entry_2) + SQUASHFS_NAME_LEN];
-+      struct squashfs_dir_entry_2 *dire = (struct squashfs_dir_entry_2 *) buffer;
-+      int sorted = sblk->s_major == 2 && sblk->s_minor >= 1;
-+
-+      TRACE("Entered squashfs_lookup [%llx:%x]\n", next_block, next_offset);
-+
-+      if (len > SQUASHFS_NAME_LEN)
-+              goto exit_loop;
-+
-+      length = get_dir_index_using_name(i->i_sb, &next_block, &next_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_start,
-+                              SQUASHFS_I(i)->u.s2.directory_index_offset,
-+                              SQUASHFS_I(i)->u.s2.directory_index_count, name,
-+                              len);
-+
-+      while (length < i_size_read(i)) {
-+              /* read directory header */
-+              if (msblk->swap) {
-+                      struct squashfs_dir_header_2 sdirh;
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &sdirh,
-+                                      next_block, next_offset, sizeof(sdirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(sdirh);
-+                      SQUASHFS_SWAP_DIR_HEADER_2(&dirh, &sdirh);
-+              } else {
-+                      if (!squashfs_get_cached_block(i->i_sb, (char *) &dirh,
-+                                      next_block, next_offset, sizeof(dirh),
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += sizeof(dirh);
-+              }
-+
-+              dir_count = dirh.count + 1;
-+              while (dir_count--) {
-+                      if (msblk->swap) {
-+                              struct squashfs_dir_entry_2 sdire;
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              &sdire, next_block,next_offset,
-+                                              sizeof(sdire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(sdire);
-+                              SQUASHFS_SWAP_DIR_ENTRY_2(dire, &sdire);
-+                      } else {
-+                              if (!squashfs_get_cached_block(i->i_sb, (char *)
-+                                              dire, next_block,next_offset,
-+                                              sizeof(*dire), &next_block,
-+                                              &next_offset))
-+                                      goto failed_read;
-+
-+                              length += sizeof(*dire);
-+                      }
-+
-+                      if (!squashfs_get_cached_block(i->i_sb, dire->name,
-+                                      next_block, next_offset, dire->size + 1,
-+                                      &next_block, &next_offset))
-+                              goto failed_read;
-+
-+                      length += dire->size + 1;
-+
-+                      if (sorted && name[0] < dire->name[0])
-+                              goto exit_loop;
-+
-+                      if ((len == dire->size + 1) && !strncmp(name,
-+                                              dire->name, len)) {
-+                              squashfs_inode_t ino =
-+                                      SQUASHFS_MKINODE(dirh.start_block,
-+                                      dire->offset);
-+
-+                              TRACE("calling squashfs_iget for directory "
-+                                      "entry %s, inode %x:%x, %lld\n", name,
-+                                      dirh.start_block, dire->offset, ino);
-+
-+                              inode = (msblk->iget)(i->i_sb, ino);
-+
-+                              goto exit_loop;
-+                      }
-+              }
-+      }
-+
-+exit_loop:
-+      d_add(dentry, inode);
-+      return ERR_PTR(0);
-+
-+failed_read:
-+      ERROR("Unable to read directory block [%llx:%x]\n", next_block,
-+              next_offset);
-+      goto exit_loop;
-+}
-+
-+
-+int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+      struct squashfs_super_block *sblk = &msblk->sblk;
-+
-+      msblk->iget = squashfs_iget_2;
-+      msblk->read_fragment_index_table = read_fragment_index_table_2;
-+
-+      sblk->bytes_used = sblk->bytes_used_2;
-+      sblk->uid_start = sblk->uid_start_2;
-+      sblk->guid_start = sblk->guid_start_2;
-+      sblk->inode_table_start = sblk->inode_table_start_2;
-+      sblk->directory_table_start = sblk->directory_table_start_2;
-+      sblk->fragment_table_start = sblk->fragment_table_start_2;
-+
-+      return 1;
-+}
---- /dev/null
-+++ b/fs/squashfs/squashfs.h
-@@ -0,0 +1,86 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs.h
-+ */
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+#endif
-+
-+#ifdef SQUASHFS_TRACE
-+#define TRACE(s, args...)     printk(KERN_NOTICE "SQUASHFS: "s, ## args)
-+#else
-+#define TRACE(s, args...)     {}
-+#endif
-+
-+#define ERROR(s, args...)     printk(KERN_ERR "SQUASHFS error: "s, ## args)
-+
-+#define SERROR(s, args...)    do { \
-+                              if (!silent) \
-+                              printk(KERN_ERR "SQUASHFS error: "s, ## args);\
-+                              } while(0)
-+
-+#define WARNING(s, args...)   printk(KERN_WARNING "SQUASHFS: "s, ## args)
-+
-+static inline struct squashfs_inode_info *SQUASHFS_I(struct inode *inode)
-+{
-+      return list_entry(inode, struct squashfs_inode_info, vfs_inode);
-+}
-+
-+#if defined(CONFIG_SQUASHFS_1_0_COMPATIBILITY ) || defined(CONFIG_SQUASHFS_2_0_COMPATIBILITY)
-+#define SQSH_EXTERN
-+extern unsigned int squashfs_read_data(struct super_block *s, char *buffer,
-+                              long long index, unsigned int length,
-+                              long long *next_index);
-+extern int squashfs_get_cached_block(struct super_block *s, char *buffer,
-+                              long long block, unsigned int offset,
-+                              int length, long long *next_block,
-+                              unsigned int *next_offset);
-+extern void release_cached_fragment(struct squashfs_sb_info *msblk, struct
-+                                      squashfs_fragment_cache *fragment);
-+extern struct squashfs_fragment_cache *get_cached_fragment(struct super_block
-+                                      *s, long long start_block,
-+                                      int length);
-+extern struct address_space_operations squashfs_symlink_aops;
-+extern struct address_space_operations squashfs_aops;
-+extern struct address_space_operations squashfs_aops_4K;
-+extern struct inode_operations squashfs_dir_inode_ops;
-+#else
-+#define SQSH_EXTERN static
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+extern int squashfs_1_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_1_0_supported(struct squashfs_sb_info *msblk)
-+{
-+      return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+extern int squashfs_2_0_supported(struct squashfs_sb_info *msblk);
-+#else
-+static inline int squashfs_2_0_supported(struct squashfs_sb_info *msblk)
-+{
-+      return 0;
-+}
-+#endif
---- a/include/linux/magic.h
-+++ b/include/linux/magic.h
-@@ -35,6 +35,9 @@
- #define REISER2FS_SUPER_MAGIC_STRING  "ReIsEr2Fs"
- #define REISER2FS_JR_SUPER_MAGIC_STRING       "ReIsEr3Fs"
-+#define SQUASHFS_MAGIC                        0x73717368
-+#define SQUASHFS_MAGIC_SWAP           0x68737173
-+
- #define SMB_SUPER_MAGIC               0x517B
- #define USBDEVICE_SUPER_MAGIC 0x9fa2
- #define CGROUP_SUPER_MAGIC    0x27e0eb
---- /dev/null
-+++ b/include/linux/squashfs_fs.h
-@@ -0,0 +1,911 @@
-+#ifndef SQUASHFS_FS
-+#define SQUASHFS_FS
-+
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs.h
-+ */
-+
-+#ifndef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#define CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
-+
-+#ifdef        CONFIG_SQUASHFS_VMALLOC
-+#define SQUASHFS_ALLOC(a)             vmalloc(a)
-+#define SQUASHFS_FREE(a)              vfree(a)
-+#else
-+#define SQUASHFS_ALLOC(a)             kmalloc(a, GFP_KERNEL)
-+#define SQUASHFS_FREE(a)              kfree(a)
-+#endif
-+#define SQUASHFS_CACHED_FRAGMENTS     CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE
-+#define SQUASHFS_MAJOR                        3
-+#define SQUASHFS_MINOR                        0
-+#define SQUASHFS_START                        0
-+
-+/* size of metadata (inode and directory) blocks */
-+#define SQUASHFS_METADATA_SIZE                8192
-+#define SQUASHFS_METADATA_LOG         13
-+
-+/* default size of data blocks */
-+#define SQUASHFS_FILE_SIZE            65536
-+#define SQUASHFS_FILE_LOG             16
-+
-+#define SQUASHFS_FILE_MAX_SIZE                65536
-+
-+/* Max number of uids and gids */
-+#define SQUASHFS_UIDS                 256
-+#define SQUASHFS_GUIDS                        255
-+
-+/* Max length of filename (not 255) */
-+#define SQUASHFS_NAME_LEN             256
-+
-+#define SQUASHFS_INVALID              ((long long) 0xffffffffffff)
-+#define SQUASHFS_INVALID_FRAG         ((unsigned int) 0xffffffff)
-+#define SQUASHFS_INVALID_BLK          ((long long) -1)
-+#define SQUASHFS_USED_BLK             ((long long) -2)
-+
-+/* Filesystem flags */
-+#define SQUASHFS_NOI                  0
-+#define SQUASHFS_NOD                  1
-+#define SQUASHFS_CHECK                        2
-+#define SQUASHFS_NOF                  3
-+#define SQUASHFS_NO_FRAG              4
-+#define SQUASHFS_ALWAYS_FRAG          5
-+#define SQUASHFS_DUPLICATE            6
-+
-+#define SQUASHFS_BIT(flag, bit)               ((flag >> bit) & 1)
-+
-+#define SQUASHFS_UNCOMPRESSED_INODES(flags)   SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_NOI)
-+
-+#define SQUASHFS_UNCOMPRESSED_DATA(flags)     SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_NOD)
-+
-+#define SQUASHFS_UNCOMPRESSED_FRAGMENTS(flags)        SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_NOF)
-+
-+#define SQUASHFS_NO_FRAGMENTS(flags)          SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_NO_FRAG)
-+
-+#define SQUASHFS_ALWAYS_FRAGMENTS(flags)      SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_ALWAYS_FRAG)
-+
-+#define SQUASHFS_DUPLICATES(flags)            SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_DUPLICATE)
-+
-+#define SQUASHFS_CHECK_DATA(flags)            SQUASHFS_BIT(flags, \
-+                                              SQUASHFS_CHECK)
-+
-+#define SQUASHFS_MKFLAGS(noi, nod, check_data, nof, no_frag, always_frag, \
-+              duplicate_checking)     (noi | (nod << 1) | (check_data << 2) \
-+              | (nof << 3) | (no_frag << 4) | (always_frag << 5) | \
-+              (duplicate_checking << 6))
-+
-+/* Max number of types and file types */
-+#define SQUASHFS_DIR_TYPE             1
-+#define SQUASHFS_FILE_TYPE            2
-+#define SQUASHFS_SYMLINK_TYPE         3
-+#define SQUASHFS_BLKDEV_TYPE          4
-+#define SQUASHFS_CHRDEV_TYPE          5
-+#define SQUASHFS_FIFO_TYPE            6
-+#define SQUASHFS_SOCKET_TYPE          7
-+#define SQUASHFS_LDIR_TYPE            8
-+#define SQUASHFS_LREG_TYPE            9
-+
-+/* 1.0 filesystem type definitions */
-+#define SQUASHFS_TYPES                        5
-+#define SQUASHFS_IPC_TYPE             0
-+
-+/* Flag whether block is compressed or uncompressed, bit is set if block is
-+ * uncompressed */
-+#define SQUASHFS_COMPRESSED_BIT               (1 << 15)
-+
-+#define SQUASHFS_COMPRESSED_SIZE(B)   (((B) & ~SQUASHFS_COMPRESSED_BIT) ? \
-+              (B) & ~SQUASHFS_COMPRESSED_BIT :  SQUASHFS_COMPRESSED_BIT)
-+
-+#define SQUASHFS_COMPRESSED(B)                (!((B) & SQUASHFS_COMPRESSED_BIT))
-+
-+#define SQUASHFS_COMPRESSED_BIT_BLOCK         (1 << 24)
-+
-+#define SQUASHFS_COMPRESSED_SIZE_BLOCK(B)     (((B) & \
-+      ~SQUASHFS_COMPRESSED_BIT_BLOCK) ? (B) & \
-+      ~SQUASHFS_COMPRESSED_BIT_BLOCK : SQUASHFS_COMPRESSED_BIT_BLOCK)
-+
-+#define SQUASHFS_COMPRESSED_BLOCK(B)  (!((B) & SQUASHFS_COMPRESSED_BIT_BLOCK))
-+
-+/*
-+ * Inode number ops.  Inodes consist of a compressed block number, and an
-+ * uncompressed  offset within that block
-+ */
-+#define SQUASHFS_INODE_BLK(a)         ((unsigned int) ((a) >> 16))
-+
-+#define SQUASHFS_INODE_OFFSET(a)      ((unsigned int) ((a) & 0xffff))
-+
-+#define SQUASHFS_MKINODE(A, B)                ((squashfs_inode_t)(((squashfs_inode_t) (A)\
-+                                      << 16) + (B)))
-+
-+/* Compute 32 bit VFS inode number from squashfs inode number */
-+#define SQUASHFS_MK_VFS_INODE(a, b)   ((unsigned int) (((a) << 8) + \
-+                                      ((b) >> 2) + 1))
-+/* XXX */
-+
-+/* Translate between VFS mode and squashfs mode */
-+#define SQUASHFS_MODE(a)              ((a) & 0xfff)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES(A)    (A * sizeof(struct squashfs_fragment_entry))
-+
-+#define SQUASHFS_FRAGMENT_INDEX(A)    (SQUASHFS_FRAGMENT_BYTES(A) / \
-+                                      SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET(A)     (SQUASHFS_FRAGMENT_BYTES(A) % \
-+                                              SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES(A)  ((SQUASHFS_FRAGMENT_BYTES(A) + \
-+                                      SQUASHFS_METADATA_SIZE - 1) / \
-+                                      SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES(A)      (SQUASHFS_FRAGMENT_INDEXES(A) *\
-+                                              sizeof(long long))
-+
-+/* cached data constants for filesystem */
-+#define SQUASHFS_CACHED_BLKS          8
-+
-+#define SQUASHFS_MAX_FILE_SIZE_LOG    64
-+
-+#define SQUASHFS_MAX_FILE_SIZE                ((long long) 1 << \
-+                                      (SQUASHFS_MAX_FILE_SIZE_LOG - 2))
-+
-+#define SQUASHFS_MARKER_BYTE          0xff
-+
-+/* meta index cache */
-+#define SQUASHFS_META_INDEXES (SQUASHFS_METADATA_SIZE / sizeof(unsigned int))
-+#define SQUASHFS_META_ENTRIES 31
-+#define SQUASHFS_META_NUMBER  8
-+#define SQUASHFS_SLOTS                4
-+
-+#include <linux/magic.h>
-+
-+struct meta_entry {
-+      long long               data_block;
-+      unsigned int            index_block;
-+      unsigned short          offset;
-+      unsigned short          pad;
-+};
-+
-+struct meta_index {
-+      unsigned int            inode_number;
-+      unsigned int            offset;
-+      unsigned short          entries;
-+      unsigned short          skip;
-+      unsigned short          locked;
-+      unsigned short          pad;
-+      struct meta_entry       meta_entry[SQUASHFS_META_ENTRIES];
-+};
-+
-+
-+/*
-+ * definitions for structures on disk
-+ */
-+
-+typedef long long             squashfs_block_t;
-+typedef long long             squashfs_inode_t;
-+
-+struct squashfs_super_block {
-+      unsigned int            s_magic;
-+      unsigned int            inodes;
-+      unsigned int            bytes_used_2;
-+      unsigned int            uid_start_2;
-+      unsigned int            guid_start_2;
-+      unsigned int            inode_table_start_2;
-+      unsigned int            directory_table_start_2;
-+      unsigned int            s_major:16;
-+      unsigned int            s_minor:16;
-+      unsigned int            block_size_1:16;
-+      unsigned int            block_log:16;
-+      unsigned int            flags:8;
-+      unsigned int            no_uids:8;
-+      unsigned int            no_guids:8;
-+      unsigned int            mkfs_time /* time of filesystem creation */;
-+      squashfs_inode_t        root_inode;
-+      unsigned int            block_size;
-+      unsigned int            fragments;
-+      unsigned int            fragment_table_start_2;
-+      long long               bytes_used;
-+      long long               uid_start;
-+      long long               guid_start;
-+      long long               inode_table_start;
-+      long long               directory_table_start;
-+      long long               fragment_table_start;
-+      long long               unused;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_index {
-+      unsigned int            index;
-+      unsigned int            start_block;
-+      unsigned char           size;
-+      unsigned char           name[0];
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_BASE_INODE_HEADER            \
-+      unsigned int            inode_type:4;   \
-+      unsigned int            mode:12;        \
-+      unsigned int            uid:8;          \
-+      unsigned int            guid:8;         \
-+      unsigned int            mtime;          \
-+      unsigned int            inode_number;
-+
-+struct squashfs_base_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      unsigned int            nlink;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      unsigned int            nlink;
-+      unsigned short          rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      unsigned int            nlink;
-+      unsigned short          symlink_size;
-+      char                    symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      squashfs_block_t        start_block;
-+      unsigned int            fragment;
-+      unsigned int            offset;
-+      unsigned int            file_size;
-+      unsigned short          block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_lreg_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      unsigned int            nlink;
-+      squashfs_block_t        start_block;
-+      unsigned int            fragment;
-+      unsigned int            offset;
-+      long long               file_size;
-+      unsigned short          block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      unsigned int            nlink;
-+      unsigned int            file_size:19;
-+      unsigned int            offset:13;
-+      unsigned int            start_block;
-+      unsigned int            parent_inode;
-+} __attribute__  ((packed));
-+
-+struct squashfs_ldir_inode_header {
-+      SQUASHFS_BASE_INODE_HEADER;
-+      unsigned int            nlink;
-+      unsigned int            file_size:27;
-+      unsigned int            offset:13;
-+      unsigned int            start_block;
-+      unsigned int            i_count:16;
-+      unsigned int            parent_inode;
-+      struct squashfs_dir_index       index[0];
-+} __attribute__  ((packed));
-+
-+union squashfs_inode_header {
-+      struct squashfs_base_inode_header       base;
-+      struct squashfs_dev_inode_header        dev;
-+      struct squashfs_symlink_inode_header    symlink;
-+      struct squashfs_reg_inode_header        reg;
-+      struct squashfs_lreg_inode_header       lreg;
-+      struct squashfs_dir_inode_header        dir;
-+      struct squashfs_ldir_inode_header       ldir;
-+      struct squashfs_ipc_inode_header        ipc;
-+};
-+
-+struct squashfs_dir_entry {
-+      unsigned int            offset:13;
-+      unsigned int            type:3;
-+      unsigned int            size:8;
-+      int                     inode_number:16;
-+      char                    name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_header {
-+      unsigned int            count:8;
-+      unsigned int            start_block;
-+      unsigned int            inode_number;
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry {
-+      long long               start_block;
-+      unsigned int            size;
-+      unsigned int            unused;
-+} __attribute__ ((packed));
-+
-+extern int squashfs_uncompress_block(void *d, int dstlen, void *s, int srclen);
-+extern int squashfs_uncompress_init(void);
-+extern int squashfs_uncompress_exit(void);
-+
-+/*
-+ * macros to convert each packed bitfield structure from little endian to big
-+ * endian and vice versa.  These are needed when creating or using a filesystem
-+ * on a machine with different byte ordering to the target architecture.
-+ *
-+ */
-+
-+#define SQUASHFS_SWAP_START \
-+      int bits;\
-+      int b_pos;\
-+      unsigned long long val;\
-+      unsigned char *s;\
-+      unsigned char *d;
-+
-+#define SQUASHFS_SWAP_SUPER_BLOCK(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_super_block));\
-+      SQUASHFS_SWAP((s)->s_magic, d, 0, 32);\
-+      SQUASHFS_SWAP((s)->inodes, d, 32, 32);\
-+      SQUASHFS_SWAP((s)->bytes_used_2, d, 64, 32);\
-+      SQUASHFS_SWAP((s)->uid_start_2, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->guid_start_2, d, 128, 32);\
-+      SQUASHFS_SWAP((s)->inode_table_start_2, d, 160, 32);\
-+      SQUASHFS_SWAP((s)->directory_table_start_2, d, 192, 32);\
-+      SQUASHFS_SWAP((s)->s_major, d, 224, 16);\
-+      SQUASHFS_SWAP((s)->s_minor, d, 240, 16);\
-+      SQUASHFS_SWAP((s)->block_size_1, d, 256, 16);\
-+      SQUASHFS_SWAP((s)->block_log, d, 272, 16);\
-+      SQUASHFS_SWAP((s)->flags, d, 288, 8);\
-+      SQUASHFS_SWAP((s)->no_uids, d, 296, 8);\
-+      SQUASHFS_SWAP((s)->no_guids, d, 304, 8);\
-+      SQUASHFS_SWAP((s)->mkfs_time, d, 312, 32);\
-+      SQUASHFS_SWAP((s)->root_inode, d, 344, 64);\
-+      SQUASHFS_SWAP((s)->block_size, d, 408, 32);\
-+      SQUASHFS_SWAP((s)->fragments, d, 440, 32);\
-+      SQUASHFS_SWAP((s)->fragment_table_start_2, d, 472, 32);\
-+      SQUASHFS_SWAP((s)->bytes_used, d, 504, 64);\
-+      SQUASHFS_SWAP((s)->uid_start, d, 568, 64);\
-+      SQUASHFS_SWAP((s)->guid_start, d, 632, 64);\
-+      SQUASHFS_SWAP((s)->inode_table_start, d, 696, 64);\
-+      SQUASHFS_SWAP((s)->directory_table_start, d, 760, 64);\
-+      SQUASHFS_SWAP((s)->fragment_table_start, d, 824, 64);\
-+      SQUASHFS_SWAP((s)->unused, d, 888, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+      SQUASHFS_MEMSET(s, d, n);\
-+      SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+      SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+      SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+      SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+      SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+      SQUASHFS_SWAP((s)->inode_number, d, 64, 32);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER(s, d, n) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_ipc_inode_header))\
-+      SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_dev_inode_header)); \
-+      SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->rdev, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_symlink_inode_header));\
-+      SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->symlink_size, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_reg_inode_header));\
-+      SQUASHFS_SWAP((s)->start_block, d, 96, 64);\
-+      SQUASHFS_SWAP((s)->fragment, d, 160, 32);\
-+      SQUASHFS_SWAP((s)->offset, d, 192, 32);\
-+      SQUASHFS_SWAP((s)->file_size, d, 224, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LREG_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_lreg_inode_header));\
-+      SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 128, 64);\
-+      SQUASHFS_SWAP((s)->fragment, d, 192, 32);\
-+      SQUASHFS_SWAP((s)->offset, d, 224, 32);\
-+      SQUASHFS_SWAP((s)->file_size, d, 256, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_dir_inode_header));\
-+      SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->file_size, d, 128, 19);\
-+      SQUASHFS_SWAP((s)->offset, d, 147, 13);\
-+      SQUASHFS_SWAP((s)->start_block, d, 160, 32);\
-+      SQUASHFS_SWAP((s)->parent_inode, d, 192, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE(s, d, \
-+                      sizeof(struct squashfs_ldir_inode_header));\
-+      SQUASHFS_SWAP((s)->nlink, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->file_size, d, 128, 27);\
-+      SQUASHFS_SWAP((s)->offset, d, 155, 13);\
-+      SQUASHFS_SWAP((s)->start_block, d, 168, 32);\
-+      SQUASHFS_SWAP((s)->i_count, d, 200, 16);\
-+      SQUASHFS_SWAP((s)->parent_inode, d, 216, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index));\
-+      SQUASHFS_SWAP((s)->index, d, 0, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 32, 32);\
-+      SQUASHFS_SWAP((s)->size, d, 64, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_HEADER(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header));\
-+      SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+      SQUASHFS_SWAP((s)->start_block, d, 8, 32);\
-+      SQUASHFS_SWAP((s)->inode_number, d, 40, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry));\
-+      SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+      SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+      SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+      SQUASHFS_SWAP((s)->inode_number, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry));\
-+      SQUASHFS_SWAP((s)->start_block, d, 0, 64);\
-+      SQUASHFS_SWAP((s)->size, d, 64, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_SHORTS(s, d, n) {\
-+      int entry;\
-+      int bit_position;\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, n * 2);\
-+      for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+                      16)\
-+              SQUASHFS_SWAP(s[entry], d, bit_position, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_INTS(s, d, n) {\
-+      int entry;\
-+      int bit_position;\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, n * 4);\
-+      for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+                      32)\
-+              SQUASHFS_SWAP(s[entry], d, bit_position, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_LONG_LONGS(s, d, n) {\
-+      int entry;\
-+      int bit_position;\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, n * 8);\
-+      for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+                      64)\
-+              SQUASHFS_SWAP(s[entry], d, bit_position, 64);\
-+}
-+
-+#define SQUASHFS_SWAP_DATA(s, d, n, bits) {\
-+      int entry;\
-+      int bit_position;\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, n * bits / 8);\
-+      for(entry = 0, bit_position = 0; entry < n; entry++, bit_position += \
-+                      bits)\
-+              SQUASHFS_SWAP(s[entry], d, bit_position, bits);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES(s, d, n) SQUASHFS_SWAP_LONG_LONGS(s, d, n)
-+
-+#ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
-+
-+struct squashfs_base_inode_header_1 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:4; /* index into uid table */
-+      unsigned int            guid:4; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_1 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:4; /* index into uid table */
-+      unsigned int            guid:4; /* index into guid table */
-+      unsigned int            type:4;
-+      unsigned int            offset:4;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_1 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:4; /* index into uid table */
-+      unsigned int            guid:4; /* index into guid table */
-+      unsigned short          rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_1 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:4; /* index into uid table */
-+      unsigned int            guid:4; /* index into guid table */
-+      unsigned short          symlink_size;
-+      char                    symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_1 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:4; /* index into uid table */
-+      unsigned int            guid:4; /* index into guid table */
-+      unsigned int            mtime;
-+      unsigned int            start_block;
-+      unsigned int            file_size:32;
-+      unsigned short          block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_1 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:4; /* index into uid table */
-+      unsigned int            guid:4; /* index into guid table */
-+      unsigned int            file_size:19;
-+      unsigned int            offset:13;
-+      unsigned int            mtime;
-+      unsigned int            start_block:24;
-+} __attribute__  ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n) \
-+      SQUASHFS_MEMSET(s, d, n);\
-+      SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+      SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+      SQUASHFS_SWAP((s)->uid, d, 16, 4);\
-+      SQUASHFS_SWAP((s)->guid, d, 20, 4);
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_1(s, d, n) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_1(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+                      sizeof(struct squashfs_ipc_inode_header_1));\
-+      SQUASHFS_SWAP((s)->type, d, 24, 4);\
-+      SQUASHFS_SWAP((s)->offset, d, 28, 4);\
-+}
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_1(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+                      sizeof(struct squashfs_dev_inode_header_1));\
-+      SQUASHFS_SWAP((s)->rdev, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_1(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+                      sizeof(struct squashfs_symlink_inode_header_1));\
-+      SQUASHFS_SWAP((s)->symlink_size, d, 24, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_1(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+                      sizeof(struct squashfs_reg_inode_header_1));\
-+      SQUASHFS_SWAP((s)->mtime, d, 24, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 56, 32);\
-+      SQUASHFS_SWAP((s)->file_size, d, 88, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_1(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_1(s, d, \
-+                      sizeof(struct squashfs_dir_inode_header_1));\
-+      SQUASHFS_SWAP((s)->file_size, d, 24, 19);\
-+      SQUASHFS_SWAP((s)->offset, d, 43, 13);\
-+      SQUASHFS_SWAP((s)->mtime, d, 56, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 88, 24);\
-+}
-+
-+#endif
-+
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+
-+struct squashfs_dir_index_2 {
-+      unsigned int            index:27;
-+      unsigned int            start_block:29;
-+      unsigned char           size;
-+      unsigned char           name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_base_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_ipc_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+} __attribute__ ((packed));
-+
-+struct squashfs_dev_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+      unsigned short          rdev;
-+} __attribute__ ((packed));
-+
-+struct squashfs_symlink_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+      unsigned short          symlink_size;
-+      char                    symlink[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_reg_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+      unsigned int            mtime;
-+      unsigned int            start_block;
-+      unsigned int            fragment;
-+      unsigned int            offset;
-+      unsigned int            file_size:32;
-+      unsigned short          block_list[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+      unsigned int            file_size:19;
-+      unsigned int            offset:13;
-+      unsigned int            mtime;
-+      unsigned int            start_block:24;
-+} __attribute__  ((packed));
-+
-+struct squashfs_ldir_inode_header_2 {
-+      unsigned int            inode_type:4;
-+      unsigned int            mode:12; /* protection */
-+      unsigned int            uid:8; /* index into uid table */
-+      unsigned int            guid:8; /* index into guid table */
-+      unsigned int            file_size:27;
-+      unsigned int            offset:13;
-+      unsigned int            mtime;
-+      unsigned int            start_block:24;
-+      unsigned int            i_count:16;
-+      struct squashfs_dir_index_2     index[0];
-+} __attribute__  ((packed));
-+
-+union squashfs_inode_header_2 {
-+      struct squashfs_base_inode_header_2     base;
-+      struct squashfs_dev_inode_header_2      dev;
-+      struct squashfs_symlink_inode_header_2  symlink;
-+      struct squashfs_reg_inode_header_2      reg;
-+      struct squashfs_dir_inode_header_2      dir;
-+      struct squashfs_ldir_inode_header_2     ldir;
-+      struct squashfs_ipc_inode_header_2      ipc;
-+};
-+
-+struct squashfs_dir_header_2 {
-+      unsigned int            count:8;
-+      unsigned int            start_block:24;
-+} __attribute__ ((packed));
-+
-+struct squashfs_dir_entry_2 {
-+      unsigned int            offset:13;
-+      unsigned int            type:3;
-+      unsigned int            size:8;
-+      char                    name[0];
-+} __attribute__ ((packed));
-+
-+struct squashfs_fragment_entry_2 {
-+      unsigned int            start_block;
-+      unsigned int            size;
-+} __attribute__ ((packed));
-+
-+#define SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+      SQUASHFS_MEMSET(s, d, n);\
-+      SQUASHFS_SWAP((s)->inode_type, d, 0, 4);\
-+      SQUASHFS_SWAP((s)->mode, d, 4, 12);\
-+      SQUASHFS_SWAP((s)->uid, d, 16, 8);\
-+      SQUASHFS_SWAP((s)->guid, d, 24, 8);\
-+
-+#define SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, n) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, n)\
-+}
-+
-+#define SQUASHFS_SWAP_IPC_INODE_HEADER_2(s, d) \
-+      SQUASHFS_SWAP_BASE_INODE_HEADER_2(s, d, sizeof(struct squashfs_ipc_inode_header_2))
-+
-+#define SQUASHFS_SWAP_DEV_INODE_HEADER_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+                      sizeof(struct squashfs_dev_inode_header_2)); \
-+      SQUASHFS_SWAP((s)->rdev, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_SYMLINK_INODE_HEADER_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+                      sizeof(struct squashfs_symlink_inode_header_2));\
-+      SQUASHFS_SWAP((s)->symlink_size, d, 32, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_REG_INODE_HEADER_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+                      sizeof(struct squashfs_reg_inode_header_2));\
-+      SQUASHFS_SWAP((s)->mtime, d, 32, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 64, 32);\
-+      SQUASHFS_SWAP((s)->fragment, d, 96, 32);\
-+      SQUASHFS_SWAP((s)->offset, d, 128, 32);\
-+      SQUASHFS_SWAP((s)->file_size, d, 160, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INODE_HEADER_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+                      sizeof(struct squashfs_dir_inode_header_2));\
-+      SQUASHFS_SWAP((s)->file_size, d, 32, 19);\
-+      SQUASHFS_SWAP((s)->offset, d, 51, 13);\
-+      SQUASHFS_SWAP((s)->mtime, d, 64, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 96, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_LDIR_INODE_HEADER_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_SWAP_BASE_INODE_CORE_2(s, d, \
-+                      sizeof(struct squashfs_ldir_inode_header_2));\
-+      SQUASHFS_SWAP((s)->file_size, d, 32, 27);\
-+      SQUASHFS_SWAP((s)->offset, d, 59, 13);\
-+      SQUASHFS_SWAP((s)->mtime, d, 72, 32);\
-+      SQUASHFS_SWAP((s)->start_block, d, 104, 24);\
-+      SQUASHFS_SWAP((s)->i_count, d, 128, 16);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_INDEX_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_index_2));\
-+      SQUASHFS_SWAP((s)->index, d, 0, 27);\
-+      SQUASHFS_SWAP((s)->start_block, d, 27, 29);\
-+      SQUASHFS_SWAP((s)->size, d, 56, 8);\
-+}
-+#define SQUASHFS_SWAP_DIR_HEADER_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_header_2));\
-+      SQUASHFS_SWAP((s)->count, d, 0, 8);\
-+      SQUASHFS_SWAP((s)->start_block, d, 8, 24);\
-+}
-+
-+#define SQUASHFS_SWAP_DIR_ENTRY_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_dir_entry_2));\
-+      SQUASHFS_SWAP((s)->offset, d, 0, 13);\
-+      SQUASHFS_SWAP((s)->type, d, 13, 3);\
-+      SQUASHFS_SWAP((s)->size, d, 16, 8);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_ENTRY_2(s, d) {\
-+      SQUASHFS_SWAP_START\
-+      SQUASHFS_MEMSET(s, d, sizeof(struct squashfs_fragment_entry_2));\
-+      SQUASHFS_SWAP((s)->start_block, d, 0, 32);\
-+      SQUASHFS_SWAP((s)->size, d, 32, 32);\
-+}
-+
-+#define SQUASHFS_SWAP_FRAGMENT_INDEXES_2(s, d, n) SQUASHFS_SWAP_INTS(s, d, n)
-+
-+/* fragment and fragment table defines */
-+#define SQUASHFS_FRAGMENT_BYTES_2(A)  (A * sizeof(struct squashfs_fragment_entry_2))
-+
-+#define SQUASHFS_FRAGMENT_INDEX_2(A)  (SQUASHFS_FRAGMENT_BYTES_2(A) / \
-+                                      SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_OFFSET_2(A)   (SQUASHFS_FRAGMENT_BYTES_2(A) % \
-+                                              SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEXES_2(A)        ((SQUASHFS_FRAGMENT_BYTES_2(A) + \
-+                                      SQUASHFS_METADATA_SIZE - 1) / \
-+                                      SQUASHFS_METADATA_SIZE)
-+
-+#define SQUASHFS_FRAGMENT_INDEX_BYTES_2(A)    (SQUASHFS_FRAGMENT_INDEXES_2(A) *\
-+                                              sizeof(int))
-+
-+#endif
-+
-+#ifdef __KERNEL__
-+
-+/*
-+ * macros used to swap each structure entry, taking into account
-+ * bitfields and different bitfield placing conventions on differing
-+ * architectures
-+ */
-+
-+#include <asm/byteorder.h>
-+
-+#ifdef __BIG_ENDIAN
-+      /* convert from little endian to big endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+              tbits, b_pos)
-+#else
-+      /* convert from big endian to little endian */
-+#define SQUASHFS_SWAP(value, p, pos, tbits) _SQUASHFS_SWAP(value, p, pos, \
-+              tbits, 64 - tbits - b_pos)
-+#endif
-+
-+#define _SQUASHFS_SWAP(value, p, pos, tbits, SHIFT) {\
-+      b_pos = pos % 8;\
-+      val = 0;\
-+      s = (unsigned char *)p + (pos / 8);\
-+      d = ((unsigned char *) &val) + 7;\
-+      for(bits = 0; bits < (tbits + b_pos); bits += 8) \
-+              *d-- = *s++;\
-+      value = (val >> (SHIFT))/* & ((1 << tbits) - 1)*/;\
-+}
-+
-+#define SQUASHFS_MEMSET(s, d, n)      memset(s, 0, n);
-+
-+#endif
-+#endif
---- /dev/null
-+++ b/include/linux/squashfs_fs_i.h
-@@ -0,0 +1,45 @@
-+#ifndef SQUASHFS_FS_I
-+#define SQUASHFS_FS_I
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_i.h
-+ */
-+
-+struct squashfs_inode_info {
-+      long long       start_block;
-+      unsigned int    offset;
-+      union {
-+              struct {
-+                      long long       fragment_start_block;
-+                      unsigned int    fragment_size;
-+                      unsigned int    fragment_offset;
-+                      long long       block_list_start;
-+              } s1;
-+              struct {
-+                      long long       directory_index_start;
-+                      unsigned int    directory_index_offset;
-+                      unsigned int    directory_index_count;
-+                      unsigned int    parent_inode;
-+              } s2;
-+      } u;
-+      struct inode    vfs_inode;
-+};
-+#endif
---- /dev/null
-+++ b/include/linux/squashfs_fs_sb.h
-@@ -0,0 +1,74 @@
-+#ifndef SQUASHFS_FS_SB
-+#define SQUASHFS_FS_SB
-+/*
-+ * Squashfs
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006
-+ * Phillip Lougher <phillip@lougher.org.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * squashfs_fs_sb.h
-+ */
-+
-+#include <linux/squashfs_fs.h>
-+
-+struct squashfs_cache {
-+      long long       block;
-+      int             length;
-+      long long       next_index;
-+      char            *data;
-+};
-+
-+struct squashfs_fragment_cache {
-+      long long       block;
-+      int             length;
-+      unsigned int    locked;
-+      char            *data;
-+};
-+
-+struct squashfs_sb_info {
-+      struct squashfs_super_block     sblk;
-+      int                     devblksize;
-+      int                     devblksize_log2;
-+      int                     swap;
-+      struct squashfs_cache   *block_cache;
-+      struct squashfs_fragment_cache  *fragment;
-+      int                     next_cache;
-+      int                     next_fragment;
-+      int                     next_meta_index;
-+      unsigned int            *uid;
-+      unsigned int            *guid;
-+      long long               *fragment_index;
-+      unsigned int            *fragment_index_2;
-+      unsigned int            read_size;
-+      char                    *read_data;
-+      char                    *read_page;
-+      struct semaphore        read_data_mutex;
-+      struct semaphore        read_page_mutex;
-+      struct semaphore        block_cache_mutex;
-+      struct semaphore        fragment_mutex;
-+      struct semaphore        meta_index_mutex;
-+      wait_queue_head_t       waitq;
-+      wait_queue_head_t       fragment_wait_queue;
-+      struct meta_index       *meta_index;
-+      struct inode            *(*iget)(struct super_block *s,  squashfs_inode_t \
-+                              inode);
-+      long long               (*read_blocklist)(struct inode *inode, int \
-+                              index, int readahead_blks, char *block_list, \
-+                              unsigned short **block_p, unsigned int *bsize);
-+      int                     (*read_fragment_index_table)(struct super_block *s);
-+};
-+#endif
---- a/init/do_mounts_rd.c
-+++ b/init/do_mounts_rd.c
-@@ -5,6 +5,7 @@
- #include <linux/ext2_fs.h>
- #include <linux/romfs_fs.h>
- #include <linux/cramfs_fs.h>
-+#include <linux/squashfs_fs.h>
- #include <linux/initrd.h>
- #include <linux/string.h>
-@@ -39,6 +40,7 @@ static int __init crd_load(int in_fd, in
-  * numbers could not be found.
-  *
-  * We currently check for the following magic numbers:
-+ *      squashfs
-  *    minix
-  *    ext2
-  *    romfs
-@@ -53,6 +55,7 @@ identify_ramdisk_image(int fd, int start
-       struct ext2_super_block *ext2sb;
-       struct romfs_super_block *romfsb;
-       struct cramfs_super *cramfsb;
-+      struct squashfs_super_block *squashfsb;
-       int nblocks = -1;
-       unsigned char *buf;
-@@ -64,6 +67,7 @@ identify_ramdisk_image(int fd, int start
-       ext2sb = (struct ext2_super_block *) buf;
-       romfsb = (struct romfs_super_block *) buf;
-       cramfsb = (struct cramfs_super *) buf;
-+      squashfsb = (struct squashfs_super_block *) buf;
-       memset(buf, 0xe5, size);
-       /*
-@@ -101,6 +105,15 @@ identify_ramdisk_image(int fd, int start
-               goto done;
-       }
-+      /* squashfs is at block zero too */
-+      if (squashfsb->s_magic == SQUASHFS_MAGIC) {
-+              printk(KERN_NOTICE
-+                     "RAMDISK: squashfs filesystem found at block %d\n",
-+                     start_block);
-+              nblocks = (squashfsb->bytes_used+BLOCK_SIZE-1)>>BLOCK_SIZE_BITS;
-+              goto done;
-+      }
-+
-       /*
-        * Read block 1 to test for minix and ext2 superblock
-        */
diff --git a/target/linux/generic-2.6/patches-2.6.25/002-lzma_decompress.patch b/target/linux/generic-2.6/patches-2.6.25/002-lzma_decompress.patch
deleted file mode 100644 (file)
index 939e0a9..0000000
+++ /dev/null
@@ -1,780 +0,0 @@
---- /dev/null
-+++ b/include/linux/LzmaDecode.h
-@@ -0,0 +1,100 @@
-+/*
-+  LzmaDecode.h
-+  LZMA Decoder interface
-+
-+  LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
-+  http://www.7-zip.org/
-+
-+  LZMA SDK is licensed under two licenses:
-+  1) GNU Lesser General Public License (GNU LGPL)
-+  2) Common Public License (CPL)
-+  It means that you can select one of these two licenses and
-+  follow rules of that license.
-+
-+  SPECIAL EXCEPTION:
-+  Igor Pavlov, as the author of this code, expressly permits you to
-+  statically or dynamically link your code (or bind by name) to the
-+  interfaces of this file without subjecting your linked code to the
-+  terms of the CPL or GNU LGPL. Any modifications or additions
-+  to this file, however, are subject to the LGPL or CPL terms.
-+*/
-+
-+#ifndef __LZMADECODE_H
-+#define __LZMADECODE_H
-+
-+/* #define _LZMA_IN_CB */
-+/* Use callback for input data */
-+
-+/* #define _LZMA_OUT_READ */
-+/* Use read function for output data */
-+
-+/* #define _LZMA_PROB32 */
-+/* It can increase speed on some 32-bit CPUs,
-+   but memory usage will be doubled in that case */
-+
-+/* #define _LZMA_LOC_OPT */
-+/* Enable local speed optimizations inside code */
-+
-+#ifndef UInt32
-+#ifdef _LZMA_UINT32_IS_ULONG
-+#define UInt32 unsigned long
-+#else
-+#define UInt32 unsigned int
-+#endif
-+#endif
-+
-+#ifdef _LZMA_PROB32
-+#define CProb UInt32
-+#else
-+#define CProb unsigned short
-+#endif
-+
-+#define LZMA_RESULT_OK 0
-+#define LZMA_RESULT_DATA_ERROR 1
-+#define LZMA_RESULT_NOT_ENOUGH_MEM 2
-+
-+#ifdef _LZMA_IN_CB
-+typedef struct _ILzmaInCallback
-+{
-+  int (*Read)(void *object, unsigned char **buffer, UInt32 *bufferSize);
-+} ILzmaInCallback;
-+#endif
-+
-+#define LZMA_BASE_SIZE 1846
-+#define LZMA_LIT_SIZE 768
-+
-+/*
-+bufferSize = (LZMA_BASE_SIZE + (LZMA_LIT_SIZE << (lc + lp)))* sizeof(CProb)
-+bufferSize += 100 in case of _LZMA_OUT_READ
-+by default CProb is unsigned short,
-+but if specify _LZMA_PROB_32, CProb will be UInt32(unsigned int)
-+*/
-+
-+#ifdef _LZMA_OUT_READ
-+int LzmaDecoderInit(
-+    unsigned char *buffer, UInt32 bufferSize,
-+    int lc, int lp, int pb,
-+    unsigned char *dictionary, UInt32 dictionarySize,
-+  #ifdef _LZMA_IN_CB
-+    ILzmaInCallback *inCallback
-+  #else
-+    unsigned char *inStream, UInt32 inSize
-+  #endif
-+);
-+#endif
-+
-+int LzmaDecode(
-+    unsigned char *buffer,
-+  #ifndef _LZMA_OUT_READ
-+    UInt32 bufferSize,
-+    int lc, int lp, int pb,
-+  #ifdef _LZMA_IN_CB
-+    ILzmaInCallback *inCallback,
-+  #else
-+    unsigned char *inStream, UInt32 inSize,
-+  #endif
-+  #endif
-+    unsigned char *outStream, UInt32 outSize,
-+    UInt32 *outSizeProcessed);
-+
-+#endif
---- /dev/null
-+++ b/lib/LzmaDecode.c
-@@ -0,0 +1,663 @@
-+/*
-+  LzmaDecode.c
-+  LZMA Decoder
-+
-+  LZMA SDK 4.05 Copyright (c) 1999-2004 Igor Pavlov (2004-08-25)
-+  http://www.7-zip.org/
-+
-+  LZMA SDK is licensed under two licenses:
-+  1) GNU Lesser General Public License (GNU LGPL)
-+  2) Common Public License (CPL)
-+  It means that you can select one of these two licenses and
-+  follow rules of that license.
-+
-+  SPECIAL EXCEPTION:
-+  Igor Pavlov, as the author of this code, expressly permits you to
-+  statically or dynamically link your code (or bind by name) to the
-+  interfaces of this file without subjecting your linked code to the
-+  terms of the CPL or GNU LGPL. Any modifications or additions
-+  to this file, however, are subject to the LGPL or CPL terms.
-+*/
-+
-+#include <linux/LzmaDecode.h>
-+
-+#ifndef Byte
-+#define Byte unsigned char
-+#endif
-+
-+#define kNumTopBits 24
-+#define kTopValue ((UInt32)1 << kNumTopBits)
-+
-+#define kNumBitModelTotalBits 11
-+#define kBitModelTotal (1 << kNumBitModelTotalBits)
-+#define kNumMoveBits 5
-+
-+typedef struct _CRangeDecoder
-+{
-+  Byte *Buffer;
-+  Byte *BufferLim;
-+  UInt32 Range;
-+  UInt32 Code;
-+  #ifdef _LZMA_IN_CB
-+  ILzmaInCallback *InCallback;
-+  int Result;
-+  #endif
-+  int ExtraBytes;
-+} CRangeDecoder;
-+
-+Byte RangeDecoderReadByte(CRangeDecoder *rd)
-+{
-+  if (rd->Buffer == rd->BufferLim)
-+  {
-+    #ifdef _LZMA_IN_CB
-+    UInt32 size;
-+    rd->Result = rd->InCallback->Read(rd->InCallback, &rd->Buffer, &size);
-+    rd->BufferLim = rd->Buffer + size;
-+    if (size == 0)
-+    #endif
-+    {
-+      rd->ExtraBytes = 1;
-+      return 0xFF;
-+    }
-+  }
-+  return (*rd->Buffer++);
-+}
-+
-+/* #define ReadByte (*rd->Buffer++) */
-+#define ReadByte (RangeDecoderReadByte(rd))
-+
-+void RangeDecoderInit(CRangeDecoder *rd,
-+  #ifdef _LZMA_IN_CB
-+    ILzmaInCallback *inCallback
-+  #else
-+    Byte *stream, UInt32 bufferSize
-+  #endif
-+    )
-+{
-+  int i;
-+  #ifdef _LZMA_IN_CB
-+  rd->InCallback = inCallback;
-+  rd->Buffer = rd->BufferLim = 0;
-+  #else
-+  rd->Buffer = stream;
-+  rd->BufferLim = stream + bufferSize;
-+  #endif
-+  rd->ExtraBytes = 0;
-+  rd->Code = 0;
-+  rd->Range = (0xFFFFFFFF);
-+  for(i = 0; i < 5; i++)
-+    rd->Code = (rd->Code << 8) | ReadByte;
-+}
-+
-+#define RC_INIT_VAR UInt32 range = rd->Range; UInt32 code = rd->Code;
-+#define RC_FLUSH_VAR rd->Range = range; rd->Code = code;
-+#define RC_NORMALIZE if (range < kTopValue) { range <<= 8; code = (code << 8) | ReadByte; }
-+
-+UInt32 RangeDecoderDecodeDirectBits(CRangeDecoder *rd, int numTotalBits)
-+{
-+  RC_INIT_VAR
-+  UInt32 result = 0;
-+  int i;
-+  for (i = numTotalBits; i > 0; i--)
-+  {
-+    /* UInt32 t; */
-+    range >>= 1;
-+
-+    result <<= 1;
-+    if (code >= range)
-+    {
-+      code -= range;
-+      result |= 1;
-+    }
-+    /*
-+    t = (code - range) >> 31;
-+    t &= 1;
-+    code -= range & (t - 1);
-+    result = (result + result) | (1 - t);
-+    */
-+    RC_NORMALIZE
-+  }
-+  RC_FLUSH_VAR
-+  return result;
-+}
-+
-+int RangeDecoderBitDecode(CProb *prob, CRangeDecoder *rd)
-+{
-+  UInt32 bound = (rd->Range >> kNumBitModelTotalBits) * *prob;
-+  if (rd->Code < bound)
-+  {
-+    rd->Range = bound;
-+    *prob += (kBitModelTotal - *prob) >> kNumMoveBits;
-+    if (rd->Range < kTopValue)
-+    {
-+      rd->Code = (rd->Code << 8) | ReadByte;
-+      rd->Range <<= 8;
-+    }
-+    return 0;
-+  }
-+  else
-+  {
-+    rd->Range -= bound;
-+    rd->Code -= bound;
-+    *prob -= (*prob) >> kNumMoveBits;
-+    if (rd->Range < kTopValue)
-+    {
-+      rd->Code = (rd->Code << 8) | ReadByte;
-+      rd->Range <<= 8;
-+    }
-+    return 1;
-+  }
-+}
-+
-+#define RC_GET_BIT2(prob, mi, A0, A1) \
-+  UInt32 bound = (range >> kNumBitModelTotalBits) * *prob; \
-+  if (code < bound) \
-+    { A0; range = bound; *prob += (kBitModelTotal - *prob) >> kNumMoveBits; mi <<= 1; } \
-+  else \
-+    { A1; range -= bound; code -= bound; *prob -= (*prob) >> kNumMoveBits; mi = (mi + mi) + 1; } \
-+  RC_NORMALIZE
-+
-+#define RC_GET_BIT(prob, mi) RC_GET_BIT2(prob, mi, ; , ;)
-+
-+int RangeDecoderBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
-+{
-+  int mi = 1;
-+  int i;
-+  #ifdef _LZMA_LOC_OPT
-+  RC_INIT_VAR
-+  #endif
-+  for(i = numLevels; i > 0; i--)
-+  {
-+    #ifdef _LZMA_LOC_OPT
-+    CProb *prob = probs + mi;
-+    RC_GET_BIT(prob, mi)
-+    #else
-+    mi = (mi + mi) + RangeDecoderBitDecode(probs + mi, rd);
-+    #endif
-+  }
-+  #ifdef _LZMA_LOC_OPT
-+  RC_FLUSH_VAR
-+  #endif
-+  return mi - (1 << numLevels);
-+}
-+
-+int RangeDecoderReverseBitTreeDecode(CProb *probs, int numLevels, CRangeDecoder *rd)
-+{
-+  int mi = 1;
-+  int i;
-+  int symbol = 0;
-+  #ifdef _LZMA_LOC_OPT
-+  RC_INIT_VAR
-+  #endif
-+  for(i = 0; i < numLevels; i++)
-+  {
-+    #ifdef _LZMA_LOC_OPT
-+    CProb *prob = probs + mi;
-+    RC_GET_BIT2(prob, mi, ; , symbol |= (1 << i))
-+    #else
-+    int bit = RangeDecoderBitDecode(probs + mi, rd);
-+    mi = mi + mi + bit;
-+    symbol |= (bit << i);
-+    #endif
-+  }
-+  #ifdef _LZMA_LOC_OPT
-+  RC_FLUSH_VAR
-+  #endif
-+  return symbol;
-+}
-+
-+Byte LzmaLiteralDecode(CProb *probs, CRangeDecoder *rd)
-+{
-+  int symbol = 1;
-+  #ifdef _LZMA_LOC_OPT
-+  RC_INIT_VAR
-+  #endif
-+  do
-+  {
-+    #ifdef _LZMA_LOC_OPT
-+    CProb *prob = probs + symbol;
-+    RC_GET_BIT(prob, symbol)
-+    #else
-+    symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
-+    #endif
-+  }
-+  while (symbol < 0x100);
-+  #ifdef _LZMA_LOC_OPT
-+  RC_FLUSH_VAR
-+  #endif
-+  return symbol;
-+}
-+
-+Byte LzmaLiteralDecodeMatch(CProb *probs, CRangeDecoder *rd, Byte matchByte)
-+{
-+  int symbol = 1;
-+  #ifdef _LZMA_LOC_OPT
-+  RC_INIT_VAR
-+  #endif
-+  do
-+  {
-+    int bit;
-+    int matchBit = (matchByte >> 7) & 1;
-+    matchByte <<= 1;
-+    #ifdef _LZMA_LOC_OPT
-+    {
-+      CProb *prob = probs + ((1 + matchBit) << 8) + symbol;
-+      RC_GET_BIT2(prob, symbol, bit = 0, bit = 1)
-+    }
-+    #else
-+    bit = RangeDecoderBitDecode(probs + ((1 + matchBit) << 8) + symbol, rd);
-+    symbol = (symbol << 1) | bit;
-+    #endif
-+    if (matchBit != bit)
-+    {
-+      while (symbol < 0x100)
-+      {
-+        #ifdef _LZMA_LOC_OPT
-+        CProb *prob = probs + symbol;
-+        RC_GET_BIT(prob, symbol)
-+        #else
-+        symbol = (symbol + symbol) | RangeDecoderBitDecode(probs + symbol, rd);
-+        #endif
-+      }
-+      break;
-+    }
-+  }
-+  while (symbol < 0x100);
-+  #ifdef _LZMA_LOC_OPT
-+  RC_FLUSH_VAR
-+  #endif
-+  return symbol;
-+}
-+
-+#define kNumPosBitsMax 4
-+#define kNumPosStatesMax (1 << kNumPosBitsMax)
-+
-+#define kLenNumLowBits 3
-+#define kLenNumLowSymbols (1 << kLenNumLowBits)
-+#define kLenNumMidBits 3
-+#define kLenNumMidSymbols (1 << kLenNumMidBits)
-+#define kLenNumHighBits 8
-+#define kLenNumHighSymbols (1 << kLenNumHighBits)
-+
-+#define LenChoice 0
-+#define LenChoice2 (LenChoice + 1)
-+#define LenLow (LenChoice2 + 1)
-+#define LenMid (LenLow + (kNumPosStatesMax << kLenNumLowBits))
-+#define LenHigh (LenMid + (kNumPosStatesMax << kLenNumMidBits))
-+#define kNumLenProbs (LenHigh + kLenNumHighSymbols)
-+
-+int LzmaLenDecode(CProb *p, CRangeDecoder *rd, int posState)
-+{
-+  if(RangeDecoderBitDecode(p + LenChoice, rd) == 0)
-+    return RangeDecoderBitTreeDecode(p + LenLow +
-+        (posState << kLenNumLowBits), kLenNumLowBits, rd);
-+  if(RangeDecoderBitDecode(p + LenChoice2, rd) == 0)
-+    return kLenNumLowSymbols + RangeDecoderBitTreeDecode(p + LenMid +
-+        (posState << kLenNumMidBits), kLenNumMidBits, rd);
-+  return kLenNumLowSymbols + kLenNumMidSymbols +
-+      RangeDecoderBitTreeDecode(p + LenHigh, kLenNumHighBits, rd);
-+}
-+
-+#define kNumStates 12
-+
-+#define kStartPosModelIndex 4
-+#define kEndPosModelIndex 14
-+#define kNumFullDistances (1 << (kEndPosModelIndex >> 1))
-+
-+#define kNumPosSlotBits 6
-+#define kNumLenToPosStates 4
-+
-+#define kNumAlignBits 4
-+#define kAlignTableSize (1 << kNumAlignBits)
-+
-+#define kMatchMinLen 2
-+
-+#define IsMatch 0
-+#define IsRep (IsMatch + (kNumStates << kNumPosBitsMax))
-+#define IsRepG0 (IsRep + kNumStates)
-+#define IsRepG1 (IsRepG0 + kNumStates)
-+#define IsRepG2 (IsRepG1 + kNumStates)
-+#define IsRep0Long (IsRepG2 + kNumStates)
-+#define PosSlot (IsRep0Long + (kNumStates << kNumPosBitsMax))
-+#define SpecPos (PosSlot + (kNumLenToPosStates << kNumPosSlotBits))
-+#define Align (SpecPos + kNumFullDistances - kEndPosModelIndex)
-+#define LenCoder (Align + kAlignTableSize)
-+#define RepLenCoder (LenCoder + kNumLenProbs)
-+#define Literal (RepLenCoder + kNumLenProbs)
-+
-+#if Literal != LZMA_BASE_SIZE
-+StopCompilingDueBUG
-+#endif
-+
-+#ifdef _LZMA_OUT_READ
-+
-+typedef struct _LzmaVarState
-+{
-+  CRangeDecoder RangeDecoder;
-+  Byte *Dictionary;
-+  UInt32 DictionarySize;
-+  UInt32 DictionaryPos;
-+  UInt32 GlobalPos;
-+  UInt32 Reps[4];
-+  int lc;
-+  int lp;
-+  int pb;
-+  int State;
-+  int PreviousIsMatch;
-+  int RemainLen;
-+} LzmaVarState;
-+
-+int LzmaDecoderInit(
-+    unsigned char *buffer, UInt32 bufferSize,
-+    int lc, int lp, int pb,
-+    unsigned char *dictionary, UInt32 dictionarySize,
-+    #ifdef _LZMA_IN_CB
-+    ILzmaInCallback *inCallback
-+    #else
-+    unsigned char *inStream, UInt32 inSize
-+    #endif
-+    )
-+{
-+  LzmaVarState *vs = (LzmaVarState *)buffer;
-+  CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
-+  UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
-+  UInt32 i;
-+  if (bufferSize < numProbs * sizeof(CProb) + sizeof(LzmaVarState))
-+    return LZMA_RESULT_NOT_ENOUGH_MEM;
-+  vs->Dictionary = dictionary;
-+  vs->DictionarySize = dictionarySize;
-+  vs->DictionaryPos = 0;
-+  vs->GlobalPos = 0;
-+  vs->Reps[0] = vs->Reps[1] = vs->Reps[2] = vs->Reps[3] = 1;
-+  vs->lc = lc;
-+  vs->lp = lp;
-+  vs->pb = pb;
-+  vs->State = 0;
-+  vs->PreviousIsMatch = 0;
-+  vs->RemainLen = 0;
-+  dictionary[dictionarySize - 1] = 0;
-+  for (i = 0; i < numProbs; i++)
-+    p[i] = kBitModelTotal >> 1;
-+  RangeDecoderInit(&vs->RangeDecoder,
-+      #ifdef _LZMA_IN_CB
-+      inCallback
-+      #else
-+      inStream, inSize
-+      #endif
-+  );
-+  return LZMA_RESULT_OK;
-+}
-+
-+int LzmaDecode(unsigned char *buffer,
-+    unsigned char *outStream, UInt32 outSize,
-+    UInt32 *outSizeProcessed)
-+{
-+  LzmaVarState *vs = (LzmaVarState *)buffer;
-+  CProb *p = (CProb *)(buffer + sizeof(LzmaVarState));
-+  CRangeDecoder rd = vs->RangeDecoder;
-+  int state = vs->State;
-+  int previousIsMatch = vs->PreviousIsMatch;
-+  Byte previousByte;
-+  UInt32 rep0 = vs->Reps[0], rep1 = vs->Reps[1], rep2 = vs->Reps[2], rep3 = vs->Reps[3];
-+  UInt32 nowPos = 0;
-+  UInt32 posStateMask = (1 << (vs->pb)) - 1;
-+  UInt32 literalPosMask = (1 << (vs->lp)) - 1;
-+  int lc = vs->lc;
-+  int len = vs->RemainLen;
-+  UInt32 globalPos = vs->GlobalPos;
-+
-+  Byte *dictionary = vs->Dictionary;
-+  UInt32 dictionarySize = vs->DictionarySize;
-+  UInt32 dictionaryPos = vs->DictionaryPos;
-+
-+  if (len == -1)
-+  {
-+    *outSizeProcessed = 0;
-+    return LZMA_RESULT_OK;
-+  }
-+
-+  while(len > 0 && nowPos < outSize)
-+  {
-+    UInt32 pos = dictionaryPos - rep0;
-+    if (pos >= dictionarySize)
-+      pos += dictionarySize;
-+    outStream[nowPos++] = dictionary[dictionaryPos] = dictionary[pos];
-+    if (++dictionaryPos == dictionarySize)
-+      dictionaryPos = 0;
-+    len--;
-+  }
-+  if (dictionaryPos == 0)
-+    previousByte = dictionary[dictionarySize - 1];
-+  else
-+    previousByte = dictionary[dictionaryPos - 1];
-+#else
-+
-+int LzmaDecode(
-+    Byte *buffer, UInt32 bufferSize,
-+    int lc, int lp, int pb,
-+    #ifdef _LZMA_IN_CB
-+    ILzmaInCallback *inCallback,
-+    #else
-+    unsigned char *inStream, UInt32 inSize,
-+    #endif
-+    unsigned char *outStream, UInt32 outSize,
-+    UInt32 *outSizeProcessed)
-+{
-+  UInt32 numProbs = Literal + ((UInt32)LZMA_LIT_SIZE << (lc + lp));
-+  CProb *p = (CProb *)buffer;
-+  CRangeDecoder rd;
-+  UInt32 i;
-+  int state = 0;
-+  int previousIsMatch = 0;
-+  Byte previousByte = 0;
-+  UInt32 rep0 = 1, rep1 = 1, rep2 = 1, rep3 = 1;
-+  UInt32 nowPos = 0;
-+  UInt32 posStateMask = (1 << pb) - 1;
-+  UInt32 literalPosMask = (1 << lp) - 1;
-+  int len = 0;
-+  if (bufferSize < numProbs * sizeof(CProb))
-+    return LZMA_RESULT_NOT_ENOUGH_MEM;
-+  for (i = 0; i < numProbs; i++)
-+    p[i] = kBitModelTotal >> 1;
-+  RangeDecoderInit(&rd,
-+      #ifdef _LZMA_IN_CB
-+      inCallback
-+      #else
-+      inStream, inSize
-+      #endif
-+      );
-+#endif
-+
-+  *outSizeProcessed = 0;
-+  while(nowPos < outSize)
-+  {
-+    int posState = (int)(
-+        (nowPos
-+        #ifdef _LZMA_OUT_READ
-+        + globalPos
-+        #endif
-+        )
-+        & posStateMask);
-+    #ifdef _LZMA_IN_CB
-+    if (rd.Result != LZMA_RESULT_OK)
-+      return rd.Result;
-+    #endif
-+    if (rd.ExtraBytes != 0)
-+      return LZMA_RESULT_DATA_ERROR;
-+    if (RangeDecoderBitDecode(p + IsMatch + (state << kNumPosBitsMax) + posState, &rd) == 0)
-+    {
-+      CProb *probs = p + Literal + (LZMA_LIT_SIZE *
-+        (((
-+        (nowPos
-+        #ifdef _LZMA_OUT_READ
-+        + globalPos
-+        #endif
-+        )
-+        & literalPosMask) << lc) + (previousByte >> (8 - lc))));
-+
-+      if (state < 4) state = 0;
-+      else if (state < 10) state -= 3;
-+      else state -= 6;
-+      if (previousIsMatch)
-+      {
-+        Byte matchByte;
-+        #ifdef _LZMA_OUT_READ
-+        UInt32 pos = dictionaryPos - rep0;
-+        if (pos >= dictionarySize)
-+          pos += dictionarySize;
-+        matchByte = dictionary[pos];
-+        #else
-+        matchByte = outStream[nowPos - rep0];
-+        #endif
-+        previousByte = LzmaLiteralDecodeMatch(probs, &rd, matchByte);
-+        previousIsMatch = 0;
-+      }
-+      else
-+        previousByte = LzmaLiteralDecode(probs, &rd);
-+      outStream[nowPos++] = previousByte;
-+      #ifdef _LZMA_OUT_READ
-+      dictionary[dictionaryPos] = previousByte;
-+      if (++dictionaryPos == dictionarySize)
-+        dictionaryPos = 0;
-+      #endif
-+    }
-+    else
-+    {
-+      previousIsMatch = 1;
-+      if (RangeDecoderBitDecode(p + IsRep + state, &rd) == 1)
-+      {
-+        if (RangeDecoderBitDecode(p + IsRepG0 + state, &rd) == 0)
-+        {
-+          if (RangeDecoderBitDecode(p + IsRep0Long + (state << kNumPosBitsMax) + posState, &rd) == 0)
-+          {
-+            #ifdef _LZMA_OUT_READ
-+            UInt32 pos;
-+            #endif
-+            if (
-+               (nowPos
-+                #ifdef _LZMA_OUT_READ
-+                + globalPos
-+                #endif
-+               )
-+               == 0)
-+              return LZMA_RESULT_DATA_ERROR;
-+            state = state < 7 ? 9 : 11;
-+            #ifdef _LZMA_OUT_READ
-+            pos = dictionaryPos - rep0;
-+            if (pos >= dictionarySize)
-+              pos += dictionarySize;
-+            previousByte = dictionary[pos];
-+            dictionary[dictionaryPos] = previousByte;
-+            if (++dictionaryPos == dictionarySize)
-+              dictionaryPos = 0;
-+            #else
-+            previousByte = outStream[nowPos - rep0];
-+            #endif
-+            outStream[nowPos++] = previousByte;
-+            continue;
-+          }
-+        }
-+        else
-+        {
-+          UInt32 distance;
-+          if(RangeDecoderBitDecode(p + IsRepG1 + state, &rd) == 0)
-+            distance = rep1;
-+          else
-+          {
-+            if(RangeDecoderBitDecode(p + IsRepG2 + state, &rd) == 0)
-+              distance = rep2;
-+            else
-+            {
-+              distance = rep3;
-+              rep3 = rep2;
-+            }
-+            rep2 = rep1;
-+          }
-+          rep1 = rep0;
-+          rep0 = distance;
-+        }
-+        len = LzmaLenDecode(p + RepLenCoder, &rd, posState);
-+        state = state < 7 ? 8 : 11;
-+      }
-+      else
-+      {
-+        int posSlot;
-+        rep3 = rep2;
-+        rep2 = rep1;
-+        rep1 = rep0;
-+        state = state < 7 ? 7 : 10;
-+        len = LzmaLenDecode(p + LenCoder, &rd, posState);
-+        posSlot = RangeDecoderBitTreeDecode(p + PosSlot +
-+            ((len < kNumLenToPosStates ? len : kNumLenToPosStates - 1) <<
-+            kNumPosSlotBits), kNumPosSlotBits, &rd);
-+        if (posSlot >= kStartPosModelIndex)
-+        {
-+          int numDirectBits = ((posSlot >> 1) - 1);
-+          rep0 = ((2 | ((UInt32)posSlot & 1)) << numDirectBits);
-+          if (posSlot < kEndPosModelIndex)
-+          {
-+            rep0 += RangeDecoderReverseBitTreeDecode(
-+                p + SpecPos + rep0 - posSlot - 1, numDirectBits, &rd);
-+          }
-+          else
-+          {
-+            rep0 += RangeDecoderDecodeDirectBits(&rd,
-+                numDirectBits - kNumAlignBits) << kNumAlignBits;
-+            rep0 += RangeDecoderReverseBitTreeDecode(p + Align, kNumAlignBits, &rd);
-+          }
-+        }
-+        else
-+          rep0 = posSlot;
-+        rep0++;
-+      }
-+      if (rep0 == (UInt32)(0))
-+      {
-+        /* it's for stream version */
-+        len = -1;
-+        break;
-+      }
-+      if (rep0 > nowPos
-+        #ifdef _LZMA_OUT_READ
-+        + globalPos
-+        #endif
-+        )
-+      {
-+        return LZMA_RESULT_DATA_ERROR;
-+      }
-+      len += kMatchMinLen;
-+      do
-+      {
-+        #ifdef _LZMA_OUT_READ
-+        UInt32 pos = dictionaryPos - rep0;
-+        if (pos >= dictionarySize)
-+          pos += dictionarySize;
-+        previousByte = dictionary[pos];
-+        dictionary[dictionaryPos] = previousByte;
-+        if (++dictionaryPos == dictionarySize)
-+          dictionaryPos = 0;
-+        #else
-+        previousByte = outStream[nowPos - rep0];
-+        #endif
-+        outStream[nowPos++] = previousByte;
-+        len--;
-+      }
-+      while(len > 0 && nowPos < outSize);
-+    }
-+  }
-+
-+  #ifdef _LZMA_OUT_READ
-+  vs->RangeDecoder = rd;
-+  vs->DictionaryPos = dictionaryPos;
-+  vs->GlobalPos = globalPos + nowPos;
-+  vs->Reps[0] = rep0;
-+  vs->Reps[1] = rep1;
-+  vs->Reps[2] = rep2;
-+  vs->Reps[3] = rep3;
-+  vs->State = state;
-+  vs->PreviousIsMatch = previousIsMatch;
-+  vs->RemainLen = len;
-+  #endif
-+
-+  *outSizeProcessed = nowPos;
-+  return LZMA_RESULT_OK;
-+}
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -14,7 +14,7 @@ lib-$(CONFIG_SMP) += cpumask.o
- lib-y += kobject.o kref.o klist.o
- obj-y += div64.o sort.o parser.o halfmd4.o debug_locks.o random32.o \
--       bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o
-+       bust_spinlocks.o hexdump.o kasprintf.o bitmap.o scatterlist.o LzmaDecode.o
- ifeq ($(CONFIG_DEBUG_KOBJECT),y)
- CFLAGS_kobject.o += -DDEBUG
diff --git a/target/linux/generic-2.6/patches-2.6.25/003-squashfs_lzma.patch b/target/linux/generic-2.6/patches-2.6.25/003-squashfs_lzma.patch
deleted file mode 100644 (file)
index 9050e37..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
---- a/fs/squashfs/inode.c
-+++ b/fs/squashfs/inode.c
-@@ -4,6 +4,9 @@
-  * Copyright (c) 2002, 2003, 2004, 2005, 2006
-  * Phillip Lougher <phillip@lougher.org.uk>
-  *
-+ * LZMA decompressor support added by Oleg I. Vdovikin
-+ * Copyright (c) 2005 Oleg I.Vdovikin <oleg@cs.msu.su>
-+ *
-  * 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,
-@@ -21,6 +24,7 @@
-  * inode.c
-  */
-+#define SQUASHFS_LZMA
- #include <linux/types.h>
- #include <linux/squashfs_fs.h>
- #include <linux/module.h>
-@@ -44,6 +48,19 @@
- #include "squashfs.h"
-+#ifdef SQUASHFS_LZMA
-+#include <linux/LzmaDecode.h>
-+
-+/* default LZMA settings, should be in sync with mksquashfs */
-+#define LZMA_LC 3
-+#define LZMA_LP 0
-+#define LZMA_PB 2
-+
-+#define LZMA_WORKSPACE_SIZE ((LZMA_BASE_SIZE + \
-+      (LZMA_LIT_SIZE << (LZMA_LC + LZMA_LP))) * sizeof(CProb))
-+
-+#endif
-+
- static void squashfs_put_super(struct super_block *);
- static int squashfs_statfs(struct dentry *, struct kstatfs *);
- static int squashfs_symlink_readpage(struct file *file, struct page *page);
-@@ -64,7 +81,11 @@ static int squashfs_get_sb(struct file_s
-                       const char *, void *, struct vfsmount *);
-+#ifdef SQUASHFS_LZMA
-+static unsigned char lzma_workspace[LZMA_WORKSPACE_SIZE];
-+#else
- static z_stream stream;
-+#endif
- static struct file_system_type squashfs_fs_type = {
-       .owner = THIS_MODULE,
-@@ -249,6 +270,15 @@ SQSH_EXTERN unsigned int squashfs_read_d
-       if (compressed) {
-               int zlib_err;
-+#ifdef SQUASHFS_LZMA
-+              if ((zlib_err = LzmaDecode(lzma_workspace,
-+                      LZMA_WORKSPACE_SIZE, LZMA_LC, LZMA_LP, LZMA_PB,
-+                      c_buffer, c_byte, buffer, msblk->read_size, &bytes)) != LZMA_RESULT_OK)
-+              {
-+                      ERROR("lzma returned unexpected result 0x%x\n", zlib_err);
-+                      bytes = 0;
-+              }
-+#else
-               stream.next_in = c_buffer;
-               stream.avail_in = c_byte;
-               stream.next_out = buffer;
-@@ -263,7 +293,7 @@ SQSH_EXTERN unsigned int squashfs_read_d
-                       bytes = 0;
-               } else
-                       bytes = stream.total_out;
--
-+#endif
-               up(&msblk->read_data_mutex);
-       }
-@@ -2045,15 +2075,19 @@ static int __init init_squashfs_fs(void)
-       printk(KERN_INFO "squashfs: version 3.0 (2006/03/15) "
-               "Phillip Lougher\n");
-+#ifndef SQUASHFS_LZMA
-       if (!(stream.workspace = vmalloc(zlib_inflate_workspacesize()))) {
-               ERROR("Failed to allocate zlib workspace\n");
-               destroy_inodecache();
-               err = -ENOMEM;
-               goto out;
-       }
-+#endif
-       if ((err = register_filesystem(&squashfs_fs_type))) {
-+#ifndef SQUASHFS_LZMA
-               vfree(stream.workspace);
-+#endif
-               destroy_inodecache();
-       }
-@@ -2064,7 +2098,9 @@ out:
- static void __exit exit_squashfs_fs(void)
- {
-+#ifndef SQUASHFS_LZMA
-       vfree(stream.workspace);
-+#endif
-       unregister_filesystem(&squashfs_fs_type);
-       destroy_inodecache();
- }
diff --git a/target/linux/generic-2.6/patches-2.6.25/004-extra_optimization.patch b/target/linux/generic-2.6/patches-2.6.25/004-extra_optimization.patch
deleted file mode 100644 (file)
index ba1b71c..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/Makefile
-+++ b/Makefile
-@@ -533,6 +533,9 @@ endif
- NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
- CHECKFLAGS     += $(NOSTDINC_FLAGS)
-+# improve gcc optimization
-+CFLAGS += $(call cc-option,-funit-at-a-time,)
-+
- # warn about C99 declaration after statement
- KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
diff --git a/target/linux/generic-2.6/patches-2.6.25/005-squashfs_fix.patch b/target/linux/generic-2.6/patches-2.6.25/005-squashfs_fix.patch
deleted file mode 100644 (file)
index 56b7fc2..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/fs/squashfs/inode.c
-+++ b/fs/squashfs/inode.c
-@@ -33,6 +33,7 @@
- #include <linux/fs.h>
- #include <linux/smp_lock.h>
- #include <linux/slab.h>
-+#include <linux/exportfs.h>
- #include <linux/squashfs_fs_sb.h>
- #include <linux/squashfs_fs_i.h>
- #include <linux/buffer_head.h>
-@@ -2125,7 +2126,7 @@ static void squashfs_destroy_inode(struc
- }
--static void init_once(void * foo, struct kmem_cache * cachep, unsigned long flags)
-+static void init_once(struct kmem_cache * cachep, void *foo)
- {
-       struct squashfs_inode_info *ei = foo;
diff --git a/target/linux/generic-2.6/patches-2.6.25/006-gcc4_inline_fix.patch b/target/linux/generic-2.6/patches-2.6.25/006-gcc4_inline_fix.patch
deleted file mode 100644 (file)
index cd62e9c..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/include/asm-mips/system.h
-+++ b/include/asm-mips/system.h
-@@ -185,7 +185,7 @@ extern __u64 __xchg_u64_unsupported_on_3
-    if something tries to do an invalid xchg().  */
- extern void __xchg_called_with_bad_pointer(void);
--static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
-+static __always_inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
- {
-       switch (size) {
-       case 4:
diff --git a/target/linux/generic-2.6/patches-2.6.25/007-samsung_flash.patch b/target/linux/generic-2.6/patches-2.6.25/007-samsung_flash.patch
deleted file mode 100644 (file)
index 557736f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -51,6 +51,7 @@
- #define SST49LF040B           0x0050
- #define SST49LF008A           0x005a
- #define AT49BV6416            0x00d6
-+#define MANUFACTURER_SAMSUNG  0x00ec
- static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
- static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-@@ -298,12 +299,19 @@ struct mtd_info *cfi_cmdset_0002(struct 
-               if (extp->MajorVersion != '1' ||
-                   (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
--                      printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
--                             "version %c.%c.\n",  extp->MajorVersion,
--                             extp->MinorVersion);
--                      kfree(extp);
--                      kfree(mtd);
--                      return NULL;
-+                      if (cfi->mfr == MANUFACTURER_SAMSUNG &&
-+                          (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
-+                          printk(KERN_NOTICE "  Newer Samsung flash detected, "
-+                                 "should be compatibile with Amd/Fujitsu.\n");
-+                      }
-+                      else {
-+                          printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
-+                                 "version %c.%c.\n",  extp->MajorVersion,
-+                                 extp->MinorVersion);
-+                          kfree(extp);
-+                          kfree(mtd);
-+                          return NULL;
-+                      }
-               }
-               /* Install our own private info structure */
diff --git a/target/linux/generic-2.6/patches-2.6.25/009-revert_intel_flash_breakage.patch b/target/linux/generic-2.6/patches-2.6.25/009-revert_intel_flash_breakage.patch
deleted file mode 100644 (file)
index 0729007..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0001.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0001.c
-@@ -1008,7 +1008,7 @@ static void __xipram xip_enable(struct m
- static int __xipram xip_wait_for_operation(
-               struct map_info *map, struct flchip *chip,
--              unsigned long adr, unsigned int chip_op_time )
-+              unsigned long adr, int *chip_op_time )
- {
-       struct cfi_private *cfi = map->fldrv_priv;
-       struct cfi_pri_intelext *cfip = cfi->cmdset_priv;
-@@ -1017,7 +1017,7 @@ static int __xipram xip_wait_for_operati
-       flstate_t oldstate, newstate;
-               start = xip_currtime();
--      usec = chip_op_time * 8;
-+      usec = *chip_op_time * 8;
-       if (usec == 0)
-               usec = 500000;
-       done = 0;
-@@ -1127,8 +1127,8 @@ static int __xipram xip_wait_for_operati
- #define XIP_INVAL_CACHED_RANGE(map, from, size)  \
-       INVALIDATE_CACHED_RANGE(map, from, size)
--#define INVAL_CACHE_AND_WAIT(map, chip, cmd_adr, inval_adr, inval_len, usec) \
--      xip_wait_for_operation(map, chip, cmd_adr, usec)
-+#define INVAL_CACHE_AND_WAIT(map, chip, cmd_adr, inval_adr, inval_len, p_usec) \
-+      xip_wait_for_operation(map, chip, cmd_adr, p_usec)
- #else
-@@ -1140,65 +1140,65 @@ static int __xipram xip_wait_for_operati
- static int inval_cache_and_wait_for_operation(
-               struct map_info *map, struct flchip *chip,
-               unsigned long cmd_adr, unsigned long inval_adr, int inval_len,
--              unsigned int chip_op_time)
-+              int *chip_op_time )
- {
-       struct cfi_private *cfi = map->fldrv_priv;
-       map_word status, status_OK = CMD(0x80);
--      int chip_state = chip->state;
--      unsigned int timeo, sleep_time;
-+      int z, chip_state = chip->state;
-+      unsigned long timeo;
-       spin_unlock(chip->mutex);
-       if (inval_len)
-               INVALIDATE_CACHED_RANGE(map, inval_adr, inval_len);
-+      if (*chip_op_time)
-+              cfi_udelay(*chip_op_time);
-       spin_lock(chip->mutex);
--      /* set our timeout to 8 times the expected delay */
--      timeo = chip_op_time * 8;
--      if (!timeo)
--              timeo = 500000;
--      sleep_time = chip_op_time / 2;
-+      timeo = *chip_op_time * 8 * HZ / 1000000;
-+      if (timeo < HZ/2)
-+              timeo = HZ/2;
-+      timeo += jiffies;
-+      z = 0;
-       for (;;) {
-+              if (chip->state != chip_state) {
-+                      /* Someone's suspended the operation: sleep */
-+                      DECLARE_WAITQUEUE(wait, current);
-+
-+                      set_current_state(TASK_UNINTERRUPTIBLE);
-+                      add_wait_queue(&chip->wq, &wait);
-+                      spin_unlock(chip->mutex);
-+                      schedule();
-+                      remove_wait_queue(&chip->wq, &wait);
-+                      timeo = jiffies + (HZ / 2); /* FIXME */
-+                      spin_lock(chip->mutex);
-+                      continue;
-+              }
-+
-               status = map_read(map, cmd_adr);
-               if (map_word_andequal(map, status, status_OK, status_OK))
-                       break;
--              if (!timeo) {
-+              /* OK Still waiting */
-+              if (time_after(jiffies, timeo)) {
-                       map_write(map, CMD(0x70), cmd_adr);
-                       chip->state = FL_STATUS;
-                       return -ETIME;
-               }
--              /* OK Still waiting. Drop the lock, wait a while and retry. */
-+              /* Latency issues. Drop the lock, wait a while and retry */
-+              z++;
-               spin_unlock(chip->mutex);
--              if (sleep_time >= 1000000/HZ) {
--                      /*
--                       * Half of the normal delay still remaining
--                       * can be performed with a sleeping delay instead
--                       * of busy waiting.
--                       */
--                      msleep(sleep_time/1000);
--                      timeo -= sleep_time;
--                      sleep_time = 1000000/HZ;
--              } else {
--                      udelay(1);
--                      cond_resched();
--                      timeo--;
--              }
-+              cfi_udelay(1);
-               spin_lock(chip->mutex);
--
--              while (chip->state != chip_state) {
--                      /* Someone's suspended the operation: sleep */
--                      DECLARE_WAITQUEUE(wait, current);
--                      set_current_state(TASK_UNINTERRUPTIBLE);
--                      add_wait_queue(&chip->wq, &wait);
--                      spin_unlock(chip->mutex);
--                      schedule();
--                      remove_wait_queue(&chip->wq, &wait);
--                      spin_lock(chip->mutex);
--              }
-       }
-+      if (!z) {
-+              if (!--(*chip_op_time))
-+                      *chip_op_time = 1;
-+      } else if (z > 1)
-+              ++(*chip_op_time);
-+
-       /* Done and happy. */
-       chip->state = FL_STATUS;
-       return 0;
-@@ -1207,7 +1207,8 @@ static int inval_cache_and_wait_for_oper
- #endif
- #define WAIT_TIMEOUT(map, chip, adr, udelay) \
--      INVAL_CACHE_AND_WAIT(map, chip, adr, 0, 0, udelay);
-+      ({ int __udelay = (udelay); \
-+         INVAL_CACHE_AND_WAIT(map, chip, adr, 0, 0, &__udelay); })
- static int do_point_onechip (struct map_info *map, struct flchip *chip, loff_t adr, size_t len)
-@@ -1438,7 +1439,7 @@ static int __xipram do_write_oneword(str
-       ret = INVAL_CACHE_AND_WAIT(map, chip, adr,
-                                  adr, map_bankwidth(map),
--                                 chip->word_write_time);
-+                                 &chip->word_write_time);
-       if (ret) {
-               xip_enable(map, chip, adr);
-               printk(KERN_ERR "%s: word write error (status timeout)\n", map->name);
-@@ -1678,7 +1679,7 @@ static int __xipram do_write_buffer(stru
-       ret = INVAL_CACHE_AND_WAIT(map, chip, cmd_adr,
-                                  initial_adr, initial_len,
--                                 chip->buffer_write_time);
-+                                 &chip->buffer_write_time);
-       if (ret) {
-               map_write(map, CMD(0x70), cmd_adr);
-               chip->state = FL_STATUS;
-@@ -1813,7 +1814,7 @@ static int __xipram do_erase_oneblock(st
-       ret = INVAL_CACHE_AND_WAIT(map, chip, adr,
-                                  adr, len,
--                                 chip->erase_time);
-+                                 &chip->erase_time);
-       if (ret) {
-               map_write(map, CMD(0x70), adr);
-               chip->state = FL_STATUS;
diff --git a/target/linux/generic-2.6/patches-2.6.25/010-disable_old_squashfs_compatibility.patch b/target/linux/generic-2.6/patches-2.6.25/010-disable_old_squashfs_compatibility.patch
deleted file mode 100644 (file)
index 01e2757..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -4,4 +4,3 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += inode.o
--squashfs-y += squashfs2_0.o
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -24,6 +24,9 @@
- #ifdef CONFIG_SQUASHFS_1_0_COMPATIBILITY
- #undef CONFIG_SQUASHFS_1_0_COMPATIBILITY
- #endif
-+#ifdef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#undef CONFIG_SQUASHFS_2_0_COMPATIBILITY
-+#endif
- #ifdef SQUASHFS_TRACE
- #define TRACE(s, args...)     printk(KERN_NOTICE "SQUASHFS: "s, ## args)
diff --git a/target/linux/generic-2.6/patches-2.6.25/011-mips_boot.patch b/target/linux/generic-2.6/patches-2.6.25/011-mips_boot.patch
deleted file mode 100644 (file)
index 4eba909..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -120,6 +120,8 @@
- #endif
-       .endm
-+      j kernel_entry
-+      nop
- #ifndef CONFIG_NO_EXCEPT_FILL
-       /*
-        * Reserved space for exception handlers.
diff --git a/target/linux/generic-2.6/patches-2.6.25/024-mips_disable_fpu.patch b/target/linux/generic-2.6/patches-2.6.25/024-mips_disable_fpu.patch
deleted file mode 100644 (file)
index 3dfbec7..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-MIPS: allow disabling the kernel FPU emulator
-
-This patch allows turning off the in-kernel Algorithmics
-FPU emulator support, which allows one to save a couple of
-precious blocks on an embedded system.
-
-Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -831,6 +831,17 @@ config I8259
- config MIPS_BONITO64
-       bool
-+config MIPS_FPU_EMU
-+      bool "Enable FPU emulation"
-+      default y
-+      help
-+         This option allows building a kernel with or without the Algorithmics
-+         FPU emulator enabled. Turning off this option results in a kernel which
-+         does not catch floating operations exceptions. Make sure that your toolchain
-+         is configured to enable software floating point emulation in that case.
-+              
-+         If unsure say Y here.
-+
- config MIPS_MSC
-       bool
---- a/arch/mips/math-emu/Makefile
-+++ b/arch/mips/math-emu/Makefile
-@@ -2,12 +2,14 @@
- # Makefile for the Linux/MIPS kernel FPU emulation.
- #
--obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-+obj-y :=      kernel_linkage.o dsemul.o cp1emu.o
-+
-+obj-$(CONFIG_MIPS_FPU_EMU)    += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-          ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \
-          dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \
-          dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \
-          sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \
-          sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \
--         dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o
-+         dp_sqrt.o sp_sqrt.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/math-emu/cp1emu.c
-+++ b/arch/mips/math-emu/cp1emu.c
-@@ -57,6 +57,12 @@
- #endif
- #define __mips 4
-+/* Further private data for which no space exists in mips_fpu_struct */
-+
-+struct mips_fpu_emulator_stats fpuemustats;
-+
-+#ifdef CONFIG_MIPS_FPU_EMU
-+
- /* Function which emulates a floating point instruction. */
- static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *,
-@@ -67,10 +73,6 @@ static int fpux_emu(struct pt_regs *,
-       struct mips_fpu_struct *, mips_instruction);
- #endif
--/* Further private data for which no space exists in mips_fpu_struct */
--
--struct mips_fpu_emulator_stats fpuemustats;
--
- /* Control registers */
- #define FPCREG_RID    0       /* $0  = revision id */
-@@ -1277,6 +1279,13 @@ int fpu_emulator_cop1Handler(struct pt_r
-       return sig;
- }
-+#else
-+int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
-+        int has_fpu)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
- #ifdef CONFIG_DEBUG_FS
- extern struct dentry *mips_debugfs_dir;
---- a/arch/mips/math-emu/dsemul.c
-+++ b/arch/mips/math-emu/dsemul.c
-@@ -110,6 +110,7 @@ int mips_dsemul(struct pt_regs *regs, mi
-       return SIGILL;          /* force out of emulation loop */
- }
-+#ifdef CONFIG_MIPS_FPU_EMU
- int do_dsemulret(struct pt_regs *xcp)
- {
-       struct emuframe __user *fr;
-@@ -166,3 +167,9 @@ int do_dsemulret(struct pt_regs *xcp)
-       return 1;
- }
-+#else
-+int do_dsemulret(struct pt_regs *xcp)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
---- a/arch/mips/math-emu/kernel_linkage.c
-+++ b/arch/mips/math-emu/kernel_linkage.c
-@@ -28,6 +28,7 @@
- #define SIGNALLING_NAN 0x7ff800007ff80000LL
-+#ifdef CONFIG_MIPS_FPU_EMU
- void fpu_emulator_init_fpu(void)
- {
-       static int first = 1;
-@@ -111,4 +112,36 @@ int fpu_emulator_restore_context32(struc
-       return err;
- }
--#endif
-+#endif        /* CONFIG_64BIT */
-+#else
-+
-+void fpu_emulator_init_fpu(void)
-+{
-+      printk(KERN_INFO "FPU emulator disabled, make sure your toolchain"
-+              "was compiled with software floating point support (soft-float)\n");
-+      return;
-+}
-+
-+int fpu_emulator_save_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+#ifdef CONFIG_64BIT
-+int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+#endif        /* CONFIG_64BIT */
-+#endif /* CONFIG_MIPS_FPU_EMU */
diff --git a/target/linux/generic-2.6/patches-2.6.25/060-block2mtd_init.patch b/target/linux/generic-2.6/patches-2.6.25/060-block2mtd_init.patch
deleted file mode 100644 (file)
index f5d9b0c..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -16,6 +16,7 @@
- #include <linux/list.h>
- #include <linux/init.h>
- #include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
- #include <linux/buffer_head.h>
- #include <linux/mutex.h>
- #include <linux/mount.h>
-@@ -237,10 +238,11 @@ static void block2mtd_free_device(struct
- /* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size)
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
- {
-       struct block_device *bdev;
-       struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-       if (!devname)
-               return NULL;
-@@ -279,14 +281,18 @@ static struct block2mtd_dev *add_device(
-       /* Setup the MTD structure */
-       /* make the name contain the block device in */
--      dev->mtd.name = kmalloc(sizeof("block2mtd: ") + strlen(devname),
--                      GFP_KERNEL);
-+
-+      if (!mtdname)
-+              mtdname = devname;
-+
-+      dev->mtd.name = kmalloc(strlen(mtdname) + 1, GFP_KERNEL);
-+
-       if (!dev->mtd.name)
-               goto devinit_err;
-+      
-+      strcpy(dev->mtd.name, mtdname);
--      sprintf(dev->mtd.name, "block2mtd: %s", devname);
--
--      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK;
-+      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK & ~(erase_size - 1);
-       dev->mtd.erasesize = erase_size;
-       dev->mtd.writesize = 1;
-       dev->mtd.type = MTD_RAM;
-@@ -298,15 +304,18 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.read = block2mtd_read;
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
--
--      if (add_mtd_device(&dev->mtd)) {
-+      
-+      part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-+      part->name = dev->mtd.name;
-+      part->offset = 0;
-+      part->size = dev->mtd.size;
-+      if (add_mtd_partitions(&dev->mtd, part, 1)) {
-               /* Device didnt get added, so free the entry */
-               goto devinit_err;
-       }
-       list_add(&dev->list, &blkmtd_device_list);
-       INFO("mtd%d: [%s] erase_size = %dKiB [%d]", dev->mtd.index,
--                      dev->mtd.name + strlen("blkmtd: "),
--                      dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-+                      mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-       return dev;
- devinit_err:
-@@ -379,9 +388,9 @@ static char block2mtd_paramline[80 + 12]
- static int block2mtd_setup2(const char *val)
- {
--      char buf[80 + 12]; /* 80 for device, 12 for erase size */
-+      char buf[80 + 12 + 80]; /* 80 for device, 12 for erase size, 80 for name */
-       char *str = buf;
--      char *token[2];
-+      char *token[3];
-       char *name;
-       size_t erase_size = PAGE_SIZE;
-       int i, ret;
-@@ -392,7 +401,7 @@ static int block2mtd_setup2(const char *
-       strcpy(str, val);
-       kill_final_newline(str);
--      for (i = 0; i < 2; i++)
-+      for (i = 0; i < 3; i++)
-               token[i] = strsep(&str, ",");
-       if (str)
-@@ -411,8 +420,10 @@ static int block2mtd_setup2(const char *
-                       parse_err("illegal erase size");
-               }
-       }
-+      if (token[2] && (strlen(token[2]) + 1 > 80))
-+              parse_err("mtd device name too long");
--      add_device(name, erase_size);
-+      add_device(name, erase_size, token[2]);
-       return 0;
- }
-@@ -446,7 +457,7 @@ static int block2mtd_setup(const char *v
- module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
--MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
-+MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>[,<name>]]\"");
- static int __init block2mtd_init(void)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.25/065-rootfs_split.patch b/target/linux/generic-2.6/patches-2.6.25/065-rootfs_split.patch
deleted file mode 100644 (file)
index 5b882c6..0000000
+++ /dev/null
@@ -1,951 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -47,6 +47,16 @@ config MTD_PARTITIONS
-         devices. Partitioning on NFTL 'devices' is a different - that's the
-         'normal' form of partitioning used on a block device.
-+config MTD_ROOTFS_ROOT_DEV
-+      bool "Automatically set 'rootfs' partition to be root filesystem"
-+      depends on MTD_PARTITIONS
-+      default y
-+
-+config MTD_ROOTFS_SPLIT
-+      bool "Automatically split 'rootfs' partition for squashfs"
-+      depends on MTD_PARTITIONS
-+      default y
-+
- config MTD_REDBOOT_PARTS
-       tristate "RedBoot partition table parsing"
-       depends on MTD_PARTITIONS
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -20,6 +20,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/squashfs_fs.h>
-+#include <linux/root_dev.h>
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -39,7 +41,7 @@ struct mtd_part {
-  * the pointer to that structure with this macro.
-  */
- #define PART(x)  ((struct mtd_part *)(x))
--
-+#define IS_PART(mtd) (mtd->read == part_read)
- /*
-  * MTD methods which simply translate the effective address and pass through
-@@ -322,6 +324,316 @@ int del_mtd_partitions(struct mtd_info *
-       return 0;
- }
-+static u_int32_t cur_offset = 0;
-+static int add_one_partition(struct mtd_info *master, const struct mtd_partition *part,
-+              int i, struct mtd_part **slp)
-+{
-+      struct mtd_part *slave;
-+
-+      /* allocate the partition structure */
-+      slave = kzalloc (sizeof(*slave), GFP_KERNEL);
-+      if (!slave) {
-+              printk ("memory allocation error while creating partitions for \"%s\"\n",
-+                      master->name);
-+              del_mtd_partitions(master);
-+              return -ENOMEM;
-+      }
-+      list_add(&slave->list, &mtd_partitions);
-+
-+      /* set up the MTD object for this partition */
-+      slave->mtd.type = master->type;
-+      slave->mtd.flags = master->flags & ~part->mask_flags;
-+      slave->mtd.size = part->size;
-+      slave->mtd.writesize = master->writesize;
-+      slave->mtd.oobsize = master->oobsize;
-+      slave->mtd.oobavail = master->oobavail;
-+      slave->mtd.subpage_sft = master->subpage_sft;
-+
-+      slave->mtd.name = part->name;
-+      slave->mtd.owner = master->owner;
-+
-+      slave->mtd.read = part_read;
-+      slave->mtd.write = part_write;
-+
-+      if (master->panic_write)
-+              slave->mtd.panic_write = part_panic_write;
-+
-+      slave->mtd.refresh_device = part->refresh_partition;
-+
-+      if(master->point && master->unpoint){
-+              slave->mtd.point = part_point;
-+              slave->mtd.unpoint = part_unpoint;
-+      }
-+
-+      if (master->read_oob)
-+              slave->mtd.read_oob = part_read_oob;
-+      if (master->write_oob)
-+              slave->mtd.write_oob = part_write_oob;
-+      if(master->read_user_prot_reg)
-+              slave->mtd.read_user_prot_reg = part_read_user_prot_reg;
-+      if(master->read_fact_prot_reg)
-+              slave->mtd.read_fact_prot_reg = part_read_fact_prot_reg;
-+      if(master->write_user_prot_reg)
-+              slave->mtd.write_user_prot_reg = part_write_user_prot_reg;
-+      if(master->lock_user_prot_reg)
-+              slave->mtd.lock_user_prot_reg = part_lock_user_prot_reg;
-+      if(master->get_user_prot_info)
-+              slave->mtd.get_user_prot_info = part_get_user_prot_info;
-+      if(master->get_fact_prot_info)
-+              slave->mtd.get_fact_prot_info = part_get_fact_prot_info;
-+      if (master->sync)
-+              slave->mtd.sync = part_sync;
-+      if (!i && master->suspend && master->resume) {
-+                      slave->mtd.suspend = part_suspend;
-+                      slave->mtd.resume = part_resume;
-+      }
-+      if (master->writev)
-+              slave->mtd.writev = part_writev;
-+      if (master->lock)
-+              slave->mtd.lock = part_lock;
-+      if (master->unlock)
-+              slave->mtd.unlock = part_unlock;
-+      if (master->block_isbad)
-+              slave->mtd.block_isbad = part_block_isbad;
-+      if (master->block_markbad)
-+              slave->mtd.block_markbad = part_block_markbad;
-+      slave->mtd.erase = part_erase;
-+      slave->master = master;
-+      slave->offset = part->offset;
-+      slave->index = i;
-+
-+      if (slave->offset == MTDPART_OFS_APPEND)
-+              slave->offset = cur_offset;
-+      if (slave->offset == MTDPART_OFS_NXTBLK) {
-+              slave->offset = cur_offset;
-+              if ((cur_offset % master->erasesize) != 0) {
-+                      /* Round up to next erasesize */
-+                      slave->offset = ((cur_offset / master->erasesize) + 1) * master->erasesize;
-+                      printk(KERN_NOTICE "Moving partition %d: "
-+                             "0x%08x -> 0x%08x\n", i,
-+                             cur_offset, slave->offset);
-+              }
-+      }
-+      if (slave->mtd.size == MTDPART_SIZ_FULL)
-+              slave->mtd.size = master->size - slave->offset;
-+      cur_offset = slave->offset + slave->mtd.size;
-+
-+      printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset,
-+              slave->offset + slave->mtd.size, slave->mtd.name);
-+
-+      /* let's do some sanity checks */
-+      if (slave->offset >= master->size) {
-+                      /* let's register it anyway to preserve ordering */
-+              slave->offset = 0;
-+              slave->mtd.size = 0;
-+              printk ("mtd: partition \"%s\" is out of reach -- disabled\n",
-+                      part->name);
-+      }
-+      if (slave->offset + slave->mtd.size > master->size) {
-+              slave->mtd.size = master->size - slave->offset;
-+              printk ("mtd: partition \"%s\" extends beyond the end of device \"%s\" -- size truncated to %#x\n",
-+                      part->name, master->name, slave->mtd.size);
-+      }
-+      if (master->numeraseregions>1) {
-+              /* Deal with variable erase size stuff */
-+              int i;
-+              struct mtd_erase_region_info *regions = master->eraseregions;
-+
-+              /* Find the first erase regions which is part of this partition. */
-+              for (i=0; i < master->numeraseregions && slave->offset >= regions[i].offset; i++)
-+                      ;
-+
-+              for (i--; i < master->numeraseregions && slave->offset + slave->mtd.size > regions[i].offset; i++) {
-+                      if (slave->mtd.erasesize < regions[i].erasesize) {
-+                              slave->mtd.erasesize = regions[i].erasesize;
-+                      }
-+              }
-+      } else {
-+              /* Single erase size */
-+              slave->mtd.erasesize = master->erasesize;
-+      }
-+
-+      if ((slave->mtd.flags & MTD_WRITEABLE) &&
-+          (slave->offset % slave->mtd.erasesize)) {
-+              /* Doesn't start on a boundary of major erase size */
-+              /* FIXME: Let it be writable if it is on a boundary of _minor_ erase size though */
-+              slave->mtd.flags &= ~MTD_WRITEABLE;
-+              printk ("mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
-+                      part->name);
-+      }
-+      if ((slave->mtd.flags & MTD_WRITEABLE) &&
-+          (slave->mtd.size % slave->mtd.erasesize)) {
-+              slave->mtd.flags &= ~MTD_WRITEABLE;
-+              printk ("mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
-+                      part->name);
-+      }
-+
-+      slave->mtd.ecclayout = master->ecclayout;
-+      if (master->block_isbad) {
-+              uint32_t offs = 0;
-+
-+              while(offs < slave->mtd.size) {
-+                      if (master->block_isbad(master,
-+                                              offs + slave->offset))
-+                              slave->mtd.ecc_stats.badblocks++;
-+                      offs += slave->mtd.erasesize;
-+              }
-+      }
-+
-+      if(part->mtdp)
-+      {       /* store the object pointer (caller may or may not register it */
-+              *part->mtdp = &slave->mtd;
-+              slave->registered = 0;
-+      }
-+      else
-+      {
-+              /* register our partition */
-+              add_mtd_device(&slave->mtd);
-+              slave->registered = 1;
-+      }
-+
-+      if (slp)
-+              *slp = slave;
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+#define ROOTFS_SPLIT_NAME "rootfs_data"
-+#define ROOTFS_REMOVED_NAME "<removed>"
-+static int split_squashfs(struct mtd_info *master, int offset, int *split_offset)
-+{
-+      char buf[512];
-+      struct squashfs_super_block *sb = (struct squashfs_super_block *) buf;
-+      int len, ret;
-+
-+      ret = master->read(master, offset, sizeof(*sb), &len, buf);
-+      if (ret || (len != sizeof(*sb))) {
-+              printk(KERN_ALERT "split_squashfs: error occured while reading "
-+                      "from \"%s\"\n", master->name);
-+              return -EINVAL;
-+      }
-+
-+      if (*((u32 *) buf) != SQUASHFS_MAGIC) {
-+              printk(KERN_ALERT "split_squashfs: no squashfs found in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      if (sb->bytes_used <= 0) {
-+              printk(KERN_ALERT "split_squashfs: squashfs is empty in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      len = (u32) sb->bytes_used;
-+      len += (offset & 0x000fffff);
-+      len +=  (master->erasesize - 1);
-+      len &= ~(master->erasesize - 1);
-+      len -= (offset & 0x000fffff);
-+      *split_offset = offset + len;
-+
-+      return 0;
-+}
-+
-+static int split_rootfs_data(struct mtd_info *master, struct mtd_info *rpart, struct mtd_partition *part,
-+              int index)
-+{
-+      struct mtd_partition *dpart;
-+      struct mtd_part *slave = NULL;
-+      int split_offset = 0;
-+      int ret;
-+
-+      ret = split_squashfs(master, part->offset, &split_offset);
-+      if (ret)
-+              return ret;
-+
-+      if (split_offset <= 0)
-+              return 0;
-+
-+      dpart = kmalloc(sizeof(*part)+sizeof(ROOTFS_SPLIT_NAME)+1, GFP_KERNEL);
-+      if (dpart == NULL) {
-+              printk(KERN_INFO "split_squashfs: no memory for partition \"%s\"\n",
-+                      ROOTFS_SPLIT_NAME);
-+              return -ENOMEM;
-+      }
-+
-+      memcpy(dpart, part, sizeof(*part));
-+      dpart->name = (unsigned char *)&dpart[1];
-+      strcpy(dpart->name, ROOTFS_SPLIT_NAME);
-+
-+      dpart->size -= split_offset - dpart->offset;
-+      dpart->offset = split_offset;
-+
-+      if (dpart == NULL)
-+              return 1;
-+
-+      printk(KERN_INFO "mtd: partition \"%s\" created automatically, ofs=%X, len=%X \n",
-+              ROOTFS_SPLIT_NAME, dpart->offset, dpart->size);
-+
-+      ret = add_one_partition(master, dpart, index, &slave);
-+      if (ret)
-+              kfree(dpart);
-+      else if (slave)
-+              rpart->split = &slave->mtd;
-+
-+      return ret;
-+}
-+
-+static int refresh_rootfs_split(struct mtd_info *mtd)
-+{
-+      struct mtd_partition tpart;
-+      struct mtd_part *part;
-+      int index = 0;
-+      int offset, size;
-+      int ret;
-+
-+      part = PART(mtd);
-+
-+      /* check for the new squashfs offset first */
-+      ret = split_squashfs(part->master, part->offset, &offset);
-+      if (ret)
-+              return ret;
-+
-+      if ((offset > 0) && !mtd->split) {
-+              printk(KERN_INFO "%s: creating new split partition for \"%s\"\n", __func__, mtd->name);
-+              /* if we don't have a rootfs split partition, create a new one */
-+              tpart.name = mtd->name;
-+              tpart.size = mtd->size;
-+              tpart.offset = part->offset;
-+
-+              /* find the index of the last partition */
-+              if (!list_empty(&mtd_partitions))
-+                      index = list_first_entry(&mtd_partitions, struct mtd_part, list)->index + 1;
-+
-+              return split_rootfs_data(part->master, &part->mtd, &tpart, index);
-+      } else if ((offset > 0) && mtd->split) {
-+              /* update the offsets of the existing partition */
-+              size = mtd->size + part->offset - offset;
-+
-+              part = PART(mtd->split);
-+              part->offset = offset;
-+              part->mtd.size = size;
-+              printk(KERN_INFO "%s: %s partition \"" ROOTFS_SPLIT_NAME "\", offset: 0x%06x (0x%06x)\n",
-+                      __func__, (!strcmp(part->mtd.name, ROOTFS_SPLIT_NAME) ? "updating" : "creating"),
-+                      part->offset, part->mtd.size);
-+              strcpy(part->mtd.name, ROOTFS_SPLIT_NAME);
-+      } else if ((offset <= 0) && mtd->split) {
-+              printk(KERN_INFO "%s: removing partition \"%s\"\n", __func__, mtd->split->name);
-+
-+              /* mark existing partition as removed */
-+              part = PART(mtd->split);
-+              strcpy(part->mtd.name, ROOTFS_REMOVED_NAME);
-+              part->offset = 0;
-+              part->mtd.size = 0;
-+      }
-+
-+      return 0;
-+}
-+#endif /* CONFIG_MTD_ROOTFS_SPLIT */
-+
- /*
-  * This function, given a master MTD object and a partition table, creates
-  * and registers slave MTD objects which are bound to the master according to
-@@ -334,171 +646,31 @@ int add_mtd_partitions(struct mtd_info *
-                      int nbparts)
- {
-       struct mtd_part *slave;
--      u_int32_t cur_offset = 0;
--      int i;
-+      struct mtd_partition *part;
-+      int i, j, ret = 0;
-       printk (KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
--      for (i = 0; i < nbparts; i++) {
--
--              /* allocate the partition structure */
--              slave = kzalloc (sizeof(*slave), GFP_KERNEL);
--              if (!slave) {
--                      printk ("memory allocation error while creating partitions for \"%s\"\n",
--                              master->name);
--                      del_mtd_partitions(master);
--                      return -ENOMEM;
--              }
--              list_add(&slave->list, &mtd_partitions);
--
--              /* set up the MTD object for this partition */
--              slave->mtd.type = master->type;
--              slave->mtd.flags = master->flags & ~parts[i].mask_flags;
--              slave->mtd.size = parts[i].size;
--              slave->mtd.writesize = master->writesize;
--              slave->mtd.oobsize = master->oobsize;
--              slave->mtd.oobavail = master->oobavail;
--              slave->mtd.subpage_sft = master->subpage_sft;
--
--              slave->mtd.name = parts[i].name;
--              slave->mtd.owner = master->owner;
--
--              slave->mtd.read = part_read;
--              slave->mtd.write = part_write;
--
--              if (master->panic_write)
--                      slave->mtd.panic_write = part_panic_write;
--
--              if(master->point && master->unpoint){
--                      slave->mtd.point = part_point;
--                      slave->mtd.unpoint = part_unpoint;
--              }
--
--              if (master->read_oob)
--                      slave->mtd.read_oob = part_read_oob;
--              if (master->write_oob)
--                      slave->mtd.write_oob = part_write_oob;
--              if(master->read_user_prot_reg)
--                      slave->mtd.read_user_prot_reg = part_read_user_prot_reg;
--              if(master->read_fact_prot_reg)
--                      slave->mtd.read_fact_prot_reg = part_read_fact_prot_reg;
--              if(master->write_user_prot_reg)
--                      slave->mtd.write_user_prot_reg = part_write_user_prot_reg;
--              if(master->lock_user_prot_reg)
--                      slave->mtd.lock_user_prot_reg = part_lock_user_prot_reg;
--              if(master->get_user_prot_info)
--                      slave->mtd.get_user_prot_info = part_get_user_prot_info;
--              if(master->get_fact_prot_info)
--                      slave->mtd.get_fact_prot_info = part_get_fact_prot_info;
--              if (master->sync)
--                      slave->mtd.sync = part_sync;
--              if (!i && master->suspend && master->resume) {
--                              slave->mtd.suspend = part_suspend;
--                              slave->mtd.resume = part_resume;
--              }
--              if (master->writev)
--                      slave->mtd.writev = part_writev;
--              if (master->lock)
--                      slave->mtd.lock = part_lock;
--              if (master->unlock)
--                      slave->mtd.unlock = part_unlock;
--              if (master->block_isbad)
--                      slave->mtd.block_isbad = part_block_isbad;
--              if (master->block_markbad)
--                      slave->mtd.block_markbad = part_block_markbad;
--              slave->mtd.erase = part_erase;
--              slave->master = master;
--              slave->offset = parts[i].offset;
--              slave->index = i;
--
--              if (slave->offset == MTDPART_OFS_APPEND)
--                      slave->offset = cur_offset;
--              if (slave->offset == MTDPART_OFS_NXTBLK) {
--                      slave->offset = cur_offset;
--                      if ((cur_offset % master->erasesize) != 0) {
--                              /* Round up to next erasesize */
--                              slave->offset = ((cur_offset / master->erasesize) + 1) * master->erasesize;
--                              printk(KERN_NOTICE "Moving partition %d: "
--                                     "0x%08x -> 0x%08x\n", i,
--                                     cur_offset, slave->offset);
--                      }
--              }
--              if (slave->mtd.size == MTDPART_SIZ_FULL)
--                      slave->mtd.size = master->size - slave->offset;
--              cur_offset = slave->offset + slave->mtd.size;
--
--              printk (KERN_NOTICE "0x%08x-0x%08x : \"%s\"\n", slave->offset,
--                      slave->offset + slave->mtd.size, slave->mtd.name);
--
--              /* let's do some sanity checks */
--              if (slave->offset >= master->size) {
--                              /* let's register it anyway to preserve ordering */
--                      slave->offset = 0;
--                      slave->mtd.size = 0;
--                      printk ("mtd: partition \"%s\" is out of reach -- disabled\n",
--                              parts[i].name);
--              }
--              if (slave->offset + slave->mtd.size > master->size) {
--                      slave->mtd.size = master->size - slave->offset;
--                      printk ("mtd: partition \"%s\" extends beyond the end of device \"%s\" -- size truncated to %#x\n",
--                              parts[i].name, master->name, slave->mtd.size);
--              }
--              if (master->numeraseregions>1) {
--                      /* Deal with variable erase size stuff */
--                      int i;
--                      struct mtd_erase_region_info *regions = master->eraseregions;
--
--                      /* Find the first erase regions which is part of this partition. */
--                      for (i=0; i < master->numeraseregions && slave->offset >= regions[i].offset; i++)
--                              ;
--
--                      for (i--; i < master->numeraseregions && slave->offset + slave->mtd.size > regions[i].offset; i++) {
--                              if (slave->mtd.erasesize < regions[i].erasesize) {
--                                      slave->mtd.erasesize = regions[i].erasesize;
--                              }
-+      for (i = 0, j = 0; i < nbparts; i++) {
-+              part = (struct mtd_partition *) &parts[i];
-+              ret = add_one_partition(master, part, j, &slave);
-+              if (ret)
-+                      return ret;
-+              j++;
-+
-+              if (strcmp(part->name, "rootfs") == 0 && slave->registered) {
-+#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV
-+                      if (ROOT_DEV == 0) {
-+                              printk(KERN_NOTICE "mtd: partition \"rootfs\" "
-+                                      "set to be root filesystem\n");
-+                              ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, slave->mtd.index);
-                       }
--              } else {
--                      /* Single erase size */
--                      slave->mtd.erasesize = master->erasesize;
--              }
--
--              if ((slave->mtd.flags & MTD_WRITEABLE) &&
--                  (slave->offset % slave->mtd.erasesize)) {
--                      /* Doesn't start on a boundary of major erase size */
--                      /* FIXME: Let it be writable if it is on a boundary of _minor_ erase size though */
--                      slave->mtd.flags &= ~MTD_WRITEABLE;
--                      printk ("mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
--                              parts[i].name);
--              }
--              if ((slave->mtd.flags & MTD_WRITEABLE) &&
--                  (slave->mtd.size % slave->mtd.erasesize)) {
--                      slave->mtd.flags &= ~MTD_WRITEABLE;
--                      printk ("mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
--                              parts[i].name);
--              }
--
--              slave->mtd.ecclayout = master->ecclayout;
--              if (master->block_isbad) {
--                      uint32_t offs = 0;
--
--                      while(offs < slave->mtd.size) {
--                              if (master->block_isbad(master,
--                                                      offs + slave->offset))
--                                      slave->mtd.ecc_stats.badblocks++;
--                              offs += slave->mtd.erasesize;
--                      }
--              }
--
--              if(parts[i].mtdp)
--              {       /* store the object pointer (caller may or may not register it */
--                      *parts[i].mtdp = &slave->mtd;
--                      slave->registered = 0;
--              }
--              else
--              {
--                      /* register our partition */
--                      add_mtd_device(&slave->mtd);
--                      slave->registered = 1;
-+#endif
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+                      ret = split_rootfs_data(master, &slave->mtd, part, j);
-+                      if (ret == 0)
-+                              j++;
-+#endif
-               }
-       }
-@@ -574,6 +746,32 @@ int parse_mtd_partitions(struct mtd_info
-       return ret;
- }
-+int refresh_mtd_partitions(struct mtd_info *mtd)
-+{
-+      int ret = 0;
-+
-+      if (IS_PART(mtd)) {
-+              struct mtd_part *part;
-+              struct mtd_info *master;
-+
-+              part = PART(mtd);
-+              master = part->master;
-+              if (master->refresh_device)
-+                      ret = master->refresh_device(master);
-+      }
-+
-+      if (!ret && mtd->refresh_device)
-+              ret = mtd->refresh_device(mtd);
-+
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+      if (!ret && IS_PART(mtd) && !strcmp(mtd->name, "rootfs"))
-+              refresh_rootfs_split(mtd);
-+#endif
-+
-+      return 0;
-+}
-+
- EXPORT_SYMBOL_GPL(parse_mtd_partitions);
-+EXPORT_SYMBOL_GPL(refresh_mtd_partitions);
- EXPORT_SYMBOL_GPL(register_mtd_parser);
- EXPORT_SYMBOL_GPL(deregister_mtd_parser);
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -34,6 +34,8 @@ struct block2mtd_dev {
-       struct block_device *blkdev;
-       struct mtd_info mtd;
-       struct mutex write_mutex;
-+      rwlock_t bdev_mutex;
-+      char devname[0];
- };
-@@ -86,6 +88,12 @@ static int block2mtd_erase(struct mtd_in
-       size_t len = instr->len;
-       int err;
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-+
-       instr->state = MTD_ERASING;
-       mutex_lock(&dev->write_mutex);
-       err = _block2mtd_erase(dev, from, len);
-@@ -98,6 +106,10 @@ static int block2mtd_erase(struct mtd_in
-       instr->state = MTD_ERASE_DONE;
-       mtd_erase_callback(instr);
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+
-       return err;
- }
-@@ -109,10 +121,14 @@ static int block2mtd_read(struct mtd_inf
-       struct page *page;
-       int index = from >> PAGE_SHIFT;
-       int offset = from & (PAGE_SIZE-1);
--      int cpylen;
-+      int cpylen, err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev || (from > mtd->size)) {
-+              err = -EINVAL;
-+              goto done;
-+      }
--      if (from > mtd->size)
--              return -EINVAL;
-       if (from + len > mtd->size)
-               len = mtd->size - from;
-@@ -127,10 +143,14 @@ static int block2mtd_read(struct mtd_inf
-               len = len - cpylen;
-               page = page_read(dev->blkdev->bd_inode->i_mapping, index);
--              if (!page)
--                      return -ENOMEM;
--              if (IS_ERR(page))
--                      return PTR_ERR(page);
-+              if (!page) {
-+                      err = -ENOMEM;
-+                      goto done;
-+              }
-+              if (IS_ERR(page)) {
-+                      err = PTR_ERR(page);
-+                      goto done;
-+              }
-               memcpy(buf, page_address(page) + offset, cpylen);
-               page_cache_release(page);
-@@ -141,7 +161,10 @@ static int block2mtd_read(struct mtd_inf
-               offset = 0;
-               index++;
-       }
--      return 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+      return err;
- }
-@@ -193,12 +216,22 @@ static int block2mtd_write(struct mtd_in
-               size_t *retlen, const u_char *buf)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      int err;
-+      int err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-       if (!len)
--              return 0;
--      if (to >= mtd->size)
--              return -ENOSPC;
-+              goto done;
-+
-+      if (to >= mtd->size) {
-+              err = -ENOSPC;
-+              goto done;
-+      }
-+
-       if (to + len > mtd->size)
-               len = mtd->size - to;
-@@ -207,6 +240,9 @@ static int block2mtd_write(struct mtd_in
-       mutex_unlock(&dev->write_mutex);
-       if (err > 0)
-               err = 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-       return err;
- }
-@@ -215,51 +251,29 @@ static int block2mtd_write(struct mtd_in
- static void block2mtd_sync(struct mtd_info *mtd)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      sync_blockdev(dev->blkdev);
--      return;
--}
--
--
--static void block2mtd_free_device(struct block2mtd_dev *dev)
--{
--      if (!dev)
--              return;
--
--      kfree(dev->mtd.name);
--      if (dev->blkdev) {
--              invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping,
--                                      0, -1);
--              close_bdev_excl(dev->blkdev);
--      }
-+      read_lock(&dev->bdev_mutex);
-+      if (dev->blkdev)
-+              sync_blockdev(dev->blkdev);
-+      read_unlock(&dev->bdev_mutex);
--      kfree(dev);
-+      return;
- }
--/* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
-+static int _open_bdev(struct block2mtd_dev *dev)
- {
-       struct block_device *bdev;
--      struct block2mtd_dev *dev;
--      struct mtd_partition *part;
--
--      if (!devname)
--              return NULL;
--
--      dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
--      if (!dev)
--              return NULL;
-       /* Get a handle on the device */
--      bdev = open_bdev_excl(devname, O_RDWR, NULL);
-+      bdev = open_bdev_excl(dev->devname, O_RDWR, NULL);
- #ifndef MODULE
-       if (IS_ERR(bdev)) {
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
--              dev_t devt = name_to_dev_t(devname);
-+              dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-               }
-@@ -267,17 +281,96 @@ static struct block2mtd_dev *add_device(
- #endif
-       if (IS_ERR(bdev)) {
--              ERROR("error: cannot open device %s", devname);
--              goto devinit_err;
-+              ERROR("error: cannot open device %s", dev->devname);
-+              return 1;
-       }
-       dev->blkdev = bdev;
-       if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
-               ERROR("attempting to use an MTD device as a block device");
--              goto devinit_err;
-+              return 1;
-       }
-+      return 0;
-+}
-+
-+static void _close_bdev(struct block2mtd_dev *dev)
-+{
-+      struct block_device *bdev;
-+
-+      if (!dev->blkdev)
-+              return;
-+
-+      bdev = dev->blkdev;
-+      invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping, 0, -1);
-+      close_bdev_excl(dev->blkdev);
-+      dev->blkdev = NULL;
-+}
-+
-+static void block2mtd_free_device(struct block2mtd_dev *dev)
-+{
-+      if (!dev)
-+              return;
-+
-+      kfree(dev->mtd.name);
-+      _close_bdev(dev);
-+      kfree(dev);
-+}
-+
-+
-+static int block2mtd_refresh(struct mtd_info *mtd)
-+{
-+      struct block2mtd_dev *dev = mtd->priv;
-+      struct block_device *bdev;
-+      dev_t devt;
-+      int err = 0;
-+
-+      /* no other mtd function can run at this point */
-+      write_lock(&dev->bdev_mutex);
-+
-+      /* get the device number for the whole disk */
-+      devt = MKDEV(MAJOR(dev->blkdev->bd_dev), 0);
-+
-+      /* close the old block device */
-+      _close_bdev(dev);
-+
-+      /* open the whole disk, issue a partition rescan, then */
-+      bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-+      if (!bdev || !bdev->bd_disk)
-+              err = -EINVAL;
-+      else {
-+              err = rescan_partitions(bdev->bd_disk, bdev);
-+      }
-+      if (bdev)
-+              close_bdev_excl(bdev);
-+
-+      /* try to open the partition block device again */
-+      _open_bdev(dev);
-+      write_unlock(&dev->bdev_mutex);
-+
-+      return err;
-+}
-+
-+/* FIXME: ensure that mtd->size % erase_size == 0 */
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
-+{
-+      struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-+
-+      if (!devname)
-+              return NULL;
-+
-+      dev = kzalloc(sizeof(struct block2mtd_dev) + strlen(devname) + 1, GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      strcpy(dev->devname, devname);
-+
-+      if (_open_bdev(dev))
-+              goto devinit_err;
-+
-       mutex_init(&dev->write_mutex);
-+      rwlock_init(&dev->bdev_mutex);
-       /* Setup the MTD structure */
-       /* make the name contain the block device in */
-@@ -304,6 +397,7 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.read = block2mtd_read;
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
-+      dev->mtd.refresh_device = block2mtd_refresh;
-       
-       part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-       part->name = dev->mtd.name;
---- a/drivers/mtd/mtdchar.c
-+++ b/drivers/mtd/mtdchar.c
-@@ -17,6 +17,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/mtd/partitions.h>
- #include <asm/uaccess.h>
-@@ -756,6 +757,13 @@ static int mtd_ioctl(struct inode *inode
-               file->f_pos = 0;
-               break;
-       }
-+#ifdef CONFIG_MTD_PARTITIONS
-+      case MTDREFRESH:
-+      {
-+              ret = refresh_mtd_partitions(mtd);
-+              break;
-+      }
-+#endif
-       default:
-               ret = -ENOTTY;
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -98,6 +98,7 @@ struct mtd_oob_ops {
-       uint8_t         *oobbuf;
- };
-+struct mtd_info;
- struct mtd_info {
-       u_char type;
-       u_int32_t flags;
-@@ -211,6 +212,9 @@ struct mtd_info {
-       struct module *owner;
-       int usecount;
-+      int (*refresh_device)(struct mtd_info *mtd);
-+      struct mtd_info *split;
-+
-       /* If the driver is something smart, like UBI, it may need to maintain
-        * its own reference counting. The below functions are only for driver.
-        * The driver may register its callbacks. These callbacks are not
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -36,6 +36,7 @@
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_partition;
- struct mtd_partition {
-       char *name;                     /* identifier string */
-       u_int32_t size;                 /* partition size */
-@@ -43,6 +44,7 @@ struct mtd_partition {
-       u_int32_t mask_flags;           /* master MTD flags to mask out for this partition */
-       struct nand_ecclayout *ecclayout;       /* out of band layout for this partition (NAND only)*/
-       struct mtd_info **mtdp;         /* pointer to store the MTD object */
-+      int (*refresh_partition)(struct mtd_info *);
- };
- #define MTDPART_OFS_NXTBLK    (-2)
-@@ -52,6 +54,7 @@ struct mtd_partition {
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
-+int refresh_mtd_partitions(struct mtd_info *);
- /*
-  * Functions dealing with the various ways of partitioning the space
---- a/include/mtd/mtd-abi.h
-+++ b/include/mtd/mtd-abi.h
-@@ -95,6 +95,7 @@ struct otp_info {
- #define ECCGETLAYOUT          _IOR('M', 17, struct nand_ecclayout)
- #define ECCGETSTATS           _IOR('M', 18, struct mtd_ecc_stats)
- #define MTDFILEMODE           _IO('M', 19)
-+#define MTDREFRESH            _IO('M', 23)
- /*
-  * Obsolete legacy interface. Keep it in order not to break userspace
diff --git a/target/linux/generic-2.6/patches-2.6.25/070-redboot_space.patch b/target/linux/generic-2.6/patches-2.6.25/070-redboot_space.patch
deleted file mode 100644 (file)
index 784fba1..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -251,14 +251,21 @@ static int parse_redboot_partitions(stru
- #endif
-               names += strlen(names)+1;
--#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-               if(fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_base) {
--                      i++;
--                      parts[i].offset = parts[i-1].size + parts[i-1].offset;
--                      parts[i].size = fl->next->img->flash_base - parts[i].offset;
--                      parts[i].name = nullname;
--              }
-+                      if (!strcmp(parts[i].name, "rootfs")) {
-+                              parts[i].size = fl->next->img->flash_base;
-+                              parts[i].size &= ~(master->erasesize - 1);
-+                              parts[i].size -= parts[i].offset;
-+#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-+                              nrparts--;
-+                      } else {
-+                              i++;
-+                              parts[i].offset = parts[i-1].size + parts[i-1].offset;
-+                              parts[i].size = fl->next->img->flash_base - parts[i].offset;
-+                              parts[i].name = nullname;
- #endif
-+                      }
-+              }
-               tmp_fl = fl;
-               fl = fl->next;
-               kfree(tmp_fl);
diff --git a/target/linux/generic-2.6/patches-2.6.25/080-mtd_plat_nand_chip_fixup.patch b/target/linux/generic-2.6/patches-2.6.25/080-mtd_plat_nand_chip_fixup.patch
deleted file mode 100644 (file)
index 61f2806..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/include/linux/mtd/nand.h
-+++ b/include/linux/mtd/nand.h
-@@ -573,6 +573,7 @@ struct platform_nand_chip {
-       int                     chip_delay;
-       unsigned int            options;
-       const char              **part_probe_types;
-+      int                     (*chip_fixup)(struct mtd_info *mtd);
-       void                    *priv;
- };
---- a/drivers/mtd/nand/plat_nand.c
-+++ b/drivers/mtd/nand/plat_nand.c
-@@ -70,7 +70,18 @@ static int __init plat_nand_probe(struct
-       platform_set_drvdata(pdev, data);
-       /* Scan to find existance of the device */
--      if (nand_scan(&data->mtd, 1)) {
-+      if (nand_scan_ident(&data->mtd, 1)) {
-+              res = -ENXIO;
-+              goto out;
-+      }
-+
-+      if (pdata->chip.chip_fixup) {
-+              res = pdata->chip.chip_fixup(&data->mtd);
-+              if (res)
-+                      goto out;
-+      }
-+
-+      if (nand_scan_tail(&data->mtd)) {
-               res = -ENXIO;
-               goto out;
-       }
diff --git a/target/linux/generic-2.6/patches-2.6.25/100-netfilter_layer7_2.21.patch b/target/linux/generic-2.6/patches-2.6.25/100-netfilter_layer7_2.21.patch
deleted file mode 100644 (file)
index 307f088..0000000
+++ /dev/null
@@ -1,2132 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -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 */
---- a/include/net/netfilter/nf_conntrack.h
-+++ b/include/net/netfilter/nf_conntrack.h
-@@ -124,6 +124,22 @@ struct nf_conn
-       u_int32_t secmark;
- #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: */
-       union nf_conntrack_proto proto;
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -735,6 +735,27 @@ config NETFILTER_XT_MATCH_STATE
-         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)
-+       depends on NF_CT_ACCT
-+      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_XTABLES
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -77,6 +77,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RATEEST)
- obj-$(CONFIG_NETFILTER_XT_MATCH_REALM) += xt_realm.o
- obj-$(CONFIG_NETFILTER_XT_MATCH_SCTP) += xt_sctp.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
---- a/net/netfilter/nf_conntrack_core.c
-+++ b/net/netfilter/nf_conntrack_core.c
-@@ -208,6 +208,14 @@ destroy_conntrack(struct nf_conntrack *n
-        * 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_unhashed(&ct->tuplehash[IP_CT_DIR_ORIGINAL].hnode));
---- a/net/netfilter/nf_conntrack_standalone.c
-+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -181,6 +181,12 @@ static int ct_seq_show(struct seq_file *
-               return -ENOSPC;
- #endif
-+#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)))
-               return -ENOSPC;
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.c
-@@ -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
-+
-+
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regmagic.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regsub.c
-@@ -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';
-+}
---- /dev/null
-+++ b/net/netfilter/xt_layer7.c
-@@ -0,0 +1,666 @@
-+/*
-+  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.21");
-+
-+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("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, 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, 28)
-+static bool 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
-+static bool 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
-+                return 0;
-+        }
-+      return 1;
-+}
-+
-+
-+#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();
-+
-+      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/target/linux/generic-2.6/patches-2.6.25/101-netfilter_layer7_pktmatch.patch b/target/linux/generic-2.6/patches-2.6.25/101-netfilter_layer7_pktmatch.patch
deleted file mode 100644 (file)
index 7b0dd43..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/include/linux/netfilter/xt_layer7.h
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -8,6 +8,7 @@ struct xt_layer7_info {
-     char protocol[MAX_PROTOCOL_LEN];
-     char pattern[MAX_PATTERN_LEN];
-     u_int8_t invert;
-+    u_int8_t pkt;
- };
- #endif /* _XT_LAYER7_H */
---- a/net/netfilter/xt_layer7.c
-+++ b/net/netfilter/xt_layer7.c
-@@ -314,34 +314,36 @@ static int match_no_append(struct nf_con
- }
- /* 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)
-+static int add_datastr(char *target, int offset, char *app_data, int len)
- {
-       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;
-+      
-+      if (!target) 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++) {
-+      for(i = 0; i < maxdatalen-offset-1 && i < len; i++) {
-               if(app_data[i] != '\0') {
-                       /* the kernel version of tolower mungs 'upper ascii' */
--                      master_conntrack->layer7.app_data[length+oldlength] =
-+                      target[length+offset] =
-                               isascii(app_data[i])? 
-                                       tolower(app_data[i]) : app_data[i];
-                       length++;
-               }
-       }
-+      target[length+offset] = '\0';
-+      
-+      return length;
-+}
--      master_conntrack->layer7.app_data[length+oldlength] = '\0';
--      master_conntrack->layer7.app_data_len = length + oldlength;
-+/* 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;
-+      length = add_datastr(master_conntrack->layer7.app_data, master_conntrack->layer7.app_data_len, app_data, appdatalen);
-+      master_conntrack->layer7.app_data_len += length;
-       return length;
- }
-@@ -438,7 +440,7 @@ match(const struct sk_buff *skbin,
-       enum ip_conntrack_info master_ctinfo, ctinfo;
-       struct nf_conn *master_conntrack, *conntrack;
--      unsigned char * app_data;
-+      unsigned char *app_data, *tmp_data;
-       unsigned int pattern_result, appdatalen;
-       regexp * comppattern;
-@@ -466,9 +468,8 @@ match(const struct sk_buff *skbin,
-               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) {
--
-+      if(!info->pkt && (total_acct_packets(master_conntrack) > num_packets ||
-+         master_conntrack->layer7.app_proto)) {
-               pattern_result = match_no_append(conntrack, master_conntrack, 
-                                                ctinfo, master_ctinfo, info);
-@@ -500,6 +501,25 @@ match(const struct sk_buff *skbin,
-       /* the return value gets checked later, when we're ready to use it */
-       comppattern = compile_and_cache(info->pattern, info->protocol);
-+      if (info->pkt) {
-+              tmp_data = kmalloc(maxdatalen, GFP_ATOMIC);
-+              if(!tmp_data){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
-+                      return info->invert;
-+              }
-+
-+              tmp_data[0] = '\0';
-+              add_datastr(tmp_data, 0, app_data, appdatalen);
-+              pattern_result = ((comppattern && regexec(comppattern, tmp_data)) ? 1 : 0);
-+
-+              kfree(tmp_data);
-+              tmp_data = NULL;
-+              spin_unlock_bh(&l7_lock);
-+
-+              return (pattern_result ^ info->invert);
-+      }
-+
-       /* 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){
diff --git a/target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch b/target/linux/generic-2.6/patches-2.6.25/120-netfilter-headers-types.patch
deleted file mode 100644 (file)
index 32251e3..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-commit c8942f1f0a7e2160ebf2e51ba89e50ee5895a1e7
-Author: Patrick McHardy <kaber@trash.net>
-Date:   Wed May 21 14:08:38 2008 -0700
-
-    netfilter: Move linux/types.h inclusions outside of #ifdef __KERNEL__
-    
-    Greg Steuck <greg@nest.cx> points out that some of the netfilter
-    headers can't be used in userspace without including linux/types.h
-    first. The headers include their own linux/types.h include statements,
-    these are stripped by make headers-install because they are inside
-    #ifdef __KERNEL__ however. Move them out to fix this.
-    
-    Reported and Tested by Greg Steuck.
-    
-    Signed-off-by: Patrick McHardy <kaber@trash.net>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
-
---- a/include/linux/netfilter.h
-+++ b/include/linux/netfilter.h
-@@ -3,7 +3,6 @@
- #ifdef __KERNEL__
- #include <linux/init.h>
--#include <linux/types.h>
- #include <linux/skbuff.h>
- #include <linux/net.h>
- #include <linux/if.h>
-@@ -12,6 +11,7 @@
- #include <linux/wait.h>
- #include <linux/list.h>
- #endif
-+#include <linux/types.h>
- #include <linux/compiler.h>
- /* Responses from hook functions. */
---- a/include/linux/netfilter_arp/arp_tables.h
-+++ b/include/linux/netfilter_arp/arp_tables.h
-@@ -11,11 +11,11 @@
- #ifdef __KERNEL__
- #include <linux/if.h>
--#include <linux/types.h>
- #include <linux/in.h>
- #include <linux/if_arp.h>
- #include <linux/skbuff.h>
- #endif
-+#include <linux/types.h>
- #include <linux/compiler.h>
- #include <linux/netfilter_arp.h>
---- a/include/linux/netfilter_ipv4/ip_tables.h
-+++ b/include/linux/netfilter_ipv4/ip_tables.h
-@@ -17,11 +17,11 @@
- #ifdef __KERNEL__
- #include <linux/if.h>
--#include <linux/types.h>
- #include <linux/in.h>
- #include <linux/ip.h>
- #include <linux/skbuff.h>
- #endif
-+#include <linux/types.h>
- #include <linux/compiler.h>
- #include <linux/netfilter_ipv4.h>
---- a/include/linux/netfilter_ipv6/ip6_tables.h
-+++ b/include/linux/netfilter_ipv6/ip6_tables.h
-@@ -17,11 +17,11 @@
- #ifdef __KERNEL__
- #include <linux/if.h>
--#include <linux/types.h>
- #include <linux/in6.h>
- #include <linux/ipv6.h>
- #include <linux/skbuff.h>
- #endif
-+#include <linux/types.h>
- #include <linux/compiler.h>
- #include <linux/netfilter_ipv6.h>
diff --git a/target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.25/150-netfilter_imq.patch
deleted file mode 100644 (file)
index 5fcef0a..0000000
+++ /dev/null
@@ -1,914 +0,0 @@
---- /dev/null
-+++ b/drivers/net/imq.c
-@@ -0,0 +1,474 @@
-+/*
-+ *             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)
-+ *           
-+ *           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/skbuff.h>
-+#include <linux/netdevice.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>
-+
-+struct imq_private {
-+      struct tasklet_struct tasklet;
-+      unsigned long tasklet_pending;
-+};
-+
-+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 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;
-+
-+      if (entry) {
-+              if (entry->indev)
-+                      dev_put(entry->indev);
-+              if (entry->outdev)
-+                      dev_put(entry->outdev);
-+              kfree(entry);
-+      }
-+}
-+
-+static int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      dev->trans_start = jiffies;
-+      nf_reinject(skb->nf_queue_entry, NF_ACCEPT);
-+      return 0;
-+}
-+
-+static int imq_nf_queue(struct nf_queue_entry *entry, unsigned queue_num)
-+{
-+      struct net_device *dev;
-+      struct imq_private *priv;
-+      struct sk_buff *skb2 = NULL;
-+      struct Qdisc *q;
-+      unsigned int index = entry->skb->imq_flags & IMQ_F_IFMASK;
-+      int ret = -1;
-+
-+      if (index > numdevs)
-+              return -1;
-+
-+      /* check for imq device by index from cache */
-+      dev = imq_devs_cache[index];
-+      if (!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();
-+                      return -1;
-+              }
-+
-+              imq_devs_cache[index] = dev;
-+      }
-+
-+      priv = netdev_priv(dev);
-+      if (!(dev->flags & IFF_UP)) {
-+              entry->skb->imq_flags = 0;
-+              nf_reinject(entry, NF_ACCEPT);
-+              return 0;
-+      }
-+      dev->last_rx = jiffies;
-+
-+      if (entry->skb->destructor) {
-+              skb2 = entry->skb;
-+              entry->skb = skb_clone(entry->skb, GFP_ATOMIC);
-+              if (!entry->skb)
-+                      return -1;
-+      }
-+      entry->skb->nf_queue_entry = entry;
-+
-+      dev->stats.rx_bytes += entry->skb->len;
-+      dev->stats.rx_packets++;
-+
-+      spin_lock_bh(&dev->queue_lock);
-+      q = dev->qdisc;
-+      if (q->enqueue) {
-+              q->enqueue(skb_get(entry->skb), q);
-+              if (skb_shared(entry->skb)) {
-+                      entry->skb->destructor = imq_skb_destructor;
-+                      kfree_skb(entry->skb);
-+                      ret = 0;
-+              }
-+      }
-+      if (!test_and_set_bit(1, &priv->tasklet_pending))
-+              tasklet_schedule(&priv->tasklet);
-+      spin_unlock_bh(&dev->queue_lock);
-+
-+      if (skb2)
-+              kfree_skb(ret ? entry->skb : skb2);
-+
-+      return ret;
-+}
-+
-+static struct nf_queue_handler nfqh = {
-+      .name  = "imq",
-+      .outfn = imq_nf_queue,
-+};
-+
-+static void qdisc_run_tasklet(unsigned long arg)
-+{
-+      struct net_device *dev = (struct net_device *)arg;
-+      struct imq_private *priv = netdev_priv(dev);
-+
-+      spin_lock(&dev->queue_lock);
-+      qdisc_run(dev);
-+      clear_bit(1, &priv->tasklet_pending);
-+      spin_unlock(&dev->queue_lock);
-+}
-+
-+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)
-+{
-+      struct imq_private *priv = netdev_priv(dev);
-+
-+      tasklet_kill(&priv->tasklet);
-+      netif_stop_queue(dev);
-+
-+      return 0;
-+}
-+
-+static int imq_open(struct net_device *dev)
-+{
-+      struct imq_private *priv = netdev_priv(dev);
-+
-+      tasklet_init(&priv->tasklet, qdisc_run_tasklet, (unsigned long)dev);
-+      netif_start_queue(dev);
-+
-+      return 0;
-+}
-+
-+static void imq_setup(struct net_device *dev)
-+{
-+      dev->hard_start_xmit    = imq_dev_xmit;
-+      dev->open               = imq_open;
-+      dev->get_stats          = imq_get_stats;
-+      dev->stop               = imq_close;
-+      dev->type               = ARPHRD_VOID;
-+      dev->mtu                = 16000;
-+      dev->tx_queue_len       = 11000;
-+      dev->flags              = IFF_NOARP;
-+}
-+
-+static struct rtnl_link_ops imq_link_ops __read_mostly = {
-+      .kind           = "imq",
-+      .priv_size      = sizeof(struct imq_private),
-+      .setup          = imq_setup,
-+};
-+
-+static int __init imq_init_hooks(void)
-+{
-+      int err;
-+
-+      err = nf_register_queue_handler(PF_INET, &nfqh);
-+      if (err)
-+              goto err1;
-+
-+      err = nf_register_hook(&imq_ingress_ipv4);
-+      if (err)
-+              goto err2;
-+
-+      err = nf_register_hook(&imq_egress_ipv4);
-+      if (err)
-+              goto err3;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+      err = nf_register_queue_handler(PF_INET6, &nfqh);
-+      if (err)
-+              goto err4;
-+
-+      err = nf_register_hook(&imq_ingress_ipv6);
-+      if (err)
-+              goto err5;
-+
-+      err = nf_register_hook(&imq_egress_ipv6);
-+      if (err)
-+              goto err6;
-+#endif
-+
-+      return 0;
-+
-+#if defined(CONFIG_IPV6) || defined(CONFIG_IPV6_MODULE)
-+err6:
-+      nf_unregister_hook(&imq_ingress_ipv6);
-+err5:
-+      nf_unregister_queue_handler(PF_INET6, &nfqh);
-+err4:
-+      nf_unregister_hook(&imq_egress_ipv4);
-+#endif
-+err3:
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+err2:
-+      nf_unregister_queue_handler(PF_INET, &nfqh);
-+err1:
-+      return err;
-+}
-+
-+static int __init imq_init_one(int index)
-+{
-+      struct net_device *dev;
-+      int ret;
-+
-+      dev = alloc_netdev(sizeof(struct imq_private), "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 || 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;
-+
-+      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);
-+      nf_unregister_queue_handler(PF_INET6, &nfqh);
-+#endif
-+      nf_unregister_hook(&imq_ingress_ipv4);
-+      nf_unregister_hook(&imq_egress_ipv4);
-+      nf_unregister_queue_handler(PF_INET, &nfqh);
-+}
-+
-+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");
-+
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -117,6 +117,129 @@ config EQUALIZER
-         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
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -143,6 +143,7 @@ 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
---- /dev/null
-+++ b/include/linux/imq.h
-@@ -0,0 +1,9 @@
-+#ifndef _IMQ_H
-+#define _IMQ_H
-+
-+#define IMQ_MAX_DEVS   16
-+
-+#define IMQ_F_IFMASK   0x7f
-+#define IMQ_F_ENQUEUE  0x80
-+
-+#endif /* _IMQ_H */
---- /dev/null
-+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
-@@ -0,0 +1,8 @@
-+#ifndef _IPT_IMQ_H
-+#define _IPT_IMQ_H
-+
-+struct ipt_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _IPT_IMQ_H */
---- /dev/null
-+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
-@@ -0,0 +1,8 @@
-+#ifndef _IP6T_IMQ_H
-+#define _IP6T_IMQ_H
-+
-+struct ip6t_imq_info {
-+      unsigned int todev;     /* target imq device */
-+};
-+
-+#endif /* _IP6T_IMQ_H */
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -296,6 +296,10 @@ struct sk_buff {
-       struct nf_conntrack     *nfct;
-       struct sk_buff          *nfct_reasm;
- #endif
-+#if defined(CONFIG_IMQ) || defined(CONFIG_IMQ_MODULE)
-+      unsigned char                   imq_flags;
-+      struct nf_queue_entry   *nf_queue_entry;
-+#endif
- #ifdef CONFIG_BRIDGE_NETFILTER
-       struct nf_bridge_info   *nf_bridge;
- #endif
-@@ -1736,6 +1740,10 @@ static inline void __nf_copy(struct sk_b
-       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);
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -95,6 +95,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>
-@@ -1537,7 +1540,11 @@ static int dev_gso_segment(struct sk_buf
- int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
- {
-       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)) {
---- /dev/null
-+++ b/net/ipv4/netfilter/ipt_IMQ.c
-@@ -0,0 +1,69 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter_ipv4/ip_tables.h>
-+#include <linux/netfilter_ipv4/ipt_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                             const struct net_device *in,
-+                             const struct net_device *out,
-+                             unsigned int hooknum,
-+                             const struct xt_target *target,
-+                             const void *targinfo)
-+{
-+      struct ipt_imq_info *mr = (struct ipt_imq_info *)targinfo;
-+
-+      pskb->imq_flags = mr->todev | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const char *tablename,
-+                        const void *e,
-+                        const struct xt_target *target,
-+                        void *targinfo,
-+                        unsigned int hook_mask)
-+{
-+      struct ipt_imq_info *mr;
-+
-+      mr = (struct ipt_imq_info *)targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target ipt_imq_reg = {
-+      .name           = "IMQ",
-+      .family         = AF_INET,
-+      .target         = imq_target,
-+      .targetsize     = sizeof(struct ipt_imq_info),
-+      .checkentry     = imq_checkentry,
-+      .me             = THIS_MODULE,
-+      .table          = "mangle"
-+};
-+
-+static int __init init(void)
-+{
-+      return xt_register_target(&ipt_imq_reg);
-+}
-+
-+static void __exit fini(void)
-+{
-+      xt_unregister_target(&ipt_imq_reg);
-+}
-+
-+module_init(init);
-+module_exit(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");
---- a/net/ipv4/netfilter/Kconfig
-+++ b/net/ipv4/netfilter/Kconfig
-@@ -123,6 +123,17 @@ config IP_NF_FILTER
-         To compile it as a module, choose M here.  If unsure, say N.
-+config IP_NF_TARGET_IMQ
-+       tristate "IMQ target support"
-+       depends on IP_NF_MANGLE && IMQ
-+       help
-+         This option adds a `IMQ' target which is used to specify if and
-+         to which IMQ device packets should get enqueued/dequeued.
-+
-+       For more information visit: http://www.linuximq.net/
-+
-+         To compile it as a module, choose M here.  If unsure, say N.
-+
- config IP_NF_TARGET_REJECT
-       tristate "REJECT target support"
-       depends on IP_NF_FILTER
---- a/net/ipv4/netfilter/Makefile
-+++ b/net/ipv4/netfilter/Makefile
-@@ -51,6 +51,7 @@ obj-$(CONFIG_IP_NF_MATCH_TTL) += ipt_ttl
- obj-$(CONFIG_IP_NF_TARGET_CLUSTERIP) += ipt_CLUSTERIP.o
- obj-$(CONFIG_IP_NF_TARGET_ECN) += ipt_ECN.o
- obj-$(CONFIG_IP_NF_TARGET_LOG) += ipt_LOG.o
-+obj-$(CONFIG_IP_NF_TARGET_IMQ) += ipt_IMQ.o
- obj-$(CONFIG_IP_NF_TARGET_MASQUERADE) += ipt_MASQUERADE.o
- obj-$(CONFIG_IP_NF_TARGET_NETMAP) += ipt_NETMAP.o
- obj-$(CONFIG_IP_NF_TARGET_REDIRECT) += ipt_REDIRECT.o
---- /dev/null
-+++ b/net/ipv6/netfilter/ip6t_IMQ.c
-@@ -0,0 +1,69 @@
-+/*
-+ * This target marks packets to be enqueued to an imq device
-+ */
-+#include <linux/module.h>
-+#include <linux/skbuff.h>
-+#include <linux/netfilter_ipv6/ip6_tables.h>
-+#include <linux/netfilter_ipv6/ip6t_IMQ.h>
-+#include <linux/imq.h>
-+
-+static unsigned int imq_target(struct sk_buff *pskb,
-+                             const struct net_device *in,
-+                             const struct net_device *out,
-+                             unsigned int hooknum,
-+                             const struct xt_target *target,
-+                             const void *targinfo)
-+{
-+      struct ip6t_imq_info *mr = (struct ip6t_imq_info *)targinfo;
-+
-+      pskb->imq_flags = mr->todev | IMQ_F_ENQUEUE;
-+
-+      return XT_CONTINUE;
-+}
-+
-+static bool imq_checkentry(const char *tablename,
-+                        const void *entry,
-+                        const struct xt_target *target,
-+                        void *targinfo,
-+                        unsigned int hook_mask)
-+{
-+      struct ip6t_imq_info *mr;
-+
-+      mr = (struct ip6t_imq_info *)targinfo;
-+
-+      if (mr->todev > IMQ_MAX_DEVS) {
-+              printk(KERN_WARNING
-+                     "IMQ: invalid device specified, highest is %u\n",
-+                     IMQ_MAX_DEVS);
-+              return 0;
-+      }
-+
-+      return 1;
-+}
-+
-+static struct xt_target ip6t_imq_reg = {
-+      .name           = "IMQ",
-+      .family         = AF_INET6,
-+      .target         = imq_target,
-+      .targetsize     = sizeof(struct ip6t_imq_info),
-+      .table          = "mangle",
-+      .checkentry     = imq_checkentry,
-+      .me             = THIS_MODULE
-+};
-+
-+static int __init init(void)
-+{
-+      return xt_register_target(&ip6t_imq_reg);
-+}
-+
-+static void __exit fini(void)
-+{
-+      xt_unregister_target(&ip6t_imq_reg);
-+}
-+
-+module_init(init);
-+module_exit(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");
---- a/net/ipv6/netfilter/Kconfig
-+++ b/net/ipv6/netfilter/Kconfig
-@@ -179,6 +179,15 @@ config IP6_NF_MANGLE
-         To compile it as a module, choose M here.  If unsure, say N.
-+config IP6_NF_TARGET_IMQ
-+      tristate "IMQ target support"
-+      depends on IP6_NF_MANGLE && IMQ
-+      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 IP6_NF_TARGET_HL
-       tristate  'HL (hoplimit) target support'
-       depends on IP6_NF_MANGLE
---- a/net/ipv6/netfilter/Makefile
-+++ b/net/ipv6/netfilter/Makefile
-@@ -6,6 +6,7 @@
- obj-$(CONFIG_IP6_NF_IPTABLES) += ip6_tables.o
- obj-$(CONFIG_IP6_NF_FILTER) += ip6table_filter.o
- obj-$(CONFIG_IP6_NF_MANGLE) += ip6table_mangle.o
-+obj-$(CONFIG_IP6_NF_TARGET_IMQ) += ip6t_IMQ.o
- obj-$(CONFIG_IP6_NF_QUEUE) += ip6_queue.o
- obj-$(CONFIG_IP6_NF_RAW) += ip6table_raw.o
---- a/net/sched/sch_generic.c
-+++ b/net/sched/sch_generic.c
-@@ -203,6 +203,7 @@ void __qdisc_run(struct net_device *dev)
-       clear_bit(__LINK_STATE_QDISC_RUNNING, &dev->state);
- }
-+EXPORT_SYMBOL(__qdisc_run);
- static void dev_watchdog(unsigned long arg)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.25/180-netfilter_depends.patch b/target/linux/generic-2.6/patches-2.6.25/180-netfilter_depends.patch
deleted file mode 100644 (file)
index efab40c..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -145,7 +145,7 @@ config NF_CONNTRACK_FTP
- config NF_CONNTRACK_H323
-       tristate "H.323 protocol support"
--      depends on NF_CONNTRACK && (IPV6 || IPV6=n)
-+      depends on NF_CONNTRACK
-       depends on NETFILTER_ADVANCED
-       help
-         H.323 is a VoIP signalling protocol from ITU-T. As one of the most
-@@ -423,7 +423,7 @@ config NETFILTER_XT_TARGET_CONNSECMARK
- config NETFILTER_XT_TARGET_TCPMSS
-       tristate '"TCPMSS" target support'
--      depends on NETFILTER_XTABLES && (IPV6 || IPV6=n)
-+      depends on NETFILTER_XTABLES
-       default m if NETFILTER_ADVANCED=n
-       ---help---
-         This option adds a `TCPMSS' target, which allows you to alter the
diff --git a/target/linux/generic-2.6/patches-2.6.25/190-netfilter_rtsp.patch b/target/linux/generic-2.6/patches-2.6.25/190-netfilter_rtsp.patch
deleted file mode 100644 (file)
index 6d16488..0000000
+++ /dev/null
@@ -1,1362 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/nf_conntrack_rtsp.h
-@@ -0,0 +1,63 @@
-+/*
-+ * RTSP extension for IP connection tracking.
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.h
-+ *
-+ *      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.
-+ */
-+#ifndef _IP_CONNTRACK_RTSP_H
-+#define _IP_CONNTRACK_RTSP_H
-+
-+//#define IP_NF_RTSP_DEBUG 1
-+#define IP_NF_RTSP_VERSION "0.6.21"
-+
-+#ifdef __KERNEL__
-+/* port block types */
-+typedef enum {
-+    pb_single,  /* client_port=x */
-+    pb_range,   /* client_port=x-y */
-+    pb_discon   /* client_port=x/y (rtspbis) */
-+} portblock_t;
-+
-+/* We record seq number and length of rtsp headers here, all in host order. */
-+
-+/*
-+ * This structure is per expected connection.  It is a member of struct
-+ * ip_conntrack_expect.  The TCP SEQ for the conntrack expect is stored
-+ * there and we are expected to only store the length of the data which
-+ * needs replaced.  If a packet contains multiple RTSP messages, we create
-+ * one expected connection per message.
-+ *
-+ * We use these variables to mark the entire header block.  This may seem
-+ * like overkill, but the nature of RTSP requires it.  A header may appear
-+ * multiple times in a message.  We must treat two Transport headers the
-+ * same as one Transport header with two entries.
-+ */
-+struct ip_ct_rtsp_expect
-+{
-+    u_int32_t   len;        /* length of header block */
-+    portblock_t pbtype;     /* Type of port block that was requested */
-+    u_int16_t   loport;     /* Port that was requested, low or first */
-+    u_int16_t   hiport;     /* Port that was requested, high or second */
-+#if 0
-+    uint        method;     /* RTSP method */
-+    uint        cseq;       /* CSeq from request */
-+#endif
-+};
-+
-+extern unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,
-+                               struct ip_ct_rtsp_expect *prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+
-+extern void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+#define RTSP_PORT   554
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _IP_CONNTRACK_RTSP_H */
---- /dev/null
-+++ b/include/linux/netfilter_helpers.h
-@@ -0,0 +1,133 @@
-+/*
-+ * Helpers for netfiler modules.  This file provides implementations for basic
-+ * functions such as strncasecmp(), etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_STRNCASECMP        nf_strncasecmp()
-+ *   NF_NEED_STRTOU16           nf_strtou16()
-+ *   NF_NEED_STRTOU32           nf_strtou32()
-+ */
-+#ifndef _NETFILTER_HELPERS_H
-+#define _NETFILTER_HELPERS_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+#define iseol(c) ( (c) == '\r' || (c) == '\n' )
-+
-+/*
-+ * The standard strncasecmp()
-+ */
-+#ifdef NF_NEED_STRNCASECMP
-+static int
-+nf_strncasecmp(const char* s1, const char* s2, u_int32_t len)
-+{
-+    if (s1 == NULL || s2 == NULL)
-+    {
-+        if (s1 == NULL && s2 == NULL)
-+        {
-+            return 0;
-+        }
-+        return (s1 == NULL) ? -1 : 1;
-+    }
-+    while (len > 0 && tolower(*s1) == tolower(*s2))
-+    {
-+        len--;
-+        s1++;
-+        s2++;
-+    }
-+    return ( (len == 0) ? 0 : (tolower(*s1) - tolower(*s2)) );
-+}
-+#endif /* NF_NEED_STRNCASECMP */
-+
-+/*
-+ * Parse a string containing a 16-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU16
-+static int
-+nf_strtou16(const char* pbuf, u_int16_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (isdigit(pbuf[n]))
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU16 */
-+
-+/*
-+ * Parse a string containing a 32-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU32
-+static int
-+nf_strtou32(const char* pbuf, u_int32_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (pbuf[n] >= '0' && pbuf[n] <= '9')
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU32 */
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.
-+ */
-+#ifdef NF_NEED_NEXTLINE
-+static int
-+nf_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    while (p[off] != '\n')
-+    {
-+        if (len-off <= 1)
-+        {
-+            return 0;
-+        }
-+
-+        physlen++;
-+        off++;
-+    }
-+
-+    /* if we saw a crlf, physlen needs adjusted */
-+    if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+    {
-+        physlen--;
-+    }
-+
-+    /* advance past the newline */
-+    off++;
-+
-+    *plineoff = *poff;
-+    *plinelen = physlen;
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_HELPERS_H */
---- /dev/null
-+++ b/include/linux/netfilter_mime.h
-@@ -0,0 +1,89 @@
-+/*
-+ * MIME functions for netfilter modules.  This file provides implementations
-+ * for basic MIME parsing.  MIME headers are used in many protocols, such as
-+ * HTTP, RTSP, SIP, etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_MIME_NEXTLINE      nf_mime_nextline()
-+ */
-+#ifndef _NETFILTER_MIME_H
-+#define _NETFILTER_MIME_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.  If the current line is empty, *plinelen will be set to zero.  If
-+ * not, it will be set to the actual line length (including CRLF).
-+ *
-+ * 'line' in this context means logical line (includes LWS continuations).
-+ * Returns 1 on success, 0 on failure.
-+ */
-+#ifdef NF_NEED_MIME_NEXTLINE
-+static int
-+nf_mime_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+    int     is_first_line = 1;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    do
-+    {
-+        while (p[off] != '\n')
-+        {
-+            if (len-off <= 1)
-+            {
-+                return 0;
-+            }
-+
-+            physlen++;
-+            off++;
-+        }
-+
-+        /* if we saw a crlf, physlen needs adjusted */
-+        if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+        {
-+            physlen--;
-+        }
-+
-+        /* advance past the newline */
-+        off++;
-+
-+        /* check for an empty line */
-+        if (physlen == 0)
-+        {
-+            break;
-+        }
-+
-+        /* check for colon on the first physical line */
-+        if (is_first_line)
-+        {
-+            is_first_line = 0;
-+            if (memchr(p+(*poff), ':', physlen) == NULL)
-+            {
-+                return 0;
-+            }
-+        }
-+    }
-+    while (p[off] == ' ' || p[off] == '\t');
-+
-+    *plineoff = *poff;
-+    *plinelen = (physlen == 0) ? 0 : (off - *poff);
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_MIME_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_MIME_H */
---- a/net/ipv4/netfilter/Makefile
-+++ b/net/ipv4/netfilter/Makefile
-@@ -23,6 +23,7 @@ obj-$(CONFIG_NF_NAT_AMANDA) += nf_nat_am
- obj-$(CONFIG_NF_NAT_FTP) += nf_nat_ftp.o
- obj-$(CONFIG_NF_NAT_H323) += nf_nat_h323.o
- obj-$(CONFIG_NF_NAT_IRC) += nf_nat_irc.o
-+obj-$(CONFIG_NF_NAT_RTSP) += nf_nat_rtsp.o
- obj-$(CONFIG_NF_NAT_PPTP) += nf_nat_pptp.o
- obj-$(CONFIG_NF_NAT_SIP) += nf_nat_sip.o
- obj-$(CONFIG_NF_NAT_SNMP_BASIC) += nf_nat_snmp_basic.o
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -258,6 +258,16 @@ config NF_CONNTRACK_TFTP
-         To compile it as a module, choose M here.  If unsure, say N.
-+config NF_CONNTRACK_RTSP
-+      tristate "RTSP protocol support"
-+      depends on NF_CONNTRACK
-+      help
-+              Support the RTSP protocol.  This allows UDP transports to be setup
-+              properly, including RTP and RDT.
-+
-+              If you want to compile it as a module, say 'M' here and read
-+              Documentation/modules.txt.  If unsure, say 'Y'.
-+
- config NF_CT_NETLINK
-       tristate 'Connection tracking netlink interface'
-       depends on NF_CONNTRACK
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -32,6 +32,7 @@ obj-$(CONFIG_NF_CONNTRACK_PPTP) += nf_co
- obj-$(CONFIG_NF_CONNTRACK_SANE) += nf_conntrack_sane.o
- obj-$(CONFIG_NF_CONNTRACK_SIP) += nf_conntrack_sip.o
- obj-$(CONFIG_NF_CONNTRACK_TFTP) += nf_conntrack_tftp.o
-+obj-$(CONFIG_NF_CONNTRACK_RTSP) += nf_conntrack_rtsp.o
- # generic X tables 
- obj-$(CONFIG_NETFILTER_XTABLES) += x_tables.o xt_tcpudp.o
---- a/net/ipv4/netfilter/Kconfig
-+++ b/net/ipv4/netfilter/Kconfig
-@@ -266,6 +266,11 @@ config NF_NAT_IRC
-       depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
-       default NF_NAT && NF_CONNTRACK_IRC
-+config NF_NAT_RTSP
-+      tristate
-+      depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
-+      default NF_NAT && NF_CONNTRACK_RTSP
-+
- config NF_NAT_TFTP
-       tristate
-       depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
---- /dev/null
-+++ b/net/netfilter/nf_conntrack_rtsp.c
-@@ -0,0 +1,513 @@
-+/*
-+ * RTSP extension for IP connection tracking
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.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.
-+ *
-+ * Module load syntax:
-+ *   insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                              max_outstanding=n setup_timeout=secs
-+ *
-+ * If no ports are specified, the default will be port 554.
-+ *
-+ * With max_outstanding you can define the maximum number of not yet
-+ * answered SETUP requests per RTSP session (default 8).
-+ * With setup_timeout you can specify how long the system waits for
-+ * an expected data channel (default 300 seconds).
-+ *
-+ * 2005-02-13: Harald Welte <laforge at netfilter.org>
-+ *    - port to 2.6
-+ *    - update to recent post-2.6.11 api changes
-+ * 2006-09-14: Steven Van Acker <deepstar at singularity.be>
-+ *      - removed calls to NAT code from conntrack helper: NAT no longer needed to use rtsp-conntrack
-+ * 2007-04-18: Michael Guntsche <mike at it-loops.com>
-+ *                    - Port to new NF API
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/netfilter.h>
-+#include <linux/ip.h>
-+#include <linux/inet.h>
-+#include <net/tcp.h>
-+
-+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+#include <net/netfilter/nf_conntrack_helper.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#define NF_NEED_STRTOU32
-+#define NF_NEED_NEXTLINE
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#include <linux/ctype.h>
-+#define MAX_SIMUL_SETUP 8 /* XXX: use max_outstanding */
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS 8
-+static int ports[MAX_PORTS];
-+static int num_ports = 0;
-+static int max_outstanding = 8;
-+static unsigned int setup_timeout = 300;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP connection tracking module");
-+MODULE_LICENSE("GPL");
-+module_param_array(ports, int, &num_ports, 0400);
-+MODULE_PARM_DESC(ports, "port numbers of RTSP servers");
-+module_param(max_outstanding, int, 0400);
-+MODULE_PARM_DESC(max_outstanding, "max number of outstanding SETUP requests per RTSP session");
-+module_param(setup_timeout, int, 0400);
-+MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels");
-+
-+static char *rtsp_buffer;
-+static DEFINE_SPINLOCK(rtsp_buffer_lock);
-+
-+unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,struct ip_ct_rtsp_expect* prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+EXPORT_SYMBOL_GPL(nf_nat_rtsp_hook);
-+
-+/*
-+ * Max mappings we will allow for one RTSP connection (for RTP, the number
-+ * of allocated ports is twice this value).  Note that SMIL burns a lot of
-+ * ports so keep this reasonably high.  If this is too low, you will see a
-+ * lot of "no free client map entries" messages.
-+ */
-+#define MAX_PORT_MAPS 16
-+
-+/*** default port list was here in the masq code: 554, 3030, 4040 ***/
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*
-+ * Parse an RTSP packet.
-+ *
-+ * Returns zero if parsing failed.
-+ *
-+ * Parameters:
-+ *  IN      ptcp        tcp data pointer
-+ *  IN      tcplen      tcp data len
-+ *  IN/OUT  ptcpoff     points to current tcp offset
-+ *  OUT     phdrsoff    set to offset of rtsp headers
-+ *  OUT     phdrslen    set to length of rtsp headers
-+ *  OUT     pcseqoff    set to offset of CSeq header
-+ *  OUT     pcseqlen    set to length of CSeq header
-+ */
-+static int
-+rtsp_parse_message(char* ptcp, uint tcplen, uint* ptcpoff,
-+                   uint* phdrsoff, uint* phdrslen,
-+                   uint* pcseqoff, uint* pcseqlen,
-+                   uint* transoff, uint* translen)
-+{
-+      uint    entitylen = 0;
-+      uint    lineoff;
-+      uint    linelen;
-+
-+      if (!nf_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen))
-+              return 0;
-+
-+      *phdrsoff = *ptcpoff;
-+      while (nf_mime_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen)) {
-+              if (linelen == 0) {
-+                      if (entitylen > 0)
-+                              *ptcpoff += min(entitylen, tcplen - *ptcpoff);
-+                      break;
-+              }
-+              if (lineoff+linelen > tcplen) {
-+                      INFOP("!! overrun !!\n");
-+                      break;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "CSeq:", 5) == 0) {
-+                      *pcseqoff = lineoff;
-+                      *pcseqlen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0) {
-+                      *transoff = lineoff;
-+                      *translen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Content-Length:", 15) == 0) {
-+                      uint off = lineoff+15;
-+                      SKIP_WSPACE(ptcp+lineoff, linelen, off);
-+                      nf_strtou32(ptcp+off, &entitylen);
-+              }
-+      }
-+      *phdrslen = (*ptcpoff) - (*phdrsoff);
-+
-+      return 1;
-+}
-+
-+/*
-+ * Find lo/hi client ports (if any) in transport header
-+ * In:
-+ *   ptcp, tcplen = packet
-+ *   tranoff, tranlen = buffer to search
-+ *
-+ * Out:
-+ *   pport_lo, pport_hi = lo/hi ports (host endian)
-+ *
-+ * Returns nonzero if any client ports found
-+ *
-+ * Note: it is valid (and expected) for the client to request multiple
-+ * transports, so we need to parse the entire line.
-+ */
-+static int
-+rtsp_parse_transport(char* ptran, uint tranlen,
-+                     struct ip_ct_rtsp_expect* prtspexp)
-+{
-+      int     rc = 0;
-+      uint    off = 0;
-+
-+      if (tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+          nf_strncasecmp(ptran, "Transport:", 10) != 0) {
-+              INFOP("sanity check failed\n");
-+              return 0;
-+      }
-+
-+      DEBUGP("tran='%.*s'\n", (int)tranlen, ptran);
-+      off += 10;
-+      SKIP_WSPACE(ptran, tranlen, off);
-+
-+      /* Transport: tran;field;field=val,tran;field;field=val,... */
-+      while (off < tranlen) {
-+              const char* pparamend;
-+              uint        nextparamoff;
-+
-+              pparamend = memchr(ptran+off, ',', tranlen-off);
-+              pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+              nextparamoff = pparamend-ptran;
-+
-+              while (off < nextparamoff) {
-+                      const char* pfieldend;
-+                      uint        nextfieldoff;
-+
-+                      pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+                      nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+                      if (strncmp(ptran+off, "client_port=", 12) == 0) {
-+                              u_int16_t   port;
-+                              uint        numlen;
-+
-+                              off += 12;
-+                              numlen = nf_strtou16(ptran+off, &port);
-+                              off += numlen;
-+                              if (prtspexp->loport != 0 && prtspexp->loport != port)
-+                                      DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                              else {
-+                                      DEBUGP("lo port found : %hu\n", port);
-+                                      prtspexp->loport = prtspexp->hiport = port;
-+                                      if (ptran[off] == '-') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_range;
-+                                              prtspexp->hiport = port;
-+
-+                                              // If we have a range, assume rtp:
-+                                              // loport must be even, hiport must be loport+1
-+                                              if ((prtspexp->loport & 0x0001) != 0 ||
-+                                                  prtspexp->hiport != prtspexp->loport+1) {
-+                                                      DEBUGP("incorrect range: %hu-%hu, correcting\n",
-+                                                             prtspexp->loport, prtspexp->hiport);
-+                                                      prtspexp->loport &= 0xfffe;
-+                                                      prtspexp->hiport = prtspexp->loport+1;
-+                                              }
-+                                      } else if (ptran[off] == '/') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_discon;
-+                                              prtspexp->hiport = port;
-+                                      }
-+                                      rc = 1;
-+                              }
-+                      }
-+
-+                      /*
-+                       * Note we don't look for the destination parameter here.
-+                       * If we are using NAT, the NAT module will handle it.  If not,
-+                       * and the client is sending packets elsewhere, the expectation
-+                       * will quietly time out.
-+                       */
-+
-+                      off = nextfieldoff;
-+              }
-+
-+              off = nextparamoff;
-+      }
-+
-+      return rc;
-+}
-+
-+void expected(struct nf_conn *ct, struct nf_conntrack_expect *exp)
-+{
-+    if(nf_nat_rtsp_hook_expectfn) {
-+        nf_nat_rtsp_hook_expectfn(ct,exp);
-+    }
-+}
-+
-+/*** conntrack functions ***/
-+
-+/* outbound packet: client->server */
-+
-+static inline int
-+help_out(struct sk_buff *skb, unsigned char *rb_ptr, unsigned int datalen,
-+                struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct ip_ct_rtsp_expect expinfo;
-+
-+      int dir = CTINFO2DIR(ctinfo);   /* = IP_CT_DIR_ORIGINAL */
-+      //struct  tcphdr* tcph = (void*)iph + iph->ihl * 4;
-+      //uint    tcplen = pktlen - iph->ihl * 4;
-+      char*   pdata = rb_ptr;
-+      //uint    datalen = tcplen - tcph->doff * 4;
-+      uint    dataoff = 0;
-+      int ret = NF_ACCEPT;
-+
-+      struct nf_conntrack_expect *exp;
-+
-+      __be16 be_loport;
-+
-+      memset(&expinfo, 0, sizeof(expinfo));
-+
-+      while (dataoff < datalen) {
-+              uint    cmdoff = dataoff;
-+              uint    hdrsoff = 0;
-+              uint    hdrslen = 0;
-+              uint    cseqoff = 0;
-+              uint    cseqlen = 0;
-+              uint    transoff = 0;
-+              uint    translen = 0;
-+              uint    off;
-+
-+              if (!rtsp_parse_message(pdata, datalen, &dataoff,
-+                                      &hdrsoff, &hdrslen,
-+                                      &cseqoff, &cseqlen,
-+                                      &transoff, &translen))
-+                      break;      /* not a valid message */
-+
-+              if (strncmp(pdata+cmdoff, "SETUP ", 6) != 0)
-+                      continue;   /* not a SETUP message */
-+              DEBUGP("found a setup message\n");
-+
-+              off = 0;
-+              if(translen) {
-+                      rtsp_parse_transport(pdata+transoff, translen, &expinfo);
-+              }
-+
-+              if (expinfo.loport == 0) {
-+                      DEBUGP("no udp transports found\n");
-+                      continue;   /* no udp transports found */
-+              }
-+
-+              DEBUGP("udp transport found, ports=(%d,%hu,%hu)\n",
-+                     (int)expinfo.pbtype, expinfo.loport, expinfo.hiport);
-+
-+              exp = nf_ct_expect_alloc(ct);
-+              if (!exp) {
-+                      ret = NF_DROP;
-+                      goto out;
-+              }
-+
-+              be_loport = htons(expinfo.loport);
-+
-+              nf_ct_expect_init(exp, ct->tuplehash[!dir].tuple.src.l3num,
-+                      &ct->tuplehash[!dir].tuple.src.u3, &ct->tuplehash[!dir].tuple.dst.u3,
-+                      IPPROTO_UDP, NULL, &be_loport);
-+
-+              exp->master = ct;
-+
-+              exp->expectfn = expected;
-+              exp->flags = 0;
-+
-+              if (expinfo.pbtype == pb_range) {
-+                      DEBUGP("Changing expectation mask to handle multiple ports\n");
-+                      exp->mask.src.u.udp.port  = 0xfffe;
-+              }
-+
-+              DEBUGP("expect_related %u.%u.%u.%u:%u-%u.%u.%u.%u:%u\n",
-+                     NIPQUAD(exp->tuple.src.u3.ip),
-+                     ntohs(exp->tuple.src.u.udp.port),
-+                     NIPQUAD(exp->tuple.dst.u3.ip),
-+                     ntohs(exp->tuple.dst.u.udp.port));
-+
-+              if (nf_nat_rtsp_hook)
-+                      /* pass the request off to the nat helper */
-+                      ret = nf_nat_rtsp_hook(skb, ctinfo, hdrsoff, hdrslen, &expinfo, exp);
-+              else if (nf_ct_expect_related(exp) != 0) {
-+                      INFOP("nf_ct_expect_related failed\n");
-+                      ret  = NF_DROP;
-+              }
-+              nf_ct_expect_put(exp);
-+              goto out;
-+      }
-+out:
-+
-+      return ret;
-+}
-+
-+
-+static inline int
-+help_in(struct sk_buff *skb, size_t pktlen,
-+ struct nf_conn* ct, enum ip_conntrack_info ctinfo)
-+{
-+ return NF_ACCEPT;
-+}
-+
-+static int help(struct sk_buff *skb, unsigned int protoff,
-+              struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct tcphdr _tcph, *th;
-+      unsigned int dataoff, datalen;
-+      char *rb_ptr;
-+      int ret = NF_DROP;
-+
-+      /* Until there's been traffic both ways, don't look in packets. */
-+      if (ctinfo != IP_CT_ESTABLISHED &&
-+          ctinfo != IP_CT_ESTABLISHED + IP_CT_IS_REPLY) {
-+              DEBUGP("conntrackinfo = %u\n", ctinfo);
-+              return NF_ACCEPT;
-+      }
-+
-+      /* Not whole TCP header? */
-+      th = skb_header_pointer(skb, protoff, sizeof(_tcph), &_tcph);
-+
-+      if (!th)
-+              return NF_ACCEPT;
-+
-+      /* No data ? */
-+      dataoff = protoff + th->doff*4;
-+      datalen = skb->len - dataoff;
-+      if (dataoff >= skb->len)
-+              return NF_ACCEPT;
-+
-+      spin_lock_bh(&rtsp_buffer_lock);
-+      rb_ptr = skb_header_pointer(skb, dataoff,
-+                                  skb->len - dataoff, rtsp_buffer);
-+      BUG_ON(rb_ptr == NULL);
-+
-+#if 0
-+      /* Checksum invalid?  Ignore. */
-+      /* FIXME: Source route IP option packets --RR */
-+      if (tcp_v4_check(tcph, tcplen, iph->saddr, iph->daddr,
-+                       csum_partial((char*)tcph, tcplen, 0)))
-+      {
-+              DEBUGP("bad csum: %p %u %u.%u.%u.%u %u.%u.%u.%u\n",
-+                     tcph, tcplen, NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));
-+              return NF_ACCEPT;
-+      }
-+#endif
-+
-+      switch (CTINFO2DIR(ctinfo)) {
-+      case IP_CT_DIR_ORIGINAL:
-+              ret = help_out(skb, rb_ptr, datalen, ct, ctinfo);
-+              break;
-+      case IP_CT_DIR_REPLY:
-+              DEBUGP("IP_CT_DIR_REPLY\n");
-+              /* inbound packet: server->client */
-+              ret = NF_ACCEPT;
-+              break;
-+      }
-+
-+      spin_unlock_bh(&rtsp_buffer_lock);
-+
-+      return ret;
-+}
-+
-+static struct nf_conntrack_helper rtsp_helpers[MAX_PORTS];
-+static char rtsp_names[MAX_PORTS][10];
-+
-+/* This function is intentionally _NOT_ defined as __exit */
-+static void
-+fini(void)
-+{
-+      int i;
-+      for (i = 0; i < num_ports; i++) {
-+              DEBUGP("unregistering port %d\n", ports[i]);
-+              nf_conntrack_helper_unregister(&rtsp_helpers[i]);
-+      }
-+      kfree(rtsp_buffer);
-+}
-+
-+static int __init
-+init(void)
-+{
-+      int i, ret;
-+      struct nf_conntrack_helper *hlpr;
-+      char *tmpname;
-+
-+      printk("nf_conntrack_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      if (max_outstanding < 1) {
-+              printk("nf_conntrack_rtsp: max_outstanding must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+      if (setup_timeout < 0) {
-+              printk("nf_conntrack_rtsp: setup_timeout must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+
-+      rtsp_buffer = kmalloc(65536, GFP_KERNEL);
-+      if (!rtsp_buffer)
-+              return -ENOMEM;
-+
-+      /* If no port given, default to standard rtsp port */
-+      if (ports[0] == 0) {
-+              ports[0] = RTSP_PORT;
-+      }
-+
-+      for (i = 0; (i < MAX_PORTS) && ports[i]; i++) {
-+              hlpr = &rtsp_helpers[i];
-+              memset(hlpr, 0, sizeof(struct nf_conntrack_helper));
-+              hlpr->tuple.src.u.tcp.port = htons(ports[i]);
-+              hlpr->tuple.dst.protonum = IPPROTO_TCP;
-+              hlpr->max_expected = max_outstanding;
-+              hlpr->timeout = setup_timeout;
-+              hlpr->me = THIS_MODULE;
-+              hlpr->help = help;
-+
-+              tmpname = &rtsp_names[i][0];
-+              if (ports[i] == RTSP_PORT) {
-+                      sprintf(tmpname, "rtsp");
-+              } else {
-+                      sprintf(tmpname, "rtsp-%d", i);
-+              }
-+              hlpr->name = tmpname;
-+
-+              DEBUGP("port #%d: %d\n", i, ports[i]);
-+
-+              ret = nf_conntrack_helper_register(hlpr);
-+
-+              if (ret) {
-+                      printk("nf_conntrack_rtsp: ERROR registering port %d\n", ports[i]);
-+                      fini();
-+                      return -EBUSY;
-+              }
-+              num_ports++;
-+      }
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+EXPORT_SYMBOL(nf_nat_rtsp_hook_expectfn);
-+
---- /dev/null
-+++ b/net/ipv4/netfilter/nf_nat_rtsp.c
-@@ -0,0 +1,496 @@
-+/*
-+ * RTSP extension for TCP NAT alteration
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_nat_irc.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.
-+ *
-+ * Module load syntax:
-+ *      insmod nf_nat_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                           stunaddr=<address>
-+ *                           destaction=[auto|strip|none]
-+ *
-+ * If no ports are specified, the default will be port 554 only.
-+ *
-+ * stunaddr specifies the address used to detect that a client is using STUN.
-+ * If this address is seen in the destination parameter, it is assumed that
-+ * the client has already punched a UDP hole in the firewall, so we don't
-+ * mangle the client_port.  If none is specified, it is autodetected.  It
-+ * only needs to be set if you have multiple levels of NAT.  It should be
-+ * set to the external address that the STUN clients detect.  Note that in
-+ * this case, it will not be possible for clients to use UDP with servers
-+ * between the NATs.
-+ *
-+ * If no destaction is specified, auto is used.
-+ *   destaction=auto:  strip destination parameter if it is not stunaddr.
-+ *   destaction=strip: always strip destination parameter (not recommended).
-+ *   destaction=none:  do not touch destination parameter (not recommended).
-+ */
-+
-+#include <linux/module.h>
-+#include <net/tcp.h>
-+#include <net/netfilter/nf_nat_helper.h>
-+#include <net/netfilter/nf_nat_rule.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+
-+#include <linux/inet.h>
-+#include <linux/ctype.h>
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS       8
-+#define DSTACT_AUTO     0
-+#define DSTACT_STRIP    1
-+#define DSTACT_NONE     2
-+
-+static char*    stunaddr = NULL;
-+static char*    destaction = NULL;
-+
-+static u_int32_t extip = 0;
-+static int       dstact = 0;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP network address translation module");
-+MODULE_LICENSE("GPL");
-+module_param(stunaddr, charp, 0644);
-+MODULE_PARM_DESC(stunaddr, "Address for detecting STUN");
-+module_param(destaction, charp, 0644);
-+MODULE_PARM_DESC(destaction, "Action for destination parameter (auto/strip/none)");
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*** helper functions ***/
-+
-+static void
-+get_skb_tcpdata(struct sk_buff* skb, char** pptcpdata, uint* ptcpdatalen)
-+{
-+    struct iphdr*   iph  = ip_hdr(skb);
-+    struct tcphdr*  tcph = (void *)iph + ip_hdrlen(skb);
-+
-+    *pptcpdata = (char*)tcph +  tcph->doff*4;
-+    *ptcpdatalen = ((char*)skb_transport_header(skb) + skb->len) - *pptcpdata;
-+}
-+
-+/*** nat functions ***/
-+
-+/*
-+ * Mangle the "Transport:" header:
-+ *   - Replace all occurences of "client_port=<spec>"
-+ *   - Handle destination parameter
-+ *
-+ * In:
-+ *   ct, ctinfo = conntrack context
-+ *   skb        = packet
-+ *   tranoff    = Transport header offset from TCP data
-+ *   tranlen    = Transport header length (incl. CRLF)
-+ *   rport_lo   = replacement low  port (host endian)
-+ *   rport_hi   = replacement high port (host endian)
-+ *
-+ * Returns packet size difference.
-+ *
-+ * Assumes that a complete transport header is present, ending with CR or LF
-+ */
-+static int
-+rtsp_mangle_tran(enum ip_conntrack_info ctinfo,
-+                 struct nf_conntrack_expect* exp,
-+                                                               struct ip_ct_rtsp_expect* prtspexp,
-+                 struct sk_buff* skb, uint tranoff, uint tranlen)
-+{
-+    char*       ptcp;
-+    uint        tcplen;
-+    char*       ptran;
-+    char        rbuf1[16];      /* Replacement buffer (one port) */
-+    uint        rbuf1len;       /* Replacement len (one port) */
-+    char        rbufa[16];      /* Replacement buffer (all ports) */
-+    uint        rbufalen;       /* Replacement len (all ports) */
-+    u_int32_t   newip;
-+    u_int16_t   loport, hiport;
-+    uint        off = 0;
-+    uint        diff;           /* Number of bytes we removed */
-+
-+    struct nf_conn *ct = exp->master;
-+    struct nf_conntrack_tuple *t;
-+
-+    char    szextaddr[15+1];
-+    uint    extaddrlen;
-+    int     is_stun;
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    ptran = ptcp+tranoff;
-+
-+    if (tranoff+tranlen > tcplen || tcplen-tranoff < tranlen ||
-+        tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+        nf_strncasecmp(ptran, "Transport:", 10) != 0)
-+    {
-+        INFOP("sanity check failed\n");
-+        return 0;
-+    }
-+    off += 10;
-+    SKIP_WSPACE(ptcp+tranoff, tranlen, off);
-+
-+    newip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+    t = &exp->tuple;
-+    t->dst.u3.ip = newip;
-+
-+    extaddrlen = extip ? sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(extip))
-+                       : sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(newip));
-+    DEBUGP("stunaddr=%s (%s)\n", szextaddr, (extip?"forced":"auto"));
-+
-+    rbuf1len = rbufalen = 0;
-+    switch (prtspexp->pbtype)
-+    {
-+    case pb_single:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu\n", loport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu", loport);
-+        }
-+        break;
-+    case pb_range:
-+        for (loport = prtspexp->loport; loport != 0; loport += 2) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                hiport = loport + ~exp->mask.src.u.udp.port;
-+                DEBUGP("using ports %hu-%hu\n", loport, hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu-%hu", loport, loport+1);
-+        }
-+        break;
-+    case pb_discon:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (1 of 2)\n", loport);
-+                break;
-+            }
-+        }
-+        for (hiport = prtspexp->hiport; hiport != 0; hiport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(hiport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (2 of 2)\n", hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0 && hiport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            if (hiport == loport+1)
-+            {
-+                rbufalen = sprintf(rbufa, "%hu-%hu", loport, hiport);
-+            }
-+            else
-+            {
-+                rbufalen = sprintf(rbufa, "%hu/%hu", loport, hiport);
-+            }
-+        }
-+        break;
-+    }
-+
-+    if (rbuf1len == 0)
-+    {
-+        return 0;   /* cannot get replacement port(s) */
-+    }
-+
-+    /* Transport: tran;field;field=val,tran;field;field=val,... */
-+    while (off < tranlen)
-+    {
-+        uint        saveoff;
-+        const char* pparamend;
-+        uint        nextparamoff;
-+
-+        pparamend = memchr(ptran+off, ',', tranlen-off);
-+        pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+        nextparamoff = pparamend-ptcp;
-+
-+        /*
-+         * We pass over each param twice.  On the first pass, we look for a
-+         * destination= field.  It is handled by the security policy.  If it
-+         * is present, allowed, and equal to our external address, we assume
-+         * that STUN is being used and we leave the client_port= field alone.
-+         */
-+        is_stun = 0;
-+        saveoff = off;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (dstact != DSTACT_NONE && strncmp(ptran+off, "destination=", 12) == 0)
-+            {
-+                if (strncmp(ptran+off+12, szextaddr, extaddrlen) == 0)
-+                {
-+                    is_stun = 1;
-+                }
-+                if (dstact == DSTACT_STRIP || (dstact == DSTACT_AUTO && !is_stun))
-+                {
-+                    diff = nextfieldoff-off;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                                         off, diff, NULL, 0))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+        if (is_stun)
-+        {
-+            continue;
-+        }
-+        off = saveoff;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (strncmp(ptran+off, "client_port=", 12) == 0)
-+            {
-+                u_int16_t   port;
-+                uint        numlen;
-+                uint        origoff;
-+                uint        origlen;
-+                char*       rbuf    = rbuf1;
-+                uint        rbuflen = rbuf1len;
-+
-+                off += 12;
-+                origoff = (ptran-ptcp)+off;
-+                origlen = 0;
-+                numlen = nf_strtou16(ptran+off, &port);
-+                off += numlen;
-+                origlen += numlen;
-+                if (port != prtspexp->loport)
-+                {
-+                    DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                }
-+                else
-+                {
-+                    if (ptran[off] == '-' || ptran[off] == '/')
-+                    {
-+                        off++;
-+                        origlen++;
-+                        numlen = nf_strtou16(ptran+off, &port);
-+                        off += numlen;
-+                        origlen += numlen;
-+                        rbuf = rbufa;
-+                        rbuflen = rbufalen;
-+                    }
-+
-+                    /*
-+                     * note we cannot just memcpy() if the sizes are the same.
-+                     * the mangle function does skb resizing, checks for a
-+                     * cloned skb, and updates the checksums.
-+                     *
-+                     * parameter 4 below is offset from start of tcp data.
-+                     */
-+                    diff = origlen-rbuflen;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                              origoff, origlen, rbuf, rbuflen))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+
-+        off = nextparamoff;
-+    }
-+
-+    return 1;
-+}
-+
-+static uint
-+help_out(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+       unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+       struct nf_conntrack_expect* exp)
-+{
-+    char*   ptcp;
-+    uint    tcplen;
-+    uint    hdrsoff;
-+    uint    hdrslen;
-+    uint    lineoff;
-+    uint    linelen;
-+    uint    off;
-+
-+    //struct iphdr* iph = (struct iphdr*)skb->nh.iph;
-+    //struct tcphdr* tcph = (struct tcphdr*)((void*)iph + iph->ihl*4);
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    hdrsoff = matchoff;//exp->seq - ntohl(tcph->seq);
-+    hdrslen = matchlen;
-+    off = hdrsoff;
-+    DEBUGP("NAT rtsp help_out\n");
-+
-+    while (nf_mime_nextline(ptcp, hdrsoff+hdrslen, &off, &lineoff, &linelen))
-+    {
-+        if (linelen == 0)
-+        {
-+            break;
-+        }
-+        if (off > hdrsoff+hdrslen)
-+        {
-+            INFOP("!! overrun !!");
-+            break;
-+        }
-+        DEBUGP("hdr: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+
-+        if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0)
-+        {
-+            uint oldtcplen = tcplen;
-+          DEBUGP("hdr: Transport\n");
-+            if (!rtsp_mangle_tran(ctinfo, exp, prtspexp, skb, lineoff, linelen))
-+            {
-+              DEBUGP("hdr: Transport mangle failed");
-+                break;
-+            }
-+            get_skb_tcpdata(skb, &ptcp, &tcplen);
-+            hdrslen -= (oldtcplen-tcplen);
-+            off -= (oldtcplen-tcplen);
-+            lineoff -= (oldtcplen-tcplen);
-+            linelen -= (oldtcplen-tcplen);
-+            DEBUGP("rep: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+        }
-+    }
-+
-+    return NF_ACCEPT;
-+}
-+
-+static unsigned int
-+help(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+     unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+     struct nf_conntrack_expect* exp)
-+{
-+    int dir = CTINFO2DIR(ctinfo);
-+    int rc = NF_ACCEPT;
-+
-+    switch (dir)
-+    {
-+    case IP_CT_DIR_ORIGINAL:
-+        rc = help_out(skb, ctinfo, matchoff, matchlen, prtspexp, exp);
-+        break;
-+    case IP_CT_DIR_REPLY:
-+      DEBUGP("unmangle ! %u\n", ctinfo);
-+      /* XXX: unmangle */
-+      rc = NF_ACCEPT;
-+        break;
-+    }
-+    //UNLOCK_BH(&ip_rtsp_lock);
-+
-+    return rc;
-+}
-+
-+static void expected(struct nf_conn* ct, struct nf_conntrack_expect *exp)
-+{
-+    struct nf_nat_multi_range_compat mr;
-+    u_int32_t newdstip, newsrcip, newip;
-+
-+    struct nf_conn *master = ct->master;
-+
-+    newdstip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    newsrcip = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    //FIXME (how to port that ?)
-+    //code from 2.4 : newip = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC) ? newsrcip : newdstip;
-+    newip = newdstip;
-+
-+    DEBUGP("newsrcip=%u.%u.%u.%u, newdstip=%u.%u.%u.%u, newip=%u.%u.%u.%u\n",
-+           NIPQUAD(newsrcip), NIPQUAD(newdstip), NIPQUAD(newip));
-+
-+    mr.rangesize = 1;
-+    // We don't want to manip the per-protocol, just the IPs.
-+    mr.range[0].flags = IP_NAT_RANGE_MAP_IPS;
-+    mr.range[0].min_ip = mr.range[0].max_ip = newip;
-+
-+    nf_nat_setup_info(ct, &mr.range[0], IP_NAT_MANIP_DST);
-+}
-+
-+
-+static void __exit fini(void)
-+{
-+      nf_nat_rtsp_hook = NULL;
-+        nf_nat_rtsp_hook_expectfn = NULL;
-+      synchronize_net();
-+}
-+
-+static int __init init(void)
-+{
-+      printk("nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      BUG_ON(nf_nat_rtsp_hook);
-+      nf_nat_rtsp_hook = help;
-+        nf_nat_rtsp_hook_expectfn = &expected;
-+
-+      if (stunaddr != NULL)
-+              extip = in_aton(stunaddr);
-+
-+      if (destaction != NULL) {
-+              if (strcmp(destaction, "auto") == 0)
-+                      dstact = DSTACT_AUTO;
-+
-+              if (strcmp(destaction, "strip") == 0)
-+                      dstact = DSTACT_STRIP;
-+
-+              if (strcmp(destaction, "none") == 0)
-+                      dstact = DSTACT_NONE;
-+      }
-+
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
diff --git a/target/linux/generic-2.6/patches-2.6.25/200-sched_esfq.patch b/target/linux/generic-2.6/patches-2.6.25/200-sched_esfq.patch
deleted file mode 100644 (file)
index 3f66e2c..0000000
+++ /dev/null
@@ -1,797 +0,0 @@
---- a/include/linux/pkt_sched.h
-+++ b/include/linux/pkt_sched.h
-@@ -162,8 +162,37 @@ struct tc_sfq_xstats
-  *
-  *    The only reason for this is efficiency, it is possible
-  *    to change these parameters in compile time.
-+ *    
-+ *    If you need to play with these values, use esfq instead.
-  */
-+/* ESFQ section */
-+
-+enum
-+{
-+        /* traditional */
-+      TCA_SFQ_HASH_CLASSIC,
-+      TCA_SFQ_HASH_DST,
-+      TCA_SFQ_HASH_SRC,
-+      TCA_SFQ_HASH_FWMARK,
-+      /* conntrack */
-+      TCA_SFQ_HASH_CTORIGDST,
-+      TCA_SFQ_HASH_CTORIGSRC,
-+      TCA_SFQ_HASH_CTREPLDST,
-+      TCA_SFQ_HASH_CTREPLSRC,
-+      TCA_SFQ_HASH_CTNATCHG,
-+};
-+
-+struct tc_esfq_qopt
-+{
-+      unsigned        quantum;        /* Bytes per round allocated to flow */
-+      int             perturb_period; /* Period of hash perturbation */
-+      __u32           limit;          /* Maximal packets in queue */
-+      unsigned        divisor;        /* Hash divisor  */
-+      unsigned        flows;          /* Maximal number of flows  */
-+      unsigned        hash_kind;      /* Hash function to use for flow identification */
-+};
-+
- /* RED section */
- enum
---- a/net/sched/Kconfig
-+++ b/net/sched/Kconfig
-@@ -139,6 +139,37 @@ config NET_SCH_SFQ
-         To compile this code as a module, choose M here: the
-         module will be called sch_sfq.
-+config NET_SCH_ESFQ
-+      tristate "Enhanced Stochastic Fairness Queueing (ESFQ)"
-+      ---help---
-+        Say Y here if you want to use the Enhanced Stochastic Fairness
-+        Queueing (ESFQ) packet scheduling algorithm for some of your network
-+        devices or as a leaf discipline for a classful qdisc such as HTB or
-+        CBQ (see the top of <file:net/sched/sch_esfq.c> for details and
-+        references to the SFQ algorithm).
-+
-+        This is an enchanced SFQ version which allows you to control some
-+        hardcoded values in the SFQ scheduler.
-+
-+        ESFQ also adds control of the hash function used to identify packet
-+        flows. The original SFQ discipline hashes by connection; ESFQ add
-+        several other hashing methods, such as by src IP or by dst IP, which
-+        can be more fair to users in some networking situations.
-+        
-+        To compile this code as a module, choose M here: the
-+        module will be called sch_esfq.
-+
-+config NET_SCH_ESFQ_NFCT
-+      bool "Connection Tracking Hash Types"
-+      depends on NET_SCH_ESFQ && NF_CONNTRACK
-+      ---help---
-+        Say Y here to enable support for hashing based on netfilter connection
-+        tracking information. This is useful for a router that is also using
-+        NAT to connect privately-addressed hosts to the Internet. If you want
-+        to provide fair distribution of upstream bandwidth, ESFQ must use
-+        connection tracking information, since all outgoing packets will share
-+        the same source address.
-+
- config NET_SCH_TEQL
-       tristate "True Link Equalizer (TEQL)"
-       ---help---
---- a/net/sched/Makefile
-+++ b/net/sched/Makefile
-@@ -23,6 +23,7 @@ obj-$(CONFIG_NET_SCH_GRED)   += sch_gred.o
- obj-$(CONFIG_NET_SCH_INGRESS) += sch_ingress.o 
- obj-$(CONFIG_NET_SCH_DSMARK)  += sch_dsmark.o
- obj-$(CONFIG_NET_SCH_SFQ)     += sch_sfq.o
-+obj-$(CONFIG_NET_SCH_ESFQ)    += sch_esfq.o
- obj-$(CONFIG_NET_SCH_TBF)     += sch_tbf.o
- obj-$(CONFIG_NET_SCH_TEQL)    += sch_teql.o
- obj-$(CONFIG_NET_SCH_PRIO)    += sch_prio.o
---- /dev/null
-+++ b/net/sched/sch_esfq.c
-@@ -0,0 +1,704 @@
-+/*
-+ * net/sched/sch_esfq.c       Extended Stochastic Fairness Queueing discipline.
-+ *
-+ *            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:   Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
-+ *
-+ * Changes:   Alexander Atanasov, <alex@ssi.bg>
-+ *            Added dynamic depth,limit,divisor,hash_kind options.
-+ *            Added dst and src hashes.
-+ *
-+ *            Alexander Clouter, <alex@digriz.org.uk>
-+ *            Ported ESFQ to Linux 2.6.
-+ *
-+ *            Corey Hickey, <bugfood-c@fatooh.org>
-+ *            Maintenance of the Linux 2.6 port.
-+ *            Added fwmark hash (thanks to Robert Kurjata).
-+ *            Added usage of jhash.
-+ *            Added conntrack support.
-+ *            Added ctnatchg hash (thanks to Ben Pfountz).
-+ */
-+
-+#include <linux/module.h>
-+#include <asm/uaccess.h>
-+#include <asm/system.h>
-+#include <linux/bitops.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/jiffies.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/socket.h>
-+#include <linux/sockios.h>
-+#include <linux/in.h>
-+#include <linux/errno.h>
-+#include <linux/interrupt.h>
-+#include <linux/if_ether.h>
-+#include <linux/inet.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/notifier.h>
-+#include <linux/init.h>
-+#include <net/ip.h>
-+#include <linux/ipv6.h>
-+#include <net/route.h>
-+#include <linux/skbuff.h>
-+#include <net/sock.h>
-+#include <net/pkt_sched.h>
-+#include <linux/jhash.h>
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+#include <net/netfilter/nf_conntrack.h>
-+#endif
-+
-+/*    Stochastic Fairness Queuing algorithm.
-+      For more comments look at sch_sfq.c.
-+      The difference is that you can change limit, depth,
-+      hash table size and choose alternate hash types.
-+      
-+      classic:        same as in sch_sfq.c
-+      dst:            destination IP address
-+      src:            source IP address
-+      fwmark:         netfilter mark value
-+      ctorigdst:      original destination IP address
-+      ctorigsrc:      original source IP address
-+      ctrepldst:      reply destination IP address
-+      ctreplsrc:      reply source IP 
-+      
-+*/
-+
-+#define ESFQ_HEAD 0
-+#define ESFQ_TAIL 1
-+
-+/* This type should contain at least SFQ_DEPTH*2 values */
-+typedef unsigned int esfq_index;
-+
-+struct esfq_head
-+{
-+      esfq_index      next;
-+      esfq_index      prev;
-+};
-+
-+struct esfq_sched_data
-+{
-+/* Parameters */
-+      int             perturb_period;
-+      unsigned        quantum;        /* Allotment per round: MUST BE >= MTU */
-+      int             limit;
-+      unsigned        depth;
-+      unsigned        hash_divisor;
-+      unsigned        hash_kind;
-+/* Variables */
-+      struct timer_list perturb_timer;
-+      int             perturbation;
-+      esfq_index      tail;           /* Index of current slot in round */
-+      esfq_index      max_depth;      /* Maximal depth */
-+
-+      esfq_index      *ht;                    /* Hash table */
-+      esfq_index      *next;                  /* Active slots link */
-+      short           *allot;                 /* Current allotment per slot */
-+      unsigned short  *hash;                  /* Hash value indexed by slots */
-+      struct sk_buff_head     *qs;            /* Slot queue */
-+      struct esfq_head        *dep;           /* Linked list of slots, indexed by depth */
-+};
-+
-+/* This contains the info we will hash. */
-+struct esfq_packet_info
-+{
-+      u32     proto;          /* protocol or port */
-+      u32     src;            /* source from packet header */
-+      u32     dst;            /* destination from packet header */
-+      u32     ctorigsrc;      /* original source from conntrack */
-+      u32     ctorigdst;      /* original destination from conntrack */
-+      u32     ctreplsrc;      /* reply source from conntrack */
-+      u32     ctrepldst;      /* reply destination from conntrack */
-+      u32     mark;           /* netfilter mark (fwmark) */
-+};
-+
-+static __inline__ unsigned esfq_jhash_1word(struct esfq_sched_data *q,u32 a)
-+{
-+      return jhash_1word(a, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_2words(struct esfq_sched_data *q, u32 a, u32 b)
-+{
-+      return jhash_2words(a, b, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_3words(struct esfq_sched_data *q, u32 a, u32 b, u32 c)
-+{
-+      return jhash_3words(a, b, c, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static unsigned esfq_hash(struct esfq_sched_data *q, struct sk_buff *skb)
-+{
-+      struct esfq_packet_info info;
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      enum ip_conntrack_info ctinfo;
-+      struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
-+#endif
-+      
-+      switch (skb->protocol) {
-+      case __constant_htons(ETH_P_IP):
-+      {
-+              struct iphdr *iph = ip_hdr(skb);
-+              info.dst = iph->daddr;
-+              info.src = iph->saddr;
-+              if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) &&
-+                  (iph->protocol == IPPROTO_TCP ||
-+                   iph->protocol == IPPROTO_UDP ||
-+                   iph->protocol == IPPROTO_SCTP ||
-+                   iph->protocol == IPPROTO_DCCP ||
-+                   iph->protocol == IPPROTO_ESP))
-+                      info.proto = *(((u32*)iph) + iph->ihl);
-+              else
-+                      info.proto = iph->protocol;
-+              break;
-+      }
-+      case __constant_htons(ETH_P_IPV6):
-+      {
-+              struct ipv6hdr *iph = ipv6_hdr(skb);
-+              /* Hash ipv6 addresses into a u32. This isn't ideal,
-+               * but the code is simple. */
-+              info.dst = jhash2(iph->daddr.s6_addr32, 4, q->perturbation);
-+              info.src = jhash2(iph->saddr.s6_addr32, 4, q->perturbation);
-+              if (iph->nexthdr == IPPROTO_TCP ||
-+                  iph->nexthdr == IPPROTO_UDP ||
-+                  iph->nexthdr == IPPROTO_SCTP ||
-+                  iph->nexthdr == IPPROTO_DCCP ||
-+                  iph->nexthdr == IPPROTO_ESP)
-+                      info.proto = *(u32*)&iph[1];
-+              else
-+                      info.proto = iph->nexthdr;
-+              break;
-+      }
-+      default:
-+              info.dst   = (u32)(unsigned long)skb->dst;
-+              info.src   = (u32)(unsigned long)skb->sk;
-+              info.proto = skb->protocol;
-+      }
-+
-+      info.mark = skb->mark;
-+
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      /* defaults if there is no conntrack info */
-+      info.ctorigsrc = info.src;
-+      info.ctorigdst = info.dst;
-+      info.ctreplsrc = info.dst;
-+      info.ctrepldst = info.src;
-+      /* collect conntrack info */
-+      if (ct && ct != &nf_conntrack_untracked) {
-+              if (skb->protocol == __constant_htons(ETH_P_IP)) {
-+                      info.ctorigsrc = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+                      info.ctorigdst = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip;
-+                      info.ctreplsrc = ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip;
-+                      info.ctrepldst = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+              }
-+              else if (skb->protocol == __constant_htons(ETH_P_IPV6)) {
-+                      /* Again, hash ipv6 addresses into a single u32. */
-+                      info.ctorigsrc = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctorigdst = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip6, 4, q->perturbation);
-+                      info.ctreplsrc = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctrepldst = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip6, 4, q->perturbation);
-+              }
-+
-+      }
-+#endif
-+
-+      switch(q->hash_kind) {
-+      case TCA_SFQ_HASH_CLASSIC:
-+              return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+      case TCA_SFQ_HASH_DST:
-+              return esfq_jhash_1word(q, info.dst);
-+      case TCA_SFQ_HASH_SRC:
-+              return esfq_jhash_1word(q, info.src);
-+      case TCA_SFQ_HASH_FWMARK:
-+              return esfq_jhash_1word(q, info.mark);
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      case TCA_SFQ_HASH_CTORIGDST:
-+              return esfq_jhash_1word(q, info.ctorigdst);
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+              return esfq_jhash_1word(q, info.ctorigsrc);
-+      case TCA_SFQ_HASH_CTREPLDST:
-+              return esfq_jhash_1word(q, info.ctrepldst);
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      case TCA_SFQ_HASH_CTNATCHG:
-+      {
-+              if (info.ctorigdst == info.ctreplsrc)
-+                      return esfq_jhash_1word(q, info.ctorigsrc);
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      }
-+#endif
-+      default:
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash method. Falling back to classic.\n");
-+      }
-+      return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+}
-+
-+static inline void esfq_link(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d = q->qs[x].qlen + q->depth;
-+
-+      p = d;
-+      n = q->dep[d].next;
-+      q->dep[x].next = n;
-+      q->dep[x].prev = p;
-+      q->dep[p].next = q->dep[n].prev = x;
-+}
-+
-+static inline void esfq_dec(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+
-+      if (n == p && q->max_depth == q->qs[x].qlen + 1)
-+              q->max_depth--;
-+
-+      esfq_link(q, x);
-+}
-+
-+static inline void esfq_inc(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+      d = q->qs[x].qlen;
-+      if (q->max_depth < d)
-+              q->max_depth = d;
-+
-+      esfq_link(q, x);
-+}
-+
-+static unsigned int esfq_drop(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index d = q->max_depth;
-+      struct sk_buff *skb;
-+      unsigned int len;
-+
-+      /* Queue is full! Find the longest slot and
-+         drop a packet from it */
-+
-+      if (d > 1) {
-+              esfq_index x = q->dep[d+q->depth].next;
-+              skb = q->qs[x].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[x]);
-+              kfree_skb(skb);
-+              esfq_dec(q, x);
-+              sch->q.qlen--;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      if (d == 1) {
-+              /* It is difficult to believe, but ALL THE SLOTS HAVE LENGTH 1. */
-+              d = q->next[q->tail];
-+              q->next[q->tail] = q->next[d];
-+              q->allot[q->next[d]] += q->quantum;
-+              skb = q->qs[d].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[d]);
-+              kfree_skb(skb);
-+              esfq_dec(q, d);
-+              sch->q.qlen--;
-+              q->ht[q->hash[d]] = q->depth;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      return 0;
-+}
-+
-+static void esfq_q_enqueue(struct sk_buff *skb, struct esfq_sched_data *q, unsigned int end)
-+{
-+      unsigned hash = esfq_hash(q, skb);
-+      unsigned depth = q->depth;
-+      esfq_index x;
-+
-+      x = q->ht[hash];
-+      if (x == depth) {
-+              q->ht[hash] = x = q->dep[depth].next;
-+              q->hash[x] = hash;
-+      }
-+
-+      if (end == ESFQ_TAIL)
-+              __skb_queue_tail(&q->qs[x], skb);
-+      else
-+              __skb_queue_head(&q->qs[x], skb);
-+
-+      esfq_inc(q, x);
-+      if (q->qs[x].qlen == 1) {               /* The flow is new */
-+              if (q->tail == depth) { /* It is the first flow */
-+                      q->tail = x;
-+                      q->next[x] = x;
-+                      q->allot[x] = q->quantum;
-+              } else {
-+                      q->next[x] = q->next[q->tail];
-+                      q->next[q->tail] = x;
-+                      q->tail = x;
-+              }
-+      }
-+}
-+
-+static int esfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_enqueue(skb, q, ESFQ_TAIL);
-+      sch->qstats.backlog += skb->len;
-+      if (++sch->q.qlen < q->limit-1) {
-+              sch->bstats.bytes += skb->len;
-+              sch->bstats.packets++;
-+              return 0;
-+      }
-+
-+      sch->qstats.drops++;
-+      esfq_drop(sch);
-+      return NET_XMIT_CN;
-+}
-+
-+
-+static int esfq_requeue(struct sk_buff *skb, struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_enqueue(skb, q, ESFQ_HEAD);
-+      sch->qstats.backlog += skb->len;
-+      if (++sch->q.qlen < q->limit - 1) {
-+              sch->qstats.requeues++;
-+              return 0;
-+      }
-+
-+      sch->qstats.drops++;
-+      esfq_drop(sch);
-+      return NET_XMIT_CN;
-+}
-+
-+static struct sk_buff *esfq_q_dequeue(struct esfq_sched_data *q)
-+{
-+      struct sk_buff *skb;
-+      unsigned depth = q->depth;
-+      esfq_index a, old_a;
-+
-+      /* No active slots */
-+      if (q->tail == depth)
-+              return NULL;
-+      
-+      a = old_a = q->next[q->tail];
-+      
-+      /* Grab packet */
-+      skb = __skb_dequeue(&q->qs[a]);
-+      esfq_dec(q, a);
-+      
-+      /* Is the slot empty? */
-+      if (q->qs[a].qlen == 0) {
-+              q->ht[q->hash[a]] = depth;
-+              a = q->next[a];
-+              if (a == old_a) {
-+                      q->tail = depth;
-+                      return skb;
-+              }
-+              q->next[q->tail] = a;
-+              q->allot[a] += q->quantum;
-+      } else if ((q->allot[a] -= skb->len) <= 0) {
-+              q->tail = a;
-+              a = q->next[a];
-+              q->allot[a] += q->quantum;
-+      }
-+      
-+      return skb;
-+}
-+
-+static struct sk_buff *esfq_dequeue(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct sk_buff *skb;
-+
-+      skb = esfq_q_dequeue(q);
-+      if (skb == NULL)
-+              return NULL;
-+      sch->q.qlen--;
-+      sch->qstats.backlog -= skb->len;
-+      return skb;
-+}
-+
-+static void esfq_q_destroy(struct esfq_sched_data *q)
-+{
-+      del_timer(&q->perturb_timer);
-+      if(q->ht)
-+              kfree(q->ht);
-+      if(q->dep)
-+              kfree(q->dep);
-+      if(q->next)
-+              kfree(q->next);
-+      if(q->allot)
-+              kfree(q->allot);
-+      if(q->hash)
-+              kfree(q->hash);
-+      if(q->qs)
-+              kfree(q->qs);
-+}
-+
-+static void esfq_destroy(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_destroy(q);
-+}
-+
-+
-+static void esfq_reset(struct Qdisc* sch)
-+{
-+      struct sk_buff *skb;
-+
-+      while ((skb = esfq_dequeue(sch)) != NULL)
-+              kfree_skb(skb);
-+}
-+
-+static void esfq_perturbation(unsigned long arg)
-+{
-+      struct Qdisc *sch = (struct Qdisc*)arg;
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+
-+      q->perturbation = net_random()&0x1F;
-+
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+}
-+
-+static unsigned int esfq_check_hash(unsigned int kind)
-+{
-+      switch (kind) {
-+      case TCA_SFQ_HASH_CTORIGDST:
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+      case TCA_SFQ_HASH_CTREPLDST:
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+      case TCA_SFQ_HASH_CTNATCHG:
-+#ifndef CONFIG_NET_SCH_ESFQ_NFCT
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Conntrack hash types disabled in kernel config. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+#endif
-+      case TCA_SFQ_HASH_CLASSIC:
-+      case TCA_SFQ_HASH_DST:
-+      case TCA_SFQ_HASH_SRC:
-+      case TCA_SFQ_HASH_FWMARK:
-+              return kind;
-+      default:
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash type. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+      }
-+}
-+      
-+static int esfq_q_init(struct esfq_sched_data *q, struct rtattr *opt)
-+{
-+      struct tc_esfq_qopt *ctl = RTA_DATA(opt);
-+      esfq_index p = ~0U/2;
-+      int i;
-+      
-+      if (opt && opt->rta_len < RTA_LENGTH(sizeof(*ctl)))
-+              return -EINVAL;
-+
-+      q->perturbation = 0;
-+      q->hash_kind = TCA_SFQ_HASH_CLASSIC;
-+      q->max_depth = 0;
-+      if (opt == NULL) {
-+              q->perturb_period = 0;
-+              q->hash_divisor = 1024;
-+              q->tail = q->limit = q->depth = 128;
-+              
-+      } else {
-+              struct tc_esfq_qopt *ctl = RTA_DATA(opt);
-+              if (ctl->quantum)
-+                      q->quantum = ctl->quantum;
-+              q->perturb_period = ctl->perturb_period*HZ;
-+              q->hash_divisor = ctl->divisor ? : 1024;
-+              q->tail = q->limit = q->depth = ctl->flows ? : 128;
-+              
-+              if ( q->depth > p - 1 )
-+                      return -EINVAL;
-+              
-+              if (ctl->limit)
-+                      q->limit = min_t(u32, ctl->limit, q->depth);
-+              
-+              if (ctl->hash_kind) {
-+                      q->hash_kind = esfq_check_hash(ctl->hash_kind);
-+              }
-+      }
-+      
-+      q->ht = kmalloc(q->hash_divisor*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->ht)
-+              goto err_case;
-+      q->dep = kmalloc((1+q->depth*2)*sizeof(struct esfq_head), GFP_KERNEL);
-+      if (!q->dep)
-+              goto err_case;
-+      q->next = kmalloc(q->depth*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->next)
-+              goto err_case;
-+      q->allot = kmalloc(q->depth*sizeof(short), GFP_KERNEL);
-+      if (!q->allot)
-+              goto err_case;
-+      q->hash = kmalloc(q->depth*sizeof(unsigned short), GFP_KERNEL);
-+      if (!q->hash)
-+              goto err_case;
-+      q->qs = kmalloc(q->depth*sizeof(struct sk_buff_head), GFP_KERNEL);
-+      if (!q->qs)
-+              goto err_case;
-+      
-+      for (i=0; i< q->hash_divisor; i++)
-+              q->ht[i] = q->depth;
-+      for (i=0; i<q->depth; i++) {
-+              skb_queue_head_init(&q->qs[i]);
-+              q->dep[i+q->depth].next = i+q->depth;
-+              q->dep[i+q->depth].prev = i+q->depth;
-+      }
-+      
-+      for (i=0; i<q->depth; i++)
-+              esfq_link(q, i);
-+      return 0;
-+err_case:
-+      esfq_q_destroy(q);
-+      return -ENOBUFS;
-+}
-+
-+static int esfq_init(struct Qdisc *sch, struct rtattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      int err;
-+      
-+      q->quantum = psched_mtu(sch->dev); /* default */
-+      if ((err = esfq_q_init(q, opt)))
-+              return err;
-+
-+      init_timer(&q->perturb_timer);
-+      q->perturb_timer.data = (unsigned long)sch;
-+      q->perturb_timer.function = esfq_perturbation;
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+      
-+      return 0;
-+}
-+
-+static int esfq_change(struct Qdisc *sch, struct rtattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct esfq_sched_data new;
-+      struct sk_buff *skb;
-+      int err;
-+      
-+      /* set up new queue */
-+      memset(&new, 0, sizeof(struct esfq_sched_data));
-+      new.quantum = psched_mtu(sch->dev); /* default */
-+      if ((err = esfq_q_init(&new, opt)))
-+              return err;
-+
-+      /* copy all packets from the old queue to the new queue */
-+      sch_tree_lock(sch);
-+      while ((skb = esfq_q_dequeue(q)) != NULL)
-+              esfq_q_enqueue(skb, &new, ESFQ_TAIL);
-+      
-+      /* clean up the old queue */
-+      esfq_q_destroy(q);
-+
-+      /* copy elements of the new queue into the old queue */
-+      q->perturb_period = new.perturb_period;
-+      q->quantum        = new.quantum;
-+      q->limit          = new.limit;
-+      q->depth          = new.depth;
-+      q->hash_divisor   = new.hash_divisor;
-+      q->hash_kind      = new.hash_kind;
-+      q->tail           = new.tail;
-+      q->max_depth      = new.max_depth;
-+      q->ht    = new.ht;
-+      q->dep   = new.dep;
-+      q->next  = new.next;
-+      q->allot = new.allot;
-+      q->hash  = new.hash;
-+      q->qs    = new.qs;
-+
-+      /* finish up */
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      } else {
-+              q->perturbation = 0;
-+      }
-+      sch_tree_unlock(sch);
-+      return 0;
-+}
-+
-+static int esfq_dump(struct Qdisc *sch, struct sk_buff *skb)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      unsigned char *b = skb->tail;
-+      struct tc_esfq_qopt opt;
-+
-+      opt.quantum = q->quantum;
-+      opt.perturb_period = q->perturb_period/HZ;
-+
-+      opt.limit = q->limit;
-+      opt.divisor = q->hash_divisor;
-+      opt.flows = q->depth;
-+      opt.hash_kind = q->hash_kind;
-+
-+      RTA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
-+
-+      return skb->len;
-+
-+rtattr_failure:
-+      skb_trim(skb, b - skb->data);
-+      return -1;
-+}
-+
-+static struct Qdisc_ops esfq_qdisc_ops =
-+{
-+      .next           =       NULL,
-+      .cl_ops         =       NULL,
-+      .id             =       "esfq",
-+      .priv_size      =       sizeof(struct esfq_sched_data),
-+      .enqueue        =       esfq_enqueue,
-+      .dequeue        =       esfq_dequeue,
-+      .requeue        =       esfq_requeue,
-+      .drop           =       esfq_drop,
-+      .init           =       esfq_init,
-+      .reset          =       esfq_reset,
-+      .destroy        =       esfq_destroy,
-+      .change         =       esfq_change,
-+      .dump           =       esfq_dump,
-+      .owner          =       THIS_MODULE,
-+};
-+
-+static int __init esfq_module_init(void)
-+{
-+      return register_qdisc(&esfq_qdisc_ops);
-+}
-+static void __exit esfq_module_exit(void) 
-+{
-+      unregister_qdisc(&esfq_qdisc_ops);
-+}
-+module_init(esfq_module_init)
-+module_exit(esfq_module_exit)
-+MODULE_LICENSE("GPL");
diff --git a/target/linux/generic-2.6/patches-2.6.25/204-jffs2_eofdetect.patch b/target/linux/generic-2.6/patches-2.6.25/204-jffs2_eofdetect.patch
deleted file mode 100644 (file)
index eccdbe2..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/fs/jffs2/build.c
-+++ b/fs/jffs2/build.c
-@@ -105,6 +105,17 @@ static int jffs2_build_filesystem(struct
-       dbg_fsbuild("scanned flash completely\n");
-       jffs2_dbg_dump_block_lists_nolock(c);
-+      if (c->flags & (1 << 7)) {
-+              printk("%s(): unlocking the mtd device... ", __func__);
-+              if (c->mtd->unlock)
-+                      c->mtd->unlock(c->mtd, 0, c->mtd->size);
-+              printk("done.\n");
-+              
-+              printk("%s(): erasing all blocks after the end marker... ", __func__);
-+              jffs2_erase_pending_blocks(c, -1);
-+              printk("done.\n");
-+      }
-+
-       dbg_fsbuild("pass 1 starting\n");
-       c->flags |= JFFS2_SB_FLAG_BUILDING;
-       /* Now scan the directory tree, increasing nlink according to every dirent found. */
---- a/fs/jffs2/scan.c
-+++ b/fs/jffs2/scan.c
-@@ -142,9 +142,12 @@ int jffs2_scan_medium(struct jffs2_sb_in
-               /* reset summary info for next eraseblock scan */
-               jffs2_sum_reset_collected(s);
--
--              ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
--                                              buf_size, s);
-+              
-+              if (c->flags & (1 << 7))
-+                      ret = BLK_STATE_ALLFF;
-+              else
-+                      ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
-+                                                      buf_size, s);
-               if (ret < 0)
-                       goto out;
-@@ -545,6 +548,17 @@ static int jffs2_scan_eraseblock (struct
-                       return err;
-       }
-+      if ((buf[0] == 0xde) &&
-+              (buf[1] == 0xad) &&
-+              (buf[2] == 0xc0) &&
-+              (buf[3] == 0xde)) {
-+              /* end of filesystem. erase everything after this point */
-+              printk("%s(): End of filesystem marker found at 0x%x\n", __func__, jeb->offset);
-+              c->flags |= (1 << 7);
-+
-+              return BLK_STATE_ALLFF;
-+      }
-+      
-       /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
-       ofs = 0;
diff --git a/target/linux/generic-2.6/patches-2.6.25/207-powerpc_asm_segment_h.patch b/target/linux/generic-2.6/patches-2.6.25/207-powerpc_asm_segment_h.patch
deleted file mode 100644 (file)
index 1272e82..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
---- /dev/null
-+++ b/include/asm-powerpc/segment.h
-@@ -0,0 +1,6 @@
-+#ifndef _ASM_SEGMENT_H
-+#define _ASM_SEGMENT_H
-+
-+/* Only here because we have some old header files that expect it.. */
-+
-+#endif /* _ASM_SEGMENT_H */
diff --git a/target/linux/generic-2.6/patches-2.6.25/208-rtl8110sb_fix.patch b/target/linux/generic-2.6/patches-2.6.25/208-rtl8110sb_fix.patch
deleted file mode 100644 (file)
index 2196a49..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/drivers/net/r8169.c
-+++ b/drivers/net/r8169.c
-@@ -1539,7 +1539,7 @@ static const struct rtl_cfg_info {
-               .hw_start       = rtl_hw_start_8169,
-               .region         = 1,
-               .align          = 0,
--              .intr_event     = SYSErr | LinkChg | RxOverflow |
-+              .intr_event     = LinkChg | RxOverflow |
-                                 RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
-               .napi_event     = RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
-               .msi            = 0
-@@ -1548,7 +1548,7 @@ static const struct rtl_cfg_info {
-               .hw_start       = rtl_hw_start_8168,
-               .region         = 2,
-               .align          = 8,
--              .intr_event     = SYSErr | LinkChg | RxOverflow |
-+              .intr_event     = LinkChg | RxOverflow |
-                                 TxErr | TxOK | RxOK | RxErr,
-               .napi_event     = TxErr | TxOK | RxOK | RxOverflow,
-               .msi            = RTL_FEATURE_MSI
-@@ -1557,7 +1557,7 @@ static const struct rtl_cfg_info {
-               .hw_start       = rtl_hw_start_8101,
-               .region         = 2,
-               .align          = 8,
--              .intr_event     = SYSErr | LinkChg | RxOverflow | PCSTimeout |
-+              .intr_event     = LinkChg | RxOverflow | PCSTimeout |
-                                 RxFIFOOver | TxErr | TxOK | RxOK | RxErr,
-               .napi_event     = RxFIFOOver | TxErr | TxOK | RxOK | RxOverflow,
-               .msi            = RTL_FEATURE_MSI
-@@ -2905,10 +2905,12 @@ static irqreturn_t rtl8169_interrupt(int
-                       break;
-               }
-+#if 0
-               if (unlikely(status & SYSErr)) {
-                       rtl8169_pcierr_interrupt(dev);
-                       break;
-               }
-+#endif
-               if (status & LinkChg)
-                       rtl8169_check_link_status(dev, tp, ioaddr);
diff --git a/target/linux/generic-2.6/patches-2.6.25/209-mini_fo.patch b/target/linux/generic-2.6/patches-2.6.25/209-mini_fo.patch
deleted file mode 100644 (file)
index 9d76d01..0000000
+++ /dev/null
@@ -1,7776 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -1449,6 +1449,9 @@ config VXFS_FS
-         To compile this as a module, choose M here: the module will be
-         called freevxfs.  If unsure, say N.
-+config MINI_FO
-+      tristate "Mini fanout overlay filesystem"
-+
- config MINIX_FS
-       tristate "Minix file system support"
-       depends on BLOCK
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -77,6 +77,7 @@ obj-$(CONFIG_SQUASHFS)               += squashfs/
- obj-y                         += ramfs/
- obj-$(CONFIG_HUGETLBFS)               += hugetlbfs/
- obj-$(CONFIG_CODA_FS)         += coda/
-+obj-$(CONFIG_MINI_FO)         += mini_fo/
- obj-$(CONFIG_MINIX_FS)                += minix/
- obj-$(CONFIG_FAT_FS)          += fat/
- obj-$(CONFIG_MSDOS_FS)                += msdos/
---- /dev/null
-+++ b/fs/mini_fo/aux.c
-@@ -0,0 +1,577 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/* check if file exists in storage  */
-+int exists_in_storage(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+      if(dtost(dentry) == MODIFIED || dtost(dentry) == CREATED || dtost(dentry) == DEL_REWRITTEN)
-+              return 1;
-+      return 0;
-+}
-+
-+/* check if dentry is in an existing state */
-+int is_mini_fo_existant(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) == DELETED || dtost(dentry) == NON_EXISTANT)
-+              return 0;
-+      else
-+              return 1;
-+}
-+
-+/*
-+ * This function will create a negative storage dentry for
-+ * dentry, what is required for many create like options.
-+ * It will create the storage structure if necessary.
-+ */
-+int get_neg_sto_dentry(dentry_t *dentry)
-+{
-+      int err = 0;
-+      unsigned int len;
-+      const unsigned char *name;
-+
-+      if(!dentry ||
-+         !dtopd(dentry) ||
-+         !(dtost(dentry) == UNMODIFIED ||
-+           dtost(dentry) == NON_EXISTANT ||
-+           dtost(dentry) == DELETED)) {
-+              printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      /* Have we got a neg. dentry already? */
-+      if(dtohd2(dentry)) {
-+              err = 0;
-+              goto out;
-+      }
-+      if(dtost(dentry->d_parent) == UNMODIFIED) {
-+              /* build sto struct */
-+              err = build_sto_structure(dentry->d_parent->d_parent, dentry->d_parent);
-+              if(err ||
-+                 dtost(dentry->d_parent) != MODIFIED) {
-+                      printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: ERROR building sto structure.\n");
-+                      err = -1;
-+                      goto out;
-+              }
-+      }
-+
-+      len = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+
-+      dtohd2(dentry) =
-+              lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+
-+ out:
-+      return err;
-+}
-+
-+int check_mini_fo_dentry(dentry_t *dentry)
-+{
-+      ASSERT(dentry != NULL);
-+      ASSERT(dtopd(dentry) != NULL);
-+      ASSERT((dtohd(dentry) != NULL) || (dtohd2(dentry) != NULL));
-+
-+/*    if(dtost(dentry) == MODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT(dtohd(dentry) != NULL); */
-+/*            ASSERT(dtohd(dentry)->d_inode != NULL); */
-+/*            ASSERT(dtohd2(dentry) != NULL); */
-+/*            ASSERT(dtohd2(dentry)->d_inode != NULL); */
-+/*    } */
-+/*    else if(dtost(dentry) == UNMODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT( */
-+/*    } */
-+      return 0;
-+}
-+
-+int check_mini_fo_file(file_t *file)
-+{
-+      ASSERT(file != NULL);
-+      ASSERT(ftopd(file) != NULL);
-+      ASSERT(file->f_dentry != NULL);
-+
-+      /* violent checking, check depending of state and type
-+       *      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {}
-+       */
-+      ASSERT((ftohf(file) != NULL) || (ftohf2(file) != NULL));
-+      return 0;
-+}
-+
-+int check_mini_fo_inode(inode_t *inode)
-+{
-+      ASSERT(inode != NULL);
-+      ASSERT(itopd(inode) != NULL);
-+      ASSERT((itohi(inode) != NULL) || (itohi2(inode) != NULL));
-+      return 0;
-+}
-+
-+/*
-+ * will walk a base path as provided by get_mini_fo_bpath and return
-+ * the (hopefully ;-) ) positive dentry of the renamed base dir.
-+ *
-+ * This does some work of path_init.
-+ */
-+dentry_t *bpath_walk(super_block_t *sb, char *bpath)
-+{
-+      int err;
-+        struct vfsmount *mnt;
-+      struct nameidata nd;
-+
-+      /* be paranoid */
-+      if(!bpath || bpath[0] != '/') {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid string.\n");
-+              return NULL;
-+      }
-+      if(!sb || !stopd(sb)) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid sb.\n");
-+              return NULL;
-+      }
-+
-+      /* fix this: how do I reach this lock?
-+       * read_lock(&current->fs->lock); */
-+      mnt = mntget(stopd(sb)->hidden_mnt);
-+      /* read_unlock(&current->fs->lock); */
-+
-+      err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-+
-+      /* validate */
-+      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-+              return NULL;
-+      }
-+      return nd.dentry;
-+}
-+
-+
-+/* returns the full path of the basefile incl. its name */
-+int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len)
-+{
-+      char *buf_walker;
-+      int len = 0;
-+      dentry_t *sky_walker;
-+
-+      if(!dentry || !dtohd(dentry)) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              len += sky_walker->d_name.len + 1 ; /* 1 for '/' */
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* 1 to oil the loop */
-+      *bpath = (char*)  kmalloc(len + 1, GFP_KERNEL);
-+      if(!*bpath) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: out of mem.\n");
-+              return -1;
-+      }
-+      buf_walker = *bpath+len; /* put it on last char */
-+      *buf_walker = '\n';
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              buf_walker -= sky_walker->d_name.len;
-+              strncpy(buf_walker,
-+                      sky_walker->d_name.name,
-+                      sky_walker->d_name.len);
-+              *(--buf_walker) = '/';
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* bpath_len doesn't count newline! */
-+      *bpath_len = len;
-+      return 0;
-+}
-+
-+int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                  dentry_t *src_dentry, struct vfsmount *src_mnt)
-+{
-+      void *buf;
-+      mm_segment_t old_fs;
-+      file_t *tgt_file;
-+      file_t *src_file;
-+      int bytes, len, tmp, err;
-+      err = 0;
-+
-+      if(!(tgt_dentry->d_inode && src_dentry->d_inode)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, neg. dentry passed.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dget(tgt_dentry);
-+      dget(src_dentry);
-+      mntget(tgt_mnt);
-+      mntget(src_mnt);
-+
-+      /* open file write only */
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      if(!tgt_file || IS_ERR(tgt_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-+              err = PTR_ERR(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* open file read only */
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      if(!src_file || IS_ERR(src_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-+              err = PTR_ERR(src_file);
-+
-+              /* close target file */
-+              fput(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* check if the filesystem(s) support read respective write */
-+      if(!src_file->f_op->read || !tgt_file->f_op->write) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, no fs read or write support.\n");
-+              err = -EPERM;
-+              goto out_close;
-+      }
-+
-+      /* allocate a page for transfering the data */
-+      buf = (void *) __get_free_page(GFP_KERNEL);
-+      if(!buf) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, out of kernel mem.\n");
-+              goto out_err;
-+      }
-+
-+      tgt_file->f_pos = 0;
-+      src_file->f_pos = 0;
-+
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+
-+      /* Doing this I assume that a read operation will return a full
-+       * buffer while there is still data to read, and a less than
-+       * full buffer when all data has been read.
-+       */
-+      bytes = len = PAGE_SIZE;
-+      while(bytes == len) {
-+              bytes = src_file->f_op->read(src_file, buf, len,
-+                                           &src_file->f_pos);
-+              tmp = tgt_file->f_op->write(tgt_file, buf, bytes,
-+                                          &tgt_file->f_pos);
-+              if(tmp != bytes) {
-+                      printk(KERN_CRIT "mini_fo_cp_cont: ERROR writing.\n");
-+                      goto out_close_unset;
-+              }
-+      }
-+
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+      fput(tgt_file);
-+      fput(src_file);
-+      goto out;
-+
-+ out_close_unset:
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+
-+ out_close:
-+      fput(tgt_file);
-+      fput(src_file);
-+
-+ out_err:
-+      dput(tgt_dentry);
-+      dput(src_dentry);
-+
-+      /* mk: not sure if this need to be done */
-+      mntput(tgt_mnt);
-+      mntput(src_mnt);
-+
-+ out:
-+      return err;
-+}
-+
-+/* mk:
-+ * ndl (no-duplicate list) stuff
-+ * This is used in mini_fo_readdir, to save the storage directory contents
-+ * and later when reading base, match them against the list in order
-+ * to avoid duplicates.
-+ */
-+
-+/* add a file specified by name and len to the ndl
-+ * Return values: 0 on success, <0 on failure.
-+ */
-+int ndl_add_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct ndl_entry *tmp_entry;
-+
-+      tmp_entry = (struct ndl_entry *)
-+              kmalloc(sizeof(struct ndl_entry), GFP_KERNEL);
-+      if(!tmp_entry) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+        tmp_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!tmp_entry->name) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+      strncpy(tmp_entry->name, name, len);
-+        tmp_entry->len = len;
-+
-+        list_add(&tmp_entry->list, &rd->ndl_list);
-+        rd->ndl_size++;
-+        return 0;
-+}
-+
-+/* delete all list entries and free memory */
-+void ndl_put_list(struct readdir_data *rd)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return;
-+      while(!list_empty(&rd->ndl_list)) {
-+              tmp = rd->ndl_list.next;
-+                list_del(tmp);
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+              kfree(tmp_entry->name);
-+                kfree(tmp_entry);
-+        }
-+      rd->ndl_size = 0;
-+}
-+
-+/* Check if a file specified by name and len is in the ndl
-+ * Return value: 0 if not in list, 1 if file is found in ndl.
-+ */
-+int ndl_check_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return 0;
-+
-+      list_for_each(tmp, &rd->ndl_list) {
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+                if(tmp_entry->len != len)
-+                        continue;
-+                if(!strncmp(tmp_entry->name, name, len))
-+                        return 1;
-+        }
-+        return 0;
-+}
-+
-+/* mk:
-+ * Recursive function to create corresponding directorys in the storage fs.
-+ * The function will build the storage directorys up to dentry.
-+ */
-+int build_sto_structure(dentry_t *dir, dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(dentry->d_parent != dir) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [1].\n");
-+              return 1;
-+      }
-+
-+              if(dtost(dir) != MODIFIED) {
-+              err = build_sto_structure(dir->d_parent, dentry->d_parent);
-+              if(err)
-+                      return err;
-+      }
-+
-+      /* ok, coming back again. */
-+      check_mini_fo_dentry(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(!hidden_sto_dentry) {
-+              /*
-+               * This is the case after creating the first
-+               * hidden_sto_dentry.
-+               * After one negative storage_dentry, all pointers to
-+               * hidden_storage dentries are set to NULL. We need to
-+               * create the negative dentry before we create the storage
-+               * file.
-+               */
-+              unsigned int len;
-+              const unsigned char *name;
-+              len = dtohd(dentry)->d_name.len;
-+              name = dtohd(dentry)->d_name.name;
-+              hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              dtohd2(dentry) = hidden_sto_dentry;
-+      }
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      /* lets be safe */
-+      if(dtohd2(dir) != hidden_sto_dir_dentry) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [2].\n");
-+              return 1;
-+      }
-+
-+      /* check for errors in lock_parent */
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if(IS_ERR(hidden_sto_dir_dentry)) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: lock_parent failed.\n");
-+              return err;
-+      }
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      dir->d_inode->i_mode);
-+
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [1].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return err;
-+      }
-+
-+      /* everything ok! */
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [2].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return 1;
-+      }
-+
-+      /* interpose the new inode and set new state */
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      dtopd(dentry)->state = MODIFIED;
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+      fist_copy_attr_timesizes(dir->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dir->d_inode->i_nlink++;
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+      return 0;
-+}
-+
-+
-+#if 0 /* unused */
-+
-+/*
-+ * Read "len" bytes from "filename" into "buf".
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_read_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+    /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDONLY, 0);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_read_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->read)
-+      return -2;  /* file(system) doesn't allow reads */
-+
-+    /* now read len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->read(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+
-+
-+/*
-+ * Write "len" bytes from "buf" to "filename"
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_write_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+                              /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDWR|O_CREAT, 0640);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_write_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->write)
-+      return -2;  /* file(system) doesn't allow writes */
-+
-+    /* now write len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->write(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+#endif /* unused */
-+
---- /dev/null
-+++ b/fs/mini_fo/ChangeLog
-@@ -0,0 +1,281 @@
-+2006-01-24  Markus Klotzbuecher  <mk@mary.denx.de>
-+
-+      * Add tons of ugly ifdefs to Ed L. Cashin's mutex patch to
-+          retain backwards compatibility.
-+
-+2006-01-24  Ed L. Cashin <ecashin@coraid.com>
-+
-+      * Support for the new mutex infrastructure
-+      (7892f2f48d165a34b0b8130c8a195dfd807b8cb6)
-+
-+2005-10-15  Markus Klotzbuecher  <mk@localhost.localdomain>
-+
-+      * Bugfix for a serious memory leak in mini_fo_follow_link.
-+
-+2005-09-21  Markus Klotzbuecher  <mk@mary>
-+
-+      * new release 0.6.1
-+
-+      * fix of a compiler warning due to changes in 2.6.13
-+
-+2005-09-21  Klaus Wenninger  <klaus.wenninger@siemens.com>
-+
-+      * file.c: readdir: fix for a bug that caused directory entries
-+          to show up twice when using storage filesystems such as
-+          minixfs or pramfs.
-+
-+2005-06-30  Eric Lammerts <eric@lammerts.org>
-+
-+      * fix for an oops when overwriting a binary thats beeing
-+          executed.
-+
-+2005-06-09    <mk@mary>
-+
-+      * Renamed overlay to mini_fo-overlay.
-+
-+      * Added mini_fo-merge script to allow merging of storage and base
-+      after making modifications.
-+
-+2005-05-22  root  <mk@mary>
-+
-+      * Added overlay script that allows to easily mount mini_fo ontop
-+      of a given base directory
-+
-+2005-05-10    <mk@mary>
-+
-+      * inode.c: xattr functions return -EOPNOSUPP instead of
-+          -ENOSUPP, what confuses "ls -l"
-+
-+      * Changed license from LGPL to GPL.
-+
-+2005-05-08  root  <mk@mary>
-+
-+      * Makefile: clean it up and added make install and make
-+          uninstall.
-+
-+2005-05-06    <mk@mary>
-+
-+      * merged devel branch back to main. [v0-6-0-pre3]
-+
-+      * removed unused files print.c and fist_ioctl. [devel-0-0-18]
-+
-+      * ioctl: removed fist_ioctl stuff, that is not needed for
-+          now.
-+
-+2005-05-03    <mk@mary>
-+
-+      * file.c: simplified mini_fo_open and mini_fo_setattr using
-+          new state changing functions. [devel-0-0-17]
-+
-+      * inode.c: Fixed getattr state bug (see below) in 2.4 function
-+          mini_fo_inode revalidate.
-+
-+      * inode.c: found an other bug in mini_fo_getattr. States are not
-+        reliable in this function, as a file can be opened, unlinked and
-+        the getattr function called. This results in a deleted dentry
-+        with an inode. Fix is to ignore states and simply use the inode
-+        available.
-+
-+2005-04-29    <mk@mary>
-+
-+      * file.c: Bugfix and cleanup in fasync and fsync. [devel-0-0-16]
-+
-+      * file.c: do not use mini_fo_lock so the generic version is
-+          used (I guess).
-+
-+      * inode.c: getattr, never call getattr on lower files, as this
-+          will cause the inum to change.
-+
-+      * inode.c: rename_reg_file renamed to rename_nondir, as it
-+          doesn't matter as long it't not a dir. Removed all
-+          rename_dev_file etc.
-+
-+      * tagged as devel-0-0-15
-+
-+      * inode.c: added support for chosing support for extended
-+          attrs at compile time by XATTR define in mini_fo.h .
-+
-+      * inode.c: fixed mini_fo_getattr to use mini_fo inode and not
-+          lower again, what avoids inode number changes that confused
-+          rm again. This is the proper solution.
-+
-+2005-04-24    <mk@mary>
-+
-+      * all files: updated Copyright notive to 2005. [devel-0-0-14]
-+
-+      * inode.c: fixed mini_fo_getattr to not change the inode
-+          number, even if lower files change.
-+
-+      * super.c: fixed a bug that caused deleted base file to show
-+          up suddenly after some time, or after creating a special
-+          file. The problem was that after some time or after special
-+          file creating sync_sb_inodes is called by the vfs, that
-+          called our mini_fo_put_inode. There was (wrongly) called
-+          __meta_put_lists, that nuked the lists, although the inode
-+          was going to continue its life. Moving __meta_put_lists to
-+          mini_fo_clear_inode, where an inode is really destroyed,
-+          solved the problem.
-+
-+
-+2005-04-23    <mk@mary>
-+
-+      * state.c, aux.c: more cleaning up and
-+          simplifications. [devel-0-0-13]
-+
-+      * inode.c: implemented mini_fo_getattr, that was required for
-+          2.6 because inode_revalidate has been remove there, and the
-+        old "du" bug returned.
-+
-+
-+2005-04-20    <mk@mary>
-+
-+      * aux.c: get_neg_sto_dentry(): allow to be called for dentries
-+          in state UNMODIFIED, NON_EXISTANT _and_ DELETED.
-+
-+2005-04-19    <mk@mary>
-+
-+      * Fixed a bug under 2.6 that caused files deleted via mini_fo
-+          not to be deleted properly and therefore the fs filled up
-+          untill no memory was left. [devel-0-0-12]
-+
-+      * Added basic hard link support. This means that creating
-+          hardlinks will work, but existing ones will be treated as
-+          individual files. [devel-0-0-11]
-+
-+2005-04-17    <mk@mary>
-+
-+      * Bugfixes
-+
-+2005-04-13  root  <mk@mary>
-+
-+      * Added file state.c for the state transition
-+          functions. Doesn't work very well yet, though...
-+
-+2005-04-12    <mk@mary>
-+
-+      * Porting to 2.6 started, which is easier than expected, also
-+          due to Olivier previous work.
-+
-+2005-04-08    <mk@mary>
-+
-+      * Fixed the bug that caused du to return invalid sizes of
-+          directory trees. The problem was that
-+          mini_fo_inode_revalidate didn't always copy the attributes
-+          from the base inode properly.
-+
-+2005-04-01  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Merged devel branch back to main trunk and updated the
-+          RELEASE notes. This will be 0-6-0-pre1.
-+
-+2005-03-31  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed some bugs in rename_reg_file, that only showed up in
-+          the kernel compile test. Kernel compiles cleanly ontop of
-+          mini_fo, now also make mrproper etc. work. Seems pretty stable.
-+
-+2005-03-28  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Many, many directory renaming bugfixes and a lot of other
-+          cleanup. Dir renaming seems to work relatively stable.
-+
-+2005-03-22  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing lightweight directory renaming. Some
-+          basic testing indicates it works fine.
-+        Next is to implement testcases for the testsuite and confirm
-+          everything is really working ok.
-+
-+2005-03-18  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing meta.c stuff required for directory
-+          renaming.
-+
-+2005-03-17  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed all compile warnings + an extremly old bug that
-+          somehow crept in while reworking the wol stuff to the META
-+          system. Turning on -Werror again... :-)
-+
-+      * Fixed some bugs in the new rename_reg_file function.
-+
-+      * Rewrote mini_fo rename and split it into several
-+          subfunctions, that handle the different types
-+          seperately. Rewrote the regular file function aswell, as it
-+          was implemented somewhat inefficient.
-+
-+2005-03-16  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Implemented new META subsystem, removed old WOL stuff in favor
-+        if it.
-+
-+      * After some basic testing everything seems ok...
-+
-+2005-03-11  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Renaming a non regular file caused trouble because I always
-+        tried to copy the contents. Now I only do this for regular
-+        files. mini_fo_rename still isn't implemented properly, renaming
-+        of device files, symlinks etc. results in a empty regular file
-+        instead of the proper type.
-+
-+      * Directory renaming suddenly works! What a surprise! I guess
-+          this is because renaming is implemented as making a copy and
-+          removing the original. Still this might not work
-+          everywhere...
-+
-+2005-03-09  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Bugfix, when a mini_fo directory that exists in storage
-+        (state: MODIFIED, CREATED and DEL_REWRITTEN) is deleted, a
-+        possibly existing WOL file contained in it needs to be
-+        deleted too.
-+
-+      * Starting cleanup: defined state names in order to get rid of
-+          the state numbers.
-+
-+2005-03-08  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Makefile fix, fist_ioctl was built against wrong sources if ARCH=um
-+
-+      * Fixed a bug in dentry.c, mini_fo_d_hash. In state 4 =
-+          DEL_REWRITTEN the hash was calculated from the base dentry,
-+          which was wrong and and caused assertions in
-+          __mini_fo_hidden_dentry to fail.
-+
-+2005-02-21    <mk@mary>
-+
-+      * Implemented directory deleting (inode.c)
-+
-+      * main.c: made mini_fo_parse_options a little more robust.
-+
-+2004-12-22    <mk@mary>
-+
-+      * Makefile cleanup and uml stuff, removed unneccessary files
-+
-+      * Created a new and hopefully more informative README
-+
-+      * CHANGELOG: created a new CHANGELOG and added old entries reversely
-+
-+
-+2004-10-24 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Fix: owner and group where not correctly copied from base to
-+          storage.
-+
-+
-+2004-10-05 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of fsync, fasync and lock mini_fo functions.
-+
-+
-+2004-09-29 Bob Lee <bob@pantasys.com>
-+
-+      * Fix of a serious pointer bug
-+
-+
-+2004-09-28 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of mini_fo_mknod and mini_fo_rename, support
-+          for device files.
-+
---- /dev/null
-+++ b/fs/mini_fo/dentry.c
-@@ -0,0 +1,244 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/*
-+ * THIS IS A BOOLEAN FUNCTION: returns 1 if valid, 0 otherwise.
-+ */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_d_revalidate(dentry_t *dentry, struct nameidata *nd)
-+#else
-+mini_fo_d_revalidate(dentry_t *dentry, int flags)
-+#endif
-+{
-+      int err1 = 1; /* valid = 1, invalid = 0 */
-+      int err2 = 1;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      hidden_dentry  = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry &&
-+         hidden_dentry->d_op &&
-+         hidden_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, nd);
-+#else
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, flags);
-+#endif
-+      }
-+      if(hidden_sto_dentry &&
-+         hidden_sto_dentry->d_op &&
-+         hidden_sto_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           nd);
-+#else
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           flags);
-+#endif
-+      }
-+
-+      /* mk: if one of the lower level dentries are valid,
-+       * the mini_fo dentry is too.
-+       */
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_d_hash(dentry_t *dentry, qstr_t *name)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry);
-+       * hidden_sto_dentry = mini_fo_hidden_sto_dentry(dentry); */
-+
-+      /* state 1, 3, 4, 5: build the hash for the storage dentry */
-+      if((dtopd(dentry)->state == MODIFIED) ||
-+         (dtopd(dentry)->state == CREATED) ||
-+         (dtopd(dentry)->state == DEL_REWRITTEN) ||
-+         (dtopd(dentry)->state == DELETED)) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 2: build the hash for the base dentry */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 6: build hash for the dentry that exists */
-+      if(dtopd(dentry)->state == NON_EXISTANT) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+                      goto out;
-+              }
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+                      goto out;
-+              }
-+      }
-+
-+      printk(KERN_CRIT "mini_fo: d_hash: invalid state detected.\n");
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_d_compare(dentry_t *dentry, qstr_t *a, qstr_t *b)
-+{
-+      int err;
-+      dentry_t *hidden_dentry=NULL;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry); */
-+      if(dtohd2(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else if(dtohd(dentry))
-+              hidden_dentry = dtohd(dentry);
-+
-+      if (hidden_dentry && hidden_dentry->d_op && hidden_dentry->d_op->d_compare) {
-+              err = hidden_dentry->d_op->d_compare(hidden_dentry, a, b);
-+      } else {
-+              err = ((a->len != b->len) || memcmp(a->name, b->name, b->len));
-+      }
-+
-+      return err;
-+}
-+
-+
-+int
-+mini_fo_d_delete(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      int err = 0;
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_delete: negative dentry passed.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              if(hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_delete) {
-+                      err = hidden_dentry->d_op->d_delete(hidden_dentry);
-+              }
-+      }
-+      if(hidden_sto_dentry) {
-+              if(hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_delete) {
-+                      err = hidden_sto_dentry->d_op->d_delete(hidden_sto_dentry);
-+              }
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+void
-+mini_fo_d_release(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_release: no private data.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_dentry);
-+      }
-+      if(hidden_sto_dentry) {
-+                /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_sto_dentry);
-+      }
-+
-+      /* free private data (mini_fo_dentry_info) here */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* just to be safe */
-+ out:
-+      return;
-+}
-+
-+
-+/*
-+ * we don't really need mini_fo_d_iput, because dentry_iput will call iput() if
-+ * mini_fo_d_iput is not defined. We left this implemented for ease of
-+ * tracing/debugging.
-+ */
-+void
-+mini_fo_d_iput(dentry_t *dentry, inode_t *inode)
-+{
-+      iput(inode);
-+}
-+
-+
-+struct dentry_operations mini_fo_dops = {
-+      d_revalidate:   mini_fo_d_revalidate,
-+      d_hash:         mini_fo_d_hash,
-+      d_compare:              mini_fo_d_compare,
-+      d_release:              mini_fo_d_release,
-+      d_delete:               mini_fo_d_delete,
-+      d_iput:         mini_fo_d_iput,
-+};
---- /dev/null
-+++ b/fs/mini_fo/file.c
-@@ -0,0 +1,713 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1))
-+
-+/*******************
-+ * File Operations *
-+ *******************/
-+
-+STATIC loff_t
-+mini_fo_llseek(file_t *file, loff_t offset, int origin)
-+{
-+      loff_t err;
-+      file_t *hidden_file = NULL;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to llseek from a directory */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      /* always set hidden position to this one */
-+      hidden_file->f_pos = file->f_pos;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      memcpy(&(hidden_file->f_ra),
-+             &(file->f_ra),
-+             sizeof(struct file_ra_state));
-+#else
-+      if (file->f_reada) { /* update readahead information if needed */
-+              hidden_file->f_reada = file->f_reada;
-+              hidden_file->f_ramax = file->f_ramax;
-+              hidden_file->f_raend = file->f_raend;
-+              hidden_file->f_ralen = file->f_ralen;
-+              hidden_file->f_rawin = file->f_rawin;
-+      }
-+#endif
-+      if (hidden_file->f_op && hidden_file->f_op->llseek)
-+              err = hidden_file->f_op->llseek(hidden_file, offset, origin);
-+      else
-+              err = generic_file_llseek(hidden_file, offset, origin);
-+
-+      if (err < 0)
-+              goto out;
-+
-+      if (err != file->f_pos) {
-+              file->f_pos = err;
-+              // ION maybe this?
-+              //      file->f_pos = hidden_file->f_pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              file->f_reada = 0;
-+#endif
-+              file->f_version++;
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* mk: fanout capable */
-+STATIC ssize_t
-+mini_fo_read(file_t *file, char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      loff_t pos = *ppos;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to read from a directory */
-+              /* printk(KERN_CRIT "mini_fo_read: ERROR: trying to read data from a directory.\n"); */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->read)
-+              goto out;
-+
-+      err = hidden_file->f_op->read(hidden_file, buf, count, &pos);
-+      *ppos = pos;
-+
-+      if (err >= 0) {
-+              /* atime should also be updated for reads of size zero or more */
-+              fist_copy_attr_atime(file->f_dentry->d_inode,
-+                                   hidden_file->f_dentry->d_inode);
-+      }
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * MAJOR HACK
-+       * because pread() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on read() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+      if (hidden_file->f_reada) { /* update readahead information if needed */
-+              file->f_reada = hidden_file->f_reada;
-+              file->f_ramax = hidden_file->f_ramax;
-+              file->f_raend = hidden_file->f_raend;
-+              file->f_ralen = hidden_file->f_ralen;
-+              file->f_rawin = hidden_file->f_rawin;
-+      }
-+#else
-+      memcpy(&(file->f_ra),&(hidden_file->f_ra),sizeof(struct file_ra_state));
-+#endif
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* this mini_fo_write() does not modify data pages! */
-+STATIC ssize_t
-+mini_fo_write(file_t *file, const char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      loff_t pos = *ppos;
-+
-+      /* mk: fan out: */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      /* This is bad! We have no storage file to write to. This
-+                       * should never happen because if a file is opened for
-+                       * writing, a copy should have been made earlier.
-+                       */
-+                      printk(KERN_CRIT "mini_fo: write : ERROR, no storage file to write.\n");
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      inode = file->f_dentry->d_inode;
-+      hidden_inode = itohi2(inode);
-+      if(!hidden_inode) {
-+              printk(KERN_CRIT "mini_fo: write: no sto inode found, not good.\n");
-+              goto out;
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->write)
-+              goto out;
-+
-+      /* adjust for append -- seek to the end of the file */
-+      if (file->f_flags & O_APPEND)
-+              pos = inode->i_size;
-+
-+      err = hidden_file->f_op->write(hidden_file, buf, count, &pos);
-+
-+      /*
-+       * copy ctime and mtime from lower layer attributes
-+       * atime is unchanged for both layers
-+       */
-+      if (err >= 0)
-+              fist_copy_attr_times(inode, hidden_inode);
-+
-+      *ppos = pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * XXX: MAJOR HACK
-+       *
-+       * because pwrite() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on write() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+#endif
-+      /* update this inode's size */
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+ out:
-+      return err;
-+}
-+
-+/* Global variable to hold a file_t pointer.
-+ * This serves to allow mini_fo_filldir function to know which file is
-+ * beeing read, which is required for two reasons:
-+ *
-+ *   - be able to call wol functions in order to avoid listing deleted
-+ *     base files.
-+ *   - if we're reading a directory which is in state 1, we need to
-+ *     maintain a list (in mini_fo_filldir) of which files allready
-+ *     have been copied to userspace,to detect files existing in base
-+ *     and storage and not list them twice.
-+ */
-+filldir_t mini_fo_filldir_orig;
-+file_t *mini_fo_filldir_file;
-+
-+/* mainly copied from fs/readdir.c */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                u64 ino, unsigned int d_type)
-+#else
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                ino_t ino, unsigned int d_type)
-+#endif
-+{
-+      struct getdents_callback * buf = (struct getdents_callback *) __buf;
-+      file_t* file = mini_fo_filldir_file;
-+
-+      /* In theses states we filter meta files in storage (WOL) */
-+      if(file && (dtopd(file->f_dentry)->state == MODIFIED ||
-+                  dtopd(file->f_dentry)->state == CREATED ||
-+                  dtopd(file->f_dentry)->state == DEL_REWRITTEN)) {
-+
-+              int tmp = strlen(META_FILENAME);
-+              if(tmp  == namlen) {
-+                      if(!strncmp(name, META_FILENAME, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      /* check if we are merging the contents of storage and base */
-+      if(file && dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* check if we are still reading storage contents, if
-+               * yes, we just save the name of the file for duplicate
-+               * checking later. */
-+
-+              if(!ftopd(file)->rd.sto_done) {
-+                      /* put file into ndl list */
-+                      if(ndl_add_entry(&ftopd(file)->rd, name, namlen))
-+                              printk(KERN_CRIT "mini_fo_filldir: Error adding to ndl.\n");
-+              } else {
-+                      /* check if file has been deleted */
-+                      if(meta_check_d_entry(file->f_dentry, name, namlen))
-+                              return 0;
-+
-+                      /* do duplicate checking */
-+                      if(ndl_check_entry(&ftopd(file)->rd, name, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      return mini_fo_filldir_orig(buf, name, namlen, offset, ino, d_type);
-+}
-+
-+
-+STATIC int
-+mini_fo_readdir(file_t *file, void *dirent, filldir_t filldir)
-+{
-+      int err = 0;/* mk: ??? -ENOTDIR; */
-+      file_t *hidden_file = NULL;
-+      file_t *hidden_sto_file = NULL;
-+      inode_t *inode;
-+      struct getdents_callback *buf;
-+      int oldcount;
-+
-+#if defined(FIST_FILTER_NAME) || defined(FIST_FILTER_SCA)
-+      struct mini_fo_getdents_callback buf;
-+#endif /* FIST_FILTER_NAME || FIST_FILTER_SCA */
-+
-+      buf = (struct getdents_callback *) dirent;
-+      oldcount = buf->count;
-+      inode = file->f_dentry->d_inode;
-+      mini_fo_filldir_file = file;
-+      mini_fo_filldir_orig = filldir;
-+
-+      ftopd(file)->rd.sto_done = 0;
-+      do {
-+              if (ftopd(file) != NULL) {
-+                      if(ftohf2(file)) {
-+                              hidden_sto_file = ftohf2(file);
-+                              err = vfs_readdir(hidden_sto_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_sto_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_sto_file->f_dentry->d_inode);
-+                              /* not finshed yet, we'll be called again */
-+                              if (buf->count != oldcount)
-+                                      break;
-+                      }
-+
-+                      ftopd(file)->rd.sto_done = 1;
-+
-+                      if(ftohf(file)) {
-+                              hidden_file = ftohf(file);
-+                              err = vfs_readdir(hidden_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_file->f_dentry->d_inode);
-+                      }
-+
-+              }
-+      } while (0);
-+
-+      /* mk:
-+       * we need to check if all the directory data has been copied to userspace,
-+       * or if we will be called again by userspace to complete the operation.
-+       */
-+      if(buf->count == oldcount) {
-+              ndl_put_list(&ftopd(file)->rd);
-+      }
-+
-+      /* unset this, safe */
-+      mini_fo_filldir_file = NULL;
-+      return err;
-+}
-+
-+
-+STATIC unsigned int
-+mini_fo_poll(file_t *file, poll_table *wait)
-+{
-+      unsigned int mask = DEFAULT_POLLMASK;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->poll)
-+              goto out;
-+
-+      mask = hidden_file->f_op->poll(hidden_file, wait);
-+
-+ out:
-+      return mask;
-+}
-+
-+/* FIST-LITE special version of mmap */
-+STATIC int
-+mini_fo_mmap(file_t *file, vm_area_t *vma)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      /* fanout capability */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      ASSERT(hidden_file != NULL);
-+      ASSERT(hidden_file->f_op != NULL);
-+      ASSERT(hidden_file->f_op->mmap != NULL);
-+
-+      vma->vm_file = hidden_file;
-+      err = hidden_file->f_op->mmap(hidden_file, vma);
-+      get_file(hidden_file); /* make sure it doesn't get freed on us */
-+      fput(file);            /* no need to keep extra ref on ours */
-+
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_open(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      int hidden_flags;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      /* fanout stuff */
-+      file_t *hidden_sto_file = NULL;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      __ftopd(file) =
-+              kmalloc(sizeof(struct mini_fo_file_info), GFP_KERNEL);
-+      if (!ftopd(file)) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* init the readdir_helper structure */
-+      INIT_LIST_HEAD(&ftopd(file)->rd.ndl_list);
-+      ftopd(file)->rd.ndl_size = 0;
-+
-+      /* In certain paths this could stay uninitalized and cause trouble */
-+      ftohf(file) = NULL;
-+      ftohf2(file) = NULL;
-+      hidden_flags = file->f_flags;
-+
-+      /* create storage files? */
-+      if(dtost(file->f_dentry) == UNMODIFIED) {
-+              if(!IS_WRITE_FLAG(file->f_flags)) {
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+                      /* dentry_open will decrement mnt refcnt if err.
-+                       * otherwise fput() will do an mntput() for us upon file close. */
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file;      /* link two files */
-+                      goto out;
-+              }
-+              else {
-+                      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+                              err = dir_unmod_to_mod(file->f_dentry);
-+                      } else
-+                              err = nondir_unmod_to_mod(file->f_dentry, 1);
-+
-+                      if (err) {
-+                              printk("mini_fo_open: ERROR creating storage file.\n");
-+                              goto out;
-+                      }
-+              }
-+      }
-+      hidden_sto_dentry = dtohd2(file->f_dentry);
-+      dget(hidden_sto_dentry);
-+
-+      if(dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* Directorys are special, interpose on both lower level files */
-+              if(S_ISDIR(itohi(inode)->i_mode)) {
-+                      /* check for invalid file types of lower level files */
-+                      if(!(S_ISDIR(itohi(inode)->i_mode) && S_ISDIR(itohi2(inode)->i_mode))) {
-+                              printk(KERN_CRIT "mini_fo_open: meta data corruption detected.\n");
-+                              dput(hidden_sto_dentry);
-+                              err = -EINVAL;
-+                              goto out;
-+                      }
-+
-+                      /* lower level directorys are ok, open the base file */
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              dput(hidden_sto_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file; /* link the two files */
-+              }
-+      }
-+
-+      if(!exists_in_storage(file->f_dentry)) {
-+              printk(KERN_CRIT "mini_fo_open: invalid file state detected.\n");
-+              err = -EINVAL;
-+              dput(hidden_sto_dentry);
-+
-+              /* If the base file has been opened, we need to close it here */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* ok, now we can safely open the storage file */
-+      mntget(stopd(inode->i_sb)->hidden_mnt2);
-+      hidden_sto_file = dentry_open(hidden_sto_dentry,
-+                                    stopd(inode->i_sb)->hidden_mnt2,
-+                                    hidden_flags);
-+
-+      /* dentry_open dputs the dentry if it fails */
-+      if (IS_ERR(hidden_sto_file)) {
-+              err = PTR_ERR(hidden_sto_file);
-+              /* close base file if open */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+      ftohf2(file) = hidden_sto_file; /* link storage file */
-+
-+ out:
-+      if (err < 0 && ftopd(file)) {
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_flush(file_t *file, fl_owner_t id)
-+#else
-+mini_fo_flush(file_t *file)
-+#endif
-+{
-+      int err1 = 0;           /* assume ok (see open.c:close_fp) */
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      /* mk: we don't do any state checking here, as its not worth the time.
-+       * Just flush the lower level files if they exist.
-+       */
-+      if(ftopd(file) != NULL) {
-+              if(ftohf(file) != NULL) {
-+                      hidden_file = ftohf(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err1 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err1 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+              if(ftohf2(file) != NULL) {
-+                      hidden_file = ftohf2(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err2 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err2 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+      }
-+      return (err1 | err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_release(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf(file)) {
-+                      hidden_file = ftohf(file);
-+                      fput(hidden_file);
-+              }
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+                      fput(hidden_file);
-+              }
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+mini_fo_fsync(file_t *file, dentry_t *dentry, int datasync)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+
-+      check_mini_fo_file(file);
-+
-+      if ((hidden_file = ftohf(file)) != NULL) {
-+              hidden_dentry = dtohd(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err1 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+
-+      if ((hidden_file = ftohf2(file)) != NULL) {
-+              hidden_dentry = dtohd2(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err2 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+      else
-+              goto err;
-+
-+err:
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_fasync(int fd, file_t *file, int flag)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      if((hidden_file = ftohf(file)) != NULL) {
-+              err1 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+      if((hidden_file = ftohf2(file)) != NULL) {
-+              err2 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+
-+      return (err1 || err2);
-+}
-+
-+
-+
-+struct file_operations mini_fo_dir_fops =
-+      {
-+              read:   generic_read_dir,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed lock:     mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
-+
-+struct file_operations mini_fo_main_fops =
-+      {
-+              llseek: mini_fo_llseek,
-+              read:   mini_fo_read,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed: lock:    mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/fist.h
-@@ -0,0 +1,252 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __FIST_H_
-+#define __FIST_H_
-+
-+/*
-+ * KERNEL ONLY CODE:
-+ */
-+#ifdef __KERNEL__
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
-+#include <linux/autoconf.h>
-+#else
-+#include <linux/config.h>
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#ifdef CONFIG_MODVERSIONS
-+# define MODVERSIONS
-+# include <linux/modversions.h>
-+#endif /* CONFIG_MODVERSIONS */
-+#endif /* KERNEL_VERSION < 2.6.0 */
-+#include <linux/sched.h>
-+#include <linux/kernel.h>
-+#include <linux/mm.h>
-+#include <linux/string.h>
-+#include <linux/stat.h>
-+#include <linux/errno.h>
-+#include <linux/wait.h>
-+#include <linux/limits.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#include <linux/locks.h>
-+#else
-+#include <linux/buffer_head.h>
-+#include <linux/pagemap.h>
-+#include <linux/namei.h>
-+#include <linux/module.h>
-+#include <linux/mount.h>
-+#include <linux/page-flags.h>
-+#include <linux/writeback.h>
-+#include <linux/statfs.h>
-+#endif
-+#include <linux/smp.h>
-+#include <linux/smp_lock.h>
-+#include <linux/file.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/poll.h>
-+#include <linux/list.h>
-+#include <linux/init.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
-+#include <linux/xattr.h>
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#include <linux/security.h>
-+#endif
-+
-+#include <linux/swap.h>
-+
-+#include <asm/system.h>
-+/* #include <asm/segment.h> */
-+#include <asm/mman.h>
-+#include <linux/seq_file.h>
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* those mapped to ATTR_* were copied from linux/fs.h */
-+#define FA_MODE               ATTR_MODE
-+#define FA_UID                ATTR_UID
-+#define FA_GID                ATTR_GID
-+#define FA_SIZE               ATTR_SIZE
-+#define FA_ATIME      ATTR_ATIME
-+#define FA_MTIME      ATTR_MTIME
-+#define FA_CTIME      ATTR_CTIME
-+#define FA_ATIME_SET  ATTR_ATIME_SET
-+#define FA_MTIME_SET  ATTR_MTIME_SET
-+#define FA_FORCE      ATTR_FORCE
-+#define FA_ATTR_FLAGS ATTR_ATTR_FLAG
-+
-+/* must be greater than all other ATTR_* flags! */
-+#define FA_NLINK      2048
-+#define FA_BLKSIZE    4096
-+#define FA_BLOCKS     8192
-+#define FA_TIMES      (FA_ATIME|FA_MTIME|FA_CTIME)
-+#define FA_ALL                0
-+
-+/* macros to manage changes between kernels */
-+#define INODE_DATA(i) (&(i)->i_data)
-+
-+#define MIN(x,y) ((x < y) ? (x) : (y))
-+#define MAX(x,y) ((x > y) ? (x) : (y))
-+#define MAXPATHLEN PATH_MAX
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5)
-+# define lookup_one_len(a,b,c) lookup_one(a,b)
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5) */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8)
-+# define generic_file_llseek default_llseek
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8) */
-+
-+#ifndef SEEK_SET
-+# define SEEK_SET 0
-+#endif /* not SEEK_SET */
-+
-+#ifndef SEEK_CUR
-+# define SEEK_CUR 1
-+#endif /* not SEEK_CUR */
-+
-+#ifndef SEEK_END
-+# define SEEK_END 2
-+#endif /* not SEEK_END */
-+
-+#ifndef DEFAULT_POLLMASK
-+# define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
-+#endif /* not DEFAULT_POLLMASK */
-+
-+/* XXX: fix this so fistgen generates kfree() code directly */
-+#define kfree_s(a,b) kfree(a)
-+
-+/*
-+ * TYPEDEFS:
-+ */
-+typedef struct dentry dentry_t;
-+typedef struct file file_t;
-+typedef struct inode inode_t;
-+typedef inode_t vnode_t;
-+typedef struct page page_t;
-+typedef struct qstr qstr_t;
-+typedef struct super_block super_block_t;
-+typedef super_block_t vfs_t;
-+typedef struct vm_area_struct vm_area_t;
-+
-+
-+/*
-+ * EXTERNALS:
-+ */
-+
-+#define FPPF(str,page) printk("PPF %s 0x%x/%d: Lck:%d Err:%d Ref:%d Upd:%d Other::%d:%d:%d:%d:\n", \
-+              str, \
-+              (int) page, \
-+              (int) page->index, \
-+              (PageLocked(page) ? 1 : 0), \
-+              (PageError(page) ? 1 : 0), \
-+              (PageReferenced(page) ? 1 : 0), \
-+              (Page_Uptodate(page) ? 1 : 0), \
-+              (PageDecrAfter(page) ? 1 : 0), \
-+              (PageSlab(page) ? 1 : 0), \
-+              (PageSwapCache(page) ? 1 : 0), \
-+              (PageReserved(page) ? 1 : 0) \
-+              )
-+#define EZKDBG printk("EZK %s:%d:%s\n",__FILE__,__LINE__,__FUNCTION__)
-+#if 0
-+# define EZKDBG1 printk("EZK %s:%d\n",__FILE__,__LINE__)
-+#else
-+# define EZKDBG1
-+#endif
-+
-+extern int fist_get_debug_value(void);
-+extern int fist_set_debug_value(int val);
-+#if 0 /* mini_fo doesn't need these */
-+extern void fist_dprint_internal(int level, char *str,...);
-+extern void fist_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_print_inode(char *str, const inode_t *inode);
-+extern void fist_print_file(char *str, const file_t *file);
-+extern void fist_print_buffer_flags(char *str, struct buffer_head *buffer);
-+extern void fist_print_page_flags(char *str, page_t *page);
-+extern void fist_print_page_bytes(char *str, page_t *page);
-+extern void fist_print_pte_flags(char *str, const page_t *page);
-+extern void fist_checkinode(inode_t *inode, char *msg);
-+extern void fist_print_sb(char *str, const super_block_t *sb);
-+
-+/* Â§$% by mk: special debug functions */
-+extern void fist_mk_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_mk_print_inode(char *str, const inode_t *inode);
-+
-+extern char *add_indent(void);
-+extern char *del_indent(void);
-+#endif/* mini_fo doesn't need these */
-+
-+
-+#define STATIC
-+#define ASSERT(EX)    \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED: %s at %s:%d (%s)\n", #EX,   \
-+             __FILE__, __LINE__, __FUNCTION__);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+/* same ASSERT, but tell me who was the caller of the function */
-+#define ASSERT2(EX)   \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED (caller): %s at %s:%d (%s)\n", #EX,  \
-+             file, line, func);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+
-+#if 0 /* mini_fo doesn't need these */
-+#define dprintk(format, args...) printk(KERN_DEBUG format, ##args)
-+#define fist_dprint(level, str, args...) fist_dprint_internal(level, KERN_DEBUG str, ## args)
-+#define print_entry_location() fist_dprint(4, "%sIN:  %s %s:%d\n", add_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_location() fist_dprint(4, "%s OUT: %s %s:%d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_status(status) fist_dprint(4, "%s OUT: %s %s:%d, STATUS: %d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, status)
-+#define print_exit_pointer(status) \
-+do { \
-+  if (IS_ERR(status)) \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: %ld\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+  else \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: 0x%x\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+} while (0)
-+#endif/* mini_fo doesn't need these */
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/*
-+ * DEFINITIONS FOR USER AND KERNEL CODE:
-+ * (Note: ioctl numbers 1--9 are reserved for fistgen, the rest
-+ *  are auto-generated automatically based on the user's .fist file.)
-+ */
-+# define FIST_IOCTL_GET_DEBUG_VALUE   _IOR(0x15, 1, int)
-+# define FIST_IOCTL_SET_DEBUG_VALUE   _IOW(0x15, 2, int)
-+
-+#endif /* not __FIST_H_ */
---- /dev/null
-+++ b/fs/mini_fo/inode.c
-@@ -0,0 +1,1564 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = create_sto_reg_file(dentry, mode, nd);
-+#else
-+      err = create_sto_reg_file(dentry, mode);
-+#endif
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC dentry_t *
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry, struct nameidata* nd)
-+#else
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry)
-+#endif
-+{
-+      int err = 0;
-+      dentry_t *hidden_dir_dentry;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      /* whiteout flag */
-+      int del_flag = 0;
-+      char *bpath = NULL;
-+
-+      const char *name;
-+      unsigned int namelen;
-+
-+      /* Don't allow lookups of META-files */
-+      namelen = strlen(META_FILENAME);
-+      if(namelen == dentry->d_name.len) {
-+              if(!strncmp(dentry->d_name.name, META_FILENAME, namelen)) {
-+                      err = -ENOENT;
-+                      goto out;
-+              }
-+      }
-+
-+      hidden_dir_dentry = dtohd(dentry->d_parent);
-+      hidden_sto_dir_dentry = dtohd2(dentry->d_parent);
-+
-+      name = dentry->d_name.name;
-+      namelen = dentry->d_name.len;
-+
-+      /* must initialize dentry operations */
-+      dentry->d_op = &mini_fo_dops;
-+
-+      /* setup the del_flag */
-+      del_flag = __meta_check_d_entry(dir, name, namelen);
-+      bpath = __meta_check_r_entry(dir, name, namelen);
-+
-+      /* perform the lookups of base and storage files:
-+       *
-+       * This caused some serious trouble, as a lookup_one_len passing
-+       * a negative dentry oopses. Solution is to only do the lookup
-+       * if the dentry is positive, else we set it to NULL
-+       * More trouble, who said a *_dir_dentry can't be NULL?
-+       */
-+      if(bpath) {
-+              /* Cross-Interposing (C), yeah! */
-+              hidden_dentry = bpath_walk(dir->i_sb, bpath);
-+              if(!hidden_dentry || !hidden_dentry->d_inode) {
-+                      printk(KERN_CRIT "mini_fo_lookup: bpath_walk failed.\n");
-+                      err= -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* this can be set up safely without fear of spaghetti
-+               * interposing as it is only used for copying times */
-+              hidden_dir_dentry = hidden_dentry->d_parent;
-+              kfree(bpath);
-+      }
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+              hidden_dentry =
-+                      lookup_one_len(name, hidden_dir_dentry, namelen);
-+      else
-+              hidden_dentry = NULL;
-+
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+              hidden_sto_dentry =
-+                      lookup_one_len(name, hidden_sto_dir_dentry, namelen);
-+      else
-+              hidden_sto_dentry =  NULL;
-+
-+      /* catch error in lookup */
-+      if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-+              /* mk: we need to call dput on the dentry, whose
-+               * lookup_one_len operation failed, in order to avoid
-+               * unmount trouble.
-+               */
-+              if(IS_ERR(hidden_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from base dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_dentry);
-+              } else {
-+                      dput(hidden_dentry);
-+              }
-+              if(IS_ERR(hidden_sto_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from storage dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_sto_dentry);
-+              } else {
-+                      dput(hidden_sto_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* allocate dentry private data */
-+      __dtopd(dentry) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+
-+      if (!dtopd(dentry)) {
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      /* check for different states of the mini_fo file to be looked up. */
-+
-+      /* state 1, file has been modified */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              /* update parent directory's atime */
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = MODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state1).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 2, file is unmodified */
-+      if(hidden_dentry && hidden_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = UNMODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry; /* could be negative */
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state2).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 3, file has been newly created */
-+      if(hidden_sto_dentry && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = CREATED;
-+              dtohd(dentry) = hidden_dentry; /* could be negative */
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state3).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+
-+      /* state 4, file has deleted and created again. */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         hidden_sto_dentry->d_inode && del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = DEL_REWRITTEN;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(NULL,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state4).\n");
-+                      goto out_free;
-+              }
-+              /* We will never need this dentry again, as the file has been
-+               * deleted from base */
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 5, file has been deleted in base */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         !hidden_sto_dentry->d_inode && del_flag) {
-+
-+              /* check which parents atime we need for updating */
-+              if(hidden_sto_dir_dentry->d_inode)
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_sto_dir_dentry->d_inode);
-+              else
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = DELETED;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              /* add negative dentry to dcache to speed up lookups */
-+              d_add(dentry, NULL);
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 6, file does not exist */
-+      if(((hidden_dentry && !hidden_dentry->d_inode) ||
-+          (hidden_sto_dentry && !hidden_sto_dentry->d_inode)) && !del_flag)
-+              {
-+                      /* check which parents atime we need for updating */
-+                      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+                              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+                      else
-+                              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+                      dtopd(dentry)->state = NON_EXISTANT;
-+                      dtohd(dentry) = hidden_dentry;
-+                      dtohd2(dentry) = hidden_sto_dentry;
-+                      d_add(dentry, NULL);
-+                      goto out;
-+              }
-+
-+      /* if we get to here, were in an invalid state. bad. */
-+      printk(KERN_CRIT "mini_fo_lookup: ERROR, meta data corruption detected.\n");
-+
-+      /* end state checking */
-+ out_free:
-+      d_drop(dentry);         /* so that our bad dentry will get destroyed */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* be safe */
-+
-+ out_dput:
-+      if(hidden_dentry)
-+              dput(hidden_dentry);
-+      if(hidden_sto_dentry)
-+              dput(hidden_sto_dentry); /* drops usage count and marks for release */
-+
-+ out:
-+      /* initalize wol if file exists and is directory */
-+      if(dentry->d_inode) {
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      itopd(dentry->d_inode)->deleted_list_size = -1;
-+                      itopd(dentry->d_inode)->renamed_list_size = -1;
-+                      meta_build_lists(dentry);
-+              }
-+      }
-+      return ERR_PTR(err);
-+}
-+
-+
-+STATIC int
-+mini_fo_link(dentry_t *old_dentry, inode_t *dir, dentry_t *new_dentry)
-+{
-+      int err;
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_dir_dentry;
-+
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(dir);
-+
-+      /* no links to directorys and existing targets target allowed */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode) ||
-+         is_mini_fo_existant(new_dentry)) {
-+              err = -EPERM;
-+              goto out;
-+      }
-+
-+      /* bring it directly from unmod to del_rew */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              err = meta_add_d_entry(old_dentry->d_parent,
-+                                     old_dentry->d_name.name,
-+                                     old_dentry->d_name.len);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              dput(dtohd(old_dentry));
-+              dtohd(old_dentry) = NULL;
-+              dtost(old_dentry) = DEL_REWRITTEN;
-+      }
-+
-+      err = get_neg_sto_dentry(new_dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      /* was: hidden_dir_dentry = lock_parent(hidden_new_dentry); */
-+      hidden_dir_dentry = dget(hidden_new_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = vfs_link(hidden_old_dentry,
-+                     hidden_dir_dentry->d_inode,
-+                     hidden_new_dentry);
-+      if (err || !hidden_new_dentry->d_inode)
-+              goto out_lock;
-+
-+      dtost(new_dentry) = CREATED;
-+      err = mini_fo_tri_interpose(NULL, hidden_new_dentry, new_dentry, dir->i_sb, 0);
-+      if (err)
-+              goto out_lock;
-+
-+      fist_copy_attr_timesizes(dir, hidden_new_dentry->d_inode);
-+      /* propagate number of hard-links */
-+      old_dentry->d_inode->i_nlink = itohi2(old_dentry->d_inode)->i_nlink;
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_dir_dentry);
-+
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+      if (!new_dentry->d_inode)
-+              d_drop(new_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_unlink(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              err = nondir_mod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              err = nondir_unmod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              err = nondir_creat_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              err = nondir_del_rew_to_del(dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_unlink: ERROR, invalid state detected.\n");
-+
-+ out:
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+
-+      if(!err) {
-+              /* is this causing my pain? d_delete(dentry); */
-+              d_drop(dentry);
-+      }
-+
-+      dput(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_symlink(inode_t *dir, dentry_t *dentry, const char *symname)
-+{
-+      int err=0;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        umode_t mode;
-+#endif
-+
-+      /* Fail if the symlink file exists */
-+      if(!(dtost(dentry) == DELETED ||
-+           dtost(dentry) == NON_EXISTANT)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      dget(hidden_sto_dentry);
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      mode = S_IALLUGO;
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry, symname, mode);
-+#else
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry,
-+                        symname);
-+#endif
-+      if (err || !hidden_sto_dentry->d_inode)
-+                goto out_lock;
-+
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        } else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+        /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+        dput(hidden_sto_dentry);
-+        if (!dentry->d_inode)
-+                d_drop(dentry);
-+ out:
-+        return err;
-+}
-+
-+STATIC int
-+mini_fo_mkdir(inode_t *dir, dentry_t *dentry, int mode)
-+{
-+      int err;
-+
-+      err = create_sto_dir(dentry, mode);
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rmdir(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *meta_dentry;
-+      inode_t *hidden_sto_dir = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+      check_mini_fo_inode(dir);
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              /* XXX: disabled, because it does not bother to check files on
-+               * the original filesystem - just a hack, but better than simply
-+               * removing it without testing */
-+              err = -EINVAL;
-+              goto out;
-+
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was:hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+              dput(dtohd(dentry));
-+
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* carefull with R files */
-+              if( __meta_is_r_entry(dir,
-+                                    dentry->d_name.name,
-+                                    dentry->d_name.len) == 1) {
-+                      err = meta_remove_r_entry(dentry->d_parent,
-+                                                dentry->d_name.name,
-+                                                dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rmdir: meta_remove_r_entry failed.\n");
-+                              goto out;
-+                      }
-+              }
-+              else {
-+                      /* ok, add deleted file to META */
-+                      meta_add_d_entry(dentry->d_parent,
-+                                       dentry->d_name.name,
-+                                       dentry->d_name.len);
-+              }
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              /* XXX: simply adding it to the delete list here is fscking dangerous!
-+               * as a temporary hack, i will disable rmdir on unmodified directories
-+               * for now.
-+               */
-+              err = -EINVAL;
-+              goto out;
-+
-+              err = get_neg_sto_dentry(dentry);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* dput base dentry, this will relase the inode and free the
-+               * dentry, as we will never need it again. */
-+              dput(dtohd(dentry));
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* add deleted file to META-file */
-+              meta_add_d_entry(dentry->d_parent,
-+                               dentry->d_name.name,
-+                               dentry->d_name.len);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = NON_EXISTANT;
-+
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = DELETED;
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_rmdir: ERROR, invalid state detected.\n");
-+
-+ out:
-+      if(!err) {
-+              d_drop(dentry);
-+      }
-+
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+      dput(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, dev_t dev)
-+#else
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      err = create_sto_nod(dentry, mode, dev);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo_mknod: creating sto nod failed.\n");
-+              err = -EINVAL;
-+      }
-+
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rename(inode_t *old_dir, dentry_t *old_dentry,
-+             inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      /* dispatch */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode))
-+              return rename_directory(old_dir, old_dentry, new_dir, new_dentry);
-+      return rename_nondir(old_dir, old_dentry, new_dir, new_dentry);
-+
-+}
-+
-+int rename_directory(inode_t *old_dir, dentry_t *old_dentry,
-+                   inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err, bpath_len;
-+      char *bpath;
-+
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_old_dir_dentry;
-+      dentry_t *hidden_new_dir_dentry;
-+
-+      err = 0;
-+      bpath = NULL;
-+      bpath_len = 0;
-+
-+      /* this is a test, chuck out if it works */
-+      if(!(dtopd(new_dentry)->state == DELETED ||
-+           dtopd(new_dentry)->state == NON_EXISTANT)) {
-+              printk(KERN_CRIT "mini_fo: rename_directory: \
-+                                  uh, ah, new_dentry not negative.\n");
-+              /* return -1; */
-+      }
-+
-+      /* state = UNMODIFIED */
-+      if(dtopd(old_dentry)->state == UNMODIFIED) {
-+              err = dir_unmod_to_mod(old_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+
-+      /* state = MODIFIED */
-+      if(dtopd(old_dentry)->state == MODIFIED) {
-+              bpath = meta_check_r_entry(old_dentry->d_parent,
-+                                         old_dentry->d_name.name,
-+                                         old_dentry->d_name.len);
-+              if(bpath) {
-+                      err = meta_remove_r_entry(old_dentry->d_parent,
-+                                                old_dentry->d_name.name,
-+                                                old_dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rename_directory:\
-+                                                   meta_remove_r_entry \
-+                                                  failed.\n");
-+                              goto out;
-+                      }
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath,
-+                                             strlen(bpath),
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      kfree(bpath);
-+              }
-+              else {/* wol it */
-+                      err = meta_add_d_entry(old_dentry->d_parent,
-+                                             old_dentry->d_name.name,
-+                                             old_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+                      /* put it on rename list */
-+                      err = get_mini_fo_bpath(old_dentry,
-+                                              &bpath,
-+                                              &bpath_len);
-+                      if (err)
-+                              goto out;
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath, bpath_len,
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+              }
-+              /* no state change, MODIFIED stays MODIFIED */
-+      }
-+      /* state = CREATED */
-+      if(dtopd(old_dentry)->state == CREATED ||
-+         dtopd(old_dentry)->state == DEL_REWRITTEN) {
-+              if(dtohd(old_dentry))
-+                      dput(dtohd(old_dentry));
-+
-+              if(dtopd(new_dentry)->state == DELETED) {
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+                      dtohd(old_dentry) = NULL;
-+              }
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      dtopd(old_dentry)->state = CREATED;
-+                      /* steal new dentry's neg. base dentry */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      dtohd(new_dentry) = NULL;
-+              }
-+      }
-+      if(dtopd(new_dentry)->state == UNMODIFIED ||
-+         dtopd(new_dentry)->state == NON_EXISTANT) {
-+              err = get_neg_sto_dentry(new_dentry);
-+              if(err)
-+                      goto out;
-+      }
-+
-+      /* now move sto file */
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+      hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+      double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+      err = vfs_rename(hidden_old_dir_dentry->d_inode, hidden_old_dentry,
-+                       hidden_new_dir_dentry->d_inode, hidden_new_dentry);
-+      if(err)
-+              goto out_lock;
-+
-+      fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+      if (new_dir != old_dir)
-+              fist_copy_attr_all(old_dir,
-+                                 hidden_old_dir_dentry->d_inode);
-+
-+ out_lock:
-+      /* double_unlock will dput the new/old parent dentries
-+       * whose refcnts were incremented via get_parent above. */
-+      double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int rename_nondir(inode_t *old_dir, dentry_t *old_dentry,
-+                inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err=0;
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(old_dir);
-+      check_mini_fo_inode(new_dir);
-+
-+      /* state: UNMODIFIED */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      /* the easy states */
-+      if(exists_in_storage(old_dentry)) {
-+
-+              dentry_t *hidden_old_dentry;
-+              dentry_t *hidden_new_dentry;
-+              dentry_t *hidden_old_dir_dentry;
-+              dentry_t *hidden_new_dir_dentry;
-+
-+              /* if old file is MODIFIED, add it to the deleted_list */
-+              if(dtopd(old_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(old_dentry->d_parent,
-+                                       old_dentry->d_name.name,
-+                                       old_dentry->d_name.len);
-+
-+                      dput(dtohd(old_dentry));
-+              }
-+              /* if old file is CREATED, we only release the base dentry */
-+              if(dtopd(old_dentry)->state == CREATED) {
-+                      if(dtohd(old_dentry))
-+                              dput(dtohd(old_dentry));
-+              }
-+
-+              /* now setup the new states (depends on new_dentry state) */
-+              /* new dentry state =  MODIFIED */
-+              if(dtopd(new_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* new dentry will be d_put'ed later by the vfs
-+                       * so don't do it here
-+                       * dput(dtohd(new_dentry));
-+                       */
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  UNMODIFIED */
-+              else if(dtopd(new_dentry)->state == UNMODIFIED) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* is this right??? */
-+                      /*dput(dtohd(new_dentry));*/
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  CREATED */
-+              else if(dtopd(new_dentry)->state == CREATED) {
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  NON_EXISTANT */
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * Dr. dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  DEL_REWRITTEN or DELETED */
-+              else if(dtopd(new_dentry)->state == DEL_REWRITTEN ||
-+                      dtopd(new_dentry)->state == DELETED) {
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              else { /* not possible, uhh, ahh */
-+                      printk(KERN_CRIT
-+                             "mini_fo: rename_reg_file: invalid state detected [1].\n");
-+                      return -1;
-+              }
-+
-+              /* now we definitely have a sto file */
-+              hidden_old_dentry = dtohd2(old_dentry);
-+              hidden_new_dentry = dtohd2(new_dentry);
-+
-+              dget(hidden_old_dentry);
-+              dget(hidden_new_dentry);
-+
-+              hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+              hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+              double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+              err = vfs_rename(hidden_old_dir_dentry->d_inode,
-+                               hidden_old_dentry,
-+                               hidden_new_dir_dentry->d_inode,
-+                               hidden_new_dentry);
-+              if(err)
-+                      goto out_lock;
-+
-+              fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+              if (new_dir != old_dir)
-+                      fist_copy_attr_all(old_dir, hidden_old_dir_dentry->d_inode);
-+
-+      out_lock:
-+              /* double_unlock will dput the new/old parent dentries
-+               * whose refcnts were incremented via get_parent above.
-+               */
-+              double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+              dput(hidden_new_dentry);
-+              dput(hidden_old_dentry);
-+      out:
-+              return err;
-+      }
-+      else { /* invalid state */
-+              printk(KERN_CRIT "mini_fo: rename_reg_file: ERROR: invalid state detected [2].\n");
-+              return -1;
-+      }
-+}
-+
-+
-+STATIC int
-+mini_fo_readlink(dentry_t *dentry, char *buf, int bufsiz)
-+{
-+      int err=0;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              hidden_dentry = dtohd2(dentry);
-+      } else if(dtohd(dentry) && dtohd(dentry)->d_inode) {
-+              hidden_dentry = dtohd(dentry);
-+      } else {
-+              goto out;
-+      }
-+
-+      if (!hidden_dentry->d_inode->i_op ||
-+          !hidden_dentry->d_inode->i_op->readlink) {
-+              err = -EINVAL;          goto out;
-+      }
-+
-+      err = hidden_dentry->d_inode->i_op->readlink(hidden_dentry,
-+                                                   buf,
-+                                                   bufsiz);
-+      if (err > 0)
-+              fist_copy_attr_atime(dentry->d_inode, hidden_dentry->d_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+static int mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#else
-+static void* mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#endif
-+{
-+      char *buf;
-+      int len = PAGE_SIZE, err;
-+      mm_segment_t old_fs;
-+
-+      /* in 2.6 this is freed by mini_fo_put_link called by __do_follow_link */
-+      buf = kmalloc(len, GFP_KERNEL);
-+      if (!buf) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* read the symlink, and then we will follow it */
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+      err = dentry->d_inode->i_op->readlink(dentry, buf, len);
-+      set_fs(old_fs);
-+      if (err < 0) {
-+              kfree(buf);
-+              buf = NULL;
-+              goto out;
-+      }
-+      buf[err] = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        nd_set_link(nd, buf);
-+        err = 0;
-+#else
-+      err = vfs_follow_link(nd, buf);
-+#endif
-+
-+ out:
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      kfree(buf);
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+        return err;
-+#else
-+        return ERR_PTR(err);
-+#endif
-+}
-+
-+STATIC
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd)
-+#else
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
-+#endif
-+{
-+        char *link;
-+        link = nd_get_link(nd);
-+        kfree(link);
-+}
-+#endif
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
-+#else
-+mini_fo_permission(inode_t *inode, int mask)
-+#endif
-+{
-+      inode_t *hidden_inode;
-+      int mode;
-+      int err;
-+
-+      if(itohi2(inode)) {
-+              hidden_inode = itohi2(inode);
-+      } else {
-+              hidden_inode = itohi(inode);
-+      }
-+      mode = inode->i_mode;
-+
-+      /* not really needed, as permission handles everything:
-+       *      err = vfs_permission(inode, mask);
-+       *      if (err)
-+       *              goto out;
-+       */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = permission(hidden_inode, mask, nd);
-+#else
-+      err = permission(hidden_inode, mask);
-+#endif
-+
-+      /*  out: */
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_inode_revalidate(dentry_t *dentry)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      inode_t *hidden_inode;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else {
-+                printk(KERN_CRIT "mini_fo_inode_revalidate: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      if (hidden_inode && hidden_inode->i_op && hidden_inode->i_op->revalidate){
-+              err = hidden_inode->i_op->revalidate(hidden_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+      fist_copy_attr_all(dentry->d_inode, hidden_inode);
-+ out:
-+      return err;
-+}
-+#endif
-+
-+STATIC int
-+mini_fo_setattr(dentry_t *dentry, struct iattr *ia)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(!is_mini_fo_existant(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [1].\n");
-+              goto out;
-+      }
-+
-+      if(dtost(dentry) == UNMODIFIED) {
-+              if(!IS_COPY_FLAG(ia->ia_valid))
-+                      goto out; /* we ignore these changes to base */
-+
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      err = dir_unmod_to_mod(dentry);
-+              } else {
-+                      /* we copy contents if file is not beeing truncated */
-+                      if(S_ISREG(dentry->d_inode->i_mode) &&
-+                         !(ia->ia_size == 0 && (ia->ia_valid & ATTR_SIZE))) {
-+                              err = nondir_unmod_to_mod(dentry, 1);
-+                      } else
-+                              err = nondir_unmod_to_mod(dentry, 0);
-+              }
-+              if(err) {
-+                      err = -EINVAL;
-+                      printk(KERN_CRIT "mini_fo_setattr: ERROR changing states.\n");
-+                      goto out;
-+              }
-+      }
-+      if(!exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [2].\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      ASSERT(dentry->d_inode);
-+      ASSERT(dtohd2(dentry));
-+      ASSERT(itopd(dentry->d_inode));
-+      ASSERT(itohi2(dentry->d_inode));
-+
-+      err = notify_change(dtohd2(dentry), ia);
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
-+{
-+      int err = 0;
-+        dentry_t *hidden_dentry;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+      } else {
-+                printk(KERN_CRIT "mini_fo_getattr: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      fist_copy_attr_all(dentry->d_inode, hidden_dentry->d_inode);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      generic_fillattr(dentry->d_inode, stat);
-+      if (!stat->blksize) {
-+              struct super_block *s = hidden_dentry->d_inode->i_sb;
-+              unsigned blocks;
-+              blocks = (stat->size+s->s_blocksize-1) >> s->s_blocksize_bits;
-+              stat->blocks = (s->s_blocksize / 512) * blocks;
-+              stat->blksize = s->s_blocksize;
-+      }
-+ out:
-+        return err;
-+}
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+#if 0 /* no xattr_alloc() and xattr_free() */
-+/* This is lifted from fs/xattr.c */
-+static void *
-+xattr_alloc(size_t size, size_t limit)
-+{
-+      void *ptr;
-+
-+      if (size > limit)
-+              return ERR_PTR(-E2BIG);
-+
-+      if (!size)      /* size request, no buffer is needed */
-+              return NULL;
-+      else if (size <= PAGE_SIZE)
-+              ptr = kmalloc((unsigned long) size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc((unsigned long) size);
-+      if (!ptr)
-+              return ERR_PTR(-ENOMEM);
-+      return ptr;
-+}
-+
-+static void
-+xattr_free(void *ptr, size_t size)
-+{
-+      if (!size)      /* size request, no buffer was needed */
-+              return;
-+      else if (size <= PAGE_SIZE)
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
-+}
-+#endif /* no xattr_alloc() and xattr_free() */
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      /* Define these anyway so we don't need as much ifdef'ed code. */
-+      char *encoded_name = NULL;
-+      char *encoded_value = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->getxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, encoded_name, encoded_value, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) \
-+     && LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,23)) \
-+     || LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               const void *value, size_t size, int flags)
-+#else
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               void *value, size_t size, int flags)
-+#endif
-+
-+{
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+
-+      /* Define these anyway, so we don't have as much ifdef'ed code. */
-+      char *encoded_value = NULL;
-+      char *encoded_name = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->setxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->setxattr(hidden_dentry, encoded_name, encoded_value, size, flags);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_removexattr(struct dentry *dentry, const char *name) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_name;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->removexattr) {
-+              encoded_name = (char *)name;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, encoded_name);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_listxattr(struct dentry *dentry, char *list, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_list = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->listxattr) {
-+              encoded_list = list;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, encoded_list, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+
-+struct inode_operations mini_fo_symlink_iops =
-+      {
-+              readlink:       mini_fo_readlink,
-+              follow_link: mini_fo_follow_link,
-+              /* mk: permission:      mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+              put_link:       mini_fo_put_link,
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+      };
-+
-+struct inode_operations mini_fo_dir_iops =
-+      {
-+              create: mini_fo_create,
-+              lookup: mini_fo_lookup,
-+              link:   mini_fo_link,
-+              unlink: mini_fo_unlink,
-+              symlink:        mini_fo_symlink,
-+              mkdir:  mini_fo_mkdir,
-+              rmdir:  mini_fo_rmdir,
-+              mknod:  mini_fo_mknod,
-+              rename: mini_fo_rename,
-+              /* no readlink/follow_link for non-symlinks */
-+              // off because we have setattr
-+              //    truncate: mini_fo_truncate,
-+              /* mk:permission:       mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
-+
-+struct inode_operations mini_fo_main_iops =
-+      {
-+              /* permission:  mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr:    mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/main.c
-@@ -0,0 +1,423 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#include <linux/module.h>
-+
-+/* This definition must only appear after we include <linux/module.h> */
-+#ifndef MODULE_LICENSE
-+# define MODULE_LICENSE(bison)
-+#endif /* not MODULE_LICENSE */
-+
-+/*
-+ * This is the mini_fo tri interpose function, which extends the
-+ * functionality of the regular interpose by interposing a higher
-+ * level inode on top of two lower level ones: the base filesystem
-+ * inode and the storage filesystem inode.
-+ *
-+ *  sb we pass is mini_fo's super_block
-+ */
-+int
-+mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                    dentry_t *hidden_sto_dentry,
-+                    dentry_t *dentry, super_block_t *sb, int flag)
-+{
-+      inode_t *hidden_inode = NULL;
-+      inode_t *hidden_sto_inode = NULL; /* store corresponding storage inode */
-+      int err = 0;
-+      inode_t *inode;
-+
-+      /* Pointer to hidden_sto_inode if exists, else to hidden_inode.
-+       * This is used to copy the attributes of the correct inode. */
-+      inode_t *master_inode;
-+
-+      if(hidden_dentry)
-+              hidden_inode = hidden_dentry->d_inode;
-+      if(hidden_sto_dentry)
-+              hidden_sto_inode = hidden_sto_dentry->d_inode;
-+
-+      ASSERT(dentry->d_inode == NULL);
-+
-+      /* mk: One of the inodes associated with the dentrys is likely to
-+       * be NULL, so carefull:
-+       */
-+      ASSERT((hidden_inode != NULL) || (hidden_sto_inode != NULL));
-+
-+      if(hidden_sto_inode)
-+              master_inode = hidden_sto_inode;
-+      else
-+              master_inode = hidden_inode;
-+
-+      /*
-+       * We allocate our new inode below, by calling iget.
-+       * iget will call our read_inode which will initialize some
-+       * of the new inode's fields
-+       */
-+
-+      /*
-+       * original: inode = iget(sb, hidden_inode->i_ino);
-+       */
-+      inode = iget(sb, iunique(sb, 25));
-+      if (!inode) {
-+              err = -EACCES;          /* should be impossible??? */
-+              goto out;
-+      }
-+
-+      /*
-+       * interpose the inode if not already interposed
-+       *   this is possible if the inode is being reused
-+       * XXX: what happens if we get_empty_inode() but there's another already?
-+       * for now, ASSERT() that this can't happen; fix later.
-+       */
-+      if (itohi(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi(inode) != NULL.\n");
-+      }
-+      if (itohi2(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi2(inode) != NULL.\n");
-+      }
-+
-+      /* mk: Carefull, igrab can't handle NULL inodes (ok, why should it?), so
-+       * we need to check here:
-+       */
-+      if(hidden_inode)
-+              itohi(inode) = igrab(hidden_inode);
-+      else
-+              itohi(inode) = NULL;
-+
-+      if(hidden_sto_inode)
-+              itohi2(inode) = igrab(hidden_sto_inode);
-+      else
-+              itohi2(inode) = NULL;
-+
-+
-+      /* Use different set of inode ops for symlinks & directories*/
-+      if (S_ISLNK(master_inode->i_mode))
-+              inode->i_op = &mini_fo_symlink_iops;
-+      else if (S_ISDIR(master_inode->i_mode))
-+              inode->i_op = &mini_fo_dir_iops;
-+
-+      /* Use different set of file ops for directories */
-+      if (S_ISDIR(master_inode->i_mode))
-+              inode->i_fop = &mini_fo_dir_fops;
-+
-+      /* properly initialize special inodes */
-+      if (S_ISBLK(master_inode->i_mode) || S_ISCHR(master_inode->i_mode) ||
-+          S_ISFIFO(master_inode->i_mode) || S_ISSOCK(master_inode->i_mode)) {
-+              init_special_inode(inode, master_inode->i_mode, master_inode->i_rdev);
-+      }
-+
-+      /* Fix our inode's address operations to that of the lower inode */
-+      if (inode->i_mapping->a_ops != master_inode->i_mapping->a_ops) {
-+              inode->i_mapping->a_ops = master_inode->i_mapping->a_ops;
-+      }
-+
-+      /* only (our) lookup wants to do a d_add */
-+      if (flag)
-+              d_add(dentry, inode);
-+      else
-+              d_instantiate(dentry, inode);
-+
-+      ASSERT(dtopd(dentry) != NULL);
-+
-+      /* all well, copy inode attributes */
-+      fist_copy_attr_all(inode, master_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+/* parse mount options "base=" and "sto=" */
-+dentry_t *
-+mini_fo_parse_options(super_block_t *sb, char *options)
-+{
-+      dentry_t *hidden_root = ERR_PTR(-EINVAL);
-+      dentry_t *hidden_root2 = ERR_PTR(-EINVAL);
-+      struct nameidata nd, nd2;
-+      char *name, *tmp, *end;
-+      int err = 0;
-+
-+      /* We don't want to go off the end of our arguments later on. */
-+      for (end = options; *end; end++);
-+
-+      while (options < end) {
-+              tmp = options;
-+              while (*tmp && *tmp != ',')
-+                      tmp++;
-+              *tmp = '\0';
-+              if (!strncmp("base=", options, 5)) {
-+                      name = options + 5;
-+                      printk(KERN_INFO "mini_fo: using base directory: %s\n", name);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if (path_init(name, LOOKUP_FOLLOW, &nd))
-+                              err = path_walk(name, &nd);
-+#else
-+                      err = path_lookup(name, LOOKUP_FOLLOW, &nd);
-+#endif
-+                      if (err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden directory '%s'\n", name);
-+                              hidden_root = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root = nd.dentry;
-+                      stopd(sb)->base_dir_dentry = nd.dentry;
-+                      stopd(sb)->hidden_mnt = nd.mnt;
-+
-+              } else if(!strncmp("sto=", options, 4)) {
-+                      /* parse the storage dir */
-+                      name = options + 4;
-+                      printk(KERN_INFO "mini_fo: using storage directory: %s\n", name);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if(path_init(name, LOOKUP_FOLLOW, &nd2))
-+                              err = path_walk(name, &nd2);
-+#else
-+                        err = path_lookup(name, LOOKUP_FOLLOW, &nd2);
-+#endif
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden storage directory '%s'\n", name);
-+
-+                              hidden_root2 = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root2 = nd2.dentry;
-+                      stopd(sb)->storage_dir_dentry = nd2.dentry;
-+                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      stohs2(sb) = hidden_root2->d_sb;
-+
-+                      /* validate storage dir, this is done in
-+                       * mini_fo_read_super for the base directory.
-+                       */
-+                      if (IS_ERR(hidden_root2)) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: storage dentry lookup failed (err = %ld)\n", PTR_ERR(hidden_root2));
-+                              goto out;
-+                      }
-+                      if (!hidden_root2->d_inode) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: no storage dir to interpose on.\n");
-+                              goto out;
-+                      }
-+                      stohs2(sb) = hidden_root2->d_sb;
-+              } else {
-+                      printk(KERN_WARNING "mini_fo: unrecognized option '%s'\n", options);
-+                      hidden_root = ERR_PTR(-EINVAL);
-+                      goto out;
-+              }
-+              options = tmp + 1;
-+      }
-+
-+ out:
-+      if(IS_ERR(hidden_root2))
-+              return hidden_root2;
-+      return hidden_root;
-+}
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+static int
-+#else
-+super_block_t *
-+#endif
-+mini_fo_read_super(super_block_t *sb, void *raw_data, int silent)
-+{
-+      dentry_t *hidden_root;
-+      int err = 0;
-+
-+      if (!raw_data) {
-+              printk(KERN_WARNING "mini_fo_read_super: missing argument\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      /*
-+       * Allocate superblock private data
-+       */
-+      __stopd(sb) = kmalloc(sizeof(struct mini_fo_sb_info), GFP_KERNEL);
-+      if (!stopd(sb)) {
-+              printk(KERN_WARNING "%s: out of memory\n", __FUNCTION__);
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+      stohs(sb) = NULL;
-+
-+      hidden_root = mini_fo_parse_options(sb, raw_data);
-+      if (IS_ERR(hidden_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: lookup_dentry failed (err = %ld)\n", PTR_ERR(hidden_root));
-+              err = PTR_ERR(hidden_root);
-+              goto out_free;
-+      }
-+      if (!hidden_root->d_inode) {
-+              printk(KERN_WARNING "mini_fo_read_super: no directory to interpose on\n");
-+              goto out_free;
-+      }
-+      stohs(sb) = hidden_root->d_sb;
-+
-+      /*
-+       * Linux 2.4.2-ac3 and beyond has code in
-+       * mm/filemap.c:generic_file_write() that requires sb->s_maxbytes
-+       * to be populated.  If not set, all write()s under that sb will
-+       * return 0.
-+       *
-+       * Linux 2.4.4+ automatically sets s_maxbytes to MAX_NON_LFS;
-+       * the filesystem should override it only if it supports LFS.
-+       */
-+      /* non-SCA code is good to go with LFS */
-+      sb->s_maxbytes = hidden_root->d_sb->s_maxbytes;
-+
-+      sb->s_op = &mini_fo_sops;
-+      /*
-+       * we can't use d_alloc_root if we want to use
-+       * our own interpose function unchanged,
-+       * so we simply replicate *most* of the code in d_alloc_root here
-+       */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      sb->s_root = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
-+#else
-+      sb->s_root = d_alloc(NULL, &(const struct qstr){hash: 0, name: "/", len : 1});
-+#endif
-+      if (IS_ERR(sb->s_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: d_alloc failed\n");
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      sb->s_root->d_op = &mini_fo_dops;
-+      sb->s_root->d_sb = sb;
-+      sb->s_root->d_parent = sb->s_root;
-+
-+      /* link the upper and lower dentries */
-+      __dtopd(sb->s_root) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+      if (!dtopd(sb->s_root)) {
-+              err = -ENOMEM;
-+              goto out_dput2;
-+      }
-+      dtopd(sb->s_root)->state = MODIFIED;
-+      dtohd(sb->s_root) = hidden_root;
-+
-+      /* fanout relevant, interpose on storage root dentry too */
-+      dtohd2(sb->s_root) = stopd(sb)->storage_dir_dentry;
-+
-+      /* ...and call tri-interpose to interpose root dir inodes
-+       * if (mini_fo_interpose(hidden_root, sb->s_root, sb, 0))
-+       */
-+      if(mini_fo_tri_interpose(hidden_root, dtohd2(sb->s_root), sb->s_root, sb, 0))
-+              goto out_dput2;
-+
-+      /* initalize the wol list */
-+      itopd(sb->s_root->d_inode)->deleted_list_size = -1;
-+      itopd(sb->s_root->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(sb->s_root);
-+
-+      goto out;
-+
-+ out_dput2:
-+      dput(sb->s_root);
-+ out_dput:
-+      dput(hidden_root);
-+      dput(dtohd2(sb->s_root)); /* release the hidden_sto_dentry too */
-+ out_free:
-+      kfree(stopd(sb));
-+      __stopd(sb) = NULL;
-+ out:
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        return err;
-+#else
-+        if (err) {
-+              return ERR_PTR(err);
-+        } else {
-+              return sb;
-+        }
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+static int mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data, struct vfsmount *mnt)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super, mnt);
-+}
-+#else
-+static struct super_block *mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super);
-+}
-+#endif
-+
-+void mini_fo_kill_block_super(struct super_block *sb)
-+{
-+      generic_shutdown_super(sb);
-+      /*
-+       *      XXX: BUG: Halcrow: Things get unstable sometime after this point:
-+       *      lib/rwsem-spinlock.c:127: spin_is_locked on uninitialized
-+       *      fs/fs-writeback.c:402: spin_lock(fs/super.c:a0381828) already
-+       *      locked by fs/fs-writeback.c/402
-+       *
-+       *      Apparently, someone's not releasing a lock on sb_lock...
-+       */
-+}
-+
-+static struct file_system_type mini_fo_fs_type = {
-+      .owner          = THIS_MODULE,
-+      .name           = "mini_fo",
-+      .get_sb         = mini_fo_get_sb,
-+      .kill_sb        = mini_fo_kill_block_super,
-+      .fs_flags       = 0,
-+};
-+
-+
-+#else
-+static DECLARE_FSTYPE(mini_fo_fs_type, "mini_fo", mini_fo_read_super, 0);
-+#endif
-+
-+static int __init init_mini_fo_fs(void)
-+{
-+      printk("Registering mini_fo version $Id$\n");
-+      return register_filesystem(&mini_fo_fs_type);
-+}
-+static void __exit exit_mini_fo_fs(void)
-+{
-+      printk("Unregistering mini_fo version $Id$\n");
-+      unregister_filesystem(&mini_fo_fs_type);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+EXPORT_NO_SYMBOLS;
-+#endif
-+
-+MODULE_AUTHOR("Erez Zadok <ezk@cs.sunysb.edu>");
-+MODULE_DESCRIPTION("FiST-generated mini_fo filesystem");
-+MODULE_LICENSE("GPL");
-+
-+/* MODULE_PARM(fist_debug_var, "i"); */
-+/* MODULE_PARM_DESC(fist_debug_var, "Debug level"); */
-+
-+module_init(init_mini_fo_fs)
-+module_exit(exit_mini_fo_fs)
---- /dev/null
-+++ b/fs/mini_fo/Makefile
-@@ -0,0 +1,17 @@
-+#
-+# Makefile for mini_fo 2.4 and 2.6 Linux kernels
-+#
-+# Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+#
-+# 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.
-+#
-+
-+obj-$(CONFIG_MINI_FO) := mini_fo.o
-+mini_fo-objs   := meta.o dentry.o file.o inode.o main.o super.o state.o aux.o
-+
-+# dependencies
-+${mini_fo-objs}: mini_fo.h fist.h
-+
---- /dev/null
-+++ b/fs/mini_fo/meta.c
-@@ -0,0 +1,1000 @@
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+int meta_build_lists(dentry_t *dentry)
-+{
-+      struct mini_fo_inode_info *inode_info;
-+
-+      dentry_t *meta_dentry = 0;
-+      file_t *meta_file = 0;
-+      mm_segment_t old_fs;
-+      void *buf;
-+
-+      int bytes, len;
-+      struct vfsmount *meta_mnt;
-+      char *entry;
-+
-+      inode_info = itopd(dentry->d_inode);
-+      if(!(inode_info->deleted_list_size == -1 &&
-+           inode_info->renamed_list_size == -1)) {
-+              printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                  Error, list(s) not virgin.\n");
-+              return -1;
-+      }
-+
-+      /* init our meta lists */
-+      INIT_LIST_HEAD(&inode_info->deleted_list);
-+      inode_info->deleted_list_size = 0;
-+
-+      INIT_LIST_HEAD(&inode_info->renamed_list);
-+      inode_info->renamed_list_size = 0;
-+
-+      /* might there be a META-file? */
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           dtohd2(dentry),
-+                                           strlen(META_FILENAME));
-+              if(!meta_dentry->d_inode) {
-+                      dput(meta_dentry);
-+                      goto out_ok;
-+              }
-+              /* $%& err, is this correct? */
-+              meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              mntget(meta_mnt);
-+
-+
-+              /* open META-file for reading */
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              if(!meta_file || IS_ERR(meta_file)) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR opening META file.\n");
-+                      goto out_err;
-+              }
-+
-+              /* check if fs supports reading */
-+              if(!meta_file->f_op->read) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, fs does not support reading.\n");
-+                      goto out_err_close;
-+              }
-+
-+              /* allocate a page for transfering the data */
-+              buf = (void *) __get_free_page(GFP_KERNEL);
-+              if(!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, out of mem.\n");
-+                      goto out_err_close;
-+              }
-+              meta_file->f_pos = 0;
-+              old_fs = get_fs();
-+              set_fs(KERNEL_DS);
-+              do {
-+                      char *c;
-+                      bytes = meta_file->f_op->read(meta_file, buf, PAGE_SIZE, &meta_file->f_pos);
-+                      if(bytes == PAGE_SIZE) {
-+                              /* trim a cut off filename and adjust f_pos to get it next time */
-+                              for(c = (char*) buf+PAGE_SIZE;
-+                                  *c != '\n';
-+                                  c--, bytes--, meta_file->f_pos--);
-+                      }
-+                      entry = (char *) buf;
-+                      while(entry < (char *) buf+bytes) {
-+
-+                              char *old_path;
-+                              char *dir_name;
-+                              int old_len, new_len;
-+
-+                              /* len without '\n'*/
-+                              len = (int) (strchr(entry, '\n') - entry);
-+                              switch (*entry) {
-+                              case 'D':
-+                                      /* format: "D filename" */
-+                                      meta_list_add_d_entry(dentry,
-+                                                            entry+2,
-+                                                            len-2);
-+                                      break;
-+                              case 'R':
-+                                      /* format: "R path/xy/dir newDir" */
-+                                      old_path = entry+2;
-+                                      dir_name = strchr(old_path, ' ') + 1;
-+                                      old_len =  dir_name - old_path - 1;
-+                                      new_len = ((int) entry) + len - ((int ) dir_name);
-+                                      meta_list_add_r_entry(dentry,
-+                                                            old_path,
-+                                                            old_len,
-+                                                            dir_name,
-+                                                            new_len);
-+                                      break;
-+                              default:
-+                                      /* unknown entry type detected */
-+                                      break;
-+                              }
-+                              entry += len+1;
-+                      }
-+
-+              } while(meta_file->f_pos < meta_dentry->d_inode->i_size);
-+
-+              free_page((unsigned long) buf);
-+              set_fs(old_fs);
-+              fput(meta_file);
-+      }
-+      goto out_ok;
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out_err:
-+      mntput(meta_mnt);
-+      dput(meta_dentry);
-+      return -1;
-+ out_ok:
-+      return 1; /* check this!!! inode_info->wol_size; */
-+}
-+
-+/* cleanups up all lists and free's the mem by dentry */
-+int meta_put_lists(dentry_t *dentry)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_put_lists: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_put_lists(dentry->d_inode);
-+}
-+
-+/* cleanups up all lists and free's the mem by inode */
-+int __meta_put_lists(inode_t *inode)
-+{
-+      int err = 0;
-+      if(!inode || !itopd(inode)) {
-+              printk("mini_fo: __meta_put_lists: invalid inode passed.\n");
-+              return -1;
-+      }
-+      err = __meta_put_d_list(inode);
-+      err |= __meta_put_r_list(inode);
-+      return err;
-+}
-+
-+int meta_sync_lists(dentry_t *dentry)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_sync_lists: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      err = meta_sync_d_list(dentry, 0);
-+      err |= meta_sync_r_list(dentry, 1);
-+      return err;
-+}
-+
-+
-+/* remove all D entries from the renamed list and free the mem */
-+int __meta_put_d_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: __meta_put_d_list: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the DELETED-list */
-+        if(inode_info->deleted_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->deleted_list)) {
-+              tmp = inode_info->deleted_list.next;
-+              list_del(tmp);
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+      }
-+      inode_info->deleted_list_size = 0;
-+
-+      return 0;
-+}
-+
-+/* remove all R entries from the renamed list and free the mem */
-+int __meta_put_r_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+      struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_put_r_list: invalid inode.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the RENAMED-list */
-+        if(inode_info->renamed_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->renamed_list)) {
-+              tmp = inode_info->renamed_list.next;
-+              list_del(tmp);
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+      }
-+      inode_info->renamed_list_size = 0;
-+
-+      return 0;
-+}
-+
-+int meta_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      err = meta_list_add_d_entry(dentry, name, len);
-+      err |= meta_write_d_entry(dentry,name,len);
-+      return err;
-+}
-+
-+/* add a D entry to the deleted list */
-+int meta_list_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0)
-+                return -1;
-+
-+        del_entry = (struct deleted_entry *)
-+              kmalloc(sizeof(struct deleted_entry), GFP_KERNEL);
-+        del_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!del_entry || !del_entry->name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  out of mem.\n");
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(del_entry->name, name, len);
-+        del_entry->len = len;
-+
-+        list_add(&del_entry->list, &inode_info->deleted_list);
-+        inode_info->deleted_list_size++;
-+        return 0;
-+}
-+
-+int meta_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+      int err = 0;
-+      err = meta_list_add_r_entry(dentry,
-+                                  old_name, old_len,
-+                                  new_name, new_len);
-+      err |= meta_write_r_entry(dentry,
-+                                old_name, old_len,
-+                                new_name, new_len);
-+      return err;
-+}
-+
-+/* add a R entry to the renamed list */
-+int meta_list_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+
-+        ren_entry = (struct renamed_entry *)
-+              kmalloc(sizeof(struct renamed_entry), GFP_KERNEL);
-+        ren_entry->old_name = (char*) kmalloc(old_len, GFP_KERNEL);
-+        ren_entry->new_name = (char*) kmalloc(new_len, GFP_KERNEL);
-+
-+        if(!ren_entry || !ren_entry->old_name || !ren_entry->new_name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  out of mem.\n");
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(ren_entry->old_name, old_name, old_len);
-+        ren_entry->old_len = old_len;
-+        strncpy(ren_entry->new_name, new_name, new_len);
-+        ren_entry->new_len = new_len;
-+
-+        list_add(&ren_entry->list, &inode_info->renamed_list);
-+        inode_info->renamed_list_size++;
-+        return 0;
-+}
-+
-+
-+int meta_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+
-+      err = meta_list_remove_r_entry(dentry, name, len);
-+      err |= meta_sync_lists(dentry);
-+      return err;
-+}
-+
-+int meta_list_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_list_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_list_remove_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_list_remove_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT
-+                     "mini_fo: __meta_list_remove_r_entry: \
-+                        invalid inode passed.\n");
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+        if(inode_info->renamed_list_size == 0)
-+                return 1;
-+
-+      list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      list_del(tmp);
-+                      kfree(ren_entry->new_name);
-+                      kfree(ren_entry->old_name);
-+                      kfree(ren_entry);
-+                      inode_info->renamed_list_size--;
-+                      return 0;
-+              }
-+      }
-+      return 1;
-+}
-+
-+
-+/* append a single D entry to the meta file */
-+int meta_write_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry), strlen (META_FILENAME));
-+
-+      /* We need to create a META-file */
-+        if(!meta_dentry->d_inode) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR,
-+                         NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt); /* $%& is this necessary? */
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: len for name, 1 for \n and 2 for "D " */
-+      buf = (char *) kmalloc(len+3, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'D';
-+      buf[1] = ' ';
-+      strncpy(buf+2, name, len);
-+      buf[len+2] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, len+3,
-+                                     &meta_file->f_pos);
-+      if(bytes != len+3) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR writing.\n");
-+              err = -1;
-+      }
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* append a single R entry to the meta file */
-+int meta_write_r_entry(dentry_t *dentry,
-+                     const char *old_name, int old_len,
-+                     const char *new_name, int new_len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+      struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->renamed_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* build the storage structure? */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen (META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt);
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+      buf_len = old_len + new_len + 4;
-+      buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'R';
-+      buf[1] = ' ';
-+      strncpy(buf + 2, old_name, old_len);
-+      buf[old_len + 2] = ' ';
-+      strncpy(buf + old_len + 3, new_name, new_len);
-+      buf[buf_len -1] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, buf_len, &meta_file->f_pos);
-+      if(bytes != buf_len) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: ERROR writing.\n");
-+              err = -1;
-+      }
-+
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* sync D list to disk, append data if app_flag is 1 */
-+/* check the meta_mnt, which seems not to be used (properly)  */
-+
-+int meta_sync_d_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  invalid inode passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+
-+              /* size: len for name, 1 for \n and 2 for "D " */
-+              buf = (char *) kmalloc(del_entry->len+3, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+
-+              buf[0] = 'D';
-+              buf[1] = ' ';
-+              strncpy(buf+2, del_entry->name, del_entry->len);
-+              buf[del_entry->len+2] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             del_entry->len+3,
-+                                             &meta_file->f_pos);
-+              if(bytes != del_entry->len+3) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+
-+}
-+
-+int meta_sync_r_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              /* size:
-+               * 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+              buf_len = ren_entry->old_len + ren_entry->new_len + 4;
-+              buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+              buf[0] = 'R';
-+              buf[1] = ' ';
-+              strncpy(buf + 2, ren_entry->old_name, ren_entry->old_len);
-+              buf[ren_entry->old_len + 2] = ' ';
-+              strncpy(buf + ren_entry->old_len + 3,
-+                      ren_entry->new_name, ren_entry->new_len);
-+              buf[buf_len - 1] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             buf_len, &meta_file->f_pos);
-+              if(bytes != buf_len) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+int meta_check_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode)
-+              printk(KERN_CRIT "mini_fo: meta_check_d_dentry: \
-+                                  invalid dentry passed.\n");
-+      return __meta_check_d_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_check_d_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT "mini_fo: __meta_check_d_dentry: \
-+                                  invalid inode passed.\n");
-+
-+        inode_info = itopd(inode);
-+
-+        if(inode_info->deleted_list_size <= 0)
-+                return 0;
-+
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              if(del_entry->len != len)
-+                      continue;
-+
-+              if(!strncmp(del_entry->name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+/*
-+ * check if file has been renamed and return path to orig. base dir.
-+ * Implements no error return values so far, what of course sucks.
-+ * String is null terminated.'
-+ */
-+char* meta_check_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid dentry passed.\n");
-+              return NULL;
-+      }
-+      return __meta_check_r_entry(dentry->d_inode, name, len);
-+}
-+
-+char* __meta_check_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+      char *old_path;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid inode passed.\n");
-+              return NULL;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return NULL;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      old_path = (char *)
-+                              kmalloc(ren_entry->old_len+1, GFP_KERNEL);
-+                      strncpy(old_path,
-+                              ren_entry->old_name,
-+                              ren_entry->old_len);
-+                      old_path[ren_entry->old_len]='\0';
-+                      return old_path;
-+              }
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * This version only checks if entry exists and return:
-+ *     1 if exists,
-+ *     0 if not,
-+ *    -1 if error.
-+ */
-+int meta_is_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_is_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_is_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return -1;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/mini_fo.h
-@@ -0,0 +1,510 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __MINI_FO_H_
-+#define __MINI_FO_H_
-+
-+#ifdef __KERNEL__
-+
-+/* META stuff */
-+#define META_FILENAME "META_dAfFgHE39ktF3HD2sr"
-+
-+/* use xattrs? */
-+#define XATTR
-+
-+/* File attributes that when changed, result in a file beeing copied to storage */
-+#define COPY_FLAGS ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE
-+
-+/*
-+ * mini_fo filestates
-+ */
-+#define MODIFIED       1
-+#define UNMODIFIED     2
-+#define CREATED        3
-+#define DEL_REWRITTEN  4
-+#define DELETED        5
-+#define NON_EXISTANT   6
-+
-+/* fist file systems superblock magic */
-+# define MINI_FO_SUPER_MAGIC 0xf15f
-+
-+/*
-+ * STRUCTURES:
-+ */
-+
-+/* mini_fo inode data in memory */
-+struct mini_fo_inode_info {
-+      inode_t *wii_inode;
-+      inode_t *wii_inode2; /* pointer to storage inode */
-+
-+      /* META-data lists */
-+      /* deleted list, ex wol */
-+      struct list_head deleted_list;
-+      int deleted_list_size;
-+
-+      /* renamed list */
-+      struct list_head renamed_list;
-+      int renamed_list_size;
-+
-+      /* add other lists here ... */
-+};
-+
-+/* mini_fo dentry data in memory */
-+struct mini_fo_dentry_info {
-+      dentry_t *wdi_dentry;
-+      dentry_t *wdi_dentry2; /* pointer to  storage dentry */
-+      unsigned int state;  /* state of the mini_fo dentry */
-+};
-+
-+
-+/* mini_fo super-block data in memory */
-+struct mini_fo_sb_info {
-+      super_block_t *wsi_sb, *wsi_sb2; /* mk: might point to the same sb */
-+      struct vfsmount *hidden_mnt, *hidden_mnt2;
-+      dentry_t *base_dir_dentry;
-+      dentry_t *storage_dir_dentry;
-+      ;
-+};
-+
-+/* readdir_data, readdir helper struct */
-+struct readdir_data {
-+      struct list_head ndl_list; /* linked list head ptr */
-+      int ndl_size; /* list size */
-+      int sto_done; /* flag to show that the storage dir entries have
-+                     * all been read an now follow base entries */
-+};
-+
-+/* file private data. */
-+struct mini_fo_file_info {
-+      struct file *wfi_file;
-+      struct file *wfi_file2; /* pointer to storage file */
-+      struct readdir_data rd;
-+};
-+
-+/* struct ndl_entry */
-+struct ndl_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/********************************
-+ *  META-data structures
-+ ********************************/
-+
-+/* deleted entry */
-+struct deleted_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* renamed entry */
-+struct renamed_entry {
-+      struct list_head list;
-+      char *old_name;     /* old directory with full path */
-+      int old_len;        /* length of above string */
-+      char *new_name;     /* new directory name */
-+      int new_len;        /* length of above string */
-+};
-+
-+/* attr_change entry */
-+struct attr_change_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* link entry */
-+struct link_entry {
-+      struct list_head list;
-+      int links_moved;
-+      int inum_base;
-+      int inum_sto;
-+      char *weird_name;
-+      int weird_name_len;
-+};
-+
-+
-+/* Some other stuff required for mini_fo_filldir64, copied from
-+ * fs/readdir.c
-+ */
-+
-+#define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1))
-+#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
-+
-+
-+struct linux_dirent64 {
-+        u64             d_ino;
-+        s64             d_off;
-+        unsigned short  d_reclen;
-+        unsigned char   d_type;
-+        char            d_name[0];
-+};
-+
-+
-+struct getdents_callback64 {
-+        struct linux_dirent64 * current_dir;
-+        struct linux_dirent64 * previous;
-+        int count;
-+        int error;
-+};
-+
-+struct linux_dirent {
-+      unsigned long   d_ino;
-+      unsigned long   d_off;
-+      unsigned short  d_reclen;
-+      char            d_name[1];
-+};
-+
-+struct getdents_callback {
-+      struct linux_dirent * current_dir;
-+      struct linux_dirent * previous;
-+      int count;
-+      int error;
-+};
-+
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* file TO private_data */
-+# define ftopd(file) ((struct mini_fo_file_info *)((file)->private_data))
-+# define __ftopd(file) ((file)->private_data)
-+/* file TO hidden_file */
-+# define ftohf(file) ((ftopd(file))->wfi_file)
-+# define ftohf2(file) ((ftopd(file))->wfi_file2)
-+
-+/* inode TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->i_private)
-+# define __itopd(ino) ((ino)->i_private)
-+#else
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->u.generic_ip)
-+# define __itopd(ino) ((ino)->u.generic_ip)
-+#endif
-+/* inode TO hidden_inode */
-+# define itohi(ino) (itopd(ino)->wii_inode)
-+# define itohi2(ino) (itopd(ino)->wii_inode2)
-+
-+/* superblock TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->s_fs_info)
-+# define __stopd(super) ((super)->s_fs_info)
-+#else
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->u.generic_sbp)
-+# define __stopd(super) ((super)->u.generic_sbp)
-+#endif
-+
-+/* unused? # define vfs2priv stopd */
-+/* superblock TO hidden_superblock */
-+
-+# define stohs(super) (stopd(super)->wsi_sb)
-+# define stohs2(super) (stopd(super)->wsi_sb2)
-+
-+/* dentry TO private_data */
-+# define dtopd(dentry) ((struct mini_fo_dentry_info *)(dentry)->d_fsdata)
-+# define __dtopd(dentry) ((dentry)->d_fsdata)
-+/* dentry TO hidden_dentry */
-+# define dtohd(dent) (dtopd(dent)->wdi_dentry)
-+# define dtohd2(dent) (dtopd(dent)->wdi_dentry2)
-+
-+/* dentry to state */
-+# define dtost(dent) (dtopd(dent)->state)
-+# define sbt(sb) ((sb)->s_type->name)
-+
-+#define IS_WRITE_FLAG(flag) (flag & (O_RDWR | O_WRONLY | O_APPEND))
-+#define IS_COPY_FLAG(flag) (flag & (COPY_FLAGS))
-+
-+/* macros to simplify non-SCA code */
-+#  define MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages)
-+#  define MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages)
-+#  define FREE_PAGE_POINTERS(hidden_pages, num)
-+#  define FREE_PAGEDATA_POINTERS(hidden_pages_data, num)
-+#  define FOR_EACH_PAGE
-+#  define CURRENT_HIDDEN_PAGE hidden_page
-+#  define CURRENT_HIDDEN_PAGEDATA hidden_page_data
-+#  define CURRENT_HIDDEN_PAGEINDEX page->index
-+
-+/*
-+ * EXTERNALS:
-+ */
-+extern struct file_operations mini_fo_main_fops;
-+extern struct file_operations mini_fo_dir_fops;
-+extern struct inode_operations mini_fo_main_iops;
-+extern struct inode_operations mini_fo_dir_iops;
-+extern struct inode_operations mini_fo_symlink_iops;
-+extern struct super_operations mini_fo_sops;
-+extern struct dentry_operations mini_fo_dops;
-+extern struct vm_operations_struct mini_fo_shared_vmops;
-+extern struct vm_operations_struct mini_fo_private_vmops;
-+extern struct address_space_operations mini_fo_aops;
-+
-+#if 0 /* unused by mini_fo */
-+extern int mini_fo_interpose(dentry_t *hidden_dentry, dentry_t *this_dentry, super_block_t *sb, int flag);
-+#if defined(FIST_FILTER_DATA) || defined(FIST_FILTER_SCA)
-+extern page_t *mini_fo_get1page(file_t *file, int index);
-+extern int mini_fo_fill_zeros(file_t *file, page_t *page, unsigned from);
-+# endif /* FIST_FILTER_DATA || FIST_FILTER_SCA */
-+
-+
-+#  define mini_fo_hidden_dentry(d) __mini_fo_hidden_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+#  define mini_fo_hidden_sto_dentry(d) __mini_fo_hidden_sto_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+
-+extern dentry_t *__mini_fo_hidden_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+extern dentry_t *__mini_fo_hidden_sto_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+
-+extern int mini_fo_read_file(const char *filename, void *buf, int len);
-+extern int mini_fo_write_file(const char *filename, void *buf, int len);
-+extern dentry_t *fist_lookup(dentry_t *dir, const char *name, vnode_t **out, uid_t uid, gid_t gid);
-+#endif /* unused by mini_fo */
-+
-+/* state transition functions */
-+extern int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag);
-+extern int nondir_del_rew_to_del(dentry_t *dentry);
-+extern int nondir_creat_to_del(dentry_t *dentry);
-+extern int nondir_mod_to_del(dentry_t *dentry);
-+extern int nondir_unmod_to_del(dentry_t *dentry);
-+
-+extern int dir_unmod_to_mod(dentry_t *dentry);
-+
-+/* rename specials */
-+extern int rename_directory(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+extern int rename_nondir(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+
-+/* misc stuff */
-+extern int mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                               dentry_t *hidden_sto_dentry,
-+                               dentry_t *dentry,
-+                               super_block_t *sb, int flag);
-+
-+extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                         dentry_t *src_dentry, struct vfsmount *src_mnt);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, dev_t dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd);
-+#else
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, int dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode);
-+#endif
-+
-+extern int create_sto_dir(dentry_t *dentry, int mode);
-+
-+extern int exists_in_storage(dentry_t *dentry);
-+extern int is_mini_fo_existant(dentry_t *dentry);
-+extern int get_neg_sto_dentry(dentry_t *dentry);
-+extern int build_sto_structure(dentry_t *dir, dentry_t *dentry);
-+extern int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len);
-+extern dentry_t *bpath_walk(super_block_t *sb, char *bpath);
-+extern int bpath_put(dentry_t *dentry);
-+
-+/* check_mini_fo types functions */
-+extern int check_mini_fo_dentry(dentry_t *dentry);
-+extern int check_mini_fo_file(file_t *file);
-+extern int check_mini_fo_inode(inode_t *inode);
-+
-+/* General meta functions, can be called from outside of meta.c */
-+extern int meta_build_lists(dentry_t *dentry);
-+extern int meta_put_lists(dentry_t *dentry);
-+extern int __meta_put_lists(inode_t *inode);
-+
-+extern int meta_add_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_add_r_entry(dentry_t *dentry,
-+                          const char *old_name, int old_len,
-+                          const char *new_name, int new_len);
-+
-+extern int meta_remove_r_entry(dentry_t *dentry, const char *name, int len);
-+
-+extern int meta_check_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_check_d_entry(inode_t *inode, const char *name, int len);
-+
-+extern char* meta_check_r_entry(dentry_t *dentry, const char *name, int len);
-+extern char* __meta_check_r_entry(inode_t *inode, const char *name, int len);
-+extern int meta_is_r_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_is_r_entry(inode_t *inode, const char *name, int len);
-+
-+/* Specific meta functions, should be called only inside meta.c */
-+extern int __meta_put_d_list(inode_t *inode);
-+extern int __meta_put_r_list(inode_t *inode);
-+
-+extern int meta_list_add_d_entry(dentry_t *dentry,
-+                               const char *name, int len);
-+extern int meta_list_add_r_entry(dentry_t *dentry,
-+                               const char *old_name, int old_len,
-+                               const char *new_name, int new_len);
-+
-+extern int meta_list_remove_r_entry(dentry_t *dentry,
-+                                  const char *name, int len);
-+
-+extern int __meta_list_remove_r_entry(inode_t *inode,
-+                                    const char *name, int len);
-+
-+extern int meta_write_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_write_r_entry(dentry_t *dentry,
-+                            const char *old_name, int old_len,
-+                            const char *new_name, int new_len);
-+
-+extern int meta_sync_lists(dentry_t *dentry);
-+extern int meta_sync_d_list(dentry_t *dentry, int app_flag);
-+extern int meta_sync_r_list(dentry_t *dentry, int app_flag);
-+
-+/* ndl stuff */
-+extern int ndl_add_entry(struct readdir_data *rd, const char *name, int len);
-+extern void ndl_put_list(struct readdir_data *rd);
-+extern int ndl_check_entry(struct readdir_data *rd,
-+                         const char *name, int len);
-+
-+
-+# define copy_inode_size(dst, src) \
-+    dst->i_size = src->i_size; \
-+    dst->i_blocks = src->i_blocks;
-+
-+static inline void
-+fist_copy_attr_atime(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+}
-+static inline void
-+fist_copy_attr_times(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+}
-+static inline void
-+fist_copy_attr_timesizes(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+      copy_inode_size(dest, src);
-+}
-+static inline void
-+fist_copy_attr_all(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_mode = src->i_mode;
-+      dest->i_nlink = src->i_nlink;
-+      dest->i_uid = src->i_uid;
-+      dest->i_gid = src->i_gid;
-+      dest->i_rdev = src->i_rdev;
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+      dest->i_blksize = src->i_blksize;
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,12)
-+      dest->i_blkbits = src->i_blkbits;
-+# endif /* linux 2.4.12 and newer */
-+      copy_inode_size(dest, src);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      dest->i_attr_flags = src->i_attr_flags;
-+#else
-+      dest->i_flags = src->i_flags;
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+/* copied from linux/fs.h */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      if (m1 != m2) {
-+              if ((unsigned long) m1 < (unsigned long) m2) {
-+                      struct mutex *tmp = m2;
-+                      m2 = m1; m1 = tmp;
-+              }
-+              mutex_lock(m1);
-+      }
-+      mutex_lock(m2);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      mutex_unlock(m1);
-+      if (m1 != m2)
-+              mutex_unlock(m2);
-+      dput(d1);
-+      dput(d2);
-+}
-+
-+#else
-+static inline void double_down(struct semaphore *s1, struct semaphore *s2)
-+{
-+        if (s1 != s2) {
-+                if ((unsigned long) s1 < (unsigned long) s2) {
-+                        struct semaphore *tmp = s2;
-+                        s2 = s1; s1 = tmp;
-+                }
-+                down(s1);
-+        }
-+        down(s2);
-+}
-+
-+static inline void double_up(struct semaphore *s1, struct semaphore *s2)
-+{
-+        up(s1);
-+        if (s1 != s2)
-+                up(s2);
-+}
-+
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_down(&d1->d_inode->i_sem, &d2->d_inode->i_sem);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_up(&d1->d_inode->i_sem,&d2->d_inode->i_sem);
-+        dput(d1);
-+        dput(d2);
-+}
-+#endif   /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
-+#endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
-+#endif /* __KERNEL__ */
-+
-+/*
-+ * Definitions for user and kernel code
-+ */
-+
-+/* ioctls */
-+
-+#endif        /* not __MINI_FO_H_ */
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-merge
-@@ -0,0 +1,180 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+BASE=
-+STO=
-+HELP=
-+DRYRUN=
-+VERBOSE=
-+TMP="/tmp/"
-+META_NAME="META_dAfFgHE39ktF3HD2sr"
-+SKIP_DEL_LIST="skip-delete-list.mini_fo-merge"
-+
-+COMMAND=
-+exec_command()
-+{
-+    if [ x$DRYRUN == "xset" ]; then
-+      echo "  would run: $COMMAND"
-+    elif ! [ x$DRYRUN == "xset" ]; then
-+      if [ x$VERBOSE == "xset" ]; then
-+          echo "  running: $COMMAND"
-+      fi
-+      eval $COMMAND
-+    fi
-+}
-+
-+usage()
-+{
-+cat <<EOF
-+
-+USAGE: $0 -b <base dir> -s <storage dir>
-+Version 0.1
-+
-+This script merges the contents of a mini_fo storage file system back
-+to the base file system.
-+
-+!!! Warning: This will modify the base filesystem and can destroy data
-+             if used wrongly.
-+
-+Options:
-+     -b <base dir>
-+          the directory of the base file system.
-+
-+     -s <storage dir>
-+          the directory of the storage file system.
-+
-+     -d   dry run, will not change anything and print the commands that
-+          would be executed.
-+
-+     -t   tmp dir for storing temporary file. default: $TMP
-+
-+     -v   show what operations are performed.
-+
-+     -h   displays this message.
-+
-+EOF
-+}
-+
-+# parse parameters
-+while getopts hdvt:b:s: OPTS
-+  do
-+  case $OPTS in
-+      h)  HELP="set";;
-+      d)  DRYRUN="set";;
-+      v)  VERBOSE="set";;
-+      b)  BASE="$OPTARG";;
-+      s)  STO="$OPTARG";;
-+      t)  TMP="$OPTARG";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+if ! [ -d "$BASE" ] || ! [ -d "$STO" ]; then
-+    echo -e "$0:\n Error, -s and/or -b argument missing. type $0 -h for help."
-+    exit -1;
-+fi
-+
-+# get full paths
-+pushd $STO; STO=`pwd`; popd
-+pushd $BASE; BASE=`pwd`; popd
-+TMP=${TMP%/}
-+
-+
-+cat<<EOF
-+###############################################################################
-+# mini_fo-merge
-+#
-+# base dir:       $BASE
-+# storage dir:    $STO
-+# meta filename:  $META_NAME
-+# dry run:        $DRYRUN
-+# verbose:        $VERBOSE
-+# tmp files:      $TMP
-+###############################################################################
-+
-+EOF
-+
-+rm $TMP/$SKIP_DEL_LIST
-+
-+# first process all renamed dirs
-+echo "Merging renamed directories..."
-+pushd $STO &> /dev/null
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^R ' | tr -s ':R' ' ' | while read ENTRY; do
-+    echo "entry: $ENTRY"
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    OLD_B_DIR=`echo $ENTRY | cut -d ' ' -f 2 | sed -e 's/\///'`
-+    NEW_NAME=`echo $ENTRY | cut -d ' ' -f 3`
-+    NEW_B_DIR=`echo $META_FILE | sed -e "s/$META_NAME/$NEW_NAME/" | sed -e 's/^\.\///'`
-+    echo "META_FILE: $META_FILE"
-+    echo "OLD_B_DIR: $OLD_B_DIR"
-+    echo "NEW_NAME: $NEW_NAME"
-+    echo  "NEW_B_DIR: $NEW_B_DIR"
-+
-+    pushd $BASE &> /dev/null
-+    # remove an existing dir in storage
-+    COMMAND="rm -rf $NEW_B_DIR"; exec_command
-+    COMMAND="cp -R $OLD_B_DIR $NEW_B_DIR"; exec_command
-+    echo ""
-+    popd &> /dev/null
-+
-+    # remember this dir to exclude it from deleting later
-+    echo $NEW_B_DIR >> $TMP/$SKIP_DEL_LIST
-+done
-+
-+# delete all whiteouted files from base
-+echo -e "\nDeleting whiteout'ed files from base file system..."
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^D ' | sed -e 's/:D//' | while read ENTRY; do
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    DEL_NAME=`echo $ENTRY | cut -d ' ' -f 2`
-+    DEL_FILE=`echo $META_FILE | sed -e "s/$META_NAME/$DEL_NAME/" | sed -e 's/^\.\///'`
-+    grep -x $DEL_FILE $TMP/$SKIP_DEL_LIST &> /dev/null
-+    if [ $? -ne 0 ]; then
-+      pushd $BASE &> /dev/null
-+      COMMAND="rm -rf $DEL_FILE"; exec_command
-+      popd &> /dev/null
-+    else
-+      echo "  excluding: $DEL_FILE as in skip-del-list."
-+    fi
-+done
-+
-+# create all dirs and update permissions
-+echo -e "\nSetting up directory structures in base file system..."
-+find . -type d | sed -e 's/^\.\///' | while read DIR; do
-+    PERMS=`stat -c %a $DIR`
-+    DIR_UID=`stat -c %u $DIR`
-+    DIR_GID=`stat -c %g $DIR`
-+    pushd $BASE &> /dev/null
-+    if ! [ -d $DIR ]; then
-+      COMMAND="mkdir -p $DIR"; exec_command
-+    fi
-+    COMMAND="chmod $PERMS $DIR"; exec_command
-+    COMMAND="chown $DIR_UID:$DIR_GID $DIR"; exec_command
-+    popd &> /dev/null
-+done
-+
-+# merge all non-directory files
-+echo -e "\nMerging all non-directory files...."
-+for i in b c p f l s; do
-+    find . -type $i | sed -e 's/^\.\///' | grep -v "$META_NAME" | while read FILE; do
-+      pushd $BASE #&> /dev/null
-+      COMMAND="cp -df $STO/$FILE $BASE/$FILE"; exec_command
-+      popd &> /dev/null
-+    done
-+done
-+popd &> /dev/null
-+
-+#rm $TMP/$SKIP_DEL_LIST
-+
-+echo "Done!"
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-overlay
-@@ -0,0 +1,130 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+HELP=
-+SUFF=
-+MNTP=
-+MNT_DIR="/mnt"
-+STO=
-+STO_DIR="/tmp"
-+BASE=
-+
-+usage()
-+{
-+cat <<EOF
-+
-+Usage: $0 [-s suffix] [-d sto_dir_dir] [-m mount point] base_dir
-+Version 0.1
-+
-+This script overlays the given base directory using the mini_fo file
-+system. If only the base directory base_dir is given, $0
-+will use a storage directory called "sto-<base_dir_name>" in $STO_DIR,
-+and mount point "mini_fo-<base_dir_dir>" in $MNT_DIR.
-+
-+Options:
-+     -s <suffix>
-+          add given suffix to storage directory and the mount
-+          point. This is usefull for overlaying one base directory
-+          several times and avoiding conflicts with storage directory
-+          names and mount points.
-+
-+     -d <sto_dir_dir>
-+          change the directory in which the storage directory will be
-+          created (default is currently "$STO_DIR".
-+
-+     -m <mount point>
-+          use an alternative directory to create the mini_fo
-+          mountpoint (default is currently "$MNT_DIR".
-+
-+     -h   displays this message.
-+
-+EOF
-+exit 1;
-+}
-+
-+while getopts hm:s:d: OPTS
-+  do
-+  case $OPTS in
-+      s)  SUFF="$OPTARG";;
-+      d)  STO_DIR="$OPTARG";;
-+      m)  MNT_DIR="$OPTARG";;
-+      h)  HELP="set";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+shift $(($OPTIND - 1))
-+
-+BASE="$1"
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+# fix suffix
-+if [ "x$SUFF" != "x" ]; then
-+    SUFF="-$SUFF"
-+fi
-+
-+# kill trailing slashes
-+MNT_DIR=${MNT_DIR%/}
-+STO_DIR=${STO_DIR%/}
-+BASE=${BASE%/}
-+
-+
-+if ! [ -d "$BASE" ]; then
-+    echo "invalid base dir $BASE, run $0 -h for help."
-+    exit -1
-+fi
-+
-+# check opts
-+if ! [ -d "$MNT_DIR" ]; then
-+    echo "invalid mount dir $MNT_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+if ! [ -d "$STO_DIR" ]; then
-+    echo "invalid sto_dir_dir $STO_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+MNTP="$MNT_DIR/mini_fo-`basename $BASE`$SUFF"
-+STO="$STO_DIR/sto-`basename $BASE`$SUFF"
-+
-+# create the mount point if it doesn't exist
-+mkdir -p $MNTP
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create mount point $MNTP"
-+fi
-+
-+mkdir -p $STO
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create storage dir $STO"
-+fi
-+
-+# check if fs is already mounted
-+mount | grep mini_fo | grep $MNTP &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, existing mini_fo mount at $MNTP."
-+    exit -1
-+fi
-+
-+mount | grep mini_fo | grep $STO &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, $STO seems to be used already."
-+    exit -1
-+fi
-+
-+# mount
-+mount -t mini_fo -o base=$BASE,sto=$STO $BASE $MNTP
-+
-+if [ $? -ne 0 ]; then
-+    echo "Error, mounting failed, maybe no permisson to mount?"
-+fi
---- /dev/null
-+++ b/fs/mini_fo/mmap.c
-@@ -0,0 +1,637 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+#ifdef FIST_COUNT_WRITES
-+/* for counting writes in the middle vs. regular writes */
-+unsigned long count_writes = 0, count_writes_middle = 0;
-+#endif /* FIST_COUNT_WRITES */
-+
-+/* forward declaration of commit write and prepare write */
-+STATIC int mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+STATIC int mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+
-+
-+/*
-+ * Function for handling creation of holes when lseek-ing past the
-+ * end of the file and then writing some data.
-+ */
-+int
-+mini_fo_fill_zeros(file_t* file, page_t *page, unsigned from)
-+{
-+      int err = 0;
-+      dentry_t *dentry = file->f_dentry;
-+      inode_t *inode = dentry->d_inode;
-+      page_t *tmp_page;
-+      int index;
-+
-+      print_entry_location();
-+
-+      for (index = inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+              tmp_page = mini_fo_get1page(file, index);
-+              if (IS_ERR(tmp_page)) {
-+                      err = PTR_ERR(tmp_page);
-+                      goto out;
-+              }
-+
-+              /*
-+               * zero out rest of the contents of the page between the appropriate
-+               * offsets.
-+               */
-+              memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+              if (! (err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+
-+              page_cache_release(tmp_page);
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+      /* zero out appropriate parts of last page */
-+
-+      /*
-+       * if the encoding type is block, then adjust the 'from' (where the
-+       * zeroing will start) offset appropriately
-+       */
-+      from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+
-+      if ((from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0) {
-+
-+              memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, from - (inode->i_size & ~PAGE_CACHE_MASK));
-+              if (! (err = mini_fo_prepare_write(file, page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, page, 0, PAGE_CACHE_SIZE);
-+
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_writepage(page_t *page)
-+{
-+      int err = -EIO;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      char *kaddr, *hidden_kaddr;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      /*
-+       * writepage is called when shared mmap'ed files need to write
-+       * their pages, while prepare/commit_write are called from the
-+       * non-paged write() interface.  (However, in 2.3 the two interfaces
-+       * share the same cache, while in 2.2 they didn't.)
-+       *
-+       * So we pretty much have to duplicate much of what commit_write does.
-+       */
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      /* get page address, and encode it */
-+      kaddr = (char *) kmap(page);
-+      hidden_kaddr = (char*) kmap(hidden_page);
-+      mini_fo_encode_block(kaddr, hidden_kaddr, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then return error */
-+      kunmap(page);
-+      kunmap(hidden_page);
-+
-+      /* call lower writepage (expects locked page) */
-+      err = hidden_inode->i_mapping->a_ops->writepage(hidden_page);
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,1)
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+# endif /* kernel older than 2.4.1 */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+      if (err)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+ out:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,1)
-+      UnlockPage(page);
-+# endif /* kernel 2.4.1 and newer */
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * returns unlocked, up-to-date page (if ok), with increased refcnt.
-+ */
-+page_t *
-+mini_fo_get1page(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+      wait_on_page(page);
-+      if (!Page_Uptodate(page)) {
-+              lock_page(page);
-+              err = mapping->a_ops->readpage(file, page);
-+              if (err) {
-+                      page = ERR_PTR(err);
-+                      goto out;
-+              }
-+              wait_on_page(page);
-+              if (!Page_Uptodate(page)) {
-+                      page = ERR_PTR(-EIO);
-+                      goto out;
-+              }
-+      }
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * similar to get1page, but doesn't guarantee that it will return
-+ * an unlocked page.
-+ */
-+page_t *
-+mini_fo_get1page_cached(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * readpage is called from generic_page_read and the fault handler.
-+ * If your file system uses generic_page_read for the read op, it
-+ * must implement readpage.
-+ *
-+ * Readpage expects a locked page, and must unlock it.
-+ */
-+STATIC int
-+mini_fo_do_readpage(file_t *file, page_t *page)
-+{
-+      int err = -EIO;
-+      dentry_t *dentry;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      char *page_data;
-+      page_t *hidden_page;
-+      char *hidden_page_data;
-+      int real_size;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+      hidden_dentry = dtohd(dentry);
-+      inode = dentry->d_inode;
-+      hidden_inode = itohi(inode);
-+
-+      fist_dprint(7, "%s: requesting page %d from file %s\n", __FUNCTION__, page->index, dentry->d_name.name);
-+
-+      MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGE = NULL;
-+
-+      /* find lower page (returns a locked page) */
-+      FOR_EACH_PAGE {
-+              fist_dprint(8, "%s: Current page index = %d\n", __FUNCTION__, CURRENT_HIDDEN_PAGEINDEX);
-+              CURRENT_HIDDEN_PAGE = read_cache_page(hidden_inode->i_mapping,
-+                                                    CURRENT_HIDDEN_PAGEINDEX,
-+                                                    (filler_t *) hidden_inode->i_mapping->a_ops->readpage,
-+                                                    (void *) hidden_file);
-+              if (IS_ERR(CURRENT_HIDDEN_PAGE)) {
-+                      err = PTR_ERR(CURRENT_HIDDEN_PAGE);
-+                      CURRENT_HIDDEN_PAGE = NULL;
-+                      goto out_release;
-+              }
-+      }
-+
-+      /*
-+       * wait for the page data to show up
-+       * (signaled by readpage as unlocking the page)
-+       */
-+      FOR_EACH_PAGE {
-+              wait_on_page(CURRENT_HIDDEN_PAGE);
-+              if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                      /*
-+                       * call readpage() again if we returned from wait_on_page with a
-+                       * page that's not up-to-date; that can happen when a partial
-+                       * page has a few buffers which are ok, but not the whole
-+                       * page.
-+                       */
-+                      lock_page(CURRENT_HIDDEN_PAGE);
-+                      err = hidden_inode->i_mapping->a_ops->readpage(hidden_file,
-+                                                                     CURRENT_HIDDEN_PAGE);
-+                      if (err) {
-+                              CURRENT_HIDDEN_PAGE = NULL;
-+                              goto out_release;
-+                      }
-+                      wait_on_page(CURRENT_HIDDEN_PAGE);
-+                      if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                              err = -EIO;
-+                              goto out_release;
-+                      }
-+              }
-+      }
-+
-+      /* map pages, get their addresses */
-+      page_data = (char *) kmap(page);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGEDATA = (char *) kmap(CURRENT_HIDDEN_PAGE);
-+
-+      /* if decode_block could fail, then return error */
-+      err = 0;
-+      real_size = hidden_inode->i_size - (page->index << PAGE_CACHE_SHIFT);
-+      if (real_size <= 0)
-+              memset(page_data, 0, PAGE_CACHE_SIZE);
-+      else if (real_size < PAGE_CACHE_SIZE) {
-+              mini_fo_decode_block(hidden_page_data, page_data, real_size, inode, inode->i_sb, page->index);
-+              memset(page_data + real_size, 0, PAGE_CACHE_SIZE - real_size);
-+      } else
-+              mini_fo_decode_block(hidden_page_data, page_data, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+
-+      FOR_EACH_PAGE
-+              kunmap(CURRENT_HIDDEN_PAGE);
-+      kunmap(page);
-+
-+ out_release:
-+      FOR_EACH_PAGE
-+              if (CURRENT_HIDDEN_PAGE)
-+                      page_cache_release(CURRENT_HIDDEN_PAGE); /* undo read_cache_page */
-+
-+      FREE_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      FREE_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+
-+ out:
-+      if (err == 0)
-+              SetPageUptodate(page);
-+      else
-+              ClearPageUptodate(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_readpage(file_t *file, page_t *page)
-+{
-+      int err;
-+      print_entry_location();
-+
-+      err = mini_fo_do_readpage(file, page);
-+
-+      /*
-+       * we have to unlock our page, b/c we _might_ have gotten a locked page.
-+       * but we no longer have to wakeup on our page here, b/c UnlockPage does
-+       * it
-+       */
-+      UnlockPage(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = 0;
-+
-+      print_entry_location();
-+
-+      /*
-+       * we call kmap(page) only here, and do the kunmap
-+       * and the actual downcalls, including unlockpage and uncache
-+       * in commit_write.
-+       */
-+      kmap(page);
-+
-+      /* fast path for whole page writes */
-+      if (from == 0 && to == PAGE_CACHE_SIZE)
-+              goto out;
-+      /* read the page to "revalidate" our data */
-+      /* call the helper function which doesn't unlock the page */
-+      if (!Page_Uptodate(page))
-+              err = mini_fo_do_readpage(file, page);
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = -ENOMEM;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      file_t *hidden_file = NULL;
-+      loff_t pos;
-+      unsigned bytes = to - from;
-+      unsigned hidden_from, hidden_to, hidden_bytes;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      ASSERT(file != NULL);
-+      /*
-+       * here we have a kmapped page, with data from the user copied
-+       * into it.  we need to encode_block it, and then call the lower
-+       * commit_write.  We also need to simulate same behavior of
-+       * generic_file_write, and call prepare_write on the lower f/s first.
-+       */
-+#ifdef FIST_COUNT_WRITES
-+      count_writes++;
-+# endif /* FIST_COUNT_WRITES */
-+
-+      /* this is append and/or extend -- we can't have holes so fill them in */
-+      if (page->index > (hidden_inode->i_size >> PAGE_CACHE_SHIFT)) {
-+              page_t *tmp_page;
-+              int index;
-+              for (index = hidden_inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+                      tmp_page = mini_fo_get1page(file, index);
-+                      if (IS_ERR(tmp_page)) {
-+                              err = PTR_ERR(tmp_page);
-+                              goto out;
-+                      }
-+                      /* zero out the contents of the page at the appropriate offsets */
-+                      memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+                      if (!(err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                              err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+                      page_cache_release(tmp_page);
-+                      if (err < 0)
-+                              goto out;
-+                      if (current->need_resched)
-+                              schedule();
-+              }
-+      }
-+
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_inode->i_mutex);
-+#else
-+      down(&hidden_inode->i_sem);
-+#endif
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+#if FIST_ENCODING_BLOCKSIZE > 1
-+#  error encoding_blocksize greater than 1 is not yet supported
-+# endif /* FIST_ENCODING_BLOCKSIZE > 1 */
-+
-+      hidden_from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+      hidden_to = ((to + FIST_ENCODING_BLOCKSIZE - 1) & (~(FIST_ENCODING_BLOCKSIZE - 1)));
-+      if ((page->index << PAGE_CACHE_SHIFT) + to > hidden_inode->i_size) {
-+
-+              /*
-+               * if this call to commit_write had introduced holes and the code
-+               * for handling holes was invoked, then the beginning of this page
-+               * must be zeroed out
-+               * zero out bytes from 'size_of_file%pagesize' to 'from'.
-+               */
-+              if ((hidden_from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0)
-+                      memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, hidden_from - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+      }
-+      hidden_bytes = hidden_to - hidden_from;
-+
-+      /* call lower prepare_write */
-+      err = -EINVAL;
-+      if (hidden_inode->i_mapping &&
-+          hidden_inode->i_mapping->a_ops &&
-+          hidden_inode->i_mapping->a_ops->prepare_write)
-+              err = hidden_inode->i_mapping->a_ops->prepare_write(hidden_file,
-+                                                                  hidden_page,
-+                                                                  hidden_from,
-+                                                                  hidden_to);
-+      if (err)
-+              /* don't leave locked pages behind, esp. on an ENOSPC */
-+              goto out_unlock;
-+
-+      fist_dprint(8, "%s: encoding %d bytes\n", __FUNCTION__, hidden_bytes);
-+      mini_fo_encode_block((char *) page_address(page) + hidden_from, (char*) page_address(hidden_page) + hidden_from, hidden_bytes, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then goto unlock and return error */
-+
-+      /* call lower commit_write */
-+      err = hidden_inode->i_mapping->a_ops->commit_write(hidden_file,
-+                                                         hidden_page,
-+                                                         hidden_from,
-+                                                         hidden_to);
-+
-+      if (err < 0)
-+              goto out_unlock;
-+
-+      err = bytes;    /* convert error to no. of bytes */
-+
-+      inode->i_blocks = hidden_inode->i_blocks;
-+      /* we may have to update i_size */
-+      pos = (page->index << PAGE_CACHE_SHIFT) + to;
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+      mark_inode_dirty_sync(inode);
-+
-+ out_unlock:
-+      UnlockPage(hidden_page);
-+      page_cache_release(hidden_page);
-+      kunmap(page);           /* kmap was done in prepare_write */
-+ out:
-+      /* we must set our page as up-to-date */
-+      if (err < 0)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_inode->i_mutex);
-+#else
-+      up(&hidden_inode->i_sem);
-+#endif
-+      print_exit_status(err);
-+      return err;                     /* assume all is ok */
-+}
-+
-+
-+STATIC int
-+mini_fo_bmap(struct address_space *mapping, long block)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+
-+      print_entry_location();
-+
-+      inode = (inode_t *) mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      if (hidden_inode->i_mapping->a_ops->bmap)
-+              err = hidden_inode->i_mapping->a_ops->bmap(hidden_inode->i_mapping, block);
-+      print_exit_location();
-+      return err;
-+}
-+
-+
-+/*
-+ * This function is copied verbatim from mm/filemap.c.
-+ * XXX: It should be simply moved to some header file instead -- bug Al about it!
-+ */
-+static inline int sync_page(struct page *page)
-+{
-+      struct address_space *mapping = page->mapping;
-+
-+      if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
-+              return mapping->a_ops->sync_page(page);
-+      return 0;
-+}
-+
-+
-+/*
-+ * XXX: we may not need this function if not FIST_FILTER_DATA.
-+ * FIXME: for FIST_FILTER_SCA, get all lower pages and sync them each.
-+ */
-+STATIC int
-+mini_fo_sync_page(page_t *page)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      err = sync_page(hidden_page);
-+
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
---- /dev/null
-+++ b/fs/mini_fo/README
-@@ -0,0 +1,163 @@
-+README for the mini_fo overlay file system
-+=========================================
-+
-+
-+WHAT IS MINI_FO?
-+----------------
-+
-+mini_fo is a virtual kernel file system that can make read-only
-+file systems writable. This is done by redirecting modifying operations
-+to a writeable location called "storage directory", and leaving the
-+original data in the "base directory" untouched. When reading, the
-+file system merges the modifed and original data so that only the
-+newest versions will appear. This occurs transparently to the user,
-+who can access the data like on any other read-write file system.
-+
-+Base and storage directories may be located on the same or on
-+different partitions and may be of different file system types. While
-+the storage directory obviously needs to be writable, the base may or
-+may not be writable, what doesn't matter as it will no be modified
-+anyway.
-+
-+
-+WHAT IS GOOD FOR?
-+-----------------
-+
-+The primary purpose of the mini_fo file system is to allow easy
-+software updates to embedded systems, that often store their root
-+file system in a read-only flash file system, but there are many
-+more as for example sandboxing, or for allowing live-cds to
-+permanently store information.
-+
-+
-+BUILDING
-+--------
-+This should be simple. Adjust the Makefile to point to the correct
-+kernel headers you want to build the module for. Then:
-+
-+    # make
-+
-+should build "mini_fo.o" for a 2.4 kernel or "mini_fo.ko" for a 2.6
-+kernel.
-+
-+If you are building the module for you current kernel, you can install
-+the module (as root):
-+
-+    # make install
-+
-+or uninstall with
-+
-+    # make uninstall
-+
-+
-+USING THE FILE SYSTEM
-+--------------------
-+
-+the general mount syntax is:
-+
-+   mount -t mini_fo -o base=<base directory>,sto=<storage directory>\
-+                            <base directory> <mount point>
-+
-+Example:
-+
-+You have mounted a cdrom to /mnt/cdrom and want to modifiy some files
-+on it:
-+
-+load the module (as root)
-+
-+    # insmod mini_fo.o for a 2.4 kernel or
-+
-+    # insmod mini_fo.ko for a 2.6 kernel
-+
-+
-+create a storage dir in tmp and a mountpoint for mini_fo:
-+
-+    # mkdir /tmp/sto
-+    # mkdir /mnt/mini_fo
-+
-+and mount the mini_fo file system:
-+
-+    # mount -t mini_fo -o base=/mnt/cdrom,sto=/tmp/sto /mnt/cdrom /mnt/mini_fo
-+
-+
-+Now the data stored on the cd can be accessed via the mini_fo
-+mountpoint just like any read-write file system, files can be modified
-+and deleted, new ones can be created and so on. When done unmount the
-+file system:
-+
-+    # unmount /mnt/mini_fo
-+
-+Note that if the file system is mounted again using the same storage
-+file system, of course it will appear in the modified state again. If
-+you remount it using an new empty storage directory, it will be
-+unmodified. Therefore by executing:
-+
-+    # cd /tmp/sto
-+    # rm -rf *
-+
-+you can nuke all the changes you made to the original file system. But
-+ remember NEVER do this while the mini_fo file system is mounted!
-+
-+
-+Alternatively you can use the mini_fo-overlay bash script, that
-+simplifies managing mini_fo mounts. See TOOLS Section.
-+
-+
-+TOOLS
-+-----
-+
-+mini_fo-merge (experimental):
-+
-+This is a bash script that will merge changes contained in the storage
-+directory back to the base directory. This allows mini_fo to function
-+as a cache file system by overlaying a slow (network, ...) file system
-+and using a fast (ramdisk, ...) as storage. When done, changes can be
-+merged back to the (slow) base with mini_fo-merge. See "mini_fo-merge
-+-h" for details.
-+
-+It can be usefull for merging changes back after a successfull test
-+(patches, software updates...)
-+
-+
-+mini_fo-overlay:
-+
-+This bash script simplifies managing one or more mini_fo mounts. For
-+overlaying a directory called "basedir1", you can just call:
-+
-+    # mini_fo-overlay basedir1
-+
-+This will mount mini_fo with "basedir1" as base, "/tmp/sto-basedir1/"
-+as storage to "/mnt/mini_fo-basedir1/". It has more options though,
-+type "mini_fo-overlay -h" for details.
-+
-+
-+DOCUMENTATION, REPORTING BUGS, GETTING HELP
-+-------------------------------------------
-+
-+Please visit the mini_fo project page at:
-+
-+http://www.denx.de/twiki/bin/view/Know/MiniFOHome
-+
-+
-+WARNINGS
-+--------
-+
-+Never modify the base or the storage directorys while the mini_fo
-+file system is mounted, or you might crash you system. Simply accessing
-+and reading should not cause any trouble.
-+
-+Exporting a mini_fo mount point via NFS has not been tested, and may
-+or may not work.
-+
-+Check the RELEASE_NOTES for details on bugs and features.
-+
-+
-+
-+Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+
-+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.
-+
-+
---- /dev/null
-+++ b/fs/mini_fo/RELEASE_NOTES
-@@ -0,0 +1,111 @@
-+Release:      mini_fo-0.6.1 (v0-6-1)
-+Date:         21.09.2005
-+
-+
-+Changes:
-+--------
-+v0-6-1:
-+
-+- bugfixes (see ChangeLog)
-+
-+- two helper scripts "mini_fo_merge" and "mini_fo_overlay" (see
-+  README for details).
-+
-+v0-6-0:
-+
-+- Support for 2.4 and 2.6 (see Makefile)
-+
-+- Partial hard link support (creating works as expected, but already
-+  existing links in the base file system will be treated as if they
-+  were individual files).
-+
-+- Various bugfixes and cleanups.
-+
-+
-+v0-6-0-pre1:
-+
-+- This is mini_fo-0-6-0-pre1! This release is a complete rewrite of
-+  many vital mini_fo parts such as the old whiteout list code which
-+  has been replaced by the new META subsystem.
-+
-+- Light weight directory renaming implemented. This means if a
-+  directory is renamed via the mini_fo filesystem this will no longer
-+  result in a complete copy in storage, instead only one empty
-+  directory will be created. All base filed contained in the original
-+  directory stay there until modified.
-+
-+- Special files (creating, renaming, deleting etc.) now working.
-+
-+- Many bugfixes and cleanup, mini_fo is now a lot more stable.
-+
-+
-+v0-5-10:
-+
-+- Final release of the 0-5-* versions. Next will be a complete rewrite
-+  of many features. This release contains several bugfixes related to
-+  directory renaming.
-+
-+
-+v0-5-10-pre6:
-+
-+- Lots of cleanup and several bugfixes related to directory deleting
-+
-+- Directory renaming suddenly works, what is most likely due to the
-+  fact tha that "mv" is smart: if the classic rename doesn't work it
-+  will assume that source and target file are on different fs and will
-+  copy the directory and try to remove the source directory. Until
-+  directory removing wasn't implemented, it would fail to do this and
-+  rollback.
-+  So, directory renaming works for now, but it doesn't yet do what you
-+  would expect from a overlay fs, so use with care.
-+
-+
-+v0-5-10-pre5:
-+
-+- implemented directory deleting
-+- made parsing of mount options more stable
-+- New format of mount options! (See README)
-+- I can't reproduce the unknown panic with 2.4.25 anymore, so I'll
-+  happily assume it never existed!
-+
-+
-+Implemented features:
-+---------------------
-+
-+- creating hard links (see BUGS on already existing hard links)
-+- lightweight directory renaming
-+- renaming device files, pipes, sockets, etc.
-+- creating, renaming, deleting of special files
-+- deleting directorys
-+- general directory reading (simple "ls" )
-+- creating files in existing directorys
-+- creating directorys
-+- renaming files.
-+- reading and writing files (involves opening)
-+- appending to files (creates copy in storage)
-+- deleting files
-+- llseek works too, what allows editors to work
-+- persistency (a deleted file stay deleted over remounts)
-+- use of symbolic links
-+- creating of device files
-+
-+
-+Not (yet) implemented features:
-+-------------------------------
-+
-+- full hard link support.
-+
-+
-+
-+BUGS:
-+-----
-+
-+Hard links in the base file system will be treated as individual
-+files, not as links to one inode.
-+
-+The main problem with hard links isn't allowing to create them, but
-+their pure existence. If you modify a base hard link, the changes made
-+will only show up on this link, the other link will remain in the
-+original state. I hope to fix this someday. Please note that this does
-+not effect the special hard links '.' and '..', that are handled
-+seperately by the lower fs.
---- /dev/null
-+++ b/fs/mini_fo/state.c
-@@ -0,0 +1,620 @@
-+/*
-+ * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+/* create the storage file, setup new states */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+int create_sto_reg_file(dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: wrong type or state.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode, nd);
-+#else
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode);
-+#endif
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file [2].\n");
-+                err = -EINVAL;
-+                goto out_lock;
-+        }
-+
-+        /* interpose the new inode */
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == UNMODIFIED) {
-+                dtost(dentry) = MODIFIED;
-+                /* interpose on new inode */
-+                if(itohi2(dentry->d_inode) != NULL) {
-+                        printk(KERN_CRIT "mini_fo: create_sto_file: invalid inode detected.\n");
-+                        err = -EINVAL;
-+                        goto out_lock;
-+                }
-+                itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+      fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* create the sto dir, setup states */
-+int create_sto_dir(dentry_t *dentry, int mode)
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+        dentry_t *hidden_sto_dir_dentry;
-+
-+      /* had to take the "!S_ISDIR(mode))" check out, because it failed */
-+      if(exists_in_storage(dentry)) {
-+                printk(KERN_CRIT "mini_fo: create_sto_dir: wrong type or state.\\
-+n");
-+                err = -EINVAL;
-+                goto out;
-+        }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      mode);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir.\n");
-+              goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir [2].\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == NON_EXISTANT) {
-+              dtopd(dentry)->state = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              dtopd(dentry)->state = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo:  create_sto_dir: ERROR, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_nod(dentry_t *dentry, int mode, dev_t dev)
-+#else
-+int create_sto_nod(dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+                printk(KERN_CRIT "mini_fo: create_sto_nod: ERROR getting neg. sto dentry.\n");
-+                goto out;
-+        }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mknod(hidden_sto_dir_dentry->d_inode, hidden_sto_dentry, mode, dev);
-+      if(err)
-+              goto out_lock;
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_nod: creating storage inode failed [1].\n");
-+              err = -EINVAL; /* return something indicating failure */
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == NON_EXISTANT) {
-+              dtost(dentry) = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == UNMODIFIED) {
-+              dtost(dentry) = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo: create_sto_nod: error, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+
-+/* unimplemented (and possibly not usefull):
-+
-+   nondir-del_to_del_rew
-+   nondir-non_exist_to_creat
-+
-+   dir-unmod_to_del
-+   dir-mod_to_del
-+   dir-creat_to_del
-+   dir-del_rew_to_del
-+   dir-del_to_del_rew
-+   dir-non_exist_to_creat
-+*/
-+
-+
-+/* bring a file of any type from state UNMODIFIED to MODIFIED */
-+int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag)
-+{
-+      int err = 0;
-+      struct vfsmount *tgt_mnt;
-+      struct vfsmount *src_mnt;
-+      dentry_t *tgt_dentry;
-+      dentry_t *src_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if((dtost(dentry) != UNMODIFIED) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      /* create sto file */
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+      /* handle different types of nondirs */
-+      if(S_ISCHR(dentry->d_inode->i_mode) ||
-+         S_ISBLK(dentry->d_inode->i_mode)) {
-+              err = vfs_mknod(hidden_sto_dir_dentry->d_inode,
-+                              hidden_sto_dentry,
-+                              dtohd(dentry)->d_inode->i_mode,
-+                              dtohd(dentry)->d_inode->i_rdev);
-+      }
-+
-+      else if(S_ISREG(dentry->d_inode->i_mode)) {
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode, NULL);
-+#else
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode);
-+#endif
-+      }
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      /* interpose on new inode */
-+      if(itohi2(dentry->d_inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR, invalid inode detected.\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+
-+        fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dtost(dentry) = MODIFIED;
-+
-+      /* copy contents if regular file and cp_flag = 1 */
-+      if((cp_flag == 1) && S_ISREG(dentry->d_inode->i_mode)) {
-+
-+              /* unlock first */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              dput(hidden_sto_dir_dentry);
-+
-+              tgt_dentry = dtohd2(dentry);
-+              tgt_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              src_dentry = dtohd(dentry);
-+              src_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt;
-+
-+              err = mini_fo_cp_cont(tgt_dentry, tgt_mnt,
-+                                    src_dentry, src_mnt);
-+              if(err) {
-+                      printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                          ERROR copying contents.\n");
-+              }
-+              goto out;
-+      }
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* this function is currently identical to nondir_creat_to_del */
-+int nondir_del_rew_to_del(dentry_t *dentry)
-+{
-+      return nondir_creat_to_del(dentry);
-+}
-+
-+int nondir_creat_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      /* for now this function serves for both state DEL_REWRITTEN and
-+       * CREATED */
-+      if(!(dtost(dentry) == CREATED || (dtost(dentry) == DEL_REWRITTEN)) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del/del_rew_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      dtost(dentry) = NON_EXISTANT;
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_mod_to_del(dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != MODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_unmod_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+       /* next we have to get a negative dentry for the storage file */
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if(err)
-+              goto out;
-+
-+      /* add deleted file to META lists */
-+      err = meta_add_d_entry(dentry->d_parent,
-+                             dentry->d_name.name,
-+                             dentry->d_name.len);
-+
-+      if(err)
-+              goto out;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+ out:
-+      return err;
-+}
-+
-+/* bring a dir from state UNMODIFIED to MODIFIED */
-+int dir_unmod_to_mod(dentry_t *dentry)
-+{
-+      int err;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         !S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* this creates our dir incl. sto. structure */
-+      err = build_sto_structure(dentry->d_parent, dentry);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  build_sto_structure failed.\n");
-+              goto out;
-+      }
-+ out:
-+      return err;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/super.c
-@@ -0,0 +1,281 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+STATIC void
-+mini_fo_read_inode(inode_t *inode)
-+{
-+      static struct address_space_operations mini_fo_empty_aops;
-+
-+      __itopd(inode) = kmalloc(sizeof(struct mini_fo_inode_info), GFP_KERNEL);
-+      if (!itopd(inode)) {
-+              printk("<0>%s:%s:%d: No kernel memory!\n", __FILE__, __FUNCTION__, __LINE__);
-+              ASSERT(NULL);
-+      }
-+      itohi(inode) = NULL;
-+      itohi2(inode) = NULL;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      inode->i_version++;
-+#else
-+      inode->i_version = ++event;     /* increment inode version */
-+#endif
-+      inode->i_op = &mini_fo_main_iops;
-+      inode->i_fop = &mini_fo_main_fops;
-+#if 0
-+      /*
-+       * XXX: To export a file system via NFS, it has to have the
-+       * FS_REQUIRES_DEV flag, so turn it on.  But should we inherit it from
-+       * the lower file system, or can we allow our file system to be exported
-+       * even if the lower one cannot be natively exported.
-+       */
-+      inode->i_sb->s_type->fs_flags |= FS_REQUIRES_DEV;
-+      /*
-+       * OK, the above was a hack, which is now turned off because it may
-+       * cause a panic/oops on some systems.  The correct way to export a
-+       * "nodev" filesystem is via using nfs-utils > 1.0 and the "fsid=" export
-+       * parameter, which requires 2.4.20 or later.
-+       */
-+#endif
-+      /* I don't think ->a_ops is ever allowed to be NULL */
-+      inode->i_mapping->a_ops = &mini_fo_empty_aops;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * No need to call write_inode() on the lower inode, as it
-+ * will have been marked 'dirty' anyway. But we might need
-+ * to write some of our own stuff to disk.
-+ */
-+STATIC void
-+mini_fo_write_inode(inode_t *inode, int sync)
-+{
-+      print_entry_location();
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+STATIC void
-+mini_fo_put_inode(inode_t *inode)
-+{
-+      /*
-+       * This is really funky stuff:
-+       * Basically, if i_count == 1, iput will then decrement it and this inode will be destroyed.
-+       * It is currently holding a reference to the hidden inode.
-+       * Therefore, it needs to release that reference by calling iput on the hidden inode.
-+       * iput() _will_ do it for us (by calling our clear_inode), but _only_ if i_nlink == 0.
-+       * The problem is, NFS keeps i_nlink == 1 for silly_rename'd files.
-+       * So we must for our i_nlink to 0 here to trick iput() into calling our clear_inode.
-+       */
-+      if (atomic_read(&inode->i_count) == 1)
-+              inode->i_nlink = 0;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * we now define delete_inode, because there are two VFS paths that may
-+ * destroy an inode: one of them calls clear inode before doing everything
-+ * else that's needed, and the other is fine.  This way we truncate the inode
-+ * size (and its pages) and then clear our own inode, which will do an iput
-+ * on our and the lower inode.
-+ */
-+STATIC void
-+mini_fo_delete_inode(inode_t *inode)
-+{
-+      print_entry_location();
-+
-+      fist_checkinode(inode, "mini_fo_delete_inode IN");
-+      inode->i_size = 0;              /* every f/s seems to do that */
-+      clear_inode(inode);
-+
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+/* final actions when unmounting a file system */
-+STATIC void
-+mini_fo_put_super(super_block_t *sb)
-+{
-+      if (stopd(sb)) {
-+              mntput(stopd(sb)->hidden_mnt);
-+              mntput(stopd(sb)->hidden_mnt2);
-+
-+              /* mk: no! dput(stopd(sb)->base_dir_dentry);
-+                 dput(stopd(sb)->storage_dir_dentry); */
-+
-+              kfree(stopd(sb));
-+              __stopd(sb) = NULL;
-+      }
-+}
-+
-+
-+#ifdef NOT_NEEDED
-+/*
-+ * This is called in do_umount before put_super.
-+ * The superblock lock is not held yet.
-+ * We probably do not need to define this or call write_super
-+ * on the hidden_sb, because sync_supers() will get to hidden_sb
-+ * sooner or later.  But it is also called from file_fsync()...
-+ */
-+STATIC void
-+mini_fo_write_super(super_block_t *sb)
-+{
-+      return;
-+}
-+#endif /* NOT_NEEDED */
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_statfs(struct dentry *d, struct kstatfs *buf)
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_statfs(super_block_t *sb, struct kstatfs *buf)
-+#else
-+mini_fo_statfs(super_block_t *sb, struct statfs *buf)
-+#endif
-+{
-+      int err = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+      struct dentry *hidden_d;
-+
-+      hidden_d = dtohd(d);
-+      err = vfs_statfs(hidden_d, buf);
-+#else
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+      err = vfs_statfs(hidden_sb, buf);
-+#endif
-+
-+      return err;
-+}
-+
-+
-+/*
-+ * XXX: not implemented.  This is not allowed yet.
-+ * Should we call this on the hidden_sb?  Probably not.
-+ */
-+STATIC int
-+mini_fo_remount_fs(super_block_t *sb, int *flags, char *data)
-+{
-+      //printk(KERN_CRIT "mini_fo_remount_fs: WARNING, this function is umimplemented.\n");
-+      return -ENOSYS;
-+}
-+
-+
-+/*
-+ * Called by iput() when the inode reference count reached zero
-+ * and the inode is not hashed anywhere.  Used to clear anything
-+ * that needs to be, before the inode is completely destroyed and put
-+ * on the inode free list.
-+ */
-+STATIC void
-+mini_fo_clear_inode(inode_t *inode)
-+{
-+      /*
-+       * Decrement a reference to a hidden_inode, which was incremented
-+       * by our read_inode when it was created initially.
-+       */
-+
-+      /* release the wol_list */
-+      if(S_ISDIR(inode->i_mode)) {
-+              __meta_put_lists(inode);
-+      }
-+
-+      /* mk: fan out fun */
-+      if(itohi(inode))
-+              iput(itohi(inode));
-+      if(itohi2(inode))
-+              iput(itohi2(inode));
-+
-+      // XXX: why this assertion fails?
-+      // because it doesn't like us
-+      // ASSERT((inode->i_state & I_DIRTY) == 0);
-+      kfree(itopd(inode));
-+      __itopd(inode) = NULL;
-+}
-+
-+
-+/*
-+ * Called in do_umount() if the MNT_FORCE flag was used and this
-+ * function is defined.  See comment in linux/fs/super.c:do_umount().
-+ * Used only in nfs, to kill any pending RPC tasks, so that subsequent
-+ * code can actually succeed and won't leave tasks that need handling.
-+ *
-+ * PS. I wonder if this is somehow useful to undo damage that was
-+ * left in the kernel after a user level file server (such as amd)
-+ * dies.
-+ */
-+STATIC void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_umount_begin(struct vfsmount *mnt, int flags)
-+{
-+      struct vfsmount *hidden_mnt;
-+
-+      hidden_mnt = stopd(mnt->mnt_sb)->hidden_mnt;
-+
-+      if (hidden_mnt->mnt_sb->s_op->umount_begin)
-+              hidden_mnt->mnt_sb->s_op->umount_begin(hidden_mnt, flags);
-+
-+}
-+#else
-+mini_fo_umount_begin(super_block_t *sb)
-+{
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+
-+      if (hidden_sb->s_op->umount_begin)
-+              hidden_sb->s_op->umount_begin(hidden_sb);
-+
-+}
-+#endif
-+
-+
-+struct super_operations mini_fo_sops =
-+{
-+      read_inode:             mini_fo_read_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      write_inode:    mini_fo_write_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_inode:              mini_fo_put_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      delete_inode:   mini_fo_delete_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_super:              mini_fo_put_super,
-+      statfs:         mini_fo_statfs,
-+      remount_fs:             mini_fo_remount_fs,
-+      clear_inode:    mini_fo_clear_inode,
-+      umount_begin:   mini_fo_umount_begin,
-+};
diff --git a/target/linux/generic-2.6/patches-2.6.25/210-mini_fo_2.6.25_fixes.patch b/target/linux/generic-2.6/patches-2.6.25/210-mini_fo_2.6.25_fixes.patch
deleted file mode 100644 (file)
index d71e3b6..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
---- a/fs/mini_fo/main.c
-+++ b/fs/mini_fo/main.c
-@@ -79,6 +79,7 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-        * of the new inode's fields
-        */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       /*
-        * original: inode = iget(sb, hidden_inode->i_ino);
-        */
-@@ -87,6 +88,13 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-               err = -EACCES;          /* should be impossible??? */
-               goto out;
-       }
-+#else
-+      inode = mini_fo_iget(sb, iunique(sb, 25));
-+      if (IS_ERR(inode)) {
-+              err = PTR_ERR(inode);
-+              goto out;
-+      }
-+#endif
-       /*
-        * interpose the inode if not already interposed
-@@ -184,9 +192,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root = nd.dentry;
--                      stopd(sb)->base_dir_dentry = nd.dentry;
--                      stopd(sb)->hidden_mnt = nd.mnt;
-+                      hidden_root = nd_get_dentry(&nd);
-+                      stopd(sb)->base_dir_dentry = nd_get_dentry(&nd);
-+                      stopd(sb)->hidden_mnt = nd_get_mnt(&nd);
-               } else if(!strncmp("sto=", options, 4)) {
-                       /* parse the storage dir */
-@@ -204,9 +212,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root2 = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root2 = nd2.dentry;
--                      stopd(sb)->storage_dir_dentry = nd2.dentry;
--                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      hidden_root2 = nd_get_dentry(&nd2);
-+                      stopd(sb)->storage_dir_dentry = nd_get_dentry(&nd2);
-+                      stopd(sb)->hidden_mnt2 = nd_get_mnt(&nd2);
-                       stohs2(sb) = hidden_root2->d_sb;
-                       /* validate storage dir, this is done in
---- a/fs/mini_fo/mini_fo.h
-+++ b/fs/mini_fo/mini_fo.h
-@@ -302,6 +302,10 @@ extern int mini_fo_tri_interpose(dentry_
- extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-                          dentry_t *src_dentry, struct vfsmount *src_mnt);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+extern struct inode *mini_fo_iget(struct super_block *sb, unsigned long ino);
-+#endif
-+
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-@@ -501,6 +505,29 @@ static inline void double_unlock(struct 
- #endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
- #endif /* __KERNEL__ */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->path.dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->path.mnt);
-+}
-+#else
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->mnt);
-+}
-+#endif
-+
- /*
-  * Definitions for user and kernel code
-  */
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -262,10 +262,31 @@ mini_fo_umount_begin(super_block_t *sb)
- }
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+struct inode *
-+mini_fo_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      mini_fo_read_inode(inode);
-+
-+      unlock_new_inode(inode);
-+      return inode;
-+}
-+#endif /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) */
- struct super_operations mini_fo_sops =
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       read_inode:             mini_fo_read_inode,
-+#endif
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -164,11 +164,11 @@ dentry_t *bpath_walk(super_block_t *sb, 
-       err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-       /* validate */
--      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+      if (err || !nd_get_dentry(&nd) || !nd_get_dentry(&nd)->d_inode) {
-               printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-               return NULL;
-       }
--      return nd.dentry;
-+      return nd_get_dentry(&nd);
- }
diff --git a/target/linux/generic-2.6/patches-2.6.25/211-mini_fo_2.6.25_dentry_open_war.patch b/target/linux/generic-2.6/patches-2.6.25/211-mini_fo_2.6.25_dentry_open_war.patch
deleted file mode 100644 (file)
index 48a1942..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -442,6 +442,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                          S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -535,6 +540,11 @@ int meta_write_r_entry(dentry_t *dentry,
-                          meta_dentry, S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -671,14 +681,16 @@ int meta_sync_d_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
-@@ -811,14 +823,16 @@ int meta_sync_r_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
diff --git a/target/linux/generic-2.6/patches-2.6.25/213-kobject_uevent.patch b/target/linux/generic-2.6/patches-2.6.25/213-kobject_uevent.patch
deleted file mode 100644 (file)
index f91db03..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/lib/kobject_uevent.c
-+++ b/lib/kobject_uevent.c
-@@ -27,7 +27,8 @@ u64 uevent_seqnum;
- char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
- static DEFINE_SPINLOCK(sequence_lock);
- #if defined(CONFIG_NET)
--static struct sock *uevent_sock;
-+struct sock *uevent_sock = NULL;
-+EXPORT_SYMBOL_GPL(uevent_sock);
- #endif
- /* the strings here must match the enum in include/linux/kobject.h */
-@@ -40,6 +41,18 @@ static const char *kobject_actions[] = {
-       [KOBJ_OFFLINE] =        "offline",
- };
-+u64 uevent_next_seqnum(void)
-+{
-+      u64 seq;
-+
-+      spin_lock(&sequence_lock);
-+      seq = ++uevent_seqnum;
-+      spin_unlock(&sequence_lock);
-+      
-+      return seq;
-+}
-+EXPORT_SYMBOL_GPL(uevent_next_seqnum);
-+
- /**
-  * kobject_action_type - translate action string to numeric type
-  *
-@@ -192,9 +205,7 @@ int kobject_uevent_env(struct kobject *k
-               kobj->state_remove_uevent_sent = 1;
-       /* we will send an event, so request a new sequence number */
--      spin_lock(&sequence_lock);
--      seq = ++uevent_seqnum;
--      spin_unlock(&sequence_lock);
-+      seq = uevent_next_seqnum();
-       retval = add_uevent_var(env, "SEQNUM=%llu", (unsigned long long)seq);
-       if (retval)
-               goto exit;
diff --git a/target/linux/generic-2.6/patches-2.6.25/220-sound_kconfig.patch b/target/linux/generic-2.6/patches-2.6.25/220-sound_kconfig.patch
deleted file mode 100644 (file)
index d215d12..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/sound/core/Kconfig
-+++ b/sound/core/Kconfig
-@@ -9,7 +9,7 @@ config SND_PCM
-       depends on SND
- config SND_HWDEP
--      tristate
-+      tristate "Sound hardware support"
-       depends on SND
- config SND_RAWMIDI
diff --git a/target/linux/generic-2.6/patches-2.6.25/30-fix_conflicting_getline.patch b/target/linux/generic-2.6/patches-2.6.25/30-fix_conflicting_getline.patch
deleted file mode 100644 (file)
index 0a68134..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/scripts/unifdef.c
-+++ b/scripts/unifdef.c
-@@ -206,7 +206,7 @@ static void             done(void);
- static void             error(const char *);
- static int              findsym(const char *);
- static void             flushline(bool);
--static Linetype         getline(void);
-+static Linetype         get_line(void);
- static Linetype         ifeval(const char **);
- static void             ignoreoff(void);
- static void             ignoreon(void);
-@@ -512,7 +512,7 @@ process(void)
-       for (;;) {
-               linenum++;
--              lineval = getline();
-+              lineval = get_line();
-               trans_table[ifstate[depth]][lineval]();
-               debug("process %s -> %s depth %d",
-                   linetype_name[lineval],
-@@ -526,7 +526,7 @@ process(void)
-  * help from skipcomment().
-  */
- static Linetype
--getline(void)
-+get_line(void)
- {
-       const char *cp;
-       int cursym;
diff --git a/target/linux/generic-2.6/patches-2.6.25/400-ledtrig_morse.patch b/target/linux/generic-2.6/patches-2.6.25/400-ledtrig_morse.patch
deleted file mode 100644 (file)
index 7208dde..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -181,4 +181,8 @@ config LEDS_TRIGGER_HEARTBEAT
-         load average.
-         If unsure, say Y.
-+config LEDS_TRIGGER_MORSE
-+      tristate "LED Morse Trigger"
-+      depends on LEDS_TRIGGERS
-+
- endif # NEW_LEDS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -26,3 +26,4 @@ obj-$(CONFIG_LEDS_HP6XX)             += leds-hp6xx.
- obj-$(CONFIG_LEDS_TRIGGER_TIMER)      += ledtrig-timer.o
- obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK)   += ledtrig-ide-disk.o
- obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  += ledtrig-heartbeat.o
-+obj-$(CONFIG_LEDS_TRIGGER_MORSE)      += ledtrig-morse.o
diff --git a/target/linux/generic-2.6/patches-2.6.25/402-ledtrig_default_on.patch b/target/linux/generic-2.6/patches-2.6.25/402-ledtrig_default_on.patch
deleted file mode 100644 (file)
index d20eb5e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -185,4 +185,11 @@ config LEDS_TRIGGER_MORSE
-       tristate "LED Morse Trigger"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_DEFAULT_ON
-+      tristate "LED Default ON Trigger"
-+      depends on LEDS_TRIGGERS
-+      help
-+        This allows LEDs to be initialised in the ON state.
-+        If unsure, say Y.
-+
- endif # NEW_LEDS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -27,3 +27,4 @@ obj-$(CONFIG_LEDS_TRIGGER_TIMER)     += ledt
- obj-$(CONFIG_LEDS_TRIGGER_IDE_DISK)   += ledtrig-ide-disk.o
- obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT)  += ledtrig-heartbeat.o
- obj-$(CONFIG_LEDS_TRIGGER_MORSE)      += ledtrig-morse.o
-+obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
diff --git a/target/linux/generic-2.6/patches-2.6.25/403-ds1672_detect.patch b/target/linux/generic-2.6/patches-2.6.25/403-ds1672_detect.patch
deleted file mode 100644 (file)
index 86c2634..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/drivers/rtc/rtc-ds1672.c
-+++ b/drivers/rtc/rtc-ds1672.c
-@@ -13,10 +13,10 @@
- #include <linux/i2c.h>
- #include <linux/rtc.h>
--#define DRV_VERSION "0.3"
-+#define DRV_VERSION "0.4"
--/* Addresses to scan: none. This chip cannot be detected. */
--static const unsigned short normal_i2c[] = { I2C_CLIENT_END };
-+/* Addresses to scan: 0x68 */
-+static const unsigned short normal_i2c[] = { 0x68, I2C_CLIENT_END };
- /* Insmod parameters */
- I2C_CLIENT_INSMOD;
diff --git a/target/linux/generic-2.6/patches-2.6.25/410-gpio_buttons.patch b/target/linux/generic-2.6/patches-2.6.25/410-gpio_buttons.patch
deleted file mode 100644 (file)
index 46ca987..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/drivers/input/misc/Kconfig
-+++ b/drivers/input/misc/Kconfig
-@@ -197,4 +197,20 @@ config HP_SDC_RTC
-         Say Y here if you want to support the built-in real time clock
-         of the HP SDC controller.
-+config INPUT_GPIO_BUTTONS
-+      tristate "Polled GPIO buttons interface"
-+      depends on GENERIC_GPIO
-+      select INPUT_POLLDEV
-+      help
-+        This driver implements support for buttons connected
-+        to GPIO pins of various CPUs (and some other chips).
-+
-+        Say Y here if your device has buttons connected
-+        directly to such GPIO pins.  Your board-specific
-+        setup logic must also provide a platform device,
-+        with configuration data saying which GPIOs are used.
-+
-+        To compile this driver as a module, choose M here: the
-+        module will be called gpio-buttons.
-+
- endif
---- a/drivers/input/misc/Makefile
-+++ b/drivers/input/misc/Makefile
-@@ -19,3 +19,4 @@ obj-$(CONFIG_INPUT_YEALINK)          += yealink.
- obj-$(CONFIG_HP_SDC_RTC)              += hp_sdc_rtc.o
- obj-$(CONFIG_INPUT_UINPUT)            += uinput.o
- obj-$(CONFIG_INPUT_APANEL)            += apanel.o
-+obj-$(CONFIG_INPUT_GPIO_BUTTONS)      += gpio_buttons.o
diff --git a/target/linux/generic-2.6/patches-2.6.25/420-gpiodev.patch b/target/linux/generic-2.6/patches-2.6.25/420-gpiodev.patch
deleted file mode 100644 (file)
index de8b57a..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -955,6 +955,13 @@ config CS5535_GPIO
-         If compiled as a module, it will be called cs5535_gpio.
-+config GPIO_DEVICE
-+      tristate "GPIO device support"
-+      depends on GENERIC_GPIO
-+      help
-+        Say Y to enable Linux GPIO device support.  This allows control of
-+        GPIO pins using a character device
-+
- config GPIO_VR41XX
-       tristate "NEC VR4100 series General-purpose I/O Unit support"
-       depends on CPU_VR41XX
---- a/drivers/char/Makefile
-+++ b/drivers/char/Makefile
-@@ -94,6 +94,7 @@ obj-$(CONFIG_SCx200_GPIO)    += scx200_gpio
- obj-$(CONFIG_PC8736x_GPIO)    += pc8736x_gpio.o
- obj-$(CONFIG_NSC_GPIO)                += nsc_gpio.o
- obj-$(CONFIG_CS5535_GPIO)     += cs5535_gpio.o
-+obj-$(CONFIG_GPIO_DEVICE)     += gpio_dev.o
- obj-$(CONFIG_GPIO_VR41XX)     += vr41xx_giu.o
- obj-$(CONFIG_GPIO_TB0219)     += tb0219.o
- obj-$(CONFIG_TELCLOCK)                += tlclk.o
diff --git a/target/linux/generic-2.6/patches-2.6.25/510-yaffs_support.patch b/target/linux/generic-2.6/patches-2.6.25/510-yaffs_support.patch
deleted file mode 100644 (file)
index cef6ea5..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -421,6 +421,7 @@ config FS_POSIX_ACL
- source "fs/xfs/Kconfig"
- source "fs/gfs2/Kconfig"
-+source "fs/yaffs2/Kconfig"
- config OCFS2_FS
-       tristate "OCFS2 file system support"
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -121,3 +121,4 @@ obj-$(CONFIG_HPPFS)                += hppfs/
- obj-$(CONFIG_DEBUG_FS)                += debugfs/
- obj-$(CONFIG_OCFS2_FS)                += ocfs2/
- obj-$(CONFIG_GFS2_FS)           += gfs2/
-+obj-$(CONFIG_YAFFS_FS)                += yaffs2/
diff --git a/target/linux/generic-2.6/patches-2.6.25/512-yaffs_2.6.25_fix.patch b/target/linux/generic-2.6/patches-2.6.25/512-yaffs_2.6.25_fix.patch
deleted file mode 100644 (file)
index c127336..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
---- a/fs/yaffs2/yaffs_fs.c
-+++ b/fs/yaffs2/yaffs_fs.c
-@@ -181,7 +181,13 @@ static int yaffs_statfs(struct super_blo
- #else
- static int yaffs_statfs(struct super_block *sb, struct statfs *buf);
- #endif
-+
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino);
-+#else
- static void yaffs_read_inode(struct inode *inode);
-+#endif
-+
- static void yaffs_put_inode(struct inode *inode);
- static void yaffs_delete_inode(struct inode *);
-@@ -284,7 +290,9 @@ static struct file_operations yaffs_dir_
- static struct super_operations yaffs_super_ops = {
-       .statfs = yaffs_statfs,
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25))
-       .read_inode = yaffs_read_inode,
-+#endif
-       .put_inode = yaffs_put_inode,
-       .put_super = yaffs_put_super,
-       .delete_inode = yaffs_delete_inode,
-@@ -844,11 +852,17 @@ struct inode *yaffs_get_inode(struct sup
-       T(YAFFS_TRACE_OS,
-         (KERN_DEBUG "yaffs_get_inode for object %d\n", obj->objectId));
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
-+      inode = yaffs_iget(sb, obj->objectId);
-+      if (IS_ERR(inode))
-+              return NULL;
-+#else
-       inode = iget(sb, obj->objectId);
-       /* NB Side effect: iget calls back to yaffs_read_inode(). */
-       /* iget also increments the inode's i_count */
-       /* NB You can't be holding grossLock or deadlock will happen! */
-+#endif
-       return inode;
- }
-@@ -1427,6 +1441,39 @@ static int yaffs_sync_fs(struct super_bl
- }
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25))
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev = yaffs_SuperToDevice(sb);
-+      struct inode *inode;
-+
-+      T(YAFFS_TRACE_OS,
-+        (KERN_DEBUG "yaffs_iget for %lu\n", ino));
-+
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      /* NB This is called as a side effect of other functions, but
-+       * we had to release the lock to prevent deadlocks, so
-+       * need to lock again.
-+       */
-+
-+      yaffs_GrossLock(dev);
-+
-+      obj = yaffs_FindObjectByNumber(dev, inode->i_ino);
-+
-+      yaffs_FillInodeFromObject(inode, obj);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      unlock_new_inode(inode);
-+      return inode;
-+}
-+#else
- static void yaffs_read_inode(struct inode *inode)
- {
-       /* NB This is called as a side effect of other functions, but
-@@ -1448,6 +1495,7 @@ static void yaffs_read_inode(struct inod
-       yaffs_GrossUnlock(dev);
- }
-+#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)) */
- static LIST_HEAD(yaffs_dev_list);
diff --git a/target/linux/generic-2.6/patches-2.6.25/600-phy_extension.patch b/target/linux/generic-2.6/patches-2.6.25/600-phy_extension.patch
deleted file mode 100644 (file)
index c4ef465..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/drivers/net/phy/phy.c
-+++ b/drivers/net/phy/phy.c
-@@ -348,6 +348,50 @@ int phy_ethtool_gset(struct phy_device *
- }
- EXPORT_SYMBOL(phy_ethtool_gset);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr)
-+{
-+      u32 cmd;
-+      int tmp;
-+      struct ethtool_cmd ecmd = { ETHTOOL_GSET };
-+      struct ethtool_value edata = { ETHTOOL_GLINK };
-+
-+      if (get_user(cmd, (u32 *) useraddr))
-+              return -EFAULT;
-+
-+      switch (cmd) {
-+      case ETHTOOL_GSET:
-+              phy_ethtool_gset(phydev, &ecmd);
-+              if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return 0;
-+      
-+      case ETHTOOL_SSET:
-+              if (copy_from_user(&ecmd, useraddr, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return phy_ethtool_sset(phydev, &ecmd);
-+
-+      case ETHTOOL_NWAY_RST:
-+              /* if autoneg is off, it's an error */
-+              tmp = phy_read(phydev, MII_BMCR);
-+              if (tmp & BMCR_ANENABLE) {
-+                      tmp |= (BMCR_ANRESTART);
-+                      phy_write(phydev, MII_BMCR, tmp);
-+                      return 0;
-+              }       
-+              return -EINVAL;
-+
-+      case ETHTOOL_GLINK:
-+              edata.data = (phy_read(phydev,
-+                              MII_BMSR) & BMSR_LSTATUS) ? 1 : 0;
-+              if (copy_to_user(useraddr, &edata, sizeof(edata)))
-+                      return -EFAULT;
-+              return 0;
-+      }
-+
-+      return -EOPNOTSUPP;
-+}
-+EXPORT_SYMBOL(phy_ethtool_ioctl);
-+
- /**
-  * phy_mii_ioctl - generic PHY MII ioctl interface
-  * @phydev: the phy_device struct
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -399,6 +399,7 @@ void phy_start_machine(struct phy_device
- void phy_stop_machine(struct phy_device *phydev);
- int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
- int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr);
- int phy_mii_ioctl(struct phy_device *phydev,
-               struct mii_ioctl_data *mii_data, int cmd);
- int phy_start_interrupts(struct phy_device *phydev);
diff --git a/target/linux/generic-2.6/patches-2.6.25/700-powerpc_git.patch b/target/linux/generic-2.6/patches-2.6.25/700-powerpc_git.patch
deleted file mode 100644 (file)
index a471291..0000000
+++ /dev/null
@@ -1,102433 +0,0 @@
---- a/Documentation/kernel-parameters.txt
-+++ b/Documentation/kernel-parameters.txt
-@@ -930,6 +930,8 @@ and is between 256 and 4096 characters. 
-       l2cr=           [PPC]
-+      l3cr=           [PPC]
-+
-       lapic           [X86-32,APIC] Enable the local APIC even if BIOS
-                       disabled it.
---- a/Documentation/powerpc/booting-without-of.txt
-+++ b/Documentation/powerpc/booting-without-of.txt
-@@ -59,12 +59,39 @@ Table of Contents
-       p) Freescale Synchronous Serial Interface
-         q) USB EHCI controllers
--  VII - Specifying interrupt information for devices
-+  VII - Marvell Discovery mv64[345]6x System Controller chips
-+    1) The /system-controller node
-+    2) Child nodes of /system-controller
-+      a) Marvell Discovery MDIO bus
-+      b) Marvell Discovery ethernet controller
-+      c) Marvell Discovery PHY nodes
-+      d) Marvell Discovery SDMA nodes
-+      e) Marvell Discovery BRG nodes
-+      f) Marvell Discovery CUNIT nodes
-+      g) Marvell Discovery MPSCROUTING nodes
-+      h) Marvell Discovery MPSCINTR nodes
-+      i) Marvell Discovery MPSC nodes
-+      j) Marvell Discovery Watch Dog Timer nodes
-+      k) Marvell Discovery I2C nodes
-+      l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes
-+      m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes
-+      n) Marvell Discovery GPP (General Purpose Pins) nodes
-+      o) Marvell Discovery PCI host bridge node
-+      p) Marvell Discovery CPU Error nodes
-+      q) Marvell Discovery SRAM Controller nodes
-+      r) Marvell Discovery PCI Error Handler nodes
-+      s) Marvell Discovery Memory Controller nodes
-+
-+  VIII - Specifying interrupt information for devices
-     1) interrupts property
-     2) interrupt-parent property
-     3) OpenPIC Interrupt Controllers
-     4) ISA Interrupt Controllers
-+  VIII - Specifying GPIO information for devices
-+    1) gpios property
-+    2) gpio-controller nodes
-+
-   Appendix A - Sample SOC node for MPC8540
-@@ -1269,10 +1296,6 @@ platforms are moved over to use the flat
-   Recommended properties:
--    - linux,network-index : This is the intended "index" of this
--      network device.  This is used by the bootwrapper to interpret
--      MAC addresses passed by the firmware when no information other
--      than indices is available to associate an address with a device.
-     - phy-connection-type : a string naming the controller/PHY interface type,
-       i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id", "sgmii",
-       "tbi", or "rtbi".  This property is only really needed if the connection
-@@ -1622,8 +1645,7 @@ platforms are moved over to use the flat
-    - device_type : should be "network", "hldc", "uart", "transparent"
-      "bisync", "atm", or "serial".
-    - compatible : could be "ucc_geth" or "fsl_atm" and so on.
--   - model : should be "UCC".
--   - device-id : the ucc number(1-8), corresponding to UCCx in UM.
-+   - cell-index : the ucc number(1-8), corresponding to UCCx in UM.
-    - reg : Offset and length of the register set for the device
-    - interrupts : <a b> where a is the interrupt number and b is a
-      field that represents an encoding of the sense and level
-@@ -1667,10 +1689,6 @@ platforms are moved over to use the flat
-    - phy-handle : The phandle for the PHY connected to this controller.
-    Recommended properties:
--   - linux,network-index : This is the intended "index" of this
--     network device.  This is used by the bootwrapper to interpret
--     MAC addresses passed by the firmware when no information other
--     than indices is available to associate an address with a device.
-    - phy-connection-type : a string naming the controller/PHY interface type,
-      i.e., "mii" (default), "rmii", "gmii", "rgmii", "rgmii-id" (Internal
-      Delay), "rgmii-txid" (delay on TX only), "rgmii-rxid" (delay on RX only),
-@@ -1680,8 +1698,7 @@ platforms are moved over to use the flat
-       ucc@2000 {
-               device_type = "network";
-               compatible = "ucc_geth";
--              model = "UCC";
--              device-id = <1>;
-+              cell-index = <1>;
-               reg = <2000 200>;
-               interrupts = <a0 0>;
-               interrupt-parent = <700>;
-@@ -1995,7 +2012,6 @@ platforms are moved over to use the flat
-               interrupts = <20 8>;
-               interrupt-parent = <&PIC>;
-               phy-handle = <&PHY0>;
--              linux,network-index = <0>;
-               fsl,cpm-command = <12000300>;
-       };
-@@ -2217,12 +2233,6 @@ platforms are moved over to use the flat
-                         EMAC, that is the content of the current (bogus) "phy-port"
-                         property.
--    Recommended properties:
--    - linux,network-index : This is the intended "index" of this
--      network device.  This is used by the bootwrapper to interpret
--      MAC addresses passed by the firmware when no information other
--      than indices is available to associate an address with a device.
--
-     Optional properties:
-     - phy-address       : 1 cell, optional, MDIO address of the PHY. If absent,
-                         a search is performed.
-@@ -2246,7 +2256,6 @@ platforms are moved over to use the flat
-     Example:
-       EMAC0: ethernet@40000800 {
--              linux,network-index = <0>;
-               device_type = "network";
-               compatible = "ibm,emac-440gp", "ibm,emac";
-               interrupt-parent = <&UIC1>;
-@@ -2817,9 +2826,528 @@ platforms are moved over to use the flat
-          };
--   More devices will be defined as this spec matures.
-+VII - Marvell Discovery mv64[345]6x System Controller chips
-+===========================================================
-+
-+The Marvell mv64[345]60 series of system controller chips contain
-+many of the peripherals needed to implement a complete computer
-+system.  In this section, we define device tree nodes to describe
-+the system controller chip itself and each of the peripherals
-+which it contains.  Compatible string values for each node are
-+prefixed with the string "marvell,", for Marvell Technology Group Ltd.
-+
-+1) The /system-controller node
-+
-+  This node is used to represent the system-controller and must be
-+  present when the system uses a system contller chip. The top-level
-+  system-controller node contains information that is global to all
-+  devices within the system controller chip. The node name begins
-+  with "system-controller" followed by the unit address, which is
-+  the base address of the memory-mapped register set for the system
-+  controller chip.
-+
-+  Required properties:
-+
-+    - ranges : Describes the translation of system controller addresses
-+      for memory mapped registers.
-+    - clock-frequency: Contains the main clock frequency for the system
-+      controller chip.
-+    - reg : This property defines the address and size of the
-+      memory-mapped registers contained within the system controller
-+      chip.  The address specified in the "reg" property should match
-+      the unit address of the system-controller node.
-+    - #address-cells : Address representation for system controller
-+      devices.  This field represents the number of cells needed to
-+      represent the address of the memory-mapped registers of devices
-+      within the system controller chip.
-+    - #size-cells : Size representation for for the memory-mapped
-+      registers within the system controller chip.
-+    - #interrupt-cells : Defines the width of cells used to represent
-+      interrupts.
-+
-+  Optional properties:
-+
-+    - model : The specific model of the system controller chip.  Such
-+      as, "mv64360", "mv64460", or "mv64560".
-+    - compatible : A string identifying the compatibility identifiers
-+      of the system controller chip.
-+
-+  The system-controller node contains child nodes for each system
-+  controller device that the platform uses.  Nodes should not be created
-+  for devices which exist on the system controller chip but are not used
-+
-+  Example Marvell Discovery mv64360 system-controller node:
-+
-+    system-controller@f1000000 { /* Marvell Discovery mv64360 */
-+          #address-cells = <1>;
-+          #size-cells = <1>;
-+          model = "mv64360";                      /* Default */
-+          compatible = "marvell,mv64360";
-+          clock-frequency = <133333333>;
-+          reg = <0xf1000000 0x10000>;
-+          virtual-reg = <0xf1000000>;
-+          ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */
-+                  0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */
-+                  0xa0000000 0xa0000000 0x4000000 /* User FLASH */
-+                  0x00000000 0xf1000000 0x0010000 /* Bridge's regs */
-+                  0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */
-+
-+          [ child node definitions... ]
-+    }
-+
-+2) Child nodes of /system-controller
-+
-+   a) Marvell Discovery MDIO bus
-+
-+   The MDIO is a bus to which the PHY devices are connected.  For each
-+   device that exists on this bus, a child node should be created.  See
-+   the definition of the PHY node below for an example of how to define
-+   a PHY.
-+
-+   Required properties:
-+     - #address-cells : Should be <1>
-+     - #size-cells : Should be <0>
-+     - device_type : Should be "mdio"
-+     - compatible : Should be "marvell,mv64360-mdio"
-+
-+   Example:
-+
-+     mdio {
-+           #address-cells = <1>;
-+           #size-cells = <0>;
-+           device_type = "mdio";
-+           compatible = "marvell,mv64360-mdio";
-+
-+           ethernet-phy@0 {
-+                   ......
-+           };
-+     };
-+
-+
-+   b) Marvell Discovery ethernet controller
-+
-+   The Discover ethernet controller is described with two levels
-+   of nodes.  The first level describes an ethernet silicon block
-+   and the second level describes up to 3 ethernet nodes within
-+   that block.  The reason for the multiple levels is that the
-+   registers for the node are interleaved within a single set
-+   of registers.  The "ethernet-block" level describes the
-+   shared register set, and the "ethernet" nodes describe ethernet
-+   port-specific properties.
-+
-+   Ethernet block node
-+
-+   Required properties:
-+     - #address-cells : <1>
-+     - #size-cells : <0>
-+     - compatible : "marvell,mv64360-eth-block"
-+     - reg : Offset and length of the register set for this block
-+
-+   Example Discovery Ethernet block node:
-+     ethernet-block@2000 {
-+           #address-cells = <1>;
-+           #size-cells = <0>;
-+           compatible = "marvell,mv64360-eth-block";
-+           reg = <0x2000 0x2000>;
-+           ethernet@0 {
-+                   .......
-+           };
-+     };
-+
-+   Ethernet port node
-+
-+   Required properties:
-+     - device_type : Should be "network".
-+     - compatible : Should be "marvell,mv64360-eth".
-+     - reg : Should be <0>, <1>, or <2>, according to which registers
-+       within the silicon block the device uses.
-+     - interrupts : <a> where a is the interrupt number for the port.
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+     - phy : the phandle for the PHY connected to this ethernet
-+       controller.
-+     - local-mac-address : 6 bytes, MAC address
-+
-+   Example Discovery Ethernet port node:
-+     ethernet@0 {
-+           device_type = "network";
-+           compatible = "marvell,mv64360-eth";
-+           reg = <0>;
-+           interrupts = <32>;
-+           interrupt-parent = <&PIC>;
-+           phy = <&PHY0>;
-+           local-mac-address = [ 00 00 00 00 00 00 ];
-+     };
-+
-+
-+
-+   c) Marvell Discovery PHY nodes
-+
-+   Required properties:
-+     - device_type : Should be "ethernet-phy"
-+     - interrupts : <a> where a is the interrupt number for this phy.
-+     - interrupt-parent : the phandle for the interrupt controller that
-+       services interrupts for this device.
-+     - reg : The ID number for the phy, usually a small integer
-+
-+   Example Discovery PHY node:
-+     ethernet-phy@1 {
-+           device_type = "ethernet-phy";
-+           compatible = "broadcom,bcm5421";
-+           interrupts = <76>;      /* GPP 12 */
-+           interrupt-parent = <&PIC>;
-+           reg = <1>;
-+     };
-+
-+
-+   d) Marvell Discovery SDMA nodes
-+
-+   Represent DMA hardware associated with the MPSC (multiprotocol
-+   serial controllers).
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-sdma"
-+     - reg : Offset and length of the register set for this device
-+     - interrupts : <a> where a is the interrupt number for the DMA
-+       device.
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery SDMA node:
-+     sdma@4000 {
-+           compatible = "marvell,mv64360-sdma";
-+           reg = <0x4000 0xc18>;
-+           virtual-reg = <0xf1004000>;
-+           interrupts = <36>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
-+
-+   e) Marvell Discovery BRG nodes
-+
-+   Represent baud rate generator hardware associated with the MPSC
-+   (multiprotocol serial controllers).
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-brg"
-+     - reg : Offset and length of the register set for this device
-+     - clock-src : A value from 0 to 15 which selects the clock
-+       source for the baud rate generator.  This value corresponds
-+       to the CLKS value in the BRGx configuration register.  See
-+       the mv64x60 User's Manual.
-+     - clock-frequence : The frequency (in Hz) of the baud rate
-+       generator's input clock.
-+     - current-speed : The current speed setting (presumably by
-+       firmware) of the baud rate generator.
-+
-+   Example Discovery BRG node:
-+     brg@b200 {
-+           compatible = "marvell,mv64360-brg";
-+           reg = <0xb200 0x8>;
-+           clock-src = <8>;
-+           clock-frequency = <133333333>;
-+           current-speed = <9600>;
-+     };
-+
-+
-+   f) Marvell Discovery CUNIT nodes
-+
-+   Represent the Serial Communications Unit device hardware.
-+
-+   Required properties:
-+     - reg : Offset and length of the register set for this device
-+
-+   Example Discovery CUNIT node:
-+     cunit@f200 {
-+           reg = <0xf200 0x200>;
-+     };
-+
-+
-+   g) Marvell Discovery MPSCROUTING nodes
-+
-+   Represent the Discovery's MPSC routing hardware
-+
-+   Required properties:
-+     - reg : Offset and length of the register set for this device
-+
-+   Example Discovery CUNIT node:
-+     mpscrouting@b500 {
-+           reg = <0xb400 0xc>;
-+     };
-+
-+
-+   h) Marvell Discovery MPSCINTR nodes
-+
-+   Represent the Discovery's MPSC DMA interrupt hardware registers
-+   (SDMA cause and mask registers).
-+
-+   Required properties:
-+     - reg : Offset and length of the register set for this device
-+
-+   Example Discovery MPSCINTR node:
-+     mpsintr@b800 {
-+           reg = <0xb800 0x100>;
-+     };
-+
-+
-+   i) Marvell Discovery MPSC nodes
-+
-+   Represent the Discovery's MPSC (Multiprotocol Serial Controller)
-+   serial port.
-+
-+   Required properties:
-+     - device_type : "serial"
-+     - compatible : "marvell,mv64360-mpsc"
-+     - reg : Offset and length of the register set for this device
-+     - sdma : the phandle for the SDMA node used by this port
-+     - brg : the phandle for the BRG node used by this port
-+     - cunit : the phandle for the CUNIT node used by this port
-+     - mpscrouting : the phandle for the MPSCROUTING node used by this port
-+     - mpscintr : the phandle for the MPSCINTR node used by this port
-+     - cell-index : the hardware index of this cell in the MPSC core
-+     - max_idle : value needed for MPSC CHR3 (Maximum Frame Length)
-+       register
-+     - interrupts : <a> where a is the interrupt number for the MPSC.
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery MPSCINTR node:
-+     mpsc@8000 {
-+           device_type = "serial";
-+           compatible = "marvell,mv64360-mpsc";
-+           reg = <0x8000 0x38>;
-+           virtual-reg = <0xf1008000>;
-+           sdma = <&SDMA0>;
-+           brg = <&BRG0>;
-+           cunit = <&CUNIT>;
-+           mpscrouting = <&MPSCROUTING>;
-+           mpscintr = <&MPSCINTR>;
-+           cell-index = <0>;
-+           max_idle = <40>;
-+           interrupts = <40>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
--VII - Specifying interrupt information for devices
-+   j) Marvell Discovery Watch Dog Timer nodes
-+
-+   Represent the Discovery's watchdog timer hardware
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-wdt"
-+     - reg : Offset and length of the register set for this device
-+
-+   Example Discovery Watch Dog Timer node:
-+     wdt@b410 {
-+           compatible = "marvell,mv64360-wdt";
-+           reg = <0xb410 0x8>;
-+     };
-+
-+
-+   k) Marvell Discovery I2C nodes
-+
-+   Represent the Discovery's I2C hardware
-+
-+   Required properties:
-+     - device_type : "i2c"
-+     - compatible : "marvell,mv64360-i2c"
-+     - reg : Offset and length of the register set for this device
-+     - interrupts : <a> where a is the interrupt number for the I2C.
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery I2C node:
-+           compatible = "marvell,mv64360-i2c";
-+           reg = <0xc000 0x20>;
-+           virtual-reg = <0xf100c000>;
-+           interrupts = <37>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
-+
-+   l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes
-+
-+   Represent the Discovery's PIC hardware
-+
-+   Required properties:
-+     - #interrupt-cells : <1>
-+     - #address-cells : <0>
-+     - compatible : "marvell,mv64360-pic"
-+     - reg : Offset and length of the register set for this device
-+     - interrupt-controller
-+
-+   Example Discovery PIC node:
-+     pic {
-+           #interrupt-cells = <1>;
-+           #address-cells = <0>;
-+           compatible = "marvell,mv64360-pic";
-+           reg = <0x0 0x88>;
-+           interrupt-controller;
-+     };
-+
-+
-+   m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes
-+
-+   Represent the Discovery's MPP hardware
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-mpp"
-+     - reg : Offset and length of the register set for this device
-+
-+   Example Discovery MPP node:
-+     mpp@f000 {
-+           compatible = "marvell,mv64360-mpp";
-+           reg = <0xf000 0x10>;
-+     };
-+
-+
-+   n) Marvell Discovery GPP (General Purpose Pins) nodes
-+
-+   Represent the Discovery's GPP hardware
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-gpp"
-+     - reg : Offset and length of the register set for this device
-+
-+   Example Discovery GPP node:
-+     gpp@f000 {
-+           compatible = "marvell,mv64360-gpp";
-+           reg = <0xf100 0x20>;
-+     };
-+
-+
-+   o) Marvell Discovery PCI host bridge node
-+
-+   Represents the Discovery's PCI host bridge device.  The properties
-+   for this node conform to Rev 2.1 of the PCI Bus Binding to IEEE
-+   1275-1994.  A typical value for the compatible property is
-+   "marvell,mv64360-pci".
-+
-+   Example Discovery PCI host bridge node
-+     pci@80000000 {
-+           #address-cells = <3>;
-+           #size-cells = <2>;
-+           #interrupt-cells = <1>;
-+           device_type = "pci";
-+           compatible = "marvell,mv64360-pci";
-+           reg = <0xcf8 0x8>;
-+           ranges = <0x01000000 0x0        0x0
-+                           0x88000000 0x0 0x01000000
-+                     0x02000000 0x0 0x80000000
-+                           0x80000000 0x0 0x08000000>;
-+           bus-range = <0 255>;
-+           clock-frequency = <66000000>;
-+           interrupt-parent = <&PIC>;
-+           interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-+           interrupt-map = <
-+                   /* IDSEL 0x0a */
-+                   0x5000 0 0 1 &PIC 80
-+                   0x5000 0 0 2 &PIC 81
-+                   0x5000 0 0 3 &PIC 91
-+                   0x5000 0 0 4 &PIC 93
-+
-+                   /* IDSEL 0x0b */
-+                   0x5800 0 0 1 &PIC 91
-+                   0x5800 0 0 2 &PIC 93
-+                   0x5800 0 0 3 &PIC 80
-+                   0x5800 0 0 4 &PIC 81
-+
-+                   /* IDSEL 0x0c */
-+                   0x6000 0 0 1 &PIC 91
-+                   0x6000 0 0 2 &PIC 93
-+                   0x6000 0 0 3 &PIC 80
-+                   0x6000 0 0 4 &PIC 81
-+
-+                   /* IDSEL 0x0d */
-+                   0x6800 0 0 1 &PIC 93
-+                   0x6800 0 0 2 &PIC 80
-+                   0x6800 0 0 3 &PIC 81
-+                   0x6800 0 0 4 &PIC 91
-+           >;
-+     };
-+
-+
-+   p) Marvell Discovery CPU Error nodes
-+
-+   Represent the Discovery's CPU error handler device.
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-cpu-error"
-+     - reg : Offset and length of the register set for this device
-+     - interrupts : the interrupt number for this device
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery CPU Error node:
-+     cpu-error@0070 {
-+           compatible = "marvell,mv64360-cpu-error";
-+           reg = <0x70 0x10 0x128 0x28>;
-+           interrupts = <3>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
-+
-+   q) Marvell Discovery SRAM Controller nodes
-+
-+   Represent the Discovery's SRAM controller device.
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-sram-ctrl"
-+     - reg : Offset and length of the register set for this device
-+     - interrupts : the interrupt number for this device
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery SRAM Controller node:
-+     sram-ctrl@0380 {
-+           compatible = "marvell,mv64360-sram-ctrl";
-+           reg = <0x380 0x80>;
-+           interrupts = <13>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
-+
-+   r) Marvell Discovery PCI Error Handler nodes
-+
-+   Represent the Discovery's PCI error handler device.
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-pci-error"
-+     - reg : Offset and length of the register set for this device
-+     - interrupts : the interrupt number for this device
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery PCI Error Handler node:
-+     pci-error@1d40 {
-+           compatible = "marvell,mv64360-pci-error";
-+           reg = <0x1d40 0x40 0xc28 0x4>;
-+           interrupts = <12>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
-+
-+   s) Marvell Discovery Memory Controller nodes
-+
-+   Represent the Discovery's memory controller device.
-+
-+   Required properties:
-+     - compatible : "marvell,mv64360-mem-ctrl"
-+     - reg : Offset and length of the register set for this device
-+     - interrupts : the interrupt number for this device
-+     - interrupt-parent : the phandle for the interrupt controller
-+       that services interrupts for this device.
-+
-+   Example Discovery Memory Controller node:
-+     mem-ctrl@1400 {
-+           compatible = "marvell,mv64360-mem-ctrl";
-+           reg = <0x1400 0x60>;
-+           interrupts = <17>;
-+           interrupt-parent = <&PIC>;
-+     };
-+
-+
-+VIII - Specifying interrupt information for devices
- ===================================================
- The device tree represents the busses and devices of a hardware
-@@ -2905,6 +3433,54 @@ encodings listed below:
-       2 =  high to low edge sensitive type enabled
-       3 =  low to high edge sensitive type enabled
-+VIII - Specifying GPIO information for devices
-+==============================================
-+
-+1) gpios property
-+-----------------
-+
-+Nodes that makes use of GPIOs should define them using `gpios' property,
-+format of which is: <&gpio-controller1-phandle gpio1-specifier
-+                   &gpio-controller2-phandle gpio2-specifier
-+                   0 /* holes are permitted, means no GPIO 3 */
-+                   &gpio-controller4-phandle gpio4-specifier
-+                   ...>;
-+
-+Note that gpio-specifier length is controller dependent.
-+
-+gpio-specifier may encode: bank, pin position inside the bank,
-+whether pin is open-drain and whether pin is logically inverted.
-+
-+Example of the node using GPIOs:
-+
-+      node {
-+              gpios = <&qe_pio_e 18 0>;
-+      };
-+
-+In this example gpio-specifier is "18 0" and encodes GPIO pin number,
-+and empty GPIO flags as accepted by the "qe_pio_e" gpio-controller.
-+
-+2) gpio-controller nodes
-+------------------------
-+
-+Every GPIO controller node must have #gpio-cells property defined,
-+this information will be used to translate gpio-specifiers.
-+
-+Example of two SOC GPIO banks defined as gpio-controller nodes:
-+
-+      qe_pio_a: gpio-controller@1400 {
-+              #gpio-cells = <2>;
-+              compatible = "fsl,qe-pario-bank-a", "fsl,qe-pario-bank";
-+              reg = <0x1400 0x18>;
-+              gpio-controller;
-+      };
-+
-+      qe_pio_e: gpio-controller@1460 {
-+              #gpio-cells = <2>;
-+              compatible = "fsl,qe-pario-bank-e", "fsl,qe-pario-bank";
-+              reg = <0x1460 0x18>;
-+              gpio-controller;
-+      };
- Appendix A - Sample SOC node for MPC8540
- ========================================
---- /dev/null
-+++ b/Documentation/powerpc/phyp-assisted-dump.txt
-@@ -0,0 +1,127 @@
-+
-+                   Hypervisor-Assisted Dump
-+                   ------------------------
-+                       November 2007
-+
-+The goal of hypervisor-assisted dump is to enable the dump of
-+a crashed system, and to do so from a fully-reset system, and
-+to minimize the total elapsed time until the system is back
-+in production use.
-+
-+As compared to kdump or other strategies, hypervisor-assisted
-+dump offers several strong, practical advantages:
-+
-+-- Unlike kdump, the system has been reset, and loaded
-+   with a fresh copy of the kernel.  In particular,
-+   PCI and I/O devices have been reinitialized and are
-+   in a clean, consistent state.
-+-- As the dump is performed, the dumped memory becomes
-+   immediately available to the system for normal use.
-+-- After the dump is completed, no further reboots are
-+   required; the system will be fully usable, and running
-+   in it's normal, production mode on it normal kernel.
-+
-+The above can only be accomplished by coordination with,
-+and assistance from the hypervisor. The procedure is
-+as follows:
-+
-+-- When a system crashes, the hypervisor will save
-+   the low 256MB of RAM to a previously registered
-+   save region. It will also save system state, system
-+   registers, and hardware PTE's.
-+
-+-- After the low 256MB area has been saved, the
-+   hypervisor will reset PCI and other hardware state.
-+   It will *not* clear RAM. It will then launch the
-+   bootloader, as normal.
-+
-+-- The freshly booted kernel will notice that there
-+   is a new node (ibm,dump-kernel) in the device tree,
-+   indicating that there is crash data available from
-+   a previous boot. It will boot into only 256MB of RAM,
-+   reserving the rest of system memory.
-+
-+-- Userspace tools will parse /sys/kernel/release_region
-+   and read /proc/vmcore to obtain the contents of memory,
-+   which holds the previous crashed kernel. The userspace
-+   tools may copy this info to disk, or network, nas, san,
-+   iscsi, etc. as desired.
-+
-+   For Example: the values in /sys/kernel/release-region
-+   would look something like this (address-range pairs).
-+   CPU:0x177fee000-0x10000: HPTE:0x177ffe020-0x1000: /
-+   DUMP:0x177fff020-0x10000000, 0x10000000-0x16F1D370A
-+
-+-- As the userspace tools complete saving a portion of
-+   dump, they echo an offset and size to
-+   /sys/kernel/release_region to release the reserved
-+   memory back to general use.
-+
-+   An example of this is:
-+     "echo 0x40000000 0x10000000 > /sys/kernel/release_region"
-+   which will release 256MB at the 1GB boundary.
-+
-+Please note that the hypervisor-assisted dump feature
-+is only available on Power6-based systems with recent
-+firmware versions.
-+
-+Implementation details:
-+----------------------
-+
-+During boot, a check is made to see if firmware supports
-+this feature on this particular machine. If it does, then
-+we check to see if a active dump is waiting for us. If yes
-+then everything but 256 MB of RAM is reserved during early
-+boot. This area is released once we collect a dump from user
-+land scripts that are run. If there is dump data, then
-+the /sys/kernel/release_region file is created, and
-+the reserved memory is held.
-+
-+If there is no waiting dump data, then only the highest
-+256MB of the ram is reserved as a scratch area. This area
-+is *not* released: this region will be kept permanently
-+reserved, so that it can act as a receptacle for a copy
-+of the low 256MB in the case a crash does occur. See,
-+however, "open issues" below, as to whether
-+such a reserved region is really needed.
-+
-+Currently the dump will be copied from /proc/vmcore to a
-+a new file upon user intervention. The starting address
-+to be read and the range for each data point in provided
-+in /sys/kernel/release_region.
-+
-+The tools to examine the dump will be same as the ones
-+used for kdump.
-+
-+General notes:
-+--------------
-+Security: please note that there are potential security issues
-+with any sort of dump mechanism. In particular, plaintext
-+(unencrypted) data, and possibly passwords, may be present in
-+the dump data. Userspace tools must take adequate precautions to
-+preserve security.
-+
-+Open issues/ToDo:
-+------------
-+ o The various code paths that tell the hypervisor that a crash
-+   occurred, vs. it simply being a normal reboot, should be
-+   reviewed, and possibly clarified/fixed.
-+
-+ o Instead of using /sys/kernel, should there be a /sys/dump
-+   instead? There is a dump_subsys being created by the s390 code,
-+   perhaps the pseries code should use a similar layout as well.
-+
-+ o Is reserving a 256MB region really required? The goal of
-+   reserving a 256MB scratch area is to make sure that no
-+   important crash data is clobbered when the hypervisor
-+   save low mem to the scratch area. But, if one could assure
-+   that nothing important is located in some 256MB area, then
-+   it would not need to be reserved. Something that can be
-+   improved in subsequent versions.
-+
-+ o Still working the kdump team to integrate this with kdump,
-+   some work remains but this would not affect the current
-+   patches.
-+
-+ o Still need to write a shell script, to copy the dump away.
-+   Currently I am parsing it manually.
---- a/arch/powerpc/Kconfig
-+++ b/arch/powerpc/Kconfig
-@@ -49,6 +49,19 @@ config IRQ_PER_CPU
-       bool
-       default y
-+config STACKTRACE_SUPPORT
-+      bool
-+      default y
-+
-+config TRACE_IRQFLAGS_SUPPORT
-+      bool
-+      depends on PPC64
-+      default y
-+
-+config LOCKDEP_SUPPORT
-+      bool
-+      default y
-+
- config RWSEM_GENERIC_SPINLOCK
-       bool
-@@ -81,6 +94,11 @@ config GENERIC_FIND_NEXT_BIT
-       bool
-       default y
-+config GENERIC_GPIO
-+      bool
-+      help
-+        Generic GPIO API support
-+
- config ARCH_NO_VIRT_TO_BUS
-       def_bool PPC64
-@@ -91,6 +109,7 @@ config PPC
-       select HAVE_OPROFILE
-       select HAVE_KPROBES
-       select HAVE_KRETPROBES
-+      select HAVE_LMB
- config EARLY_PRINTK
-       bool
-@@ -210,15 +229,6 @@ source kernel/Kconfig.hz
- source kernel/Kconfig.preempt
- source "fs/Kconfig.binfmt"
--# We optimistically allocate largepages from the VM, so make the limit
--# large enough (16MB). This badly named config option is actually
--# max order + 1
--config FORCE_MAX_ZONEORDER
--      int
--      depends on PPC64
--      default "9" if PPC_64K_PAGES
--      default "13"
--
- config HUGETLB_PAGE_SIZE_VARIABLE
-       bool
-       depends on HUGETLB_PAGE
-@@ -307,6 +317,16 @@ config CRASH_DUMP
-         Don't change this unless you know what you are doing.
-+config PHYP_DUMP
-+      bool "Hypervisor-assisted dump (EXPERIMENTAL)"
-+      depends on PPC_PSERIES && EXPERIMENTAL
-+      help
-+        Hypervisor-assisted dump is meant to be a kdump replacement
-+        offering robustness and speed not possible without system
-+        hypervisor assistence.
-+
-+        If unsure, say "N"
-+
- config PPCBUG_NVRAM
-       bool "Enable reading PPCBUG NVRAM during boot" if PPLUS || LOPEC
-       default y if PPC_PREP
-@@ -381,6 +401,26 @@ config PPC_64K_PAGES
-         while on hardware with such support, it will be used to map
-         normal application pages.
-+config FORCE_MAX_ZONEORDER
-+      int "Maximum zone order"
-+      default "9" if PPC_64K_PAGES
-+      default "13" if PPC64 && !PPC_64K_PAGES
-+      default "11"
-+      help
-+        The kernel memory allocator divides physically contiguous memory
-+        blocks into "zones", where each zone is a power of two number of
-+        pages.  This option selects the largest power of two that the kernel
-+        keeps in the memory allocator.  If you need to allocate very large
-+        blocks of physically contiguous memory, then you may need to
-+        increase this value.
-+
-+        This config option is actually maximum order plus one. For example,
-+        a value of 11 means that the largest free memory block is 2^10 pages.
-+
-+        The page size is not necessarily 4KB.  For example, on 64-bit
-+        systems, 64KB pages can be enabled via CONFIG_PPC_64K_PAGES.  Keep
-+        this in mind when choosing a value for this option.
-+
- config PPC_SUBPAGE_PROT
-       bool "Support setting protections for 4k subpages"
-       depends on PPC_64K_PAGES
-@@ -490,6 +530,14 @@ config FSL_PCI
-       bool
-       select PPC_INDIRECT_PCI
-+config 4xx_SOC
-+      bool
-+
-+config FSL_LBC
-+      bool
-+      help
-+        Freescale Localbus support
-+
- # Yes MCA RS/6000s exist but Linux-PPC does not currently support any
- config MCA
-       bool
-@@ -663,22 +711,6 @@ config CONSISTENT_SIZE
-       hex "Size of consistent memory pool" if CONSISTENT_SIZE_BOOL
-       default "0x00200000" if NOT_COHERENT_CACHE
--config BOOT_LOAD_BOOL
--      bool "Set the boot link/load address"
--      depends on ADVANCED_OPTIONS && !PPC_MULTIPLATFORM
--      help
--        This option allows you to set the initial load address of the zImage
--        or zImage.initrd file.  This can be useful if you are on a board
--        which has a small amount of memory.
--
--        Say N here unless you know what you are doing.
--
--config BOOT_LOAD
--      hex "Link/load address for booting" if BOOT_LOAD_BOOL
--      default "0x00400000" if 40x || 8xx || 8260
--      default "0x01000000" if 44x
--      default "0x00800000"
--
- config PIN_TLB
-       bool "Pinned Kernel TLBs (860 ONLY)"
-       depends on ADVANCED_OPTIONS && 8xx
---- a/arch/powerpc/Kconfig.debug
-+++ b/arch/powerpc/Kconfig.debug
-@@ -269,7 +269,7 @@ config PPC_EARLY_DEBUG_CPM_ADDR
-       hex "CPM UART early debug transmit descriptor address"
-       depends on PPC_EARLY_DEBUG_CPM
-       default "0xfa202008" if PPC_EP88XC
--      default "0xf0000008" if CPM2
-+      default "0xf0001ff8" if CPM2
-       default "0xff002008" if CPM1
-       help
-         This specifies the address of the transmit descriptor
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -71,13 +71,11 @@ endif
- LDFLAGS_vmlinux       := -Bstatic
--CPPFLAGS-$(CONFIG_PPC32) := -Iarch/$(ARCH)
--AFLAGS-$(CONFIG_PPC32)        := -Iarch/$(ARCH)
- CFLAGS-$(CONFIG_PPC64)        := -mminimal-toc -mtraceback=none  -mcall-aixdesc
--CFLAGS-$(CONFIG_PPC32)        := -Iarch/$(ARCH) -ffixed-r2 -mmultiple
--KBUILD_CPPFLAGS       += $(CPPFLAGS-y)
--KBUILD_AFLAGS += $(AFLAGS-y)
--KBUILD_CFLAGS += -msoft-float -pipe $(CFLAGS-y)
-+CFLAGS-$(CONFIG_PPC32)        := -ffixed-r2 -mmultiple
-+KBUILD_CPPFLAGS       += -Iarch/$(ARCH)
-+KBUILD_AFLAGS += -Iarch/$(ARCH)
-+KBUILD_CFLAGS += -msoft-float -pipe -Iarch/$(ARCH) $(CFLAGS-y)
- CPP           = $(CC) -E $(KBUILD_CFLAGS)
- CHECKFLAGS    += -m$(CONFIG_WORD_SIZE) -D__powerpc__ -D__powerpc$(CONFIG_WORD_SIZE)__
-@@ -164,7 +162,7 @@ boot := arch/$(ARCH)/boot
- $(BOOT_TARGETS): vmlinux
-       $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
--bootwrapper_install:
-+bootwrapper_install %.dtb:
-       $(Q)$(MAKE) ARCH=ppc64 $(build)=$(boot) $(patsubst %,$(boot)/%,$@)
- define archhelp
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -40,6 +40,7 @@ $(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
- $(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
- $(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
- $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
-+$(obj)/virtex405-head.o: BOOTCFLAGS += -mcpu=405
- zlib       := inffast.c inflate.c inftrees.c
-@@ -64,7 +65,8 @@ src-plat := of.c cuboot-52xx.c cuboot-82
-               cuboot-bamboo.c cuboot-mpc7448hpc2.c cuboot-taishan.c \
-               fixed-head.S ep88xc.c ep405.c \
-               cuboot-katmai.c cuboot-rainier.c redboot-8xx.c ep8248e.c \
--              cuboot-warp.c cuboot-85xx-cpm2.c
-+              cuboot-warp.c cuboot-85xx-cpm2.c cuboot-yosemite.c simpleboot.c \
-+              virtex405-head.S
- src-boot := $(src-wlib) $(src-plat) empty.c
- src-boot := $(addprefix $(obj)/, $(src-boot))
-@@ -192,7 +194,7 @@ image-$(CONFIG_PPC_CHRP)           += zImage.chrp
- image-$(CONFIG_PPC_EFIKA)             += zImage.chrp
- image-$(CONFIG_PPC_PMAC)              += zImage.pmac
- image-$(CONFIG_PPC_HOLLY)             += zImage.holly
--image-$(CONFIG_PPC_PRPMC2800)         += zImage.prpmc2800
-+image-$(CONFIG_PPC_PRPMC2800)         += dtbImage.prpmc2800
- image-$(CONFIG_PPC_ISERIES)           += zImage.iseries
- image-$(CONFIG_DEFAULT_UIMAGE)                += uImage
-@@ -216,6 +218,7 @@ image-$(CONFIG_RAINIER)                    += cuImage.rai
- image-$(CONFIG_TAISHAN)                       += cuImage.taishan
- image-$(CONFIG_KATMAI)                        += cuImage.katmai
- image-$(CONFIG_WARP)                  += cuImage.warp
-+image-$(CONFIG_YOSEMITE)              += cuImage.yosemite
- # Board ports in arch/powerpc/platform/8xx/Kconfig
- image-$(CONFIG_PPC_MPC86XADS)         += cuImage.mpc866ads
-@@ -255,6 +258,7 @@ image-$(CONFIG_TQM8555)                    += cuImage.tqm
- image-$(CONFIG_TQM8560)                       += cuImage.tqm8560
- image-$(CONFIG_SBC8548)                       += cuImage.sbc8548
- image-$(CONFIG_SBC8560)                       += cuImage.sbc8560
-+image-$(CONFIG_KSI8560)                       += cuImage.ksi8560
- # Board ports in arch/powerpc/platform/embedded6xx/Kconfig
- image-$(CONFIG_STORCENTER)            += cuImage.storcenter
-@@ -285,11 +289,11 @@ $(obj)/zImage.%: vmlinux $(wrapperbits)
-       $(call if_changed,wrap,$*)
- # dtbImage% - a dtbImage is a zImage with an embedded device tree blob
--$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(dtstree)/%.dts
--      $(call if_changed,wrap,$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz)
-+$(obj)/dtbImage.initrd.%: vmlinux $(wrapperbits) $(obj)/%.dtb
-+      $(call if_changed,wrap,$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
--$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(dtstree)/%.dts
--      $(call if_changed,wrap,$*,$(dtstree)/$*.dts)
-+$(obj)/dtbImage.%: vmlinux $(wrapperbits) $(obj)/%.dtb
-+      $(call if_changed,wrap,$*,,$(obj)/$*.dtb)
- # This cannot be in the root of $(src) as the zImage rule always adds a $(obj)
- # prefix
-@@ -302,14 +306,24 @@ $(obj)/zImage.iseries: vmlinux
- $(obj)/uImage: vmlinux $(wrapperbits)
-       $(call if_changed,wrap,uboot)
--$(obj)/cuImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
--      $(call if_changed,wrap,cuboot-$*,$(dtstree)/$*.dts)
-+$(obj)/cuImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
-+      $(call if_changed,wrap,cuboot-$*,,$(obj)/$*.dtb)
--$(obj)/treeImage.initrd.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
--      $(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts,,$(obj)/ramdisk.image.gz)
-+$(obj)/simpleImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
-+      $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
--$(obj)/treeImage.%: vmlinux $(dtstree)/%.dts $(wrapperbits)
--      $(call if_changed,wrap,treeboot-$*,$(dtstree)/$*.dts)
-+$(obj)/simpleImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
-+      $(call if_changed,wrap,simpleboot-$*,,$(obj)/$*.dtb)
-+
-+$(obj)/treeImage.initrd.%: vmlinux $(obj)/%.dtb $(wrapperbits)
-+      $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb,$(obj)/ramdisk.image.gz)
-+
-+$(obj)/treeImage.%: vmlinux $(obj)/%.dtb $(wrapperbits)
-+      $(call if_changed,wrap,treeboot-$*,,$(obj)/$*.dtb)
-+
-+# Rule to build device tree blobs
-+$(obj)/%.dtb: $(dtstree)/%.dts $(obj)/dtc
-+      $(obj)/dtc -O dtb -o $(obj)/$*.dtb -b 0 $(DTS_FLAGS) $(dtstree)/$*.dts
- # If there isn't a platform selected then just strip the vmlinux.
- ifeq (,$(image-y))
-@@ -326,7 +340,7 @@ install: $(CONFIGURE) $(addprefix $(obj)
- # anything not in $(targets)
- clean-files += $(image-) $(initrd-) zImage zImage.initrd cuImage.* treeImage.* \
--      otheros.bld
-+      otheros.bld *.dtb
- # clean up files cached by wrapper
- clean-kernel := vmlinux.strip vmlinux.bin
---- a/arch/powerpc/boot/bamboo.c
-+++ b/arch/powerpc/boot/bamboo.c
-@@ -33,7 +33,8 @@ static void bamboo_fixups(void)
-       ibm440ep_fixup_clocks(sysclk, 11059200, 25000000);
-       ibm4xx_sdram_fixup_memsize();
-       ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
--      dt_fixup_mac_addresses(bamboo_mac0, bamboo_mac1);
-+      dt_fixup_mac_address_by_alias("ethernet0", bamboo_mac0);
-+      dt_fixup_mac_address_by_alias("ethernet1", bamboo_mac1);
- }
- void bamboo_init(void *mac0, void *mac1)
---- a/arch/powerpc/boot/cpm-serial.c
-+++ b/arch/powerpc/boot/cpm-serial.c
-@@ -11,6 +11,7 @@
- #include "types.h"
- #include "io.h"
- #include "ops.h"
-+#include "page.h"
- struct cpm_scc {
-       u32 gsmrl;
-@@ -42,6 +43,22 @@ struct cpm_param {
-       u16 tbase;
-       u8 rfcr;
-       u8 tfcr;
-+      u16 mrblr;
-+      u32 rstate;
-+      u8 res1[4];
-+      u16 rbptr;
-+      u8 res2[6];
-+      u32 tstate;
-+      u8 res3[4];
-+      u16 tbptr;
-+      u8 res4[6];
-+      u16 maxidl;
-+      u16 idlc;
-+      u16 brkln;
-+      u16 brkec;
-+      u16 brkcr;
-+      u16 rmask;
-+      u8 res5[4];
- };
- struct cpm_bd {
-@@ -54,10 +71,10 @@ static void *cpcr;
- static struct cpm_param *param;
- static struct cpm_smc *smc;
- static struct cpm_scc *scc;
--struct cpm_bd *tbdf, *rbdf;
-+static struct cpm_bd *tbdf, *rbdf;
- static u32 cpm_cmd;
--static u8 *muram_start;
--static u32 muram_offset;
-+static void *cbd_addr;
-+static u32 cbd_offset;
- static void (*do_cmd)(int op);
- static void (*enable_port)(void);
-@@ -119,20 +136,25 @@ static int cpm_serial_open(void)
-       out_8(&param->rfcr, 0x10);
-       out_8(&param->tfcr, 0x10);
-+      out_be16(&param->mrblr, 1);
-+      out_be16(&param->maxidl, 0);
-+      out_be16(&param->brkec, 0);
-+      out_be16(&param->brkln, 0);
-+      out_be16(&param->brkcr, 0);
--      rbdf = (struct cpm_bd *)muram_start;
--      rbdf->addr = (u8 *)(rbdf + 2);
-+      rbdf = cbd_addr;
-+      rbdf->addr = (u8 *)rbdf - 1;
-       rbdf->sc = 0xa000;
-       rbdf->len = 1;
-       tbdf = rbdf + 1;
--      tbdf->addr = (u8 *)(rbdf + 2) + 1;
-+      tbdf->addr = (u8 *)rbdf - 2;
-       tbdf->sc = 0x2000;
-       tbdf->len = 1;
-       sync();
--      out_be16(&param->rbase, muram_offset);
--      out_be16(&param->tbase, muram_offset + sizeof(struct cpm_bd));
-+      out_be16(&param->rbase, cbd_offset);
-+      out_be16(&param->tbase, cbd_offset + sizeof(struct cpm_bd));
-       do_cmd(CPM_CMD_INIT_RX_TX);
-@@ -175,10 +197,12 @@ static unsigned char cpm_serial_getc(voi
- int cpm_console_init(void *devp, struct serial_console_data *scdp)
- {
--      void *reg_virt[2];
--      int is_smc = 0, is_cpm2 = 0, n;
--      unsigned long reg_phys;
-+      void *vreg[2];
-+      u32 reg[2];
-+      int is_smc = 0, is_cpm2 = 0;
-       void *parent, *muram;
-+      void *muram_addr;
-+      unsigned long muram_offset, muram_size;
-       if (dt_is_compatible(devp, "fsl,cpm1-smc-uart")) {
-               is_smc = 1;
-@@ -202,63 +226,64 @@ int cpm_console_init(void *devp, struct 
-       else
-               do_cmd = cpm1_cmd;
--      n = getprop(devp, "fsl,cpm-command", &cpm_cmd, 4);
--      if (n < 4)
-+      if (getprop(devp, "fsl,cpm-command", &cpm_cmd, 4) < 4)
-               return -1;
--      n = getprop(devp, "virtual-reg", reg_virt, sizeof(reg_virt));
--      if (n < (int)sizeof(reg_virt)) {
--              for (n = 0; n < 2; n++) {
--                      if (!dt_xlate_reg(devp, n, &reg_phys, NULL))
--                              return -1;
--
--                      reg_virt[n] = (void *)reg_phys;
--              }
--      }
-+      if (dt_get_virtual_reg(devp, vreg, 2) < 2)
-+              return -1;
-       if (is_smc)
--              smc = reg_virt[0];
-+              smc = vreg[0];
-       else
--              scc = reg_virt[0];
-+              scc = vreg[0];
--      param = reg_virt[1];
-+      param = vreg[1];
-       parent = get_parent(devp);
-       if (!parent)
-               return -1;
--      n = getprop(parent, "virtual-reg", reg_virt, sizeof(reg_virt));
--      if (n < (int)sizeof(reg_virt)) {
--              if (!dt_xlate_reg(parent, 0, &reg_phys, NULL))
--                      return -1;
--
--              reg_virt[0] = (void *)reg_phys;
--      }
--
--      cpcr = reg_virt[0];
-+      if (dt_get_virtual_reg(parent, &cpcr, 1) < 1)
-+              return -1;
-       muram = finddevice("/soc/cpm/muram/data");
-       if (!muram)
-               return -1;
-       /* For bootwrapper-compatible device trees, we assume that the first
--       * entry has at least 18 bytes, and that #address-cells/#data-cells
-+       * entry has at least 128 bytes, and that #address-cells/#data-cells
-        * is one for both parent and child.
-        */
--      n = getprop(muram, "virtual-reg", reg_virt, sizeof(reg_virt));
--      if (n < (int)sizeof(reg_virt)) {
--              if (!dt_xlate_reg(muram, 0, &reg_phys, NULL))
--                      return -1;
-+      if (dt_get_virtual_reg(muram, &muram_addr, 1) < 1)
-+              return -1;
-+
-+      if (getprop(muram, "reg", reg, 8) < 8)
-+              return -1;
-+
-+      muram_offset = reg[0];
-+      muram_size = reg[1];
-+
-+      /* Store the buffer descriptors at the end of the first muram chunk.
-+       * For SMC ports on CPM2-based platforms, relocate the parameter RAM
-+       * just before the buffer descriptors.
-+       */
-+
-+      cbd_offset = muram_offset + muram_size - 2 * sizeof(struct cpm_bd);
--              reg_virt[0] = (void *)reg_phys;
-+      if (is_cpm2 && is_smc) {
-+              u16 *smc_base = (u16 *)param;
-+              u16 pram_offset;
-+
-+              pram_offset = cbd_offset - 64;
-+              pram_offset = _ALIGN_DOWN(pram_offset, 64);
-+
-+              disable_port();
-+              out_be16(smc_base, pram_offset);
-+              param = muram_addr - muram_offset + pram_offset;
-       }
--      muram_start = reg_virt[0];
--
--      n = getprop(muram, "reg", &muram_offset, 4);
--      if (n < 4)
--              return -1;
-+      cbd_addr = muram_addr - muram_offset + cbd_offset;
-       scdp->open = cpm_serial_open;
-       scdp->putc = cpm_serial_putc;
---- a/arch/powerpc/boot/cuboot-pq2.c
-+++ b/arch/powerpc/boot/cuboot-pq2.c
-@@ -128,7 +128,7 @@ static void fixup_pci(void)
-       u8 *soc_regs;
-       int i, len;
-       void *node, *parent_node;
--      u32 naddr, nsize, mem_log2;
-+      u32 naddr, nsize, mem_pow2, mem_mask;
-       node = finddevice("/pci");
-       if (!node || !dt_is_compatible(node, "fsl,pq2-pci"))
-@@ -141,7 +141,7 @@ static void fixup_pci(void)
-       soc_regs = (u8 *)fsl_get_immr();
-       if (!soc_regs)
--              goto err;
-+              goto unhandled;
-       dt_get_reg_format(node, &naddr, &nsize);
-       if (naddr != 3 || nsize != 2)
-@@ -153,7 +153,7 @@ static void fixup_pci(void)
-       dt_get_reg_format(parent_node, &naddr, &nsize);
-       if (naddr != 1 || nsize != 1)
--              goto err;
-+              goto unhandled;
-       len = getprop(node, "ranges", pci_ranges_buf,
-                     sizeof(pci_ranges_buf));
-@@ -170,14 +170,20 @@ static void fixup_pci(void)
-       }
-       if (!mem || !mmio || !io)
--              goto err;
-+              goto unhandled;
-+      if (mem->size[1] != mmio->size[1])
-+              goto unhandled;
-+      if (mem->size[1] & (mem->size[1] - 1))
-+              goto unhandled;
-+      if (io->size[1] & (io->size[1] - 1))
-+              goto unhandled;
-       if (mem->phys_addr + mem->size[1] == mmio->phys_addr)
-               mem_base = mem;
-       else if (mmio->phys_addr + mmio->size[1] == mem->phys_addr)
-               mem_base = mmio;
-       else
--              goto err;
-+              goto unhandled;
-       out_be32(&pci_regs[1][0], mem_base->phys_addr | 1);
-       out_be32(&pci_regs[2][0], ~(mem->size[1] + mmio->size[1] - 1));
-@@ -201,8 +207,9 @@ static void fixup_pci(void)
-       out_le32(&pci_regs[0][58], 0);
-       out_le32(&pci_regs[0][60], 0);
--      mem_log2 = 1 << (__ilog2_u32(bd.bi_memsize - 1) + 1);
--      out_le32(&pci_regs[0][62], 0xa0000000 | ~((1 << (mem_log2 - 12)) - 1));
-+      mem_pow2 = 1 << (__ilog2_u32(bd.bi_memsize - 1) + 1);
-+      mem_mask = ~(mem_pow2 - 1) >> 12;
-+      out_le32(&pci_regs[0][62], 0xa0000000 | mem_mask);
-       /* If PCI is disabled, drive RST high to enable. */
-       if (!(in_le32(&pci_regs[0][32]) & 1)) {
-@@ -228,7 +235,11 @@ static void fixup_pci(void)
-       return;
- err:
--      printf("Bad PCI node\r\n");
-+      printf("Bad PCI node -- using existing firmware setup.\r\n");
-+      return;
-+
-+unhandled:
-+      printf("Unsupported PCI node -- using existing firmware setup.\r\n");
- }
- static void pq2_platform_fixups(void)
---- a/arch/powerpc/boot/cuboot-rainier.c
-+++ b/arch/powerpc/boot/cuboot-rainier.c
-@@ -42,7 +42,8 @@ static void rainier_fixups(void)
-       ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
-       ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
-       ibm4xx_denali_fixup_memsize();
--      dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr);
-+      dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
-+      dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
- }
- void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
---- a/arch/powerpc/boot/cuboot-sequoia.c
-+++ b/arch/powerpc/boot/cuboot-sequoia.c
-@@ -42,7 +42,8 @@ static void sequoia_fixups(void)
-       ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
-       ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
-       ibm4xx_denali_fixup_memsize();
--      dt_fixup_mac_addresses(&bd.bi_enetaddr, &bd.bi_enet1addr);
-+      dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
-+      dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
- }
- void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
---- a/arch/powerpc/boot/cuboot-taishan.c
-+++ b/arch/powerpc/boot/cuboot-taishan.c
-@@ -40,7 +40,8 @@ static void taishan_fixups(void)
-       ibm4xx_sdram_fixup_memsize();
--      dt_fixup_mac_addresses(bd.bi_enetaddr, bd.bi_enet1addr);
-+      dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
-+      dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
-       ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
- }
---- a/arch/powerpc/boot/cuboot-warp.c
-+++ b/arch/powerpc/boot/cuboot-warp.c
-@@ -24,7 +24,7 @@ static void warp_fixups(void)
-       ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
-       ibm4xx_sdram_fixup_memsize();
-       ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
--      dt_fixup_mac_addresses(&bd.bi_enetaddr);
-+      dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
- }
---- /dev/null
-+++ b/arch/powerpc/boot/cuboot-yosemite.c
-@@ -0,0 +1,44 @@
-+/*
-+ * Old U-boot compatibility for Yosemite
-+ *
-+ * Author: Josh Boyer <jwboyer@linux.vnet.ibm.com>
-+ *
-+ * Copyright 2008 IBM Corporation
-+ *
-+ * 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 "ops.h"
-+#include "stdio.h"
-+#include "4xx.h"
-+#include "44x.h"
-+#include "cuboot.h"
-+
-+#define TARGET_4xx
-+#define TARGET_44x
-+#include "ppcboot.h"
-+
-+static bd_t bd;
-+
-+static void yosemite_fixups(void)
-+{
-+      unsigned long sysclk = 66666666;
-+
-+      ibm440ep_fixup_clocks(sysclk, 11059200, 50000000);
-+      ibm4xx_sdram_fixup_memsize();
-+      ibm4xx_quiesce_eth((u32 *)0xef600e00, (u32 *)0xef600f00);
-+      dt_fixup_mac_address_by_alias("ethernet0", bd.bi_enetaddr);
-+      dt_fixup_mac_address_by_alias("ethernet1", bd.bi_enet1addr);
-+}
-+
-+void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
-+              unsigned long r6, unsigned long r7)
-+{
-+      CUBOOT_INIT();
-+      platform_ops.fixups = yosemite_fixups;
-+      platform_ops.exit = ibm44x_dbcr_reset;
-+      fdt_init(_dtb_start);
-+      serial_console_init();
-+}
---- a/arch/powerpc/boot/devtree.c
-+++ b/arch/powerpc/boot/devtree.c
-@@ -350,3 +350,23 @@ int dt_is_compatible(void *node, const c
-       return 0;
- }
-+
-+int dt_get_virtual_reg(void *node, void **addr, int nres)
-+{
-+      unsigned long xaddr;
-+      int n;
-+
-+      n = getprop(node, "virtual-reg", addr, nres * 4);
-+      if (n > 0)
-+              return n / 4;
-+
-+      for (n = 0; n < nres; n++) {
-+              if (!dt_xlate_reg(node, n, &xaddr, NULL))
-+                      break;
-+
-+              addr[n] = (void *)xaddr;
-+      }
-+
-+      return n;
-+}
-+
---- a/arch/powerpc/boot/dts/bamboo.dts
-+++ b/arch/powerpc/boot/dts/bamboo.dts
-@@ -204,7 +204,6 @@
-                       };
-                       EMAC0: ethernet@ef600e00 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
-                               interrupt-parent = <&UIC1>;
-@@ -225,7 +224,6 @@
-                       };
-                       EMAC1: ethernet@ef600f00 {
--                              linux,network-index = <1>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
-                               interrupt-parent = <&UIC1>;
---- /dev/null
-+++ b/arch/powerpc/boot/dts/canyonlands.dts
-@@ -0,0 +1,402 @@
-+/*
-+ * Device Tree Source for AMCC Canyonlands (460EX)
-+ *
-+ * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
-+ *
-+ * 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.
-+ */
-+
-+/ {
-+      #address-cells = <2>;
-+      #size-cells = <1>;
-+      model = "amcc,canyonlands";
-+      compatible = "amcc,canyonlands";
-+      dcr-parent = <&/cpus/cpu@0>;
-+
-+      aliases {
-+              ethernet0 = &EMAC0;
-+              ethernet1 = &EMAC1;
-+              serial0 = &UART0;
-+              serial1 = &UART1;
-+      };
-+
-+      cpus {
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+
-+              cpu@0 {
-+                      device_type = "cpu";
-+                      model = "PowerPC,460EX";
-+                      reg = <0>;
-+                      clock-frequency = <0>; /* Filled in by U-Boot */
-+                      timebase-frequency = <0>; /* Filled in by U-Boot */
-+                      i-cache-line-size = <20>;
-+                      d-cache-line-size = <20>;
-+                      i-cache-size = <8000>;
-+                      d-cache-size = <8000>;
-+                      dcr-controller;
-+                      dcr-access-method = "native";
-+              };
-+      };
-+
-+      memory {
-+              device_type = "memory";
-+              reg = <0 0 0>; /* Filled in by U-Boot */
-+      };
-+
-+      UIC0: interrupt-controller0 {
-+              compatible = "ibm,uic-460ex","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <0>;
-+              dcr-reg = <0c0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+      };
-+
-+      UIC1: interrupt-controller1 {
-+              compatible = "ibm,uic-460ex","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <1>;
-+              dcr-reg = <0d0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <1e 4 1f 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      UIC2: interrupt-controller2 {
-+              compatible = "ibm,uic-460ex","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <2>;
-+              dcr-reg = <0e0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <a 4 b 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      UIC3: interrupt-controller3 {
-+              compatible = "ibm,uic-460ex","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <3>;
-+              dcr-reg = <0f0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <10 4 11 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      SDR0: sdr {
-+              compatible = "ibm,sdr-460ex";
-+              dcr-reg = <00e 002>;
-+      };
-+
-+      CPR0: cpr {
-+              compatible = "ibm,cpr-460ex";
-+              dcr-reg = <00c 002>;
-+      };
-+
-+      plb {
-+              compatible = "ibm,plb-460ex", "ibm,plb4";
-+              #address-cells = <2>;
-+              #size-cells = <1>;
-+              ranges;
-+              clock-frequency = <0>; /* Filled in by U-Boot */
-+
-+              SDRAM0: sdram {
-+                      compatible = "ibm,sdram-460ex", "ibm,sdram-405gp";
-+                      dcr-reg = <010 2>;
-+              };
-+
-+              MAL0: mcmal {
-+                      compatible = "ibm,mcmal-460ex", "ibm,mcmal2";
-+                      dcr-reg = <180 62>;
-+                      num-tx-chans = <2>;
-+                      num-rx-chans = <10>;
-+                      #address-cells = <0>;
-+                      #size-cells = <0>;
-+                      interrupt-parent = <&UIC2>;
-+                      interrupts = <  /*TXEOB*/ 6 4
-+                                      /*RXEOB*/ 7 4
-+                                      /*SERR*/  3 4
-+                                      /*TXDE*/  4 4
-+                                      /*RXDE*/  5 4>;
-+              };
-+
-+              POB0: opb {
-+                      compatible = "ibm,opb-460ex", "ibm,opb";
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      ranges = <b0000000 4 b0000000 50000000>;
-+                      clock-frequency = <0>; /* Filled in by U-Boot */
-+
-+                      EBC0: ebc {
-+                              compatible = "ibm,ebc-460ex", "ibm,ebc";
-+                              dcr-reg = <012 2>;
-+                              #address-cells = <2>;
-+                              #size-cells = <1>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              interrupts = <6 4>;
-+                              interrupt-parent = <&UIC1>;
-+                      };
-+
-+                      UART0: serial@ef600300 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600300 8>;
-+                              virtual-reg = <ef600300>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1 4>;
-+                      };
-+
-+                      UART1: serial@ef600400 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600400 8>;
-+                              virtual-reg = <ef600400>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <1 4>;
-+                      };
-+
-+                      UART2: serial@ef600500 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600500 8>;
-+                              virtual-reg = <ef600500>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1d 4>;
-+                      };
-+
-+                      UART3: serial@ef600600 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600600 8>;
-+                              virtual-reg = <ef600600>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1e 4>;
-+                      };
-+
-+                      IIC0: i2c@ef600700 {
-+                              compatible = "ibm,iic-460ex", "ibm,iic";
-+                              reg = <ef600700 14>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <2 4>;
-+                      };
-+
-+                      IIC1: i2c@ef600800 {
-+                              compatible = "ibm,iic-460ex", "ibm,iic";
-+                              reg = <ef600800 14>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <3 4>;
-+                      };
-+
-+                      ZMII0: emac-zmii@ef600d00 {
-+                              compatible = "ibm,zmii-460ex", "ibm,zmii";
-+                              reg = <ef600d00 c>;
-+                      };
-+
-+                      RGMII0: emac-rgmii@ef601500 {
-+                              compatible = "ibm,rgmii-460ex", "ibm,rgmii";
-+                              reg = <ef601500 8>;
-+                              has-mdio;
-+                      };
-+
-+                      TAH0: emac-tah@ef601350 {
-+                              compatible = "ibm,tah-460ex", "ibm,tah";
-+                              reg = <ef601350 30>;
-+                      };
-+
-+                      TAH1: emac-tah@ef601450 {
-+                              compatible = "ibm,tah-460ex", "ibm,tah";
-+                              reg = <ef601450 30>;
-+                      };
-+
-+                      EMAC0: ethernet@ef600e00 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-460ex", "ibm,emac4";
-+                              interrupt-parent = <&EMAC0>;
-+                              interrupts = <0 1>;
-+                              #interrupt-cells = <1>;
-+                              #address-cells = <0>;
-+                              #size-cells = <0>;
-+                              interrupt-map = </*Status*/ 0 &UIC2 10 4
-+                                               /*Wake*/   1 &UIC2 14 4>;
-+                              reg = <ef600e00 70>;
-+                              local-mac-address = [000000000000]; /* Filled in by U-Boot */
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <0>;
-+                              mal-rx-channel = <0>;
-+                              cell-index = <0>;
-+                              max-frame-size = <2328>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rgmii";
-+                              phy-map = <00000000>;
-+                              rgmii-device = <&RGMII0>;
-+                              rgmii-channel = <0>;
-+                              tah-device = <&TAH0>;
-+                              tah-channel = <0>;
-+                              has-inverted-stacr-oc;
-+                              has-new-stacr-staopc;
-+                      };
-+
-+                      EMAC1: ethernet@ef600f00 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-460ex", "ibm,emac4";
-+                              interrupt-parent = <&EMAC1>;
-+                              interrupts = <0 1>;
-+                              #interrupt-cells = <1>;
-+                              #address-cells = <0>;
-+                              #size-cells = <0>;
-+                              interrupt-map = </*Status*/ 0 &UIC2 11 4
-+                                               /*Wake*/   1 &UIC2 15 4>;
-+                              reg = <ef600f00 70>;
-+                              local-mac-address = [000000000000]; /* Filled in by U-Boot */
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <1>;
-+                              mal-rx-channel = <8>;
-+                              cell-index = <1>;
-+                              max-frame-size = <2328>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rgmii";
-+                              phy-map = <00000000>;
-+                              rgmii-device = <&RGMII0>;
-+                              rgmii-channel = <1>;
-+                              tah-device = <&TAH1>;
-+                              tah-channel = <1>;
-+                              has-inverted-stacr-oc;
-+                              has-new-stacr-staopc;
-+                              mdio-device = <&EMAC0>;
-+                      };
-+              };
-+
-+              PCIX0: pci@c0ec00000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb-pcix-460ex", "ibm,plb-pcix";
-+                      primary;
-+                      large-inbound-windows;
-+                      enable-msi-hole;
-+                      reg = <c 0ec00000   8   /* Config space access */
-+                             0 0 0            /* no IACK cycles */
-+                             c 0ed00000   4   /* Special cycles */
-+                             c 0ec80000 100   /* Internal registers */
-+                             c 0ec80100  fc>; /* Internal messaging registers */
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed
-+                       */
-+                      ranges = <02000000 0 80000000 0000000d 80000000 0 80000000
-+                                01000000 0 00000000 0000000c 08000000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* This drives busses 0 to 0x3f */
-+                      bus-range = <0 3f>;
-+
-+                      /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
-+                      interrupt-map-mask = <0000 0 0 0>;
-+                      interrupt-map = < 0000 0 0 0 &UIC1 0 8 >;
-+              };
-+
-+              PCIE0: pciex@d00000000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
-+                      primary;
-+                      port = <0>; /* port number */
-+                      reg = <d 00000000 20000000      /* Config space access */
-+                             c 08010000 00001000>;    /* Registers */
-+                      dcr-reg = <100 020>;
-+                      sdr-base = <300>;
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed
-+                       */
-+                      ranges = <02000000 0 80000000 0000000e 00000000 0 80000000
-+                                01000000 0 00000000 0000000f 80000000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* This drives busses 40 to 0x7f */
-+                      bus-range = <40 7f>;
-+
-+                      /* Legacy interrupts (note the weird polarity, the bridge seems
-+                       * to invert PCIe legacy interrupts).
-+                       * We are de-swizzling here because the numbers are actually for
-+                       * port of the root complex virtual P2P bridge. But I want
-+                       * to avoid putting a node for it in the tree, so the numbers
-+                       * below are basically de-swizzled numbers.
-+                       * The real slot is on idsel 0, so the swizzling is 1:1
-+                       */
-+                      interrupt-map-mask = <0000 0 0 7>;
-+                      interrupt-map = <
-+                              0000 0 0 1 &UIC3 c 4 /* swizzled int A */
-+                              0000 0 0 2 &UIC3 d 4 /* swizzled int B */
-+                              0000 0 0 3 &UIC3 e 4 /* swizzled int C */
-+                              0000 0 0 4 &UIC3 f 4 /* swizzled int D */>;
-+              };
-+
-+              PCIE1: pciex@d20000000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
-+                      primary;
-+                      port = <1>; /* port number */
-+                      reg = <d 20000000 20000000      /* Config space access */
-+                             c 08011000 00001000>;    /* Registers */
-+                      dcr-reg = <120 020>;
-+                      sdr-base = <340>;
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed
-+                       */
-+                      ranges = <02000000 0 80000000 0000000e 80000000 0 80000000
-+                                01000000 0 00000000 0000000f 80010000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* This drives busses 80 to 0xbf */
-+                      bus-range = <80 bf>;
-+
-+                      /* Legacy interrupts (note the weird polarity, the bridge seems
-+                       * to invert PCIe legacy interrupts).
-+                       * We are de-swizzling here because the numbers are actually for
-+                       * port of the root complex virtual P2P bridge. But I want
-+                       * to avoid putting a node for it in the tree, so the numbers
-+                       * below are basically de-swizzled numbers.
-+                       * The real slot is on idsel 0, so the swizzling is 1:1
-+                       */
-+                      interrupt-map-mask = <0000 0 0 7>;
-+                      interrupt-map = <
-+                              0000 0 0 1 &UIC3 10 4 /* swizzled int A */
-+                              0000 0 0 2 &UIC3 11 4 /* swizzled int B */
-+                              0000 0 0 3 &UIC3 12 4 /* swizzled int C */
-+                              0000 0 0 4 &UIC3 13 4 /* swizzled int D */>;
-+              };
-+      };
-+};
---- a/arch/powerpc/boot/dts/ebony.dts
-+++ b/arch/powerpc/boot/dts/ebony.dts
-@@ -241,7 +241,6 @@
-                       };
-                       EMAC0: ethernet@40000800 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440gp", "ibm,emac";
-                               interrupt-parent = <&UIC1>;
-@@ -261,7 +260,6 @@
-                               zmii-channel = <0>;
-                       };
-                       EMAC1: ethernet@40000900 {
--                              linux,network-index = <1>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440gp", "ibm,emac";
-                               interrupt-parent = <&UIC1>;
---- a/arch/powerpc/boot/dts/ep8248e.dts
-+++ b/arch/powerpc/boot/dts/ep8248e.dts
-@@ -121,8 +121,7 @@
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 0x1100 0x1140
--                                             0xec0 0x9800 0x800>;
-+                                      reg = <0 0x2000 0x9800 0x800>;
-                               };
-                       };
-@@ -138,7 +137,7 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc8248-smc-uart",
-                                            "fsl,cpm2-smc-uart";
--                              reg = <0x11a80 0x20 0x1100 0x40>;
-+                              reg = <0x11a80 0x20 0x87fc 2>;
-                               interrupts = <4 8>;
-                               interrupt-parent = <&PIC>;
-                               fsl,cpm-brg = <7>;
---- a/arch/powerpc/boot/dts/ep88xc.dts
-+++ b/arch/powerpc/boot/dts/ep88xc.dts
-@@ -2,7 +2,7 @@
-  * EP88xC Device Tree Source
-  *
-  * Copyright 2006 MontaVista Software, Inc.
-- * Copyright 2007 Freescale Semiconductor, Inc.
-+ * Copyright 2007,2008 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 as published by the
-@@ -10,6 +10,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "EP88xC";
-@@ -23,44 +24,44 @@
-               PowerPC,885@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <d#16>;
--                      i-cache-line-size = <d#16>;
--                      d-cache-size = <d#8192>;
--                      i-cache-size = <d#8192>;
-+                      reg = <0x0>;
-+                      d-cache-line-size = <16>;
-+                      i-cache-line-size = <16>;
-+                      d-cache-size = <8192>;
-+                      i-cache-size = <8192>;
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
--                      interrupts = <f 2>;     // decrementer interrupt
-+                      interrupts = <15 2>;    // decrementer interrupt
-                       interrupt-parent = <&PIC>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <0 0>;
-+              reg = <0x0 0x0>;
-       };
-       localbus@fa200100 {
-               compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus";
-               #address-cells = <2>;
-               #size-cells = <1>;
--              reg = <fa200100 40>;
-+              reg = <0xfa200100 0x40>;
-               ranges = <
--                      0 0 fc000000 04000000
--                      3 0 fa000000 01000000
-+                      0x0 0x0 0xfc000000 0x4000000
-+                      0x3 0x0 0xfa000000 0x1000000
-               >;
-               flash@0,2000000 {
-                       compatible = "cfi-flash";
--                      reg = <0 2000000 2000000>;
-+                      reg = <0x0 0x2000000 0x2000000>;
-                       bank-width = <4>;
-                       device-width = <2>;
-               };
-               board-control@3,400000 {
--                      reg = <3 400000 10>;
-+                      reg = <0x3 0x400000 0x10>;
-                       compatible = "fsl,ep88xc-bcsr";
-               };
-       };
-@@ -70,25 +71,25 @@
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 fa200000 00004000>;
-+              ranges = <0x0 0xfa200000 0x4000>;
-               bus-frequency = <0>;
-               // Temporary -- will go away once kernel uses ranges for get_immrbase().
--              reg = <fa200000 4000>;
-+              reg = <0xfa200000 0x4000>;
-               mdio@e00 {
-                       compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio";
--                      reg = <e00 188>;
-+                      reg = <0xe00 0x188>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       PHY0: ethernet-phy@0 {
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       PHY1: ethernet-phy@1 {
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -97,7 +98,7 @@
-                       device_type = "network";
-                       compatible = "fsl,mpc885-fec-enet",
-                                    "fsl,pq1-fec-enet";
--                      reg = <e00 188>;
-+                      reg = <0xe00 0x188>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       interrupts = <3 1>;
-                       interrupt-parent = <&PIC>;
-@@ -109,7 +110,7 @@
-                       device_type = "network";
-                       compatible = "fsl,mpc885-fec-enet",
-                                    "fsl,pq1-fec-enet";
--                      reg = <1e00 188>;
-+                      reg = <0x1e00 0x188>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       interrupts = <7 1>;
-                       interrupt-parent = <&PIC>;
-@@ -120,7 +121,7 @@
-               PIC: interrupt-controller@0 {
-                       interrupt-controller;
-                       #interrupt-cells = <2>;
--                      reg = <0 24>;
-+                      reg = <0x0 0x24>;
-                       compatible = "fsl,mpc885-pic", "fsl,pq1-pic";
-               };
-@@ -130,29 +131,29 @@
-                       #size-cells = <2>;
-                       compatible = "fsl,pq-pcmcia";
-                       device_type = "pcmcia";
--                      reg = <80 80>;
-+                      reg = <0x80 0x80>;
-                       interrupt-parent = <&PIC>;
--                      interrupts = <d 1>;
-+                      interrupts = <13 1>;
-               };
-               cpm@9c0 {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc885-cpm", "fsl,cpm1";
--                      command-proc = <9c0>;
-+                      command-proc = <0x9c0>;
-                       interrupts = <0>;       // cpm error interrupt
-                       interrupt-parent = <&CPM_PIC>;
--                      reg = <9c0 40>;
-+                      reg = <0x9c0 0x40>;
-                       ranges;
-                       muram@2000 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 2000 2000>;
-+                              ranges = <0x0 0x2000 0x2000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 1c00>;
-+                                      reg = <0x0 0x1c00>;
-                               };
-                       };
-@@ -160,7 +161,7 @@
-                               compatible = "fsl,mpc885-brg",
-                                            "fsl,cpm1-brg",
-                                            "fsl,cpm-brg";
--                              reg = <9f0 10>;
-+                              reg = <0x9f0 0x10>;
-                       };
-                       CPM_PIC: interrupt-controller@930 {
-@@ -168,7 +169,7 @@
-                               #interrupt-cells = <1>;
-                               interrupts = <5 2 0 2>;
-                               interrupt-parent = <&PIC>;
--                              reg = <930 20>;
-+                              reg = <0x930 0x20>;
-                               compatible = "fsl,mpc885-cpm-pic",
-                                            "fsl,cpm1-pic";
-                       };
-@@ -178,11 +179,11 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc885-smc-uart",
-                                            "fsl,cpm1-smc-uart";
--                              reg = <a80 10 3e80 40>;
-+                              reg = <0xa80 0x10 0x3e80 0x40>;
-                               interrupts = <4>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-brg = <1>;
--                              fsl,cpm-command = <0090>;
-+                              fsl,cpm-command = <0x90>;
-                               linux,planetcore-label = "SMC1";
-                       };
-@@ -191,11 +192,11 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc885-scc-uart",
-                                            "fsl,cpm1-scc-uart";
--                              reg = <a20 20 3d00 80>;
--                              interrupts = <1d>;
-+                              reg = <0xa20 0x20 0x3d00 0x80>;
-+                              interrupts = <29>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-brg = <2>;
--                              fsl,cpm-command = <0040>;
-+                              fsl,cpm-command = <0x40>;
-                               linux,planetcore-label = "SCC2";
-                       };
-@@ -204,9 +205,9 @@
-                               #size-cells = <0>;
-                               compatible = "fsl,mpc885-usb",
-                                            "fsl,cpm1-usb";
--                              reg = <a00 18 1c00 80>;
-+                              reg = <0xa00 0x18 0x1c00 0x80>;
-                               interrupt-parent = <&CPM_PIC>;
--                              interrupts = <1e>;
-+                              interrupts = <30>;
-                               fsl,cpm-command = <0000>;
-                       };
-               };
---- /dev/null
-+++ b/arch/powerpc/boot/dts/glacier.dts
-@@ -0,0 +1,467 @@
-+/*
-+ * Device Tree Source for AMCC Glacier (460GT)
-+ *
-+ * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
-+ *
-+ * 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.
-+ */
-+
-+/ {
-+      #address-cells = <2>;
-+      #size-cells = <1>;
-+      model = "amcc,glacier";
-+      compatible = "amcc,glacier", "amcc,canyonlands";
-+      dcr-parent = <&/cpus/cpu@0>;
-+
-+      aliases {
-+              ethernet0 = &EMAC0;
-+              ethernet1 = &EMAC1;
-+              ethernet2 = &EMAC2;
-+              ethernet3 = &EMAC3;
-+              serial0 = &UART0;
-+              serial1 = &UART1;
-+      };
-+
-+      cpus {
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+
-+              cpu@0 {
-+                      device_type = "cpu";
-+                      model = "PowerPC,460GT";
-+                      reg = <0>;
-+                      clock-frequency = <0>; /* Filled in by U-Boot */
-+                      timebase-frequency = <0>; /* Filled in by U-Boot */
-+                      i-cache-line-size = <20>;
-+                      d-cache-line-size = <20>;
-+                      i-cache-size = <8000>;
-+                      d-cache-size = <8000>;
-+                      dcr-controller;
-+                      dcr-access-method = "native";
-+              };
-+      };
-+
-+      memory {
-+              device_type = "memory";
-+              reg = <0 0 0>; /* Filled in by U-Boot */
-+      };
-+
-+      UIC0: interrupt-controller0 {
-+              compatible = "ibm,uic-460gt","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <0>;
-+              dcr-reg = <0c0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+      };
-+
-+      UIC1: interrupt-controller1 {
-+              compatible = "ibm,uic-460gt","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <1>;
-+              dcr-reg = <0d0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <1e 4 1f 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      UIC2: interrupt-controller2 {
-+              compatible = "ibm,uic-460gt","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <2>;
-+              dcr-reg = <0e0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <a 4 b 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      UIC3: interrupt-controller3 {
-+              compatible = "ibm,uic-460gt","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <3>;
-+              dcr-reg = <0f0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <10 4 11 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      SDR0: sdr {
-+              compatible = "ibm,sdr-460gt";
-+              dcr-reg = <00e 002>;
-+      };
-+
-+      CPR0: cpr {
-+              compatible = "ibm,cpr-460gt";
-+              dcr-reg = <00c 002>;
-+      };
-+
-+      plb {
-+              compatible = "ibm,plb-460gt", "ibm,plb4";
-+              #address-cells = <2>;
-+              #size-cells = <1>;
-+              ranges;
-+              clock-frequency = <0>; /* Filled in by U-Boot */
-+
-+              SDRAM0: sdram {
-+                      compatible = "ibm,sdram-460gt", "ibm,sdram-405gp";
-+                      dcr-reg = <010 2>;
-+              };
-+
-+              MAL0: mcmal {
-+                      compatible = "ibm,mcmal-460gt", "ibm,mcmal2";
-+                      dcr-reg = <180 62>;
-+                      num-tx-chans = <4>;
-+                      num-rx-chans = <20>;
-+                      #address-cells = <0>;
-+                      #size-cells = <0>;
-+                      interrupt-parent = <&UIC2>;
-+                      interrupts = <  /*TXEOB*/ 6 4
-+                                      /*RXEOB*/ 7 4
-+                                      /*SERR*/  3 4
-+                                      /*TXDE*/  4 4
-+                                      /*RXDE*/  5 4>;
-+                      desc-base-addr-high = <8>;
-+              };
-+
-+              POB0: opb {
-+                      compatible = "ibm,opb-460gt", "ibm,opb";
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      ranges = <b0000000 4 b0000000 50000000>;
-+                      clock-frequency = <0>; /* Filled in by U-Boot */
-+
-+                      EBC0: ebc {
-+                              compatible = "ibm,ebc-460gt", "ibm,ebc";
-+                              dcr-reg = <012 2>;
-+                              #address-cells = <2>;
-+                              #size-cells = <1>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              interrupts = <6 4>;
-+                              interrupt-parent = <&UIC1>;
-+                      };
-+
-+                      UART0: serial@ef600300 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600300 8>;
-+                              virtual-reg = <ef600300>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1 4>;
-+                      };
-+
-+                      UART1: serial@ef600400 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600400 8>;
-+                              virtual-reg = <ef600400>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <1 4>;
-+                      };
-+
-+                      UART2: serial@ef600500 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600500 8>;
-+                              virtual-reg = <ef600500>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1d 4>;
-+                      };
-+
-+                      UART3: serial@ef600600 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600600 8>;
-+                              virtual-reg = <ef600600>;
-+                              clock-frequency = <0>; /* Filled in by U-Boot */
-+                              current-speed = <0>; /* Filled in by U-Boot */
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1e 4>;
-+                      };
-+
-+                      IIC0: i2c@ef600700 {
-+                              compatible = "ibm,iic-460gt", "ibm,iic";
-+                              reg = <ef600700 14>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <2 4>;
-+                      };
-+
-+                      IIC1: i2c@ef600800 {
-+                              compatible = "ibm,iic-460gt", "ibm,iic";
-+                              reg = <ef600800 14>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <3 4>;
-+                      };
-+
-+                      ZMII0: emac-zmii@ef600d00 {
-+                              compatible = "ibm,zmii-460gt", "ibm,zmii";
-+                              reg = <ef600d00 c>;
-+                      };
-+
-+                      RGMII0: emac-rgmii@ef601500 {
-+                              compatible = "ibm,rgmii-460gt", "ibm,rgmii";
-+                              reg = <ef601500 8>;
-+                              has-mdio;
-+                      };
-+
-+                      RGMII1: emac-rgmii@ef601600 {
-+                              compatible = "ibm,rgmii-460gt", "ibm,rgmii";
-+                              reg = <ef601600 8>;
-+                              has-mdio;
-+                      };
-+
-+                      TAH0: emac-tah@ef601350 {
-+                              compatible = "ibm,tah-460gt", "ibm,tah";
-+                              reg = <ef601350 30>;
-+                      };
-+
-+                      TAH1: emac-tah@ef601450 {
-+                              compatible = "ibm,tah-460gt", "ibm,tah";
-+                              reg = <ef601450 30>;
-+                      };
-+
-+                      EMAC0: ethernet@ef600e00 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-460gt", "ibm,emac4";
-+                              interrupt-parent = <&EMAC0>;
-+                              interrupts = <0 1>;
-+                              #interrupt-cells = <1>;
-+                              #address-cells = <0>;
-+                              #size-cells = <0>;
-+                              interrupt-map = </*Status*/ 0 &UIC2 10 4
-+                                               /*Wake*/   1 &UIC2 14 4>;
-+                              reg = <ef600e00 70>;
-+                              local-mac-address = [000000000000]; /* Filled in by U-Boot */
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <0>;
-+                              mal-rx-channel = <0>;
-+                              cell-index = <0>;
-+                              max-frame-size = <2328>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rgmii";
-+                              phy-map = <00000000>;
-+                              rgmii-device = <&RGMII0>;
-+                              rgmii-channel = <0>;
-+                              tah-device = <&TAH0>;
-+                              tah-channel = <0>;
-+                              has-inverted-stacr-oc;
-+                              has-new-stacr-staopc;
-+                      };
-+
-+                      EMAC1: ethernet@ef600f00 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-460gt", "ibm,emac4";
-+                              interrupt-parent = <&EMAC1>;
-+                              interrupts = <0 1>;
-+                              #interrupt-cells = <1>;
-+                              #address-cells = <0>;
-+                              #size-cells = <0>;
-+                              interrupt-map = </*Status*/ 0 &UIC2 11 4
-+                                               /*Wake*/   1 &UIC2 15 4>;
-+                              reg = <ef600f00 70>;
-+                              local-mac-address = [000000000000]; /* Filled in by U-Boot */
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <1>;
-+                              mal-rx-channel = <8>;
-+                              cell-index = <1>;
-+                              max-frame-size = <2328>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rgmii";
-+                              phy-map = <00000000>;
-+                              rgmii-device = <&RGMII0>;
-+                              rgmii-channel = <1>;
-+                              tah-device = <&TAH1>;
-+                              tah-channel = <1>;
-+                              has-inverted-stacr-oc;
-+                              has-new-stacr-staopc;
-+                              mdio-device = <&EMAC0>;
-+                      };
-+
-+                      EMAC2: ethernet@ef601100 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-460gt", "ibm,emac4";
-+                              interrupt-parent = <&EMAC2>;
-+                              interrupts = <0 1>;
-+                              #interrupt-cells = <1>;
-+                              #address-cells = <0>;
-+                              #size-cells = <0>;
-+                              interrupt-map = </*Status*/ 0 &UIC2 12 4
-+                                               /*Wake*/   1 &UIC2 16 4>;
-+                              reg = <ef601100 70>;
-+                              local-mac-address = [000000000000]; /* Filled in by U-Boot */
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <2>;
-+                              mal-rx-channel = <10>;
-+                              cell-index = <2>;
-+                              max-frame-size = <2328>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rgmii";
-+                              phy-map = <00000000>;
-+                              rgmii-device = <&RGMII1>;
-+                              rgmii-channel = <0>;
-+                              has-inverted-stacr-oc;
-+                              has-new-stacr-staopc;
-+                              mdio-device = <&EMAC0>;
-+                      };
-+
-+                      EMAC3: ethernet@ef601200 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-460gt", "ibm,emac4";
-+                              interrupt-parent = <&EMAC3>;
-+                              interrupts = <0 1>;
-+                              #interrupt-cells = <1>;
-+                              #address-cells = <0>;
-+                              #size-cells = <0>;
-+                              interrupt-map = </*Status*/ 0 &UIC2 13 4
-+                                               /*Wake*/   1 &UIC2 17 4>;
-+                              reg = <ef601200 70>;
-+                              local-mac-address = [000000000000]; /* Filled in by U-Boot */
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <3>;
-+                              mal-rx-channel = <18>;
-+                              cell-index = <3>;
-+                              max-frame-size = <2328>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rgmii";
-+                              phy-map = <00000000>;
-+                              rgmii-device = <&RGMII1>;
-+                              rgmii-channel = <1>;
-+                              has-inverted-stacr-oc;
-+                              has-new-stacr-staopc;
-+                              mdio-device = <&EMAC0>;
-+                      };
-+              };
-+
-+              PCIX0: pci@c0ec00000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb-pcix-460gt", "ibm,plb-pcix";
-+                      primary;
-+                      large-inbound-windows;
-+                      enable-msi-hole;
-+                      reg = <c 0ec00000   8   /* Config space access */
-+                             0 0 0            /* no IACK cycles */
-+                             c 0ed00000   4   /* Special cycles */
-+                             c 0ec80000 100   /* Internal registers */
-+                             c 0ec80100  fc>; /* Internal messaging registers */
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed
-+                       */
-+                      ranges = <02000000 0 80000000 0000000d 80000000 0 80000000
-+                                01000000 0 00000000 0000000c 08000000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* This drives busses 0 to 0x3f */
-+                      bus-range = <0 3f>;
-+
-+                      /* All PCI interrupts are routed to ext IRQ 2 -> UIC1-0 */
-+                      interrupt-map-mask = <0000 0 0 0>;
-+                      interrupt-map = < 0000 0 0 0 &UIC1 0 8 >;
-+              };
-+
-+              PCIE0: pciex@d00000000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
-+                      primary;
-+                      port = <0>; /* port number */
-+                      reg = <d 00000000 20000000      /* Config space access */
-+                             c 08010000 00001000>;    /* Registers */
-+                      dcr-reg = <100 020>;
-+                      sdr-base = <300>;
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed
-+                       */
-+                      ranges = <02000000 0 80000000 0000000e 00000000 0 80000000
-+                                01000000 0 00000000 0000000f 80000000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* This drives busses 40 to 0x7f */
-+                      bus-range = <40 7f>;
-+
-+                      /* Legacy interrupts (note the weird polarity, the bridge seems
-+                       * to invert PCIe legacy interrupts).
-+                       * We are de-swizzling here because the numbers are actually for
-+                       * port of the root complex virtual P2P bridge. But I want
-+                       * to avoid putting a node for it in the tree, so the numbers
-+                       * below are basically de-swizzled numbers.
-+                       * The real slot is on idsel 0, so the swizzling is 1:1
-+                       */
-+                      interrupt-map-mask = <0000 0 0 7>;
-+                      interrupt-map = <
-+                              0000 0 0 1 &UIC3 c 4 /* swizzled int A */
-+                              0000 0 0 2 &UIC3 d 4 /* swizzled int B */
-+                              0000 0 0 3 &UIC3 e 4 /* swizzled int C */
-+                              0000 0 0 4 &UIC3 f 4 /* swizzled int D */>;
-+              };
-+
-+              PCIE1: pciex@d20000000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb-pciex-460ex", "ibm,plb-pciex";
-+                      primary;
-+                      port = <1>; /* port number */
-+                      reg = <d 20000000 20000000      /* Config space access */
-+                             c 08011000 00001000>;    /* Registers */
-+                      dcr-reg = <120 020>;
-+                      sdr-base = <340>;
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed
-+                       */
-+                      ranges = <02000000 0 80000000 0000000e 80000000 0 80000000
-+                                01000000 0 00000000 0000000f 80010000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* This drives busses 80 to 0xbf */
-+                      bus-range = <80 bf>;
-+
-+                      /* Legacy interrupts (note the weird polarity, the bridge seems
-+                       * to invert PCIe legacy interrupts).
-+                       * We are de-swizzling here because the numbers are actually for
-+                       * port of the root complex virtual P2P bridge. But I want
-+                       * to avoid putting a node for it in the tree, so the numbers
-+                       * below are basically de-swizzled numbers.
-+                       * The real slot is on idsel 0, so the swizzling is 1:1
-+                       */
-+                      interrupt-map-mask = <0000 0 0 7>;
-+                      interrupt-map = <
-+                              0000 0 0 1 &UIC3 10 4 /* swizzled int A */
-+                              0000 0 0 2 &UIC3 11 4 /* swizzled int B */
-+                              0000 0 0 3 &UIC3 12 4 /* swizzled int C */
-+                              0000 0 0 4 &UIC3 13 4 /* swizzled int D */>;
-+              };
-+      };
-+};
---- a/arch/powerpc/boot/dts/haleakala.dts
-+++ b/arch/powerpc/boot/dts/haleakala.dts
-@@ -12,7 +12,7 @@
-       #address-cells = <1>;
-       #size-cells = <1>;
-       model = "amcc,haleakala";
--      compatible = "amcc,kilauea";
-+      compatible = "amcc,haleakala", "amcc,kilauea";
-       dcr-parent = <&/cpus/cpu@0>;
-       aliases {
-@@ -218,7 +218,7 @@
-                               mal-tx-channel = <0>;
-                               mal-rx-channel = <0>;
-                               cell-index = <0>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
---- a/arch/powerpc/boot/dts/katmai.dts
-+++ b/arch/powerpc/boot/dts/katmai.dts
-@@ -212,7 +212,7 @@
-                               mal-tx-channel = <0>;
-                               mal-rx-channel = <0>;
-                               cell-index = <0>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "gmii";
---- a/arch/powerpc/boot/dts/kilauea.dts
-+++ b/arch/powerpc/boot/dts/kilauea.dts
-@@ -219,7 +219,7 @@
-                               mal-tx-channel = <0>;
-                               mal-rx-channel = <0>;
-                               cell-index = <0>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
-@@ -247,7 +247,7 @@
-                               mal-tx-channel = <1>;
-                               mal-rx-channel = <1>;
-                               cell-index = <1>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
---- /dev/null
-+++ b/arch/powerpc/boot/dts/ksi8560.dts
-@@ -0,0 +1,267 @@
-+/*
-+ * Device Tree Source for Emerson KSI8560
-+ *
-+ * Author: Alexandr Smirnov <asmirnov@ru.mvista.com>
-+ *
-+ * Based on mpc8560ads.dts
-+ *
-+ * 2008 (c) MontaVista, Software, Inc.  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.
-+ *
-+ */
-+
-+/dts-v1/;
-+
-+/ {
-+      model = "KSI8560";
-+      compatible = "emerson,KSI8560";
-+      #address-cells = <1>;
-+      #size-cells = <1>;
-+
-+      aliases {
-+              ethernet0 = &enet0;
-+              ethernet1 = &enet1;
-+              ethernet2 = &enet2;
-+      };
-+
-+      cpus {
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+
-+              PowerPC,8560@0 {
-+                      device_type = "cpu";
-+                      reg = <0>;
-+                      d-cache-line-size = <32>;
-+                      i-cache-line-size = <32>;
-+                      d-cache-size = <0x8000>;                /* L1, 32K */
-+                      i-cache-size = <0x8000>;                /* L1, 32K */
-+                      timebase-frequency = <0>;               /* From U-boot */
-+                      bus-frequency = <0>;                    /* From U-boot */
-+                      clock-frequency = <0>;                  /* From U-boot */
-+              };
-+      };
-+
-+      memory {
-+              device_type = "memory";
-+              reg = <0x00000000 0x10000000>;                  /* Fixed by bootwrapper */
-+      };
-+
-+      soc@fdf00000 {
-+              #address-cells = <1>;
-+              #size-cells = <1>;
-+              device_type = "soc";
-+              ranges = <0x00000000 0xfdf00000 0x00100000>;
-+              bus-frequency = <0>;                            /* Fixed by bootwrapper */
-+
-+              memory-controller@2000 {
-+                      compatible = "fsl,8540-memory-controller";
-+                      reg = <0x2000 0x1000>;
-+                      interrupt-parent = <&MPIC>;
-+                      interrupts = <0x12 0x2>;
-+              };
-+
-+              l2-cache-controller@20000 {
-+                      compatible = "fsl,8540-l2-cache-controller";
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <0x20>;               /* 32 bytes */
-+                      cache-size = <0x40000>;                 /* L2, 256K */
-+                      interrupt-parent = <&MPIC>;
-+                      interrupts = <0x10 0x2>;
-+              };
-+
-+              i2c@3000 {
-+                      #address-cells = <1>;
-+                      #size-cells = <0>;
-+                      cell-index = <0>;
-+                      compatible = "fsl-i2c";
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <0x2b 0x2>;
-+                      interrupt-parent = <&MPIC>;
-+                      dfsrr;
-+              };
-+
-+              mdio@24520 {                                    /* For TSECs */
-+                      #address-cells = <1>;
-+                      #size-cells = <0>;
-+                      compatible = "fsl,gianfar-mdio";
-+                      reg = <0x24520 0x20>;
-+
-+                      PHY1: ethernet-phy@1 {
-+                              interrupt-parent = <&MPIC>;
-+                              reg = <0x1>;
-+                              device_type = "ethernet-phy";
-+                      };
-+
-+                      PHY2: ethernet-phy@2 {
-+                              interrupt-parent = <&MPIC>;
-+                              reg = <0x2>;
-+                              device_type = "ethernet-phy";
-+                      };
-+              };
-+
-+              enet0: ethernet@24000 {
-+                      device_type = "network";
-+                      model = "TSEC";
-+                      compatible = "gianfar";
-+                      reg = <0x24000 0x1000>;
-+                      /* Mac address filled in by bootwrapper */
-+                      local-mac-address = [ 00 00 00 00 00 00 ];
-+                      interrupts = <0x1d 0x2 0x1e 0x2 0x22 0x2>;
-+                      interrupt-parent = <&MPIC>;
-+                      phy-handle = <&PHY1>;
-+              };
-+
-+              enet1: ethernet@25000 {
-+                      device_type = "network";
-+                      model = "TSEC";
-+                      compatible = "gianfar";
-+                      reg = <0x25000 0x1000>;
-+                      /* Mac address filled in by bootwrapper */
-+                      local-mac-address = [ 00 00 00 00 00 00 ];
-+                      interrupts = <0x23 0x2 0x24 0x2 0x28 0x2>;
-+                      interrupt-parent = <&MPIC>;
-+                      phy-handle = <&PHY2>;
-+              };
-+
-+              MPIC: pic@40000 {
-+                      #address-cells = <0>;
-+                      #interrupt-cells = <2>;
-+                      interrupt-controller;
-+                      reg = <0x40000 0x40000>;
-+                      device_type = "open-pic";
-+              };
-+
-+              cpm@919c0 {
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      compatible = "fsl,mpc8560-cpm", "fsl,cpm2";
-+                      reg = <0x919c0 0x30>;
-+                      ranges;
-+
-+                      muram@80000 {
-+                              #address-cells = <1>;
-+                              #size-cells = <1>;
-+                              ranges = <0x0 0x80000 0x10000>;
-+
-+                              data@0 {
-+                                      compatible = "fsl,cpm-muram-data";
-+                                      reg = <0x0 0x4000 0x9000 0x2000>;
-+                              };
-+                      };
-+
-+                      brg@919f0 {
-+                              compatible = "fsl,mpc8560-brg",
-+                                           "fsl,cpm2-brg",
-+                                           "fsl,cpm-brg";
-+                              reg = <0x919f0 0x10 0x915f0 0x10>;
-+                              clock-frequency = <165000000>;  /* 166MHz */
-+                      };
-+
-+                      CPMPIC: pic@90c00 {
-+                              #address-cells = <0>;
-+                              #interrupt-cells = <2>;
-+                              interrupt-controller;
-+                              interrupts = <0x2e 0x2>;
-+                              interrupt-parent = <&MPIC>;
-+                              reg = <0x90c00 0x80>;
-+                              compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic";
-+                      };
-+
-+                      serial@91a00 {
-+                              device_type = "serial";
-+                              compatible = "fsl,mpc8560-scc-uart",
-+                                           "fsl,cpm2-scc-uart";
-+                              reg = <0x91a00 0x20 0x88000 0x100>;
-+                              fsl,cpm-brg = <1>;
-+                              fsl,cpm-command = <0x800000>;
-+                              current-speed = <0x1c200>;
-+                              interrupts = <0x28 0x8>;
-+                              interrupt-parent = <&CPMPIC>;
-+                      };
-+
-+                      serial@91a20 {
-+                              device_type = "serial";
-+                              compatible = "fsl,mpc8560-scc-uart",
-+                                           "fsl,cpm2-scc-uart";
-+                              reg = <0x91a20 0x20 0x88100 0x100>;
-+                              fsl,cpm-brg = <2>;
-+                              fsl,cpm-command = <0x4a00000>;
-+                              current-speed = <0x1c200>;
-+                              interrupts = <0x29 0x8>;
-+                              interrupt-parent = <&CPMPIC>;
-+                      };
-+
-+                      mdio@90d00 {                            /* For FCCs */
-+                              #address-cells = <1>;
-+                              #size-cells = <0>;
-+                              compatible = "fsl,cpm2-mdio-bitbang";
-+                              reg = <0x90d00 0x14>;
-+                              fsl,mdio-pin = <24>;
-+                              fsl,mdc-pin = <25>;
-+
-+                              PHY0: ethernet-phy@0 {
-+                                      interrupt-parent = <&MPIC>;
-+                                      reg = <0x0>;
-+                                      device_type = "ethernet-phy";
-+                              };
-+                      };
-+
-+                      enet2: ethernet@91300 {
-+                              device_type = "network";
-+                              compatible = "fsl,mpc8560-fcc-enet",
-+                                           "fsl,cpm2-fcc-enet";
-+                              reg = <0x91300 0x20 0x88400 0x100 0x91390 0x1>;
-+                              /* Mac address filled in by bootwrapper */
-+                              local-mac-address = [ 00 00 00 00 00 00 ];
-+                              fsl,cpm-command = <0x12000300>;
-+                              interrupts = <0x20 0x8>;
-+                              interrupt-parent = <&CPMPIC>;
-+                              phy-handle = <&PHY0>;
-+                      };
-+              };
-+      };
-+
-+      localbus@fdf05000 {
-+              #address-cells = <2>;
-+              #size-cells = <1>;
-+              compatible = "fsl,mpc8560-localbus";
-+              reg = <0xfdf05000 0x68>;
-+
-+              ranges = <0x0 0x0 0xe0000000 0x00800000
-+                        0x4 0x0 0xe8080000 0x00080000>;
-+
-+              flash@0,0 {
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      compatible = "jedec-flash";
-+                      reg = <0x0 0x0 0x800000>;
-+                      bank-width = <0x2>;
-+
-+                      partition@0 {
-+                              label = "Primary Kernel";
-+                              reg = <0x0 0x180000>;
-+                      };
-+                      partition@180000 {
-+                              label = "Primary Filesystem";
-+                              reg = <0x180000 0x580000>;
-+                      };
-+                      partition@700000 {
-+                              label = "Monitor";
-+                              reg = <0x300000 0x100000>;
-+                              read-only;
-+                      };
-+              };
-+
-+              cpld@4,0 {
-+                      compatible = "emerson,KSI8560-cpld";
-+                      reg = <0x4 0x0 0x80000>;
-+              };
-+      };
-+
-+
-+      chosen {
-+              linux,stdout-path = "/soc/cpm/serial@91a00";
-+      };
-+};
---- a/arch/powerpc/boot/dts/kuroboxHD.dts
-+++ b/arch/powerpc/boot/dts/kuroboxHD.dts
-@@ -7,6 +7,7 @@
-  * Based on sandpoint.dts
-  *
-  * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de>
-+ * Copyright 2008 Freescale Semiconductor, Inc.
-  *
-  * This file is licensed under
-  * the terms of the GNU General Public License version 2.  This program
-@@ -17,6 +18,8 @@ XXXX add flash parts, rtc, ??
-  */
-+/dts-v1/;
-+
- / {
-       model = "KuroboxHD";
-       compatible = "linkstation";
-@@ -35,19 +38,19 @@ XXXX add flash parts, rtc, ??
-               PowerPC,603e { /* Really 8241 */
-                       device_type = "cpu";
--                      reg = <0>;
--                      clock-frequency = <bebc200>;    /* Fixed by bootloader */
--                      timebase-frequency = <1743000>; /* Fixed by bootloader */
-+                      reg = <0x0>;
-+                      clock-frequency = <200000000>;  /* Fixed by bootloader */
-+                      timebase-frequency = <24391680>; /* Fixed by bootloader */
-                       bus-frequency = <0>;            /* Fixed by bootloader */
-                       /* Following required by dtc but not used */
--                      i-cache-size = <4000>;
--                      d-cache-size = <4000>;
-+                      i-cache-size = <0x4000>;
-+                      d-cache-size = <0x4000>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <00000000 04000000>;
-+              reg = <0x0 0x4000000>;
-       };
-       soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */
-@@ -56,26 +59,26 @@ XXXX add flash parts, rtc, ??
-               device_type = "soc";
-               compatible = "mpc10x";
-               store-gathering = <0>; /* 0 == off, !0 == on */
--              reg = <80000000 00100000>;
--              ranges = <80000000 80000000 70000000    /* pci mem space */
--                        fc000000 fc000000 00100000    /* EUMB */
--                        fe000000 fe000000 00c00000    /* pci i/o space */
--                        fec00000 fec00000 00300000    /* pci cfg regs */
--                        fef00000 fef00000 00100000>;  /* pci iack */
-+              reg = <0x80000000 0x100000>;
-+              ranges = <0x80000000 0x80000000 0x70000000      /* pci mem space */
-+                        0xfc000000 0xfc000000 0x100000        /* EUMB */
-+                        0xfe000000 0xfe000000 0xc00000        /* pci i/o space */
-+                        0xfec00000 0xfec00000 0x300000        /* pci cfg regs */
-+                        0xfef00000 0xfef00000 0x100000>;      /* pci iack */
-               i2c@80003000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <80003000 1000>;
-+                      reg = <0x80003000 0x1000>;
-                       interrupts = <5 2>;
-                       interrupt-parent = <&mpic>;
-                       rtc@32 {
-                               device_type = "rtc";
-                               compatible = "ricoh,rs5c372a";
--                              reg = <32>;
-+                              reg = <0x32>;
-                       };
-               };
-@@ -83,9 +86,9 @@ XXXX add flash parts, rtc, ??
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <80004500 8>;
--                      clock-frequency = <5d08d88>;
--                      current-speed = <2580>;
-+                      reg = <0x80004500 0x8>;
-+                      clock-frequency = <97553800>;
-+                      current-speed = <9600>;
-                       interrupts = <9 0>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -94,10 +97,10 @@ XXXX add flash parts, rtc, ??
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <80004600 8>;
--                      clock-frequency = <5d08d88>;
--                      current-speed = <e100>;
--                      interrupts = <a 0>;
-+                      reg = <0x80004600 0x8>;
-+                      clock-frequency = <97553800>;
-+                      current-speed = <57600>;
-+                      interrupts = <10 0>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -107,7 +110,7 @@ XXXX add flash parts, rtc, ??
-                       device_type = "open-pic";
-                       compatible = "chrp,open-pic";
-                       interrupt-controller;
--                      reg = <80040000 40000>;
-+                      reg = <0x80040000 0x40000>;
-               };
-               pci0: pci@fec00000 {
-@@ -116,29 +119,29 @@ XXXX add flash parts, rtc, ??
-                       #interrupt-cells = <1>;
-                       device_type = "pci";
-                       compatible = "mpc10x-pci";
--                      reg = <fec00000 400000>;
--                      ranges = <01000000 0        0 fe000000 0 00c00000
--                                02000000 0 80000000 80000000 0 70000000>;
--                      bus-range = <0 ff>;
--                      clock-frequency = <7f28155>;
-+                      reg = <0xfec00000 0x400000>;
-+                      ranges = <0x1000000 0x0        0x0 0xfe000000 0x0 0xc00000
-+                                0x2000000 0x0 0x80000000 0x80000000 0x0 0x70000000>;
-+                      bus-range = <0 255>;
-+                      clock-frequency = <133333333>;
-                       interrupt-parent = <&mpic>;
--                      interrupt-map-mask = <f800 0 0 7>;
-+                      interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-                       interrupt-map = <
-                               /* IDSEL 11 - IRQ0 ETH */
--                              5800 0 0 1 &mpic 0 1
--                              5800 0 0 2 &mpic 1 1
--                              5800 0 0 3 &mpic 2 1
--                              5800 0 0 4 &mpic 3 1
-+                              0x5800 0x0 0x0 0x1 &mpic 0x0 0x1
-+                              0x5800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                              0x5800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                              0x5800 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 12 - IRQ1 IDE0 */
--                              6000 0 0 1 &mpic 1 1
--                              6000 0 0 2 &mpic 2 1
--                              6000 0 0 3 &mpic 3 1
--                              6000 0 0 4 &mpic 0 1
-+                              0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                              0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                              0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                              0x6000 0x0 0x0 0x4 &mpic 0x0 0x1
-                               /* IDSEL 14 - IRQ3 USB2.0 */
--                              7000 0 0 1 &mpic 3 1
--                              7000 0 0 2 &mpic 3 1
--                              7000 0 0 3 &mpic 3 1
--                              7000 0 0 4 &mpic 3 1
-+                              0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                              0x7000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                              0x7000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                              0x7000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       >;
-               };
-       };
---- a/arch/powerpc/boot/dts/kuroboxHG.dts
-+++ b/arch/powerpc/boot/dts/kuroboxHG.dts
-@@ -7,6 +7,7 @@
-  * Based on sandpoint.dts
-  *
-  * 2006 (c) G. Liakhovetski <g.liakhovetski@gmx.de>
-+ * Copyright 2008 Freescale Semiconductor, Inc.
-  *
-  * This file is licensed under
-  * the terms of the GNU General Public License version 2.  This program
-@@ -17,6 +18,8 @@ XXXX add flash parts, rtc, ??
-  */
-+/dts-v1/;
-+
- / {
-       model = "KuroboxHG";
-       compatible = "linkstation";
-@@ -35,19 +38,19 @@ XXXX add flash parts, rtc, ??
-               PowerPC,603e { /* Really 8241 */
-                       device_type = "cpu";
--                      reg = <0>;
--                      clock-frequency = <fdad680>;    /* Fixed by bootloader */
--                      timebase-frequency = <1F04000>; /* Fixed by bootloader */
-+                      reg = <0x0>;
-+                      clock-frequency = <266000000>;  /* Fixed by bootloader */
-+                      timebase-frequency = <32522240>; /* Fixed by bootloader */
-                       bus-frequency = <0>;            /* Fixed by bootloader */
-                       /* Following required by dtc but not used */
--                      i-cache-size = <4000>;
--                      d-cache-size = <4000>;
-+                      i-cache-size = <0x4000>;
-+                      d-cache-size = <0x4000>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <00000000 08000000>;
-+              reg = <0x0 0x8000000>;
-       };
-       soc10x { /* AFAICT need to make soc for 8245's uarts to be defined */
-@@ -56,26 +59,26 @@ XXXX add flash parts, rtc, ??
-               device_type = "soc";
-               compatible = "mpc10x";
-               store-gathering = <0>; /* 0 == off, !0 == on */
--              reg = <80000000 00100000>;
--              ranges = <80000000 80000000 70000000    /* pci mem space */
--                        fc000000 fc000000 00100000    /* EUMB */
--                        fe000000 fe000000 00c00000    /* pci i/o space */
--                        fec00000 fec00000 00300000    /* pci cfg regs */
--                        fef00000 fef00000 00100000>;  /* pci iack */
-+              reg = <0x80000000 0x100000>;
-+              ranges = <0x80000000 0x80000000 0x70000000      /* pci mem space */
-+                        0xfc000000 0xfc000000 0x100000        /* EUMB */
-+                        0xfe000000 0xfe000000 0xc00000        /* pci i/o space */
-+                        0xfec00000 0xfec00000 0x300000        /* pci cfg regs */
-+                        0xfef00000 0xfef00000 0x100000>;      /* pci iack */
-               i2c@80003000 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <80003000 1000>;
-+                      reg = <0x80003000 0x1000>;
-                       interrupts = <5 2>;
-                       interrupt-parent = <&mpic>;
-                       rtc@32 {
-                               device_type = "rtc";
-                               compatible = "ricoh,rs5c372a";
--                              reg = <32>;
-+                              reg = <0x32>;
-                       };
-               };
-@@ -83,9 +86,9 @@ XXXX add flash parts, rtc, ??
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <80004500 8>;
--                      clock-frequency = <7c044a8>;
--                      current-speed = <2580>;
-+                      reg = <0x80004500 0x8>;
-+                      clock-frequency = <130041000>;
-+                      current-speed = <9600>;
-                       interrupts = <9 0>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -94,10 +97,10 @@ XXXX add flash parts, rtc, ??
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <80004600 8>;
--                      clock-frequency = <7c044a8>;
--                      current-speed = <e100>;
--                      interrupts = <a 0>;
-+                      reg = <0x80004600 0x8>;
-+                      clock-frequency = <130041000>;
-+                      current-speed = <57600>;
-+                      interrupts = <10 0>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -107,7 +110,7 @@ XXXX add flash parts, rtc, ??
-                       device_type = "open-pic";
-                       compatible = "chrp,open-pic";
-                       interrupt-controller;
--                      reg = <80040000 40000>;
-+                      reg = <0x80040000 0x40000>;
-               };
-               pci0: pci@fec00000 {
-@@ -116,29 +119,29 @@ XXXX add flash parts, rtc, ??
-                       #interrupt-cells = <1>;
-                       device_type = "pci";
-                       compatible = "mpc10x-pci";
--                      reg = <fec00000 400000>;
--                      ranges = <01000000 0        0 fe000000 0 00c00000
--                                02000000 0 80000000 80000000 0 70000000>;
--                      bus-range = <0 ff>;
--                      clock-frequency = <7f28155>;
-+                      reg = <0xfec00000 0x400000>;
-+                      ranges = <0x1000000 0x0        0x0 0xfe000000 0x0 0xc00000
-+                                0x2000000 0x0 0x80000000 0x80000000 0x0 0x70000000>;
-+                      bus-range = <0 255>;
-+                      clock-frequency = <133333333>;
-                       interrupt-parent = <&mpic>;
--                      interrupt-map-mask = <f800 0 0 7>;
-+                      interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-                       interrupt-map = <
-                               /* IDSEL 11 - IRQ0 ETH */
--                              5800 0 0 1 &mpic 0 1
--                              5800 0 0 2 &mpic 1 1
--                              5800 0 0 3 &mpic 2 1
--                              5800 0 0 4 &mpic 3 1
-+                              0x5800 0x0 0x0 0x1 &mpic 0x0 0x1
-+                              0x5800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                              0x5800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                              0x5800 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 12 - IRQ1 IDE0 */
--                              6000 0 0 1 &mpic 1 1
--                              6000 0 0 2 &mpic 2 1
--                              6000 0 0 3 &mpic 3 1
--                              6000 0 0 4 &mpic 0 1
-+                              0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                              0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                              0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                              0x6000 0x0 0x0 0x4 &mpic 0x0 0x1
-                               /* IDSEL 14 - IRQ3 USB2.0 */
--                              7000 0 0 1 &mpic 3 1
--                              7000 0 0 2 &mpic 3 1
--                              7000 0 0 3 &mpic 3 1
--                              7000 0 0 4 &mpic 3 1
-+                              0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                              0x7000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                              0x7000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                              0x7000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       >;
-               };
-       };
---- a/arch/powerpc/boot/dts/makalu.dts
-+++ b/arch/powerpc/boot/dts/makalu.dts
-@@ -219,7 +219,7 @@
-                               mal-tx-channel = <0>;
-                               mal-rx-channel = <0>;
-                               cell-index = <0>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
-@@ -247,7 +247,7 @@
-                               mal-tx-channel = <1>;
-                               mal-rx-channel = <1>;
-                               cell-index = <1>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
---- a/arch/powerpc/boot/dts/mpc7448hpc2.dts
-+++ b/arch/powerpc/boot/dts/mpc7448hpc2.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC7448HPC2 (Taiga) board Device Tree Source
-  *
-- * Copyright 2006 Freescale Semiconductor Inc.
-+ * Copyright 2006, 2008 Freescale Semiconductor Inc.
-  * 2006 Roy Zang <Roy Zang at freescale.com>.
-  *
-  * This program is free software; you can redistribute  it and/or modify it
-@@ -10,6 +10,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "mpc7448hpc2";
-@@ -23,11 +24,11 @@
-                               
-               PowerPC,7448@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K bytes
--                      i-cache-size = <8000>;          // L1, 32K bytes
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K bytes
-+                      i-cache-size = <0x8000>;                // L1, 32K bytes
-                       timebase-frequency = <0>;       // 33 MHz, from uboot
-                       clock-frequency = <0>;          // From U-Boot
-                       bus-frequency = <0>;            // From U-Boot
-@@ -36,7 +37,7 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 20000000        // DDR2   512M at 0
-+              reg = <0x0 0x20000000   // DDR2   512M at 0
-                      >;
-       };
-@@ -44,14 +45,14 @@
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "tsi-bridge";
--              ranges = <00000000 c0000000 00010000>;
--              reg = <c0000000 00010000>;
-+              ranges = <0x0 0xc0000000 0x10000>;
-+              reg = <0xc0000000 0x10000>;
-               bus-frequency = <0>;
-               i2c@7000 {
-                       interrupt-parent = <&mpic>;
--                      interrupts = <E 0>;
--                      reg = <7000 400>;
-+                      interrupts = <14 0>;
-+                      reg = <0x7000 0x400>;
-                       device_type = "i2c";
-                       compatible  = "tsi108-i2c";
-               };
-@@ -59,20 +60,20 @@
-               MDIO: mdio@6000 {
-                       device_type = "mdio";
-                       compatible = "tsi108-mdio";
--                      reg = <6000 50>;
-+                      reg = <0x6000 0x50>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       phy8: ethernet-phy@8 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <2 1>;
--                              reg = <8>;
-+                              reg = <0x8>;
-                       };
-                       phy9: ethernet-phy@9 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <2 1>;
--                              reg = <9>;
-+                              reg = <0x9>;
-                       };
-               };
-@@ -82,9 +83,9 @@
-                       #size-cells = <0>;
-                       device_type = "network";
-                       compatible = "tsi108-ethernet";
--                      reg = <6000 200>;
-+                      reg = <0x6000 0x200>;
-                       address = [ 00 06 D2 00 00 01 ];
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-                       interrupt-parent = <&mpic>;
-                       mdio-handle = <&MDIO>;
-                       phy-handle = <&phy8>;
-@@ -96,9 +97,9 @@
-                       #size-cells = <0>;
-                       device_type = "network";
-                       compatible = "tsi108-ethernet";
--                      reg = <6400 200>;
-+                      reg = <0x6400 0x200>;
-                       address = [ 00 06 D2 00 00 02 ];
--                      interrupts = <11 2>;
-+                      interrupts = <17 2>;
-                       interrupt-parent = <&mpic>;
-                       mdio-handle = <&MDIO>;
-                       phy-handle = <&phy9>;
-@@ -107,18 +108,18 @@
-               serial@7808 {
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <7808 200>;
--                      clock-frequency = <3f6b5a00>;
--                      interrupts = <c 0>;
-+                      reg = <0x7808 0x200>;
-+                      clock-frequency = <1064000000>;
-+                      interrupts = <12 0>;
-                       interrupt-parent = <&mpic>;
-               };
-               serial@7c08 {
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <7c08 200>;
--                      clock-frequency = <3f6b5a00>;
--                      interrupts = <d 0>;
-+                      reg = <0x7c08 0x200>;
-+                      clock-frequency = <1064000000>;
-+                      interrupts = <13 0>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -127,7 +128,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <7400 400>;
-+                      reg = <0x7400 0x400>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                               big-endian;
-@@ -138,39 +139,39 @@
-                       #interrupt-cells = <1>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
--                      reg = <1000 1000>;
-+                      reg = <0x1000 0x1000>;
-                       bus-range = <0 0>;
--                      ranges = <02000000 0 e0000000 e0000000 0 1A000000       
--                                01000000 0 00000000 fa000000 0 00010000>;
--                      clock-frequency = <7f28154>;
-+                      ranges = <0x2000000 0x0 0xe0000000 0xe0000000 0x0 0x1a000000    
-+                                0x1000000 0x0 0x0 0xfa000000 0x0 0x10000>;
-+                      clock-frequency = <133333332>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <17 2>;
--                      interrupt-map-mask = <f800 0 0 7>;
-+                      interrupts = <23 2>;
-+                      interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-                       interrupt-map = <
-                               /* IDSEL 0x11 */
--                              0800 0 0 1 &RT0 24 0
--                              0800 0 0 2 &RT0 25 0
--                              0800 0 0 3 &RT0 26 0
--                              0800 0 0 4 &RT0 27 0
-+                              0x800 0x0 0x0 0x1 &RT0 0x24 0x0
-+                              0x800 0x0 0x0 0x2 &RT0 0x25 0x0
-+                              0x800 0x0 0x0 0x3 &RT0 0x26 0x0
-+                              0x800 0x0 0x0 0x4 &RT0 0x27 0x0
-                               /* IDSEL 0x12 */
--                              1000 0 0 1 &RT0 25 0
--                              1000 0 0 2 &RT0 26 0
--                              1000 0 0 3 &RT0 27 0
--                              1000 0 0 4 &RT0 24 0
-+                              0x1000 0x0 0x0 0x1 &RT0 0x25 0x0
-+                              0x1000 0x0 0x0 0x2 &RT0 0x26 0x0
-+                              0x1000 0x0 0x0 0x3 &RT0 0x27 0x0
-+                              0x1000 0x0 0x0 0x4 &RT0 0x24 0x0
-                               /* IDSEL 0x13 */
--                              1800 0 0 1 &RT0 26 0
--                              1800 0 0 2 &RT0 27 0
--                              1800 0 0 3 &RT0 24 0
--                              1800 0 0 4 &RT0 25 0
-+                              0x1800 0x0 0x0 0x1 &RT0 0x26 0x0
-+                              0x1800 0x0 0x0 0x2 &RT0 0x27 0x0
-+                              0x1800 0x0 0x0 0x3 &RT0 0x24 0x0
-+                              0x1800 0x0 0x0 0x4 &RT0 0x25 0x0
-                               /* IDSEL 0x14 */
--                              2000 0 0 1 &RT0 27 0
--                              2000 0 0 2 &RT0 24 0
--                              2000 0 0 3 &RT0 25 0
--                              2000 0 0 4 &RT0 26 0
-+                              0x2000 0x0 0x0 0x1 &RT0 0x27 0x0
-+                              0x2000 0x0 0x0 0x2 &RT0 0x24 0x0
-+                              0x2000 0x0 0x0 0x3 &RT0 0x25 0x0
-+                              0x2000 0x0 0x0 0x4 &RT0 0x26 0x0
-                               >;
-                       RT0: router@1180 {
-@@ -180,7 +181,7 @@
-                               #address-cells = <0>;
-                               #interrupt-cells = <2>;
-                               big-endian;
--                              interrupts = <17 2>;
-+                              interrupts = <23 2>;
-                               interrupt-parent = <&mpic>;
-                       };
-               };
---- a/arch/powerpc/boot/dts/mpc8272ads.dts
-+++ b/arch/powerpc/boot/dts/mpc8272ads.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8272 ADS Device Tree Source
-  *
-- * Copyright 2005 Freescale Semiconductor Inc.
-+ * Copyright 2005,2008 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 as published by the
-@@ -9,6 +9,8 @@
-  * option) any later version.
-  */
-+/dts-v1/;
-+
- / {
-       model = "MPC8272ADS";
-       compatible = "fsl,mpc8272ads";
-@@ -21,11 +23,11 @@
-               PowerPC,8272@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <d#32>;
--                      i-cache-line-size = <d#32>;
--                      d-cache-size = <d#16384>;
--                      i-cache-size = <d#16384>;
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;
-+                      i-cache-line-size = <32>;
-+                      d-cache-size = <16384>;
-+                      i-cache-size = <16384>;
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
-@@ -34,7 +36,7 @@
-       memory {
-               device_type = "memory";
--              reg = <0 0>;
-+              reg = <0x0 0x0>;
-       };
-       localbus@f0010100 {
-@@ -42,21 +44,21 @@
-                            "fsl,pq2-localbus";
-               #address-cells = <2>;
-               #size-cells = <1>;
--              reg = <f0010100 40>;
-+              reg = <0xf0010100 0x40>;
--              ranges = <0 0 fe000000 02000000
--                        1 0 f4500000 00008000
--                        3 0 f8200000 00008000>;
-+              ranges = <0x0 0x0 0xfe000000 0x2000000
-+                        0x1 0x0 0xf4500000 0x8000
-+                        0x3 0x0 0xf8200000 0x8000>;
-               flash@0,0 {
-                       compatible = "jedec-flash";
--                      reg = <0 0 2000000>;
-+                      reg = <0x0 0x0 0x2000000>;
-                       bank-width = <4>;
-                       device-width = <1>;
-               };
-               board-control@1,0 {
--                      reg = <1 0 20>;
-+                      reg = <0x1 0x0 0x20>;
-                       compatible = "fsl,mpc8272ads-bcsr";
-               };
-@@ -65,46 +67,46 @@
-                                    "fsl,pq2ads-pci-pic";
-                       #interrupt-cells = <1>;
-                       interrupt-controller;
--                      reg = <3 0 8>;
-+                      reg = <0x3 0x0 0x8>;
-                       interrupt-parent = <&PIC>;
--                      interrupts = <14 8>;
-+                      interrupts = <20 8>;
-               };
-       };
-       pci@f0010800 {
-               device_type = "pci";
--              reg = <f0010800 10c f00101ac 8 f00101c4 8>;
-+              reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>;
-               compatible = "fsl,mpc8272-pci", "fsl,pq2-pci";
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              clock-frequency = <d#66666666>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              clock-frequency = <66666666>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                                /* IDSEL 0x16 */
--                               b000 0 0 1 &PCI_PIC 0
--                               b000 0 0 2 &PCI_PIC 1
--                               b000 0 0 3 &PCI_PIC 2
--                               b000 0 0 4 &PCI_PIC 3
-+                               0xb000 0x0 0x0 0x1 &PCI_PIC 0
-+                               0xb000 0x0 0x0 0x2 &PCI_PIC 1
-+                               0xb000 0x0 0x0 0x3 &PCI_PIC 2
-+                               0xb000 0x0 0x0 0x4 &PCI_PIC 3
-                                /* IDSEL 0x17 */
--                               b800 0 0 1 &PCI_PIC 4
--                               b800 0 0 2 &PCI_PIC 5
--                               b800 0 0 3 &PCI_PIC 6
--                               b800 0 0 4 &PCI_PIC 7
-+                               0xb800 0x0 0x0 0x1 &PCI_PIC 4
-+                               0xb800 0x0 0x0 0x2 &PCI_PIC 5
-+                               0xb800 0x0 0x0 0x3 &PCI_PIC 6
-+                               0xb800 0x0 0x0 0x4 &PCI_PIC 7
-                                /* IDSEL 0x18 */
--                               c000 0 0 1 &PCI_PIC 8
--                               c000 0 0 2 &PCI_PIC 9
--                               c000 0 0 3 &PCI_PIC a
--                               c000 0 0 4 &PCI_PIC b>;
-+                               0xc000 0x0 0x0 0x1 &PCI_PIC 8
-+                               0xc000 0x0 0x0 0x2 &PCI_PIC 9
-+                               0xc000 0x0 0x0 0x3 &PCI_PIC 10
-+                               0xc000 0x0 0x0 0x4 &PCI_PIC 11>;
-               interrupt-parent = <&PIC>;
--              interrupts = <12 8>;
--              ranges = <42000000 0 80000000 80000000 0 20000000
--                        02000000 0 a0000000 a0000000 0 20000000
--                        01000000 0 00000000 f6000000 0 02000000>;
-+              interrupts = <18 8>;
-+              ranges = <0x42000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xf6000000 0x0 0x2000000>;
-       };
-       soc@f0000000 {
-@@ -112,26 +114,26 @@
-               #size-cells = <1>;
-               device_type = "soc";
-               compatible = "fsl,mpc8272", "fsl,pq2-soc";
--              ranges = <00000000 f0000000 00053000>;
-+              ranges = <0x0 0xf0000000 0x53000>;
-               // Temporary -- will go away once kernel uses ranges for get_immrbase().
--              reg = <f0000000 00053000>;
-+              reg = <0xf0000000 0x53000>;
-               cpm@119c0 {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc8272-cpm", "fsl,cpm2";
--                      reg = <119c0 30>;
-+                      reg = <0x119c0 0x30>;
-                       ranges;
-                       muram@0 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 0 10000>;
-+                              ranges = <0x0 0x0 0x10000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 2000 9800 800>;
-+                                      reg = <0x0 0x2000 0x9800 0x800>;
-                               };
-                       };
-@@ -139,29 +141,29 @@
-                               compatible = "fsl,mpc8272-brg",
-                                            "fsl,cpm2-brg",
-                                            "fsl,cpm-brg";
--                              reg = <119f0 10 115f0 10>;
-+                              reg = <0x119f0 0x10 0x115f0 0x10>;
-                       };
-                       serial@11a00 {
-                               device_type = "serial";
-                               compatible = "fsl,mpc8272-scc-uart",
-                                            "fsl,cpm2-scc-uart";
--                              reg = <11a00 20 8000 100>;
--                              interrupts = <28 8>;
-+                              reg = <0x11a00 0x20 0x8000 0x100>;
-+                              interrupts = <40 8>;
-                               interrupt-parent = <&PIC>;
-                               fsl,cpm-brg = <1>;
--                              fsl,cpm-command = <00800000>;
-+                              fsl,cpm-command = <0x800000>;
-                       };
-                       serial@11a60 {
-                               device_type = "serial";
-                               compatible = "fsl,mpc8272-scc-uart",
-                                            "fsl,cpm2-scc-uart";
--                              reg = <11a60 20 8300 100>;
--                              interrupts = <2b 8>;
-+                              reg = <0x11a60 0x20 0x8300 0x100>;
-+                              interrupts = <43 8>;
-                               interrupt-parent = <&PIC>;
-                               fsl,cpm-brg = <4>;
--                              fsl,cpm-command = <0ce00000>;
-+                              fsl,cpm-command = <0xce00000>;
-                       };
-                       mdio@10d40 {
-@@ -169,23 +171,23 @@
-                               compatible = "fsl,mpc8272ads-mdio-bitbang",
-                                            "fsl,mpc8272-mdio-bitbang",
-                                            "fsl,cpm2-mdio-bitbang";
--                              reg = <10d40 14>;
-+                              reg = <0x10d40 0x14>;
-                               #address-cells = <1>;
-                               #size-cells = <0>;
--                              fsl,mdio-pin = <12>;
--                              fsl,mdc-pin = <13>;
-+                              fsl,mdio-pin = <18>;
-+                              fsl,mdc-pin = <19>;
-                               PHY0: ethernet-phy@0 {
-                                       interrupt-parent = <&PIC>;
--                                      interrupts = <17 8>;
--                                      reg = <0>;
-+                                      interrupts = <23 8>;
-+                                      reg = <0x0>;
-                                       device_type = "ethernet-phy";
-                               };
-                               PHY1: ethernet-phy@1 {
-                                       interrupt-parent = <&PIC>;
--                                      interrupts = <17 8>;
--                                      reg = <3>;
-+                                      interrupts = <23 8>;
-+                                      reg = <0x3>;
-                                       device_type = "ethernet-phy";
-                               };
-                       };
-@@ -194,33 +196,33 @@
-                               device_type = "network";
-                               compatible = "fsl,mpc8272-fcc-enet",
-                                            "fsl,cpm2-fcc-enet";
--                              reg = <11300 20 8400 100 11390 1>;
-+                              reg = <0x11300 0x20 0x8400 0x100 0x11390 0x1>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
--                              interrupts = <20 8>;
-+                              interrupts = <32 8>;
-                               interrupt-parent = <&PIC>;
-                               phy-handle = <&PHY0>;
-                               linux,network-index = <0>;
--                              fsl,cpm-command = <12000300>;
-+                              fsl,cpm-command = <0x12000300>;
-                       };
-                       ethernet@11320 {
-                               device_type = "network";
-                               compatible = "fsl,mpc8272-fcc-enet",
-                                            "fsl,cpm2-fcc-enet";
--                              reg = <11320 20 8500 100 113b0 1>;
-+                              reg = <0x11320 0x20 0x8500 0x100 0x113b0 0x1>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
--                              interrupts = <21 8>;
-+                              interrupts = <33 8>;
-                               interrupt-parent = <&PIC>;
-                               phy-handle = <&PHY1>;
-                               linux,network-index = <1>;
--                              fsl,cpm-command = <16200300>;
-+                              fsl,cpm-command = <0x16200300>;
-                       };
-               };
-               PIC: interrupt-controller@10c00 {
-                       #interrupt-cells = <2>;
-                       interrupt-controller;
--                      reg = <10c00 80>;
-+                      reg = <0x10c00 0x80>;
-                       compatible = "fsl,mpc8272-pic", "fsl,cpm2-pic";
-               };
-@@ -232,14 +234,14 @@
-                                    "fsl,talitos-sec2",
-                                    "fsl,talitos",
-                                    "talitos";
--                      reg = <30000 10000>;
--                      interrupts = <b 8>;
-+                      reg = <0x30000 0x10000>;
-+                      interrupts = <11 8>;
-                       interrupt-parent = <&PIC>;
-                       num-channels = <4>;
--                      channel-fifo-len = <18>;
--                      exec-units-mask = <0000007e>;
-+                      channel-fifo-len = <24>;
-+                      exec-units-mask = <0x7e>;
- /* desc mask is for rev1.x, we need runtime fixup for >=2.x */
--                      descriptor-types-mask = <01010ebf>;
-+                      descriptor-types-mask = <0x1010ebf>;
-               };
-       };
---- a/arch/powerpc/boot/dts/mpc832x_mds.dts
-+++ b/arch/powerpc/boot/dts/mpc832x_mds.dts
-@@ -255,9 +255,7 @@
-               enet0: ucc@2200 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <3>;
--                      device-id = <3>;
-                       reg = <0x2200 0x200>;
-                       interrupts = <34>;
-                       interrupt-parent = <&qeic>;
-@@ -271,9 +269,7 @@
-               enet1: ucc@3200 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <4>;
--                      device-id = <4>;
-                       reg = <0x3200 0x200>;
-                       interrupts = <35>;
-                       interrupt-parent = <&qeic>;
-@@ -287,8 +283,7 @@
-               ucc@2400 {
-                       device_type = "serial";
-                       compatible = "ucc_uart";
--                      model = "UCC";
--                      device-id = <5>;        /* The UCC number, 1-7*/
-+                      cell-index = <5>;       /* The UCC number, 1-7*/
-                       port-number = <0>;      /* Which ttyQEx device */
-                       soft-uart;              /* We need Soft-UART */
-                       reg = <0x2400 0x200>;
---- a/arch/powerpc/boot/dts/mpc832x_rdb.dts
-+++ b/arch/powerpc/boot/dts/mpc832x_rdb.dts
-@@ -208,9 +208,7 @@
-               enet0: ucc@3000 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <2>;
--                      device-id = <2>;
-                       reg = <0x3000 0x200>;
-                       interrupts = <33>;
-                       interrupt-parent = <&qeic>;
-@@ -224,9 +222,7 @@
-               enet1: ucc@2200 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <3>;
--                      device-id = <3>;
-                       reg = <0x2200 0x200>;
-                       interrupts = <34>;
-                       interrupt-parent = <&qeic>;
---- a/arch/powerpc/boot/dts/mpc836x_mds.dts
-+++ b/arch/powerpc/boot/dts/mpc836x_mds.dts
-@@ -257,9 +257,7 @@
-               enet0: ucc@2000 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <1>;
--                      device-id = <1>;
-                       reg = <0x2000 0x200>;
-                       interrupts = <32>;
-                       interrupt-parent = <&qeic>;
-@@ -274,9 +272,7 @@
-               enet1: ucc@3000 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <2>;
--                      device-id = <2>;
-                       reg = <0x3000 0x200>;
-                       interrupts = <33>;
-                       interrupt-parent = <&qeic>;
---- a/arch/powerpc/boot/dts/mpc8540ads.dts
-+++ b/arch/powerpc/boot/dts/mpc8540ads.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8540 ADS Device Tree Source
-  *
-- * Copyright 2006 Freescale Semiconductor Inc.
-+ * Copyright 2006, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC8540ADS";
-@@ -31,11 +32,11 @@
-               PowerPC,8540@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;       //  33 MHz, from uboot
-                       bus-frequency = <0>;    // 166 MHz
-                       clock-frequency = <0>;  // 825 MHz, from uboot
-@@ -44,31 +45,31 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 08000000>;      // 128M at 0x0
-+              reg = <0x0 0x8000000>;  // 128M at 0x0
-       };
-       soc8540@e0000000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 e0000000 00100000>;
--              reg = <e0000000 00100000>;      // CCSRBAR 1M
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x100000>;    // CCSRBAR 1M
-               bus-frequency = <0>;
-               memory-controller@2000 {
-                       compatible = "fsl,8540-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8540-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <40000>;   // L2, 256K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x40000>; // L2, 256K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -76,8 +77,8 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -86,24 +87,24 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy3: ethernet-phy@3 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <7 1>;
--                              reg = <3>;
-+                              reg = <0x3>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -113,9 +114,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-               };
-@@ -125,9 +126,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-               };
-@@ -137,9 +138,9 @@
-                       device_type = "network";
-                       model = "FEC";
-                       compatible = "gianfar";
--                      reg = <26000 1000>;
-+                      reg = <0x26000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <29 2>;
-+                      interrupts = <41 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy3>;
-               };
-@@ -148,9 +149,9 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;       // reg base, size
-+                      reg = <0x4500 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -158,9 +159,9 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;       // reg base, size
-+                      reg = <0x4600 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-               mpic: pic@40000 {
-@@ -168,7 +169,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                       big-endian;
-@@ -177,90 +178,90 @@
-       pci0: pci@e0008000 {
-               cell-index = <0>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x02 */
--                      1000 0 0 1 &mpic 1 1
--                      1000 0 0 2 &mpic 2 1
--                      1000 0 0 3 &mpic 3 1
--                      1000 0 0 4 &mpic 4 1
-+                      0x1000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0x1000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0x1000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0x1000 0x0 0x0 0x4 &mpic 0x4 0x1
-                       /* IDSEL 0x03 */
--                      1800 0 0 1 &mpic 4 1
--                      1800 0 0 2 &mpic 1 1
--                      1800 0 0 3 &mpic 2 1
--                      1800 0 0 4 &mpic 3 1
-+                      0x1800 0x0 0x0 0x1 &mpic 0x4 0x1
-+                      0x1800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x1800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x1800 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x04 */
--                      2000 0 0 1 &mpic 3 1
--                      2000 0 0 2 &mpic 4 1
--                      2000 0 0 3 &mpic 1 1
--                      2000 0 0 4 &mpic 2 1
-+                      0x2000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x2000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x2000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x2000 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x05 */
--                      2800 0 0 1 &mpic 2 1
--                      2800 0 0 2 &mpic 3 1
--                      2800 0 0 3 &mpic 4 1
--                      2800 0 0 4 &mpic 1 1
-+                      0x2800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x2800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x2800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x2800 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x0c */
--                      6000 0 0 1 &mpic 1 1
--                      6000 0 0 2 &mpic 2 1
--                      6000 0 0 3 &mpic 3 1
--                      6000 0 0 4 &mpic 4 1
-+                      0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0x6000 0x0 0x0 0x4 &mpic 0x4 0x1
-                       /* IDSEL 0x0d */
--                      6800 0 0 1 &mpic 4 1
--                      6800 0 0 2 &mpic 1 1
--                      6800 0 0 3 &mpic 2 1
--                      6800 0 0 4 &mpic 3 1
-+                      0x6800 0x0 0x0 0x1 &mpic 0x4 0x1
-+                      0x6800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x6800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x6800 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x0e */
--                      7000 0 0 1 &mpic 3 1
--                      7000 0 0 2 &mpic 4 1
--                      7000 0 0 3 &mpic 1 1
--                      7000 0 0 4 &mpic 2 1
-+                      0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x7000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x7000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x7000 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x0f */
--                      7800 0 0 1 &mpic 2 1
--                      7800 0 0 2 &mpic 3 1
--                      7800 0 0 3 &mpic 4 1
--                      7800 0 0 4 &mpic 1 1
-+                      0x7800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x7800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x7800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x7800 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x12 */
--                      9000 0 0 1 &mpic 1 1
--                      9000 0 0 2 &mpic 2 1
--                      9000 0 0 3 &mpic 3 1
--                      9000 0 0 4 &mpic 4 1
-+                      0x9000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0x9000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0x9000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0x9000 0x0 0x0 0x4 &mpic 0x4 0x1
-                       /* IDSEL 0x13 */
--                      9800 0 0 1 &mpic 4 1
--                      9800 0 0 2 &mpic 1 1
--                      9800 0 0 3 &mpic 2 1
--                      9800 0 0 4 &mpic 3 1
-+                      0x9800 0x0 0x0 0x1 &mpic 0x4 0x1
-+                      0x9800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x9800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x9800 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x14 */
--                      a000 0 0 1 &mpic 3 1
--                      a000 0 0 2 &mpic 4 1
--                      a000 0 0 3 &mpic 1 1
--                      a000 0 0 4 &mpic 2 1
-+                      0xa000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0xa000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0xa000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0xa000 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x15 */
--                      a800 0 0 1 &mpic 2 1
--                      a800 0 0 2 &mpic 3 1
--                      a800 0 0 3 &mpic 4 1
--                      a800 0 0 4 &mpic 1 1>;
-+                      0xa800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0x1 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
-+              interrupts = <24 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 e2000000 0 00100000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0008000 1000>;
-+              reg = <0xe0008000 0x1000>;
-               compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
-               device_type = "pci";
-       };
---- a/arch/powerpc/boot/dts/mpc8541cds.dts
-+++ b/arch/powerpc/boot/dts/mpc8541cds.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8541 CDS Device Tree Source
-  *
-- * Copyright 2006 Freescale Semiconductor Inc.
-+ * Copyright 2006, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC8541CDS";
-@@ -31,11 +32,11 @@
-               PowerPC,8541@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;       //  33 MHz, from uboot
-                       bus-frequency = <0>;    // 166 MHz
-                       clock-frequency = <0>;  // 825 MHz, from uboot
-@@ -44,31 +45,31 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 08000000>;      // 128M at 0x0
-+              reg = <0x0 0x8000000>;  // 128M at 0x0
-       };
-       soc8541@e0000000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 e0000000 00100000>;
--              reg = <e0000000 00001000>;      // CCSRBAR 1M
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x1000>;      // CCSRBAR 1M
-               bus-frequency = <0>;
-               memory-controller@2000 {
-                       compatible = "fsl,8541-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8541-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <40000>;   // L2, 256K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x40000>; // L2, 256K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -76,8 +77,8 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -86,18 +87,18 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -107,9 +108,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-               };
-@@ -119,9 +120,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-               };
-@@ -130,9 +131,9 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;       // reg base, size
-+                      reg = <0x4500 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -140,9 +141,9 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;       // reg base, size
-+                      reg = <0x4600 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -151,7 +152,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                         big-endian;
-@@ -161,17 +162,17 @@
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc8541-cpm", "fsl,cpm2";
--                      reg = <919c0 30>;
-+                      reg = <0x919c0 0x30>;
-                       ranges;
-                       muram@80000 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 80000 10000>;
-+                              ranges = <0x0 0x80000 0x10000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 2000 9000 1000>;
-+                                      reg = <0x0 0x2000 0x9000 0x1000>;
-                               };
-                       };
-@@ -179,16 +180,16 @@
-                               compatible = "fsl,mpc8541-brg",
-                                            "fsl,cpm2-brg",
-                                            "fsl,cpm-brg";
--                              reg = <919f0 10 915f0 10>;
-+                              reg = <0x919f0 0x10 0x915f0 0x10>;
-                       };
-                       cpmpic: pic@90c00 {
-                               interrupt-controller;
-                               #address-cells = <0>;
-                               #interrupt-cells = <2>;
--                              interrupts = <2e 2>;
-+                              interrupts = <46 2>;
-                               interrupt-parent = <&mpic>;
--                              reg = <90c00 80>;
-+                              reg = <0x90c00 0x80>;
-                               compatible = "fsl,mpc8541-cpm-pic", "fsl,cpm2-pic";
-                       };
-               };
-@@ -196,68 +197,68 @@
-       pci0: pci@e0008000 {
-               cell-index = <0>;
--              interrupt-map-mask = <1f800 0 0 7>;
-+              interrupt-map-mask = <0x1f800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x10 */
--                      08000 0 0 1 &mpic 0 1
--                      08000 0 0 2 &mpic 1 1
--                      08000 0 0 3 &mpic 2 1
--                      08000 0 0 4 &mpic 3 1
-+                      0x8000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x8000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x8000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x8000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x11 */
--                      08800 0 0 1 &mpic 0 1
--                      08800 0 0 2 &mpic 1 1
--                      08800 0 0 3 &mpic 2 1
--                      08800 0 0 4 &mpic 3 1
-+                      0x8800 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x8800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x8800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x8800 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x12 (Slot 1) */
--                      09000 0 0 1 &mpic 0 1
--                      09000 0 0 2 &mpic 1 1
--                      09000 0 0 3 &mpic 2 1
--                      09000 0 0 4 &mpic 3 1
-+                      0x9000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x9000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x9000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x13 (Slot 2) */
--                      09800 0 0 1 &mpic 1 1
--                      09800 0 0 2 &mpic 2 1
--                      09800 0 0 3 &mpic 3 1
--                      09800 0 0 4 &mpic 0 1
-+                      0x9800 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0x9800 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0x9800 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0x9800 0x0 0x0 0x4 &mpic 0x0 0x1
-                       /* IDSEL 0x14 (Slot 3) */
--                      0a000 0 0 1 &mpic 2 1
--                      0a000 0 0 2 &mpic 3 1
--                      0a000 0 0 3 &mpic 0 1
--                      0a000 0 0 4 &mpic 1 1
-+                      0xa000 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0xa000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0xa000 0x0 0x0 0x3 &mpic 0x0 0x1
-+                      0xa000 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x15 (Slot 4) */
--                      0a800 0 0 1 &mpic 3 1
--                      0a800 0 0 2 &mpic 0 1
--                      0a800 0 0 3 &mpic 1 1
--                      0a800 0 0 4 &mpic 2 1
-+                      0xa800 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0x0 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* Bus 1 (Tundra Bridge) */
-                       /* IDSEL 0x12 (ISA bridge) */
--                      19000 0 0 1 &mpic 0 1
--                      19000 0 0 2 &mpic 1 1
--                      19000 0 0 3 &mpic 2 1
--                      19000 0 0 4 &mpic 3 1>;
-+                      0x19000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x19000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x19000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x19000 0x0 0x0 0x4 &mpic 0x3 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
-+              interrupts = <24 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 e2000000 0 00100000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0008000 1000>;
-+              reg = <0xe0008000 0x1000>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
-               i8259@19000 {
-                       interrupt-controller;
-                       device_type = "interrupt-controller";
--                      reg = <19000 0 0 0 1>;
-+                      reg = <0x19000 0x0 0x0 0x0 0x1>;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
-                       compatible = "chrp,iic";
-@@ -268,24 +269,24 @@
-       pci1: pci@e0009000 {
-               cell-index = <1>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x15 */
--                      a800 0 0 1 &mpic b 1
--                      a800 0 0 2 &mpic b 1
--                      a800 0 0 3 &mpic b 1
--                      a800 0 0 4 &mpic b 1>;
-+                      0xa800 0x0 0x0 0x1 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0xb 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <19 2>;
-+              interrupts = <25 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 a0000000 a0000000 0 20000000
--                        01000000 0 00000000 e3000000 0 00100000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe3000000 0x0 0x100000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0009000 1000>;
-+              reg = <0xe0009000 0x1000>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
-       };
---- a/arch/powerpc/boot/dts/mpc8544ds.dts
-+++ b/arch/powerpc/boot/dts/mpc8544ds.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8544 DS Device Tree Source
-  *
-- * Copyright 2007 Freescale Semiconductor Inc.
-+ * Copyright 2007, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC8544DS";
-       compatible = "MPC8544DS", "MPC85xxDS";
-@@ -27,17 +28,16 @@
-       };
-       cpus {
--              #cpus = <1>;
-               #address-cells = <1>;
-               #size-cells = <0>;
-               PowerPC,8544@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
-@@ -46,7 +46,7 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 00000000>;      // Filled by U-Boot
-+              reg = <0x0 0x0>;        // Filled by U-Boot
-       };
-       soc8544@e0000000 {
-@@ -54,24 +54,24 @@
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <00000000 e0000000 00100000>;
--              reg = <e0000000 00001000>;      // CCSRBAR 1M
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x1000>;      // CCSRBAR 1M
-               bus-frequency = <0>;            // Filled out by uboot.
-               memory-controller@2000 {
-                       compatible = "fsl,8544-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8544-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <40000>;   // L2, 256K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x40000>; // L2, 256K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -79,8 +79,8 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -90,8 +90,8 @@
-                       #size-cells = <0>;
-                       cell-index = <1>;
-                       compatible = "fsl-i2c";
--                      reg = <3100 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3100 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -100,30 +100,71 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
--                              interrupts = <a 1>;
--                              reg = <0>;
-+                              interrupts = <10 1>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
--                              interrupts = <a 1>;
--                              reg = <1>;
-+                              interrupts = <10 1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-+              dma@21300 {
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      compatible = "fsl,mpc8544-dma", "fsl,eloplus-dma";
-+                      reg = <0x21300 0x4>;
-+                      ranges = <0x0 0x21100 0x200>;
-+                      cell-index = <0>;
-+                      dma-channel@0 {
-+                              compatible = "fsl,mpc8544-dma-channel",
-+                                              "fsl,eloplus-dma-channel";
-+                              reg = <0x0 0x80>;
-+                              cell-index = <0>;
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <20 2>;
-+                      };
-+                      dma-channel@80 {
-+                              compatible = "fsl,mpc8544-dma-channel",
-+                                              "fsl,eloplus-dma-channel";
-+                              reg = <0x80 0x80>;
-+                              cell-index = <1>;
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <21 2>;
-+                      };
-+                      dma-channel@100 {
-+                              compatible = "fsl,mpc8544-dma-channel",
-+                                              "fsl,eloplus-dma-channel";
-+                              reg = <0x100 0x80>;
-+                              cell-index = <2>;
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <22 2>;
-+                      };
-+                      dma-channel@180 {
-+                              compatible = "fsl,mpc8544-dma-channel",
-+                                              "fsl,eloplus-dma-channel";
-+                              reg = <0x180 0x80>;
-+                              cell-index = <3>;
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <23 2>;
-+                      };
-+              };
-+
-               enet0: ethernet@24000 {
-                       cell-index = <0>;
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-                       phy-connection-type = "rgmii-id";
-@@ -134,9 +175,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <26000 1000>;
-+                      reg = <0x26000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1f 2 20 2 21 2>;
-+                      interrupts = <31 2 32 2 33 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-                       phy-connection-type = "rgmii-id";
-@@ -146,9 +187,9 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;
-+                      reg = <0x4500 0x100>;
-                       clock-frequency = <0>;
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -156,15 +197,15 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;
-+                      reg = <0x4600 0x100>;
-                       clock-frequency = <0>;
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-               global-utilities@e0000 {        //global utilities block
-                       compatible = "fsl,mpc8548-guts";
--                      reg = <e0000 1000>;
-+                      reg = <0xe0000 0x1000>;
-                       fsl,has-rstcr;
-               };
-@@ -173,7 +214,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                       big-endian;
-@@ -184,32 +225,32 @@
-               cell-index = <0>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x11 J17 Slot 1 */
--                      8800 0 0 1 &mpic 2 1
--                      8800 0 0 2 &mpic 3 1
--                      8800 0 0 3 &mpic 4 1
--                      8800 0 0 4 &mpic 1 1
-+                      0x8800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8800 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x12 J16 Slot 2 */
--                      9000 0 0 1 &mpic 3 1
--                      9000 0 0 2 &mpic 4 1
--                      9000 0 0 3 &mpic 2 1
--                      9000 0 0 4 &mpic 1 1>;
-+                      0x9000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x9000 0x0 0x0 0x4 &mpic 0x1 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 c0000000 c0000000 0 20000000
--                        01000000 0 00000000 e1000000 0 00010000>;
--              clock-frequency = <3f940aa>;
-+              interrupts = <24 2>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe1000000 0x0 0x10000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0008000 1000>;
-+              reg = <0xe0008000 0x1000>;
-       };
-       pci1: pcie@e0009000 {
-@@ -219,33 +260,33 @@
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0009000 1000>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 e1010000 0 00010000>;
--              clock-frequency = <1fca055>;
-+              reg = <0xe0009000 0x1000>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe1010000 0x0 0x10000>;
-+              clock-frequency = <33333333>;
-               interrupt-parent = <&mpic>;
--              interrupts = <1a 2>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupts = <26 2>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x0 */
--                      0000 0 0 1 &mpic 4 1
--                      0000 0 0 2 &mpic 5 1
--                      0000 0 0 3 &mpic 6 1
--                      0000 0 0 4 &mpic 7 1
-+                      0000 0x0 0x0 0x1 &mpic 0x4 0x1
-+                      0000 0x0 0x0 0x2 &mpic 0x5 0x1
-+                      0000 0x0 0x0 0x3 &mpic 0x6 0x1
-+                      0000 0x0 0x0 0x4 &mpic 0x7 0x1
-                       >;
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 80000000
--                                02000000 0 80000000
--                                0 20000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00010000>;
-+                      ranges = <0x2000000 0x0 0x80000000
-+                                0x2000000 0x0 0x80000000
-+                                0x0 0x20000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x10000>;
-               };
-       };
-@@ -256,33 +297,33 @@
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e000a000 1000>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 a0000000 a0000000 0 10000000
--                        01000000 0 00000000 e1020000 0 00010000>;
--              clock-frequency = <1fca055>;
-+              reg = <0xe000a000 0x1000>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x10000000
-+                        0x1000000 0x0 0x0 0xe1020000 0x0 0x10000>;
-+              clock-frequency = <33333333>;
-               interrupt-parent = <&mpic>;
--              interrupts = <19 2>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupts = <25 2>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x0 */
--                      0000 0 0 1 &mpic 0 1
--                      0000 0 0 2 &mpic 1 1
--                      0000 0 0 3 &mpic 2 1
--                      0000 0 0 4 &mpic 3 1
-+                      0000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       >;
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 a0000000
--                                02000000 0 a0000000
--                                0 10000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00010000>;
-+                      ranges = <0x2000000 0x0 0xa0000000
-+                                0x2000000 0x0 0xa0000000
-+                                0x0 0x10000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x10000>;
-               };
-       };
-@@ -293,72 +334,72 @@
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e000b000 1000>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 b0000000 b0000000 0 00100000
--                        01000000 0 00000000 b0100000 0 00100000>;
--              clock-frequency = <1fca055>;
-+              reg = <0xe000b000 0x1000>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xb0000000 0xb0000000 0x0 0x100000
-+                        0x1000000 0x0 0x0 0xb0100000 0x0 0x100000>;
-+              clock-frequency = <33333333>;
-               interrupt-parent = <&mpic>;
--              interrupts = <1b 2>;
--              interrupt-map-mask = <ff00 0 0 1>;
-+              interrupts = <27 2>;
-+              interrupt-map-mask = <0xff00 0x0 0x0 0x1>;
-               interrupt-map = <
-                       // IDSEL 0x1c  USB
--                      e000 0 0 1 &i8259 c 2
--                      e100 0 0 2 &i8259 9 2
--                      e200 0 0 3 &i8259 a 2
--                      e300 0 0 4 &i8259 b 2
-+                      0xe000 0x0 0x0 0x1 &i8259 0xc 0x2
-+                      0xe100 0x0 0x0 0x2 &i8259 0x9 0x2
-+                      0xe200 0x0 0x0 0x3 &i8259 0xa 0x2
-+                      0xe300 0x0 0x0 0x4 &i8259 0xb 0x2
-                       // IDSEL 0x1d  Audio
--                      e800 0 0 1 &i8259 6 2
-+                      0xe800 0x0 0x0 0x1 &i8259 0x6 0x2
-                       // IDSEL 0x1e Legacy
--                      f000 0 0 1 &i8259 7 2
--                      f100 0 0 1 &i8259 7 2
-+                      0xf000 0x0 0x0 0x1 &i8259 0x7 0x2
-+                      0xf100 0x0 0x0 0x1 &i8259 0x7 0x2
-                       // IDSEL 0x1f IDE/SATA
--                      f800 0 0 1 &i8259 e 2
--                      f900 0 0 1 &i8259 5 2
-+                      0xf800 0x0 0x0 0x1 &i8259 0xe 0x2
-+                      0xf900 0x0 0x0 0x1 &i8259 0x5 0x2
-               >;
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 b0000000
--                                02000000 0 b0000000
--                                0 00100000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00100000>;
-+                      ranges = <0x2000000 0x0 0xb0000000
-+                                0x2000000 0x0 0xb0000000
-+                                0x0 0x100000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x100000>;
-                       uli1575@0 {
--                              reg = <0 0 0 0 0>;
-+                              reg = <0x0 0x0 0x0 0x0 0x0>;
-                               #size-cells = <2>;
-                               #address-cells = <3>;
--                              ranges = <02000000 0 b0000000
--                                        02000000 0 b0000000
--                                        0 00100000
--
--                                        01000000 0 00000000
--                                        01000000 0 00000000
--                                        0 00100000>;
-+                              ranges = <0x2000000 0x0 0xb0000000
-+                                        0x2000000 0x0 0xb0000000
-+                                        0x0 0x100000
-+
-+                                        0x1000000 0x0 0x0
-+                                        0x1000000 0x0 0x0
-+                                        0x0 0x100000>;
-                               isa@1e {
-                                       device_type = "isa";
-                                       #interrupt-cells = <2>;
-                                       #size-cells = <1>;
-                                       #address-cells = <2>;
--                                      reg = <f000 0 0 0 0>;
--                                      ranges = <1 0
--                                                01000000 0 0
--                                                00001000>;
-+                                      reg = <0xf000 0x0 0x0 0x0 0x0>;
-+                                      ranges = <0x1 0x0
-+                                                0x1000000 0x0 0x0
-+                                                0x1000>;
-                                       interrupt-parent = <&i8259>;
-                                       i8259: interrupt-controller@20 {
--                                              reg = <1 20 2
--                                                     1 a0 2
--                                                     1 4d0 2>;
-+                                              reg = <0x1 0x20 0x2
-+                                                     0x1 0xa0 0x2
-+                                                     0x1 0x4d0 0x2>;
-                                               interrupt-controller;
-                                               device_type = "interrupt-controller";
-                                               #address-cells = <0>;
-@@ -371,28 +412,28 @@
-                                       i8042@60 {
-                                               #size-cells = <0>;
-                                               #address-cells = <1>;
--                                              reg = <1 60 1 1 64 1>;
--                                              interrupts = <1 3 c 3>;
-+                                              reg = <0x1 0x60 0x1 0x1 0x64 0x1>;
-+                                              interrupts = <1 3 12 3>;
-                                               interrupt-parent = <&i8259>;
-                                               keyboard@0 {
--                                                      reg = <0>;
-+                                                      reg = <0x0>;
-                                                       compatible = "pnpPNP,303";
-                                               };
-                                               mouse@1 {
--                                                      reg = <1>;
-+                                                      reg = <0x1>;
-                                                       compatible = "pnpPNP,f03";
-                                               };
-                                       };
-                                       rtc@70 {
-                                               compatible = "pnpPNP,b00";
--                                              reg = <1 70 2>;
-+                                              reg = <0x1 0x70 0x2>;
-                                       };
-                                       gpio@400 {
--                                              reg = <1 400 80>;
-+                                              reg = <0x1 0x400 0x80>;
-                                       };
-                               };
-                       };
---- a/arch/powerpc/boot/dts/mpc8548cds.dts
-+++ b/arch/powerpc/boot/dts/mpc8548cds.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8548 CDS Device Tree Source
-  *
-- * Copyright 2006 Freescale Semiconductor Inc.
-+ * Copyright 2006, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC8548CDS";
-@@ -36,11 +37,11 @@
-               PowerPC,8548@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;       //  33 MHz, from uboot
-                       bus-frequency = <0>;    // 166 MHz
-                       clock-frequency = <0>;  // 825 MHz, from uboot
-@@ -49,31 +50,31 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 08000000>;      // 128M at 0x0
-+              reg = <0x0 0x8000000>;  // 128M at 0x0
-       };
-       soc8548@e0000000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <00000000 e0000000 00100000>;
--              reg = <e0000000 00001000>;      // CCSRBAR
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x1000>;      // CCSRBAR
-               bus-frequency = <0>;
-               memory-controller@2000 {
-                       compatible = "fsl,8548-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8548-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <80000>;   // L2, 512K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x80000>; // L2, 512K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -81,8 +82,8 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -92,8 +93,8 @@
-                       #size-cells = <0>;
-                       cell-index = <1>;
-                       compatible = "fsl-i2c";
--                      reg = <3100 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3100 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -102,30 +103,30 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy2: ethernet-phy@2 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <2>;
-+                              reg = <0x2>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy3: ethernet-phy@3 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <3>;
-+                              reg = <0x3>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -135,9 +136,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-               };
-@@ -147,9 +148,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-               };
-@@ -160,9 +161,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <26000 1000>;
-+                      reg = <0x26000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1f 2 20 2 21 2>;
-+                      interrupts = <31 2 32 2 33 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy2>;
-               };
-@@ -172,9 +173,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <27000 1000>;
-+                      reg = <0x27000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <25 2 26 2 27 2>;
-+                      interrupts = <37 2 38 2 39 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy3>;
-               };
-@@ -184,9 +185,9 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;       // reg base, size
-+                      reg = <0x4500 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -194,15 +195,15 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;       // reg base, size
-+                      reg = <0x4600 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-               global-utilities@e0000 {        //global utilities reg
-                       compatible = "fsl,mpc8548-guts";
--                      reg = <e0000 1000>;
-+                      reg = <0xe0000 0x1000>;
-                       fsl,has-rstcr;
-               };
-@@ -211,7 +212,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                         big-endian;
-@@ -220,139 +221,139 @@
-       pci0: pci@e0008000 {
-               cell-index = <0>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x4 (PCIX Slot 2) */
--                      02000 0 0 1 &mpic 0 1
--                      02000 0 0 2 &mpic 1 1
--                      02000 0 0 3 &mpic 2 1
--                      02000 0 0 4 &mpic 3 1
-+                      0x2000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x2000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x2000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x2000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x5 (PCIX Slot 3) */
--                      02800 0 0 1 &mpic 1 1
--                      02800 0 0 2 &mpic 2 1
--                      02800 0 0 3 &mpic 3 1
--                      02800 0 0 4 &mpic 0 1
-+                      0x2800 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0x2800 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0x2800 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0x2800 0x0 0x0 0x4 &mpic 0x0 0x1
-                       /* IDSEL 0x6 (PCIX Slot 4) */
--                      03000 0 0 1 &mpic 2 1
--                      03000 0 0 2 &mpic 3 1
--                      03000 0 0 3 &mpic 0 1
--                      03000 0 0 4 &mpic 1 1
-+                      0x3000 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x3000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x3000 0x0 0x0 0x3 &mpic 0x0 0x1
-+                      0x3000 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x8 (PCIX Slot 5) */
--                      04000 0 0 1 &mpic 0 1
--                      04000 0 0 2 &mpic 1 1
--                      04000 0 0 3 &mpic 2 1
--                      04000 0 0 4 &mpic 3 1
-+                      0x4000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x4000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x4000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x4000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0xC (Tsi310 bridge) */
--                      06000 0 0 1 &mpic 0 1
--                      06000 0 0 2 &mpic 1 1
--                      06000 0 0 3 &mpic 2 1
--                      06000 0 0 4 &mpic 3 1
-+                      0x6000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x6000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x6000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x6000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x14 (Slot 2) */
--                      0a000 0 0 1 &mpic 0 1
--                      0a000 0 0 2 &mpic 1 1
--                      0a000 0 0 3 &mpic 2 1
--                      0a000 0 0 4 &mpic 3 1
-+                      0xa000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0xa000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0xa000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0xa000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x15 (Slot 3) */
--                      0a800 0 0 1 &mpic 1 1
--                      0a800 0 0 2 &mpic 2 1
--                      0a800 0 0 3 &mpic 3 1
--                      0a800 0 0 4 &mpic 0 1
-+                      0xa800 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0x0 0x1
-                       /* IDSEL 0x16 (Slot 4) */
--                      0b000 0 0 1 &mpic 2 1
--                      0b000 0 0 2 &mpic 3 1
--                      0b000 0 0 3 &mpic 0 1
--                      0b000 0 0 4 &mpic 1 1
-+                      0xb000 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0xb000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0xb000 0x0 0x0 0x3 &mpic 0x0 0x1
-+                      0xb000 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x18 (Slot 5) */
--                      0c000 0 0 1 &mpic 0 1
--                      0c000 0 0 2 &mpic 1 1
--                      0c000 0 0 3 &mpic 2 1
--                      0c000 0 0 4 &mpic 3 1
-+                      0xc000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0xc000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0xc000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0xc000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x1C (Tsi310 bridge PCI primary) */
--                      0E000 0 0 1 &mpic 0 1
--                      0E000 0 0 2 &mpic 1 1
--                      0E000 0 0 3 &mpic 2 1
--                      0E000 0 0 4 &mpic 3 1>;
-+                      0xe000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0xe000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0xe000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0xe000 0x0 0x0 0x4 &mpic 0x3 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
-+              interrupts = <24 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 80000000 80000000 0 10000000
--                        01000000 0 00000000 e2000000 0 00800000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x10000000
-+                        0x1000000 0x0 0x0 0xe2000000 0x0 0x800000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0008000 1000>;
-+              reg = <0xe0008000 0x1000>;
-               compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
-               device_type = "pci";
-               pci_bridge@1c {
--                      interrupt-map-mask = <f800 0 0 7>;
-+                      interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-                       interrupt-map = <
-                               /* IDSEL 0x00 (PrPMC Site) */
--                              0000 0 0 1 &mpic 0 1
--                              0000 0 0 2 &mpic 1 1
--                              0000 0 0 3 &mpic 2 1
--                              0000 0 0 4 &mpic 3 1
-+                              0000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                              0000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                              0000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                              0000 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 0x04 (VIA chip) */
--                              2000 0 0 1 &mpic 0 1
--                              2000 0 0 2 &mpic 1 1
--                              2000 0 0 3 &mpic 2 1
--                              2000 0 0 4 &mpic 3 1
-+                              0x2000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                              0x2000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                              0x2000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                              0x2000 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 0x05 (8139) */
--                              2800 0 0 1 &mpic 1 1
-+                              0x2800 0x0 0x0 0x1 &mpic 0x1 0x1
-                               /* IDSEL 0x06 (Slot 6) */
--                              3000 0 0 1 &mpic 2 1
--                              3000 0 0 2 &mpic 3 1
--                              3000 0 0 3 &mpic 0 1
--                              3000 0 0 4 &mpic 1 1
-+                              0x3000 0x0 0x0 0x1 &mpic 0x2 0x1
-+                              0x3000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                              0x3000 0x0 0x0 0x3 &mpic 0x0 0x1
-+                              0x3000 0x0 0x0 0x4 &mpic 0x1 0x1
-                               /* IDESL 0x07 (Slot 7) */
--                              3800 0 0 1 &mpic 3 1
--                              3800 0 0 2 &mpic 0 1
--                              3800 0 0 3 &mpic 1 1
--                              3800 0 0 4 &mpic 2 1>;
-+                              0x3800 0x0 0x0 0x1 &mpic 0x3 0x1
-+                              0x3800 0x0 0x0 0x2 &mpic 0x0 0x1
-+                              0x3800 0x0 0x0 0x3 &mpic 0x1 0x1
-+                              0x3800 0x0 0x0 0x4 &mpic 0x2 0x1>;
--                      reg = <e000 0 0 0 0>;
-+                      reg = <0xe000 0x0 0x0 0x0 0x0>;
-                       #interrupt-cells = <1>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
--                      ranges = <02000000 0 80000000
--                                02000000 0 80000000
--                                0 20000000
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00080000>;
--                      clock-frequency = <1fca055>;
-+                      ranges = <0x2000000 0x0 0x80000000
-+                                0x2000000 0x0 0x80000000
-+                                0x0 0x20000000
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x80000>;
-+                      clock-frequency = <33333333>;
-                       isa@4 {
-                               device_type = "isa";
-                               #interrupt-cells = <2>;
-                               #size-cells = <1>;
-                               #address-cells = <2>;
--                              reg = <2000 0 0 0 0>;
--                              ranges = <1 0 01000000 0 0 00001000>;
-+                              reg = <0x2000 0x0 0x0 0x0 0x0>;
-+                              ranges = <0x1 0x0 0x1000000 0x0 0x0 0x1000>;
-                               interrupt-parent = <&i8259>;
-                               i8259: interrupt-controller@20 {
-                                       interrupt-controller;
-                                       device_type = "interrupt-controller";
--                                      reg = <1 20 2
--                                             1 a0 2
--                                             1 4d0 2>;
-+                                      reg = <0x1 0x20 0x2
-+                                             0x1 0xa0 0x2
-+                                             0x1 0x4d0 0x2>;
-                                       #address-cells = <0>;
-                                       #interrupt-cells = <2>;
-                                       compatible = "chrp,iic";
-@@ -362,7 +363,7 @@
-                               rtc@70 {
-                                       compatible = "pnpPNP,b00";
--                                      reg = <1 70 2>;
-+                                      reg = <0x1 0x70 0x2>;
-                               };
-                       };
-               };
-@@ -370,64 +371,64 @@
-       pci1: pci@e0009000 {
-               cell-index = <1>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x15 */
--                      a800 0 0 1 &mpic b 1
--                      a800 0 0 2 &mpic 1 1
--                      a800 0 0 3 &mpic 2 1
--                      a800 0 0 4 &mpic 3 1>;
-+                      0xa800 0x0 0x0 0x1 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0x3 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <19 2>;
-+              interrupts = <25 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 90000000 90000000 0 10000000
--                        01000000 0 00000000 e2800000 0 00800000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0x90000000 0x90000000 0x0 0x10000000
-+                        0x1000000 0x0 0x0 0xe2800000 0x0 0x800000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0009000 1000>;
-+              reg = <0xe0009000 0x1000>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
-       };
-       pci2: pcie@e000a000 {
-               cell-index = <2>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x0 (PEX) */
--                      00000 0 0 1 &mpic 0 1
--                      00000 0 0 2 &mpic 1 1
--                      00000 0 0 3 &mpic 2 1
--                      00000 0 0 4 &mpic 3 1>;
-+                      00000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      00000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      00000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      00000 0x0 0x0 0x4 &mpic 0x3 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <1a 2>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 a0000000 a0000000 0 20000000
--                        01000000 0 00000000 e3000000 0 08000000>;
--              clock-frequency = <1fca055>;
-+              interrupts = <26 2>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe3000000 0x0 0x8000000>;
-+              clock-frequency = <33333333>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e000a000 1000>;
-+              reg = <0xe000a000 0x1000>;
-               compatible = "fsl,mpc8548-pcie";
-               device_type = "pci";
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 a0000000
--                                02000000 0 a0000000
--                                0 20000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 08000000>;
-+                      ranges = <0x2000000 0x0 0xa0000000
-+                                0x2000000 0x0 0xa0000000
-+                                0x0 0x20000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x8000000>;
-               };
-       };
- };
---- a/arch/powerpc/boot/dts/mpc8555cds.dts
-+++ b/arch/powerpc/boot/dts/mpc8555cds.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8555 CDS Device Tree Source
-  *
-- * Copyright 2006 Freescale Semiconductor Inc.
-+ * Copyright 2006, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC8555CDS";
-@@ -31,11 +32,11 @@
-               PowerPC,8555@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;       //  33 MHz, from uboot
-                       bus-frequency = <0>;    // 166 MHz
-                       clock-frequency = <0>;  // 825 MHz, from uboot
-@@ -44,31 +45,31 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 08000000>;      // 128M at 0x0
-+              reg = <0x0 0x8000000>;  // 128M at 0x0
-       };
-       soc8555@e0000000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 e0000000 00100000>;
--              reg = <e0000000 00001000>;      // CCSRBAR 1M
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x1000>;      // CCSRBAR 1M
-               bus-frequency = <0>;
-               memory-controller@2000 {
-                       compatible = "fsl,8555-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8555-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <40000>;   // L2, 256K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x40000>; // L2, 256K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -76,8 +77,8 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -86,18 +87,18 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -107,9 +108,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-               };
-@@ -119,9 +120,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-               };
-@@ -130,9 +131,9 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;       // reg base, size
-+                      reg = <0x4500 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -140,9 +141,9 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;       // reg base, size
-+                      reg = <0x4600 0x100>;   // reg base, size
-                       clock-frequency = <0>;  // should we fill in in uboot?
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -151,7 +152,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                         big-endian;
-@@ -161,17 +162,17 @@
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc8555-cpm", "fsl,cpm2";
--                      reg = <919c0 30>;
-+                      reg = <0x919c0 0x30>;
-                       ranges;
-                       muram@80000 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 80000 10000>;
-+                              ranges = <0x0 0x80000 0x10000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 2000 9000 1000>;
-+                                      reg = <0x0 0x2000 0x9000 0x1000>;
-                               };
-                       };
-@@ -179,16 +180,16 @@
-                               compatible = "fsl,mpc8555-brg",
-                                            "fsl,cpm2-brg",
-                                            "fsl,cpm-brg";
--                              reg = <919f0 10 915f0 10>;
-+                              reg = <0x919f0 0x10 0x915f0 0x10>;
-                       };
-                       cpmpic: pic@90c00 {
-                               interrupt-controller;
-                               #address-cells = <0>;
-                               #interrupt-cells = <2>;
--                              interrupts = <2e 2>;
-+                              interrupts = <46 2>;
-                               interrupt-parent = <&mpic>;
--                              reg = <90c00 80>;
-+                              reg = <0x90c00 0x80>;
-                               compatible = "fsl,mpc8555-cpm-pic", "fsl,cpm2-pic";
-                       };
-               };
-@@ -196,68 +197,68 @@
-       pci0: pci@e0008000 {
-               cell-index = <0>;
--              interrupt-map-mask = <1f800 0 0 7>;
-+              interrupt-map-mask = <0x1f800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x10 */
--                      08000 0 0 1 &mpic 0 1
--                      08000 0 0 2 &mpic 1 1
--                      08000 0 0 3 &mpic 2 1
--                      08000 0 0 4 &mpic 3 1
-+                      0x8000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x8000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x8000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x8000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x11 */
--                      08800 0 0 1 &mpic 0 1
--                      08800 0 0 2 &mpic 1 1
--                      08800 0 0 3 &mpic 2 1
--                      08800 0 0 4 &mpic 3 1
-+                      0x8800 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x8800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x8800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x8800 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x12 (Slot 1) */
--                      09000 0 0 1 &mpic 0 1
--                      09000 0 0 2 &mpic 1 1
--                      09000 0 0 3 &mpic 2 1
--                      09000 0 0 4 &mpic 3 1
-+                      0x9000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x9000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x9000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x9000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       /* IDSEL 0x13 (Slot 2) */
--                      09800 0 0 1 &mpic 1 1
--                      09800 0 0 2 &mpic 2 1
--                      09800 0 0 3 &mpic 3 1
--                      09800 0 0 4 &mpic 0 1
-+                      0x9800 0x0 0x0 0x1 &mpic 0x1 0x1
-+                      0x9800 0x0 0x0 0x2 &mpic 0x2 0x1
-+                      0x9800 0x0 0x0 0x3 &mpic 0x3 0x1
-+                      0x9800 0x0 0x0 0x4 &mpic 0x0 0x1
-                       /* IDSEL 0x14 (Slot 3) */
--                      0a000 0 0 1 &mpic 2 1
--                      0a000 0 0 2 &mpic 3 1
--                      0a000 0 0 3 &mpic 0 1
--                      0a000 0 0 4 &mpic 1 1
-+                      0xa000 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0xa000 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0xa000 0x0 0x0 0x3 &mpic 0x0 0x1
-+                      0xa000 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x15 (Slot 4) */
--                      0a800 0 0 1 &mpic 3 1
--                      0a800 0 0 2 &mpic 0 1
--                      0a800 0 0 3 &mpic 1 1
--                      0a800 0 0 4 &mpic 2 1
-+                      0xa800 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0x0 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* Bus 1 (Tundra Bridge) */
-                       /* IDSEL 0x12 (ISA bridge) */
--                      19000 0 0 1 &mpic 0 1
--                      19000 0 0 2 &mpic 1 1
--                      19000 0 0 3 &mpic 2 1
--                      19000 0 0 4 &mpic 3 1>;
-+                      0x19000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0x19000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0x19000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0x19000 0x0 0x0 0x4 &mpic 0x3 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
-+              interrupts = <24 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 e2000000 0 00100000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe2000000 0x0 0x100000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0008000 1000>;
-+              reg = <0xe0008000 0x1000>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
-               i8259@19000 {
-                       interrupt-controller;
-                       device_type = "interrupt-controller";
--                      reg = <19000 0 0 0 1>;
-+                      reg = <0x19000 0x0 0x0 0x0 0x1>;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
-                       compatible = "chrp,iic";
-@@ -268,24 +269,24 @@
-       pci1: pci@e0009000 {
-               cell-index = <1>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x15 */
--                      a800 0 0 1 &mpic b 1
--                      a800 0 0 2 &mpic b 1
--                      a800 0 0 3 &mpic b 1
--                      a800 0 0 4 &mpic b 1>;
-+                      0xa800 0x0 0x0 0x1 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x2 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x3 &mpic 0xb 0x1
-+                      0xa800 0x0 0x0 0x4 &mpic 0xb 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <19 2>;
-+              interrupts = <25 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 a0000000 a0000000 0 20000000
--                        01000000 0 00000000 e3000000 0 00100000>;
--              clock-frequency = <3f940aa>;
-+              ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe3000000 0x0 0x100000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0009000 1000>;
-+              reg = <0xe0009000 0x1000>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
-       };
---- a/arch/powerpc/boot/dts/mpc8560ads.dts
-+++ b/arch/powerpc/boot/dts/mpc8560ads.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8560 ADS Device Tree Source
-  *
-- * Copyright 2006 Freescale Semiconductor Inc.
-+ * Copyright 2006, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC8560ADS";
-@@ -32,74 +33,74 @@
-               PowerPC,8560@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
--                      timebase-frequency = <04ead9a0>;
--                      bus-frequency = <13ab6680>;
--                      clock-frequency = <312c8040>;
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-+                      timebase-frequency = <82500000>;
-+                      bus-frequency = <330000000>;
-+                      clock-frequency = <825000000>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <00000000 10000000>;
-+              reg = <0x0 0x10000000>;
-       };
-       soc8560@e0000000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 e0000000 00100000>;
--              reg = <e0000000 00000200>;
--              bus-frequency = <13ab6680>;
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x200>;
-+              bus-frequency = <330000000>;
-               memory-controller@2000 {
-                       compatible = "fsl,8540-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8540-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <40000>;   // L2, 256K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x40000>; // L2, 256K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               mdio@24520 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <5 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy2: ethernet-phy@2 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <7 1>;
--                              reg = <2>;
-+                              reg = <0x2>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy3: ethernet-phy@3 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <7 1>;
--                              reg = <3>;
-+                              reg = <0x3>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -109,9 +110,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-               };
-@@ -121,9 +122,9 @@
-                       device_type = "network";
-                       model = "TSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-               };
-@@ -132,7 +133,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       device_type = "open-pic";
-               };
-@@ -140,17 +141,17 @@
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc8560-cpm", "fsl,cpm2";
--                      reg = <919c0 30>;
-+                      reg = <0x919c0 0x30>;
-                       ranges;
-                       muram@80000 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 80000 10000>;
-+                              ranges = <0x0 0x80000 0x10000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 4000 9000 2000>;
-+                                      reg = <0x0 0x4000 0x9000 0x2000>;
-                               };
-                       };
-@@ -158,17 +159,17 @@
-                               compatible = "fsl,mpc8560-brg",
-                                            "fsl,cpm2-brg",
-                                            "fsl,cpm-brg";
--                              reg = <919f0 10 915f0 10>;
--                              clock-frequency = <d#165000000>;
-+                              reg = <0x919f0 0x10 0x915f0 0x10>;
-+                              clock-frequency = <165000000>;
-                       };
-                       cpmpic: pic@90c00 {
-                               interrupt-controller;
-                               #address-cells = <0>;
-                               #interrupt-cells = <2>;
--                              interrupts = <2e 2>;
-+                              interrupts = <46 2>;
-                               interrupt-parent = <&mpic>;
--                              reg = <90c00 80>;
-+                              reg = <0x90c00 0x80>;
-                               compatible = "fsl,mpc8560-cpm-pic", "fsl,cpm2-pic";
-                       };
-@@ -176,11 +177,11 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc8560-scc-uart",
-                                            "fsl,cpm2-scc-uart";
--                              reg = <91a00 20 88000 100>;
-+                              reg = <0x91a00 0x20 0x88000 0x100>;
-                               fsl,cpm-brg = <1>;
--                              fsl,cpm-command = <00800000>;
--                              current-speed = <1c200>;
--                              interrupts = <28 8>;
-+                              fsl,cpm-command = <0x800000>;
-+                              current-speed = <115200>;
-+                              interrupts = <40 8>;
-                               interrupt-parent = <&cpmpic>;
-                       };
-@@ -188,11 +189,11 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc8560-scc-uart",
-                                            "fsl,cpm2-scc-uart";
--                              reg = <91a20 20 88100 100>;
-+                              reg = <0x91a20 0x20 0x88100 0x100>;
-                               fsl,cpm-brg = <2>;
--                              fsl,cpm-command = <04a00000>;
--                              current-speed = <1c200>;
--                              interrupts = <29 8>;
-+                              fsl,cpm-command = <0x4a00000>;
-+                              current-speed = <115200>;
-+                              interrupts = <41 8>;
-                               interrupt-parent = <&cpmpic>;
-                       };
-@@ -200,10 +201,10 @@
-                               device_type = "network";
-                               compatible = "fsl,mpc8560-fcc-enet",
-                                            "fsl,cpm2-fcc-enet";
--                              reg = <91320 20 88500 100 913b0 1>;
-+                              reg = <0x91320 0x20 0x88500 0x100 0x913b0 0x1>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
--                              fsl,cpm-command = <16200300>;
--                              interrupts = <21 8>;
-+                              fsl,cpm-command = <0x16200300>;
-+                              interrupts = <33 8>;
-                               interrupt-parent = <&cpmpic>;
-                               phy-handle = <&phy2>;
-                       };
-@@ -212,10 +213,10 @@
-                               device_type = "network";
-                               compatible = "fsl,mpc8560-fcc-enet",
-                                            "fsl,cpm2-fcc-enet";
--                              reg = <91340 20 88600 100 913d0 1>;
-+                              reg = <0x91340 0x20 0x88600 0x100 0x913d0 0x1>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
--                              fsl,cpm-command = <1a400300>;
--                              interrupts = <22 8>;
-+                              fsl,cpm-command = <0x1a400300>;
-+                              interrupts = <34 8>;
-                               interrupt-parent = <&cpmpic>;
-                               phy-handle = <&phy3>;
-                       };
-@@ -229,87 +230,87 @@
-               #address-cells = <3>;
-               compatible = "fsl,mpc8540-pcix", "fsl,mpc8540-pci";
-               device_type = "pci";
--              reg = <e0008000 1000>;
--              clock-frequency = <3f940aa>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              reg = <0xe0008000 0x1000>;
-+              clock-frequency = <66666666>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                               /* IDSEL 0x2 */
--                               1000 0 0 1 &mpic 1 1
--                               1000 0 0 2 &mpic 2 1
--                               1000 0 0 3 &mpic 3 1
--                               1000 0 0 4 &mpic 4 1
-+                               0x1000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                               0x1000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                               0x1000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                               0x1000 0x0 0x0 0x4 &mpic 0x4 0x1
-                               /* IDSEL 0x3 */
--                               1800 0 0 1 &mpic 4 1
--                               1800 0 0 2 &mpic 1 1
--                               1800 0 0 3 &mpic 2 1
--                               1800 0 0 4 &mpic 3 1
-+                               0x1800 0x0 0x0 0x1 &mpic 0x4 0x1
-+                               0x1800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                               0x1800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                               0x1800 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 0x4 */
--                               2000 0 0 1 &mpic 3 1
--                               2000 0 0 2 &mpic 4 1
--                               2000 0 0 3 &mpic 1 1
--                               2000 0 0 4 &mpic 2 1
-+                               0x2000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                               0x2000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                               0x2000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                               0x2000 0x0 0x0 0x4 &mpic 0x2 0x1
-                               /* IDSEL 0x5  */
--                               2800 0 0 1 &mpic 2 1
--                               2800 0 0 2 &mpic 3 1
--                               2800 0 0 3 &mpic 4 1
--                               2800 0 0 4 &mpic 1 1
-+                               0x2800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                               0x2800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                               0x2800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                               0x2800 0x0 0x0 0x4 &mpic 0x1 0x1
-                               /* IDSEL 12 */
--                               6000 0 0 1 &mpic 1 1
--                               6000 0 0 2 &mpic 2 1
--                               6000 0 0 3 &mpic 3 1
--                               6000 0 0 4 &mpic 4 1
-+                               0x6000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                               0x6000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                               0x6000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                               0x6000 0x0 0x0 0x4 &mpic 0x4 0x1
-                               /* IDSEL 13 */
--                               6800 0 0 1 &mpic 4 1
--                               6800 0 0 2 &mpic 1 1
--                               6800 0 0 3 &mpic 2 1
--                               6800 0 0 4 &mpic 3 1
-+                               0x6800 0x0 0x0 0x1 &mpic 0x4 0x1
-+                               0x6800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                               0x6800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                               0x6800 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 14*/
--                               7000 0 0 1 &mpic 3 1
--                               7000 0 0 2 &mpic 4 1
--                               7000 0 0 3 &mpic 1 1
--                               7000 0 0 4 &mpic 2 1
-+                               0x7000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                               0x7000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                               0x7000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                               0x7000 0x0 0x0 0x4 &mpic 0x2 0x1
-                               /* IDSEL 15 */
--                               7800 0 0 1 &mpic 2 1
--                               7800 0 0 2 &mpic 3 1
--                               7800 0 0 3 &mpic 4 1
--                               7800 0 0 4 &mpic 1 1
-+                               0x7800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                               0x7800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                               0x7800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                               0x7800 0x0 0x0 0x4 &mpic 0x1 0x1
-                               /* IDSEL 18 */
--                               9000 0 0 1 &mpic 1 1
--                               9000 0 0 2 &mpic 2 1
--                               9000 0 0 3 &mpic 3 1
--                               9000 0 0 4 &mpic 4 1
-+                               0x9000 0x0 0x0 0x1 &mpic 0x1 0x1
-+                               0x9000 0x0 0x0 0x2 &mpic 0x2 0x1
-+                               0x9000 0x0 0x0 0x3 &mpic 0x3 0x1
-+                               0x9000 0x0 0x0 0x4 &mpic 0x4 0x1
-                               /* IDSEL 19 */
--                               9800 0 0 1 &mpic 4 1
--                               9800 0 0 2 &mpic 1 1
--                               9800 0 0 3 &mpic 2 1
--                               9800 0 0 4 &mpic 3 1
-+                               0x9800 0x0 0x0 0x1 &mpic 0x4 0x1
-+                               0x9800 0x0 0x0 0x2 &mpic 0x1 0x1
-+                               0x9800 0x0 0x0 0x3 &mpic 0x2 0x1
-+                               0x9800 0x0 0x0 0x4 &mpic 0x3 0x1
-                               /* IDSEL 20 */
--                               a000 0 0 1 &mpic 3 1
--                               a000 0 0 2 &mpic 4 1
--                               a000 0 0 3 &mpic 1 1
--                               a000 0 0 4 &mpic 2 1
-+                               0xa000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                               0xa000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                               0xa000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                               0xa000 0x0 0x0 0x4 &mpic 0x2 0x1
-                               /* IDSEL 21 */
--                               a800 0 0 1 &mpic 2 1
--                               a800 0 0 2 &mpic 3 1
--                               a800 0 0 3 &mpic 4 1
--                               a800 0 0 4 &mpic 1 1>;
-+                               0xa800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                               0xa800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                               0xa800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                               0xa800 0x0 0x0 0x4 &mpic 0x1 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
-+              interrupts = <24 2>;
-               bus-range = <0 0>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 e2000000 0 01000000>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe2000000 0x0 0x1000000>;
-       };
- };
---- a/arch/powerpc/boot/dts/mpc8568mds.dts
-+++ b/arch/powerpc/boot/dts/mpc8568mds.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8568E MDS Device Tree Source
-  *
-- * Copyright 2007 Freescale Semiconductor Inc.
-+ * Copyright 2007, 2008 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 as published by the
-@@ -9,10 +9,7 @@
-  * option) any later version.
-  */
--
--/*
--/memreserve/  00000000 1000000;
--*/
-+/dts-v1/;
- / {
-       model = "MPC8568EMDS";
-@@ -37,11 +34,11 @@
-               PowerPC,8568@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
-@@ -50,36 +47,36 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 10000000>;
-+              reg = <0x0 0x10000000>;
-       };
-       bcsr@f8000000 {
-               device_type = "board-control";
--              reg = <f8000000 8000>;
-+              reg = <0xf8000000 0x8000>;
-       };
-       soc8568@e0000000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 e0000000 00100000>;
--              reg = <e0000000 00001000>;
-+              ranges = <0x0 0xe0000000 0x100000>;
-+              reg = <0xe0000000 0x1000>;
-               bus-frequency = <0>;
-               memory-controller@2000 {
-                       compatible = "fsl,8568-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,8568-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <80000>;   // L2, 512K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x80000>; // L2, 512K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -87,14 +84,14 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-                       rtc@68 {
-                               compatible = "dallas,ds1374";
--                              reg = <68>;
-+                              reg = <0x68>;
-                       };
-               };
-@@ -103,8 +100,8 @@
-                       #size-cells = <0>;
-                       cell-index = <1>;
-                       compatible = "fsl-i2c";
--                      reg = <3100 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3100 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -113,30 +110,30 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@7 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <1 1>;
--                              reg = <7>;
-+                              reg = <0x7>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <2 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy2: ethernet-phy@2 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <1 1>;
--                              reg = <2>;
-+                              reg = <0x2>;
-                               device_type = "ethernet-phy";
-                       };
-                       phy3: ethernet-phy@3 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <2 1>;
--                              reg = <3>;
-+                              reg = <0x3>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -146,9 +143,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy2>;
-               };
-@@ -158,9 +155,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy3>;
-               };
-@@ -169,15 +166,15 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;
-+                      reg = <0x4500 0x100>;
-                       clock-frequency = <0>;
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-               global-utilities@e0000 {        //global utilities block
-                       compatible = "fsl,mpc8548-guts";
--                      reg = <e0000 1000>;
-+                      reg = <0xe0000 0x1000>;
-                       fsl,has-rstcr;
-               };
-@@ -185,9 +182,9 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;
-+                      reg = <0x4600 0x100>;
-                       clock-frequency = <0>;
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -195,13 +192,13 @@
-                       device_type = "crypto";
-                       model = "SEC2";
-                       compatible = "talitos";
--                      reg = <30000 f000>;
--                      interrupts = <2d 2>;
-+                      reg = <0x30000 0xf000>;
-+                      interrupts = <45 2>;
-                       interrupt-parent = <&mpic>;
-                       num-channels = <4>;
--                      channel-fifo-len = <18>;
--                      exec-units-mask = <000000fe>;
--                      descriptor-types-mask = <012b0ebf>;
-+                      channel-fifo-len = <24>;
-+                      exec-units-mask = <0xfe>;
-+                      descriptor-types-mask = <0x12b0ebf>;
-               };
-               mpic: pic@40000 {
-@@ -209,73 +206,73 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                         big-endian;
-               };
-               par_io@e0100 {
--                      reg = <e0100 100>;
-+                      reg = <0xe0100 0x100>;
-                       device_type = "par_io";
-                       num-ports = <7>;
-                       pio1: ucc_pin@01 {
-                               pio-map = <
-                       /* port  pin  dir  open_drain  assignment  has_irq */
--                                      4  0a  1  0  2  0       /* TxD0 */
--                                      4  09  1  0  2  0       /* TxD1 */
--                                      4  08  1  0  2  0       /* TxD2 */
--                                      4  07  1  0  2  0       /* TxD3 */
--                                      4  17  1  0  2  0       /* TxD4 */
--                                      4  16  1  0  2  0       /* TxD5 */
--                                      4  15  1  0  2  0       /* TxD6 */
--                                      4  14  1  0  2  0       /* TxD7 */
--                                      4  0f  2  0  2  0       /* RxD0 */
--                                      4  0e  2  0  2  0       /* RxD1 */
--                                      4  0d  2  0  2  0       /* RxD2 */
--                                      4  0c  2  0  2  0       /* RxD3 */
--                                      4  1d  2  0  2  0       /* RxD4 */
--                                      4  1c  2  0  2  0       /* RxD5 */
--                                      4  1b  2  0  2  0       /* RxD6 */
--                                      4  1a  2  0  2  0       /* RxD7 */
--                                      4  0b  1  0  2  0       /* TX_EN */
--                                      4  18  1  0  2  0       /* TX_ER */
--                                      4  10  2  0  2  0       /* RX_DV */
--                                      4  1e  2  0  2  0       /* RX_ER */
--                                      4  11  2  0  2  0       /* RX_CLK */
--                                      4  13  1  0  2  0       /* GTX_CLK */
--                                      1  1f  2  0  3  0>;     /* GTX125 */
-+                                      0x4  0xa  0x1  0x0  0x2  0x0    /* TxD0 */
-+                                      0x4  0x9  0x1  0x0  0x2  0x0    /* TxD1 */
-+                                      0x4  0x8  0x1  0x0  0x2  0x0    /* TxD2 */
-+                                      0x4  0x7  0x1  0x0  0x2  0x0    /* TxD3 */
-+                                      0x4  0x17  0x1  0x0  0x2  0x0   /* TxD4 */
-+                                      0x4  0x16  0x1  0x0  0x2  0x0   /* TxD5 */
-+                                      0x4  0x15  0x1  0x0  0x2  0x0   /* TxD6 */
-+                                      0x4  0x14  0x1  0x0  0x2  0x0   /* TxD7 */
-+                                      0x4  0xf  0x2  0x0  0x2  0x0    /* RxD0 */
-+                                      0x4  0xe  0x2  0x0  0x2  0x0    /* RxD1 */
-+                                      0x4  0xd  0x2  0x0  0x2  0x0    /* RxD2 */
-+                                      0x4  0xc  0x2  0x0  0x2  0x0    /* RxD3 */
-+                                      0x4  0x1d  0x2  0x0  0x2  0x0   /* RxD4 */
-+                                      0x4  0x1c  0x2  0x0  0x2  0x0   /* RxD5 */
-+                                      0x4  0x1b  0x2  0x0  0x2  0x0   /* RxD6 */
-+                                      0x4  0x1a  0x2  0x0  0x2  0x0   /* RxD7 */
-+                                      0x4  0xb  0x1  0x0  0x2  0x0    /* TX_EN */
-+                                      0x4  0x18  0x1  0x0  0x2  0x0   /* TX_ER */
-+                                      0x4  0x10  0x2  0x0  0x2  0x0   /* RX_DV */
-+                                      0x4  0x1e  0x2  0x0  0x2  0x0   /* RX_ER */
-+                                      0x4  0x11  0x2  0x0  0x2  0x0   /* RX_CLK */
-+                                      0x4  0x13  0x1  0x0  0x2  0x0   /* GTX_CLK */
-+                                      0x1  0x1f  0x2  0x0  0x3  0x0>; /* GTX125 */
-                       };
-                       pio2: ucc_pin@02 {
-                               pio-map = <
-                       /* port  pin  dir  open_drain  assignment  has_irq */
--                                      5  0a 1  0  2  0   /* TxD0 */
--                                      5  09 1  0  2  0   /* TxD1 */
--                                      5  08 1  0  2  0   /* TxD2 */
--                                      5  07 1  0  2  0   /* TxD3 */
--                                      5  17 1  0  2  0   /* TxD4 */
--                                      5  16 1  0  2  0   /* TxD5 */
--                                      5  15 1  0  2  0   /* TxD6 */
--                                      5  14 1  0  2  0   /* TxD7 */
--                                      5  0f 2  0  2  0   /* RxD0 */
--                                      5  0e 2  0  2  0   /* RxD1 */
--                                      5  0d 2  0  2  0   /* RxD2 */
--                                      5  0c 2  0  2  0   /* RxD3 */
--                                      5  1d 2  0  2  0   /* RxD4 */
--                                      5  1c 2  0  2  0   /* RxD5 */
--                                      5  1b 2  0  2  0   /* RxD6 */
--                                      5  1a 2  0  2  0   /* RxD7 */
--                                      5  0b 1  0  2  0   /* TX_EN */
--                                      5  18 1  0  2  0   /* TX_ER */
--                                      5  10 2  0  2  0   /* RX_DV */
--                                      5  1e 2  0  2  0   /* RX_ER */
--                                      5  11 2  0  2  0   /* RX_CLK */
--                                      5  13 1  0  2  0   /* GTX_CLK */
--                                      1  1f 2  0  3  0   /* GTX125 */
--                                      4  06 3  0  2  0   /* MDIO */
--                                      4  05 1  0  2  0>; /* MDC */
-+                                      0x5  0xa 0x1  0x0  0x2  0x0   /* TxD0 */
-+                                      0x5  0x9 0x1  0x0  0x2  0x0   /* TxD1 */
-+                                      0x5  0x8 0x1  0x0  0x2  0x0   /* TxD2 */
-+                                      0x5  0x7 0x1  0x0  0x2  0x0   /* TxD3 */
-+                                      0x5  0x17 0x1  0x0  0x2  0x0   /* TxD4 */
-+                                      0x5  0x16 0x1  0x0  0x2  0x0   /* TxD5 */
-+                                      0x5  0x15 0x1  0x0  0x2  0x0   /* TxD6 */
-+                                      0x5  0x14 0x1  0x0  0x2  0x0   /* TxD7 */
-+                                      0x5  0xf 0x2  0x0  0x2  0x0   /* RxD0 */
-+                                      0x5  0xe 0x2  0x0  0x2  0x0   /* RxD1 */
-+                                      0x5  0xd 0x2  0x0  0x2  0x0   /* RxD2 */
-+                                      0x5  0xc 0x2  0x0  0x2  0x0   /* RxD3 */
-+                                      0x5  0x1d 0x2  0x0  0x2  0x0   /* RxD4 */
-+                                      0x5  0x1c 0x2  0x0  0x2  0x0   /* RxD5 */
-+                                      0x5  0x1b 0x2  0x0  0x2  0x0   /* RxD6 */
-+                                      0x5  0x1a 0x2  0x0  0x2  0x0   /* RxD7 */
-+                                      0x5  0xb 0x1  0x0  0x2  0x0   /* TX_EN */
-+                                      0x5  0x18 0x1  0x0  0x2  0x0   /* TX_ER */
-+                                      0x5  0x10 0x2  0x0  0x2  0x0   /* RX_DV */
-+                                      0x5  0x1e 0x2  0x0  0x2  0x0   /* RX_ER */
-+                                      0x5  0x11 0x2  0x0  0x2  0x0   /* RX_CLK */
-+                                      0x5  0x13 0x1  0x0  0x2  0x0   /* GTX_CLK */
-+                                      0x1  0x1f 0x2  0x0  0x3  0x0   /* GTX125 */
-+                                      0x4  0x6 0x3  0x0  0x2  0x0   /* MDIO */
-+                                      0x4  0x5 0x1  0x0  0x2  0x0>; /* MDC */
-                       };
-               };
-       };
-@@ -285,28 +282,28 @@
-               #size-cells = <1>;
-               device_type = "qe";
-               compatible = "fsl,qe";
--              ranges = <0 e0080000 00040000>;
--              reg = <e0080000 480>;
-+              ranges = <0x0 0xe0080000 0x40000>;
-+              reg = <0xe0080000 0x480>;
-               brg-frequency = <0>;
--              bus-frequency = <179A7B00>;
-+              bus-frequency = <396000000>;
-               muram@10000 {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,qe-muram", "fsl,cpm-muram";
--                      ranges = <0 00010000 0000c000>;
-+                      ranges = <0x0 0x10000 0x10000>;
-                       data-only@0 {
-                               compatible = "fsl,qe-muram-data",
-                                            "fsl,cpm-muram-data";
--                              reg = <0 c000>;
-+                              reg = <0x0 0x10000>;
-                       };
-               };
-               spi@4c0 {
-                       cell-index = <0>;
-                       compatible = "fsl,spi";
--                      reg = <4c0 40>;
-+                      reg = <0x4c0 0x40>;
-                       interrupts = <2>;
-                       interrupt-parent = <&qeic>;
-                       mode = "cpu";
-@@ -315,7 +312,7 @@
-               spi@500 {
-                       cell-index = <1>;
-                       compatible = "fsl,spi";
--                      reg = <500 40>;
-+                      reg = <0x500 0x40>;
-                       interrupts = <1>;
-                       interrupt-parent = <&qeic>;
-                       mode = "cpu";
-@@ -324,11 +321,9 @@
-               enet2: ucc@2000 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <1>;
--                      device-id = <1>;
--                      reg = <2000 200>;
--                      interrupts = <20>;
-+                      reg = <0x2000 0x200>;
-+                      interrupts = <32>;
-                       interrupt-parent = <&qeic>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       rx-clock-name = "none";
-@@ -341,11 +336,9 @@
-               enet3: ucc@3000 {
-                       device_type = "network";
-                       compatible = "ucc_geth";
--                      model = "UCC";
-                       cell-index = <2>;
--                      device-id = <2>;
--                      reg = <3000 200>;
--                      interrupts = <21>;
-+                      reg = <0x3000 0x200>;
-+                      interrupts = <33>;
-                       interrupt-parent = <&qeic>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       rx-clock-name = "none";
-@@ -358,7 +351,7 @@
-               mdio@2120 {
-                       #address-cells = <1>;
-                       #size-cells = <0>;
--                      reg = <2120 18>;
-+                      reg = <0x2120 0x18>;
-                       compatible = "fsl,ucc-mdio";
-                       /* These are the same PHYs as on
-@@ -366,25 +359,25 @@
-                       qe_phy0: ethernet-phy@07 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <1 1>;
--                              reg = <7>;
-+                              reg = <0x7>;
-                               device_type = "ethernet-phy";
-                       };
-                       qe_phy1: ethernet-phy@01 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <2 1>;
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-                       qe_phy2: ethernet-phy@02 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <1 1>;
--                              reg = <2>;
-+                              reg = <0x2>;
-                               device_type = "ethernet-phy";
-                       };
-                       qe_phy3: ethernet-phy@03 {
-                               interrupt-parent = <&mpic>;
-                               interrupts = <2 1>;
--                              reg = <3>;
-+                              reg = <0x3>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -394,9 +387,9 @@
-                       compatible = "fsl,qe-ic";
-                       #address-cells = <0>;
-                       #interrupt-cells = <1>;
--                      reg = <80 80>;
-+                      reg = <0x80 0x80>;
-                       big-endian;
--                      interrupts = <2e 2 2e 2>; //high:30 low:30
-+                      interrupts = <46 2 46 2>; //high:30 low:30
-                       interrupt-parent = <&mpic>;
-               };
-@@ -404,30 +397,30 @@
-       pci0: pci@e0008000 {
-               cell-index = <0>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x12 AD18 */
--                      9000 0 0 1 &mpic 5 1
--                      9000 0 0 2 &mpic 6 1
--                      9000 0 0 3 &mpic 7 1
--                      9000 0 0 4 &mpic 4 1
-+                      0x9000 0x0 0x0 0x1 &mpic 0x5 0x1
-+                      0x9000 0x0 0x0 0x2 &mpic 0x6 0x1
-+                      0x9000 0x0 0x0 0x3 &mpic 0x7 0x1
-+                      0x9000 0x0 0x0 0x4 &mpic 0x4 0x1
-                       /* IDSEL 0x13 AD19 */
--                      9800 0 0 1 &mpic 6 1
--                      9800 0 0 2 &mpic 7 1
--                      9800 0 0 3 &mpic 4 1
--                      9800 0 0 4 &mpic 5 1>;
-+                      0x9800 0x0 0x0 0x1 &mpic 0x6 0x1
-+                      0x9800 0x0 0x0 0x2 &mpic 0x7 0x1
-+                      0x9800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x9800 0x0 0x0 0x4 &mpic 0x5 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 e2000000 0 00800000>;
--              clock-frequency = <3f940aa>;
-+              interrupts = <24 2>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xe2000000 0x0 0x800000>;
-+              clock-frequency = <66666666>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e0008000 1000>;
-+              reg = <0xe0008000 0x1000>;
-               compatible = "fsl,mpc8540-pci";
-               device_type = "pci";
-       };
-@@ -435,39 +428,39 @@
-       /* PCI Express */
-       pci1: pcie@e000a000 {
-               cell-index = <2>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x0 (PEX) */
--                      00000 0 0 1 &mpic 0 1
--                      00000 0 0 2 &mpic 1 1
--                      00000 0 0 3 &mpic 2 1
--                      00000 0 0 4 &mpic 3 1>;
-+                      00000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      00000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      00000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      00000 0x0 0x0 0x4 &mpic 0x3 0x1>;
-               interrupt-parent = <&mpic>;
--              interrupts = <1a 2>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 a0000000 a0000000 0 10000000
--                        01000000 0 00000000 e2800000 0 00800000>;
--              clock-frequency = <1fca055>;
-+              interrupts = <26 2>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x10000000
-+                        0x1000000 0x0 0x0 0xe2800000 0x0 0x800000>;
-+              clock-frequency = <33333333>;
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <e000a000 1000>;
-+              reg = <0xe000a000 0x1000>;
-               compatible = "fsl,mpc8548-pcie";
-               device_type = "pci";
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 a0000000
--                                02000000 0 a0000000
--                                0 10000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00800000>;
-+                      ranges = <0x2000000 0x0 0xa0000000
-+                                0x2000000 0x0 0xa0000000
-+                                0x0 0x10000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x800000>;
-               };
-       };
- };
---- a/arch/powerpc/boot/dts/mpc8572ds.dts
-+++ b/arch/powerpc/boot/dts/mpc8572ds.dts
-@@ -1,7 +1,7 @@
- /*
-  * MPC8572 DS Device Tree Source
-  *
-- * Copyright 2007 Freescale Semiconductor Inc.
-+ * Copyright 2007, 2008 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 as published by the
-@@ -9,6 +9,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "fsl,MPC8572DS";
-       compatible = "fsl,MPC8572DS";
-@@ -33,11 +34,11 @@
-               PowerPC,8572@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
-@@ -45,11 +46,11 @@
-               PowerPC,8572@1 {
-                       device_type = "cpu";
--                      reg = <1>;
--                      d-cache-line-size = <20>;       // 32 bytes
--                      i-cache-line-size = <20>;       // 32 bytes
--                      d-cache-size = <8000>;          // L1, 32K
--                      i-cache-size = <8000>;          // L1, 32K
-+                      reg = <0x1>;
-+                      d-cache-line-size = <32>;       // 32 bytes
-+                      i-cache-line-size = <32>;       // 32 bytes
-+                      d-cache-size = <0x8000>;                // L1, 32K
-+                      i-cache-size = <0x8000>;                // L1, 32K
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
-@@ -58,38 +59,38 @@
-       memory {
-               device_type = "memory";
--              reg = <00000000 00000000>;      // Filled by U-Boot
-+              reg = <0x0 0x0>;        // Filled by U-Boot
-       };
-       soc8572@ffe00000 {
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <00000000 ffe00000 00100000>;
--              reg = <ffe00000 00001000>;      // CCSRBAR & soc regs, remove once parse code for immrbase fixed
-+              ranges = <0x0 0xffe00000 0x100000>;
-+              reg = <0xffe00000 0x1000>;      // CCSRBAR & soc regs, remove once parse code for immrbase fixed
-               bus-frequency = <0>;            // Filled out by uboot.
-               memory-controller@2000 {
-                       compatible = "fsl,mpc8572-memory-controller";
--                      reg = <2000 1000>;
-+                      reg = <0x2000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               memory-controller@6000 {
-                       compatible = "fsl,mpc8572-memory-controller";
--                      reg = <6000 1000>;
-+                      reg = <0x6000 0x1000>;
-                       interrupt-parent = <&mpic>;
--                      interrupts = <12 2>;
-+                      interrupts = <18 2>;
-               };
-               l2-cache-controller@20000 {
-                       compatible = "fsl,mpc8572-l2-cache-controller";
--                      reg = <20000 1000>;
--                      cache-line-size = <20>; // 32 bytes
--                      cache-size = <80000>;   // L2, 512K
-+                      reg = <0x20000 0x1000>;
-+                      cache-line-size = <32>; // 32 bytes
-+                      cache-size = <0x80000>; // L2, 512K
-                       interrupt-parent = <&mpic>;
--                      interrupts = <10 2>;
-+                      interrupts = <16 2>;
-               };
-               i2c@3000 {
-@@ -97,8 +98,8 @@
-                       #size-cells = <0>;
-                       cell-index = <0>;
-                       compatible = "fsl-i2c";
--                      reg = <3000 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -108,8 +109,8 @@
-                       #size-cells = <0>;
-                       cell-index = <1>;
-                       compatible = "fsl-i2c";
--                      reg = <3100 100>;
--                      interrupts = <2b 2>;
-+                      reg = <0x3100 0x100>;
-+                      interrupts = <43 2>;
-                       interrupt-parent = <&mpic>;
-                       dfsrr;
-               };
-@@ -118,27 +119,27 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       compatible = "fsl,gianfar-mdio";
--                      reg = <24520 20>;
-+                      reg = <0x24520 0x20>;
-                       phy0: ethernet-phy@0 {
-                               interrupt-parent = <&mpic>;
--                              interrupts = <a 1>;
--                              reg = <0>;
-+                              interrupts = <10 1>;
-+                              reg = <0x0>;
-                       };
-                       phy1: ethernet-phy@1 {
-                               interrupt-parent = <&mpic>;
--                              interrupts = <a 1>;
--                              reg = <1>;
-+                              interrupts = <10 1>;
-+                              reg = <0x1>;
-                       };
-                       phy2: ethernet-phy@2 {
-                               interrupt-parent = <&mpic>;
--                              interrupts = <a 1>;
--                              reg = <2>;
-+                              interrupts = <10 1>;
-+                              reg = <0x2>;
-                       };
-                       phy3: ethernet-phy@3 {
-                               interrupt-parent = <&mpic>;
--                              interrupts = <a 1>;
--                              reg = <3>;
-+                              interrupts = <10 1>;
-+                              reg = <0x3>;
-                       };
-               };
-@@ -147,9 +148,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <24000 1000>;
-+                      reg = <0x24000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1d 2 1e 2 22 2>;
-+                      interrupts = <29 2 30 2 34 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy0>;
-                       phy-connection-type = "rgmii-id";
-@@ -160,9 +161,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <25000 1000>;
-+                      reg = <0x25000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <23 2 24 2 28 2>;
-+                      interrupts = <35 2 36 2 40 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy1>;
-                       phy-connection-type = "rgmii-id";
-@@ -173,9 +174,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <26000 1000>;
-+                      reg = <0x26000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <1f 2 20 2 21 2>;
-+                      interrupts = <31 2 32 2 33 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy2>;
-                       phy-connection-type = "rgmii-id";
-@@ -186,9 +187,9 @@
-                       device_type = "network";
-                       model = "eTSEC";
-                       compatible = "gianfar";
--                      reg = <27000 1000>;
-+                      reg = <0x27000 0x1000>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
--                      interrupts = <25 2 26 2 27 2>;
-+                      interrupts = <37 2 38 2 39 2>;
-                       interrupt-parent = <&mpic>;
-                       phy-handle = <&phy3>;
-                       phy-connection-type = "rgmii-id";
-@@ -198,9 +199,9 @@
-                       cell-index = <0>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4500 100>;
-+                      reg = <0x4500 0x100>;
-                       clock-frequency = <0>;
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-@@ -208,15 +209,15 @@
-                       cell-index = <1>;
-                       device_type = "serial";
-                       compatible = "ns16550";
--                      reg = <4600 100>;
-+                      reg = <0x4600 0x100>;
-                       clock-frequency = <0>;
--                      interrupts = <2a 2>;
-+                      interrupts = <42 2>;
-                       interrupt-parent = <&mpic>;
-               };
-               global-utilities@e0000 {        //global utilities block
-                       compatible = "fsl,mpc8572-guts";
--                      reg = <e0000 1000>;
-+                      reg = <0xe0000 0x1000>;
-                       fsl,has-rstcr;
-               };
-@@ -225,7 +226,7 @@
-                       interrupt-controller;
-                       #address-cells = <0>;
-                       #interrupt-cells = <2>;
--                      reg = <40000 40000>;
-+                      reg = <0x40000 0x40000>;
-                       compatible = "chrp,open-pic";
-                       device_type = "open-pic";
-                       big-endian;
-@@ -239,167 +240,167 @@
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <ffe08000 1000>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 80000000 80000000 0 20000000
--                        01000000 0 00000000 ffc00000 0 00010000>;
--              clock-frequency = <1fca055>;
-+              reg = <0xffe08000 0x1000>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xffc00000 0x0 0x10000>;
-+              clock-frequency = <33333333>;
-               interrupt-parent = <&mpic>;
--              interrupts = <18 2>;
--              interrupt-map-mask = <ff00 0 0 7>;
-+              interrupts = <24 2>;
-+              interrupt-map-mask = <0xff00 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x11 func 0 - PCI slot 1 */
--                      8800 0 0 1 &mpic 2 1
--                      8800 0 0 2 &mpic 3 1
--                      8800 0 0 3 &mpic 4 1
--                      8800 0 0 4 &mpic 1 1
-+                      0x8800 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8800 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8800 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8800 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 1 - PCI slot 1 */
--                      8900 0 0 1 &mpic 2 1
--                      8900 0 0 2 &mpic 3 1
--                      8900 0 0 3 &mpic 4 1
--                      8900 0 0 4 &mpic 1 1
-+                      0x8900 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8900 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8900 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8900 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 2 - PCI slot 1 */
--                      8a00 0 0 1 &mpic 2 1
--                      8a00 0 0 2 &mpic 3 1
--                      8a00 0 0 3 &mpic 4 1
--                      8a00 0 0 4 &mpic 1 1
-+                      0x8a00 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8a00 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8a00 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8a00 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 3 - PCI slot 1 */
--                      8b00 0 0 1 &mpic 2 1
--                      8b00 0 0 2 &mpic 3 1
--                      8b00 0 0 3 &mpic 4 1
--                      8b00 0 0 4 &mpic 1 1
-+                      0x8b00 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8b00 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8b00 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8b00 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 4 - PCI slot 1 */
--                      8c00 0 0 1 &mpic 2 1
--                      8c00 0 0 2 &mpic 3 1
--                      8c00 0 0 3 &mpic 4 1
--                      8c00 0 0 4 &mpic 1 1
-+                      0x8c00 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8c00 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8c00 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8c00 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 5 - PCI slot 1 */
--                      8d00 0 0 1 &mpic 2 1
--                      8d00 0 0 2 &mpic 3 1
--                      8d00 0 0 3 &mpic 4 1
--                      8d00 0 0 4 &mpic 1 1
-+                      0x8d00 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8d00 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8d00 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8d00 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 6 - PCI slot 1 */
--                      8e00 0 0 1 &mpic 2 1
--                      8e00 0 0 2 &mpic 3 1
--                      8e00 0 0 3 &mpic 4 1
--                      8e00 0 0 4 &mpic 1 1
-+                      0x8e00 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8e00 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8e00 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8e00 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x11 func 7 - PCI slot 1 */
--                      8f00 0 0 1 &mpic 2 1
--                      8f00 0 0 2 &mpic 3 1
--                      8f00 0 0 3 &mpic 4 1
--                      8f00 0 0 4 &mpic 1 1
-+                      0x8f00 0x0 0x0 0x1 &mpic 0x2 0x1
-+                      0x8f00 0x0 0x0 0x2 &mpic 0x3 0x1
-+                      0x8f00 0x0 0x0 0x3 &mpic 0x4 0x1
-+                      0x8f00 0x0 0x0 0x4 &mpic 0x1 0x1
-                       /* IDSEL 0x12 func 0 - PCI slot 2 */
--                      9000 0 0 1 &mpic 3 1
--                      9000 0 0 2 &mpic 4 1
--                      9000 0 0 3 &mpic 1 1
--                      9000 0 0 4 &mpic 2 1
-+                      0x9000 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9000 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9000 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9000 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 1 - PCI slot 2 */
--                      9100 0 0 1 &mpic 3 1
--                      9100 0 0 2 &mpic 4 1
--                      9100 0 0 3 &mpic 1 1
--                      9100 0 0 4 &mpic 2 1
-+                      0x9100 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9100 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9100 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9100 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 2 - PCI slot 2 */
--                      9200 0 0 1 &mpic 3 1
--                      9200 0 0 2 &mpic 4 1
--                      9200 0 0 3 &mpic 1 1
--                      9200 0 0 4 &mpic 2 1
-+                      0x9200 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9200 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9200 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9200 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 3 - PCI slot 2 */
--                      9300 0 0 1 &mpic 3 1
--                      9300 0 0 2 &mpic 4 1
--                      9300 0 0 3 &mpic 1 1
--                      9300 0 0 4 &mpic 2 1
-+                      0x9300 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9300 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9300 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9300 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 4 - PCI slot 2 */
--                      9400 0 0 1 &mpic 3 1
--                      9400 0 0 2 &mpic 4 1
--                      9400 0 0 3 &mpic 1 1
--                      9400 0 0 4 &mpic 2 1
-+                      0x9400 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9400 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9400 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9400 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 5 - PCI slot 2 */
--                      9500 0 0 1 &mpic 3 1
--                      9500 0 0 2 &mpic 4 1
--                      9500 0 0 3 &mpic 1 1
--                      9500 0 0 4 &mpic 2 1
-+                      0x9500 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9500 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9500 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9500 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 6 - PCI slot 2 */
--                      9600 0 0 1 &mpic 3 1
--                      9600 0 0 2 &mpic 4 1
--                      9600 0 0 3 &mpic 1 1
--                      9600 0 0 4 &mpic 2 1
-+                      0x9600 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9600 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9600 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9600 0x0 0x0 0x4 &mpic 0x2 0x1
-                       /* IDSEL 0x12 func 7 - PCI slot 2 */
--                      9700 0 0 1 &mpic 3 1
--                      9700 0 0 2 &mpic 4 1
--                      9700 0 0 3 &mpic 1 1
--                      9700 0 0 4 &mpic 2 1
-+                      0x9700 0x0 0x0 0x1 &mpic 0x3 0x1
-+                      0x9700 0x0 0x0 0x2 &mpic 0x4 0x1
-+                      0x9700 0x0 0x0 0x3 &mpic 0x1 0x1
-+                      0x9700 0x0 0x0 0x4 &mpic 0x2 0x1
-                       // IDSEL 0x1c  USB
--                      e000 0 0 1 &i8259 c 2
--                      e100 0 0 2 &i8259 9 2
--                      e200 0 0 3 &i8259 a 2
--                      e300 0 0 4 &i8259 b 2
-+                      0xe000 0x0 0x0 0x1 &i8259 0xc 0x2
-+                      0xe100 0x0 0x0 0x2 &i8259 0x9 0x2
-+                      0xe200 0x0 0x0 0x3 &i8259 0xa 0x2
-+                      0xe300 0x0 0x0 0x4 &i8259 0xb 0x2
-                       // IDSEL 0x1d  Audio
--                      e800 0 0 1 &i8259 6 2
-+                      0xe800 0x0 0x0 0x1 &i8259 0x6 0x2
-                       // IDSEL 0x1e Legacy
--                      f000 0 0 1 &i8259 7 2
--                      f100 0 0 1 &i8259 7 2
-+                      0xf000 0x0 0x0 0x1 &i8259 0x7 0x2
-+                      0xf100 0x0 0x0 0x1 &i8259 0x7 0x2
-                       // IDSEL 0x1f IDE/SATA
--                      f800 0 0 1 &i8259 e 2
--                      f900 0 0 1 &i8259 5 2
-+                      0xf800 0x0 0x0 0x1 &i8259 0xe 0x2
-+                      0xf900 0x0 0x0 0x1 &i8259 0x5 0x2
-                       >;
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 80000000
--                                02000000 0 80000000
--                                0 20000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00100000>;
-+                      ranges = <0x2000000 0x0 0x80000000
-+                                0x2000000 0x0 0x80000000
-+                                0x0 0x20000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x100000>;
-                       uli1575@0 {
--                              reg = <0 0 0 0 0>;
-+                              reg = <0x0 0x0 0x0 0x0 0x0>;
-                               #size-cells = <2>;
-                               #address-cells = <3>;
--                              ranges = <02000000 0 80000000
--                                        02000000 0 80000000
--                                        0 20000000
--
--                                        01000000 0 00000000
--                                        01000000 0 00000000
--                                        0 00100000>;
-+                              ranges = <0x2000000 0x0 0x80000000
-+                                        0x2000000 0x0 0x80000000
-+                                        0x0 0x20000000
-+
-+                                        0x1000000 0x0 0x0
-+                                        0x1000000 0x0 0x0
-+                                        0x0 0x100000>;
-                               isa@1e {
-                                       device_type = "isa";
-                                       #interrupt-cells = <2>;
-                                       #size-cells = <1>;
-                                       #address-cells = <2>;
--                                      reg = <f000 0 0 0 0>;
--                                      ranges = <1 0 01000000 0 0
--                                                00001000>;
-+                                      reg = <0xf000 0x0 0x0 0x0 0x0>;
-+                                      ranges = <0x1 0x0 0x1000000 0x0 0x0
-+                                                0x1000>;
-                                       interrupt-parent = <&i8259>;
-                                       i8259: interrupt-controller@20 {
--                                              reg = <1 20 2
--                                                     1 a0 2
--                                                     1 4d0 2>;
-+                                              reg = <0x1 0x20 0x2
-+                                                     0x1 0xa0 0x2
-+                                                     0x1 0x4d0 0x2>;
-                                               interrupt-controller;
-                                               device_type = "interrupt-controller";
-                                               #address-cells = <0>;
-@@ -412,29 +413,29 @@
-                                       i8042@60 {
-                                               #size-cells = <0>;
-                                               #address-cells = <1>;
--                                              reg = <1 60 1 1 64 1>;
--                                              interrupts = <1 3 c 3>;
-+                                              reg = <0x1 0x60 0x1 0x1 0x64 0x1>;
-+                                              interrupts = <1 3 12 3>;
-                                               interrupt-parent =
-                                                       <&i8259>;
-                                               keyboard@0 {
--                                                      reg = <0>;
-+                                                      reg = <0x0>;
-                                                       compatible = "pnpPNP,303";
-                                               };
-                                               mouse@1 {
--                                                      reg = <1>;
-+                                                      reg = <0x1>;
-                                                       compatible = "pnpPNP,f03";
-                                               };
-                                       };
-                                       rtc@70 {
-                                               compatible = "pnpPNP,b00";
--                                              reg = <1 70 2>;
-+                                              reg = <0x1 0x70 0x2>;
-                                       };
-                                       gpio@400 {
--                                              reg = <1 400 80>;
-+                                              reg = <0x1 0x400 0x80>;
-                                       };
-                               };
-                       };
-@@ -449,33 +450,33 @@
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <ffe09000 1000>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 a0000000 a0000000 0 20000000
--                        01000000 0 00000000 ffc10000 0 00010000>;
--              clock-frequency = <1fca055>;
-+              reg = <0xffe09000 0x1000>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xffc10000 0x0 0x10000>;
-+              clock-frequency = <33333333>;
-               interrupt-parent = <&mpic>;
--              interrupts = <1a 2>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupts = <26 2>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x0 */
--                      0000 0 0 1 &mpic 4 1
--                      0000 0 0 2 &mpic 5 1
--                      0000 0 0 3 &mpic 6 1
--                      0000 0 0 4 &mpic 7 1
-+                      0000 0x0 0x0 0x1 &mpic 0x4 0x1
-+                      0000 0x0 0x0 0x2 &mpic 0x5 0x1
-+                      0000 0x0 0x0 0x3 &mpic 0x6 0x1
-+                      0000 0x0 0x0 0x4 &mpic 0x7 0x1
-                       >;
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 a0000000
--                                02000000 0 a0000000
--                                0 20000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00100000>;
-+                      ranges = <0x2000000 0x0 0xa0000000
-+                                0x2000000 0x0 0xa0000000
-+                                0x0 0x20000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x100000>;
-               };
-       };
-@@ -486,33 +487,33 @@
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              reg = <ffe0a000 1000>;
--              bus-range = <0 ff>;
--              ranges = <02000000 0 c0000000 c0000000 0 20000000
--                        01000000 0 00000000 ffc20000 0 00010000>;
--              clock-frequency = <1fca055>;
-+              reg = <0xffe0a000 0x1000>;
-+              bus-range = <0 255>;
-+              ranges = <0x2000000 0x0 0xc0000000 0xc0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xffc20000 0x0 0x10000>;
-+              clock-frequency = <33333333>;
-               interrupt-parent = <&mpic>;
--              interrupts = <1b 2>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              interrupts = <27 2>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                       /* IDSEL 0x0 */
--                      0000 0 0 1 &mpic 0 1
--                      0000 0 0 2 &mpic 1 1
--                      0000 0 0 3 &mpic 2 1
--                      0000 0 0 4 &mpic 3 1
-+                      0000 0x0 0x0 0x1 &mpic 0x0 0x1
-+                      0000 0x0 0x0 0x2 &mpic 0x1 0x1
-+                      0000 0x0 0x0 0x3 &mpic 0x2 0x1
-+                      0000 0x0 0x0 0x4 &mpic 0x3 0x1
-                       >;
-               pcie@0 {
--                      reg = <0 0 0 0 0>;
-+                      reg = <0x0 0x0 0x0 0x0 0x0>;
-                       #size-cells = <2>;
-                       #address-cells = <3>;
-                       device_type = "pci";
--                      ranges = <02000000 0 c0000000
--                                02000000 0 c0000000
--                                0 20000000
--
--                                01000000 0 00000000
--                                01000000 0 00000000
--                                0 00100000>;
-+                      ranges = <0x2000000 0x0 0xc0000000
-+                                0x2000000 0x0 0xc0000000
-+                                0x0 0x20000000
-+
-+                                0x1000000 0x0 0x0
-+                                0x1000000 0x0 0x0
-+                                0x0 0x100000>;
-               };
-       };
- };
---- a/arch/powerpc/boot/dts/mpc8641_hpcn.dts
-+++ b/arch/powerpc/boot/dts/mpc8641_hpcn.dts
-@@ -13,7 +13,7 @@
- / {
-       model = "MPC8641HPCN";
--      compatible = "mpc86xx";
-+      compatible = "fsl,mpc8641hpcn";
-       #address-cells = <1>;
-       #size-cells = <1>;
---- a/arch/powerpc/boot/dts/mpc866ads.dts
-+++ b/arch/powerpc/boot/dts/mpc866ads.dts
-@@ -2,6 +2,7 @@
-  * MPC866 ADS Device Tree Source
-  *
-  * Copyright 2006 MontaVista Software, Inc.
-+ * Copyright 2008 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 as published by the
-@@ -9,6 +10,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC866ADS";
-@@ -22,37 +24,37 @@
-               PowerPC,866@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <10>;       // 16 bytes
--                      i-cache-line-size = <10>;       // 16 bytes
--                      d-cache-size = <2000>;          // L1, 8K
--                      i-cache-size = <4000>;          // L1, 16K
-+                      reg = <0x0>;
-+                      d-cache-line-size = <16>;       // 16 bytes
-+                      i-cache-line-size = <16>;       // 16 bytes
-+                      d-cache-size = <0x2000>;                // L1, 8K
-+                      i-cache-size = <0x4000>;                // L1, 16K
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
--                      interrupts = <f 2>;     // decrementer interrupt
-+                      interrupts = <15 2>;    // decrementer interrupt
-                       interrupt-parent = <&PIC>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <00000000 800000>;
-+              reg = <0x0 0x800000>;
-       };
-       localbus@ff000100 {
-               compatible = "fsl,mpc866-localbus", "fsl,pq1-localbus";
-               #address-cells = <2>;
-               #size-cells = <1>;
--              reg = <ff000100 40>;
-+              reg = <0xff000100 0x40>;
-               ranges = <
--                      1 0 ff080000 00008000
--                      5 0 ff0a0000 00008000
-+                      0x1 0x0 0xff080000 0x8000
-+                      0x5 0x0 0xff0a0000 0x8000
-               >;
-               board-control@1,0 {
--                      reg = <1 0 20 5 300 4>;
-+                      reg = <0x1 0x0 0x20 0x5 0x300 0x4>;
-                       compatible = "fsl,mpc866ads-bcsr";
-               };
-       };
-@@ -61,17 +63,17 @@
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 ff000000 00100000>;
--              reg = <ff000000 00000200>;
-+              ranges = <0x0 0xff000000 0x100000>;
-+              reg = <0xff000000 0x200>;
-               bus-frequency = <0>;
-               mdio@e00 {
-                       compatible = "fsl,mpc866-fec-mdio", "fsl,pq1-fec-mdio";
--                      reg = <e00 188>;
-+                      reg = <0xe00 0x188>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       PHY: ethernet-phy@f {
--                              reg = <f>;
-+                              reg = <0xf>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -80,7 +82,7 @@
-                       device_type = "network";
-                       compatible = "fsl,mpc866-fec-enet",
-                                    "fsl,pq1-fec-enet";
--                      reg = <e00 188>;
-+                      reg = <0xe00 0x188>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       interrupts = <3 1>;
-                       interrupt-parent = <&PIC>;
-@@ -91,7 +93,7 @@
-               PIC: pic@0 {
-                       interrupt-controller;
-                       #interrupt-cells = <2>;
--                      reg = <0 24>;
-+                      reg = <0x0 0x24>;
-                       compatible = "fsl,mpc866-pic", "fsl,pq1-pic";
-               };
-@@ -100,7 +102,7 @@
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc866-cpm", "fsl,cpm1";
-                       ranges;
--                      reg = <9c0 40>;
-+                      reg = <0x9c0 0x40>;
-                       brg-frequency = <0>;
-                       interrupts = <0 2>;     // cpm error interrupt
-                       interrupt-parent = <&CPM_PIC>;
-@@ -108,11 +110,11 @@
-                       muram@2000 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 2000 2000>;
-+                              ranges = <0x0 0x2000 0x2000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 1c00>;
-+                                      reg = <0x0 0x1c00>;
-                               };
-                       };
-@@ -120,7 +122,7 @@
-                               compatible = "fsl,mpc866-brg",
-                                            "fsl,cpm1-brg",
-                                            "fsl,cpm-brg";
--                              reg = <9f0 10>;
-+                              reg = <0x9f0 0x10>;
-                               clock-frequency = <0>;
-                       };
-@@ -130,7 +132,7 @@
-                               #interrupt-cells = <1>;
-                               interrupts = <5 2 0 2>;
-                               interrupt-parent = <&PIC>;
--                              reg = <930 20>;
-+                              reg = <0x930 0x20>;
-                               compatible = "fsl,mpc866-cpm-pic",
-                                            "fsl,cpm1-pic";
-                       };
-@@ -140,31 +142,31 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc866-smc-uart",
-                                            "fsl,cpm1-smc-uart";
--                              reg = <a80 10 3e80 40>;
-+                              reg = <0xa80 0x10 0x3e80 0x40>;
-                               interrupts = <4>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-brg = <1>;
--                              fsl,cpm-command = <0090>;
-+                              fsl,cpm-command = <0x90>;
-                       };
-                       serial@a90 {
-                               device_type = "serial";
-                               compatible = "fsl,mpc866-smc-uart",
-                                            "fsl,cpm1-smc-uart";
--                              reg = <a90 10 3f80 40>;
-+                              reg = <0xa90 0x10 0x3f80 0x40>;
-                               interrupts = <3>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-brg = <2>;
--                              fsl,cpm-command = <00d0>;
-+                              fsl,cpm-command = <0xd0>;
-                       };
-                       ethernet@a00 {
-                               device_type = "network";
-                               compatible = "fsl,mpc866-scc-enet",
-                                            "fsl,cpm1-scc-enet";
--                              reg = <a00 18 3c00 100>;
-+                              reg = <0xa00 0x18 0x3c00 0x100>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
--                              interrupts = <1e>;
-+                              interrupts = <30>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-command = <0000>;
-                               linux,network-index = <1>;
---- a/arch/powerpc/boot/dts/mpc885ads.dts
-+++ b/arch/powerpc/boot/dts/mpc885ads.dts
-@@ -2,7 +2,7 @@
-  * MPC885 ADS Device Tree Source
-  *
-  * Copyright 2006 MontaVista Software, Inc.
-- * Copyright 2007 Freescale Semiconductor, Inc.
-+ * Copyright 2007,2008 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 as published by the
-@@ -10,6 +10,7 @@
-  * option) any later version.
-  */
-+/dts-v1/;
- / {
-       model = "MPC885ADS";
-@@ -23,45 +24,45 @@
-               PowerPC,885@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <d#16>;
--                      i-cache-line-size = <d#16>;
--                      d-cache-size = <d#8192>;
--                      i-cache-size = <d#8192>;
-+                      reg = <0x0>;
-+                      d-cache-line-size = <16>;
-+                      i-cache-line-size = <16>;
-+                      d-cache-size = <8192>;
-+                      i-cache-size = <8192>;
-                       timebase-frequency = <0>;
-                       bus-frequency = <0>;
-                       clock-frequency = <0>;
--                      interrupts = <f 2>;     // decrementer interrupt
-+                      interrupts = <15 2>;    // decrementer interrupt
-                       interrupt-parent = <&PIC>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <0 0>;
-+              reg = <0x0 0x0>;
-       };
-       localbus@ff000100 {
-               compatible = "fsl,mpc885-localbus", "fsl,pq1-localbus";
-               #address-cells = <2>;
-               #size-cells = <1>;
--              reg = <ff000100 40>;
-+              reg = <0xff000100 0x40>;
-               ranges = <
--                      0 0 fe000000 00800000
--                      1 0 ff080000 00008000
--                      5 0 ff0a0000 00008000
-+                      0x0 0x0 0xfe000000 0x800000
-+                      0x1 0x0 0xff080000 0x8000
-+                      0x5 0x0 0xff0a0000 0x8000
-               >;
-               flash@0,0 {
-                       compatible = "jedec-flash";
--                      reg = <0 0 800000>;
-+                      reg = <0x0 0x0 0x800000>;
-                       bank-width = <4>;
-                       device-width = <1>;
-               };
-               board-control@1,0 {
--                      reg = <1 0 20 5 300 4>;
-+                      reg = <0x1 0x0 0x20 0x5 0x300 0x4>;
-                       compatible = "fsl,mpc885ads-bcsr";
-               };
-       };
-@@ -71,30 +72,30 @@
-               #address-cells = <1>;
-               #size-cells = <1>;
-               device_type = "soc";
--              ranges = <0 ff000000 00004000>;
-+              ranges = <0x0 0xff000000 0x4000>;
-               bus-frequency = <0>;
-               // Temporary -- will go away once kernel uses ranges for get_immrbase().
--              reg = <ff000000 4000>;
-+              reg = <0xff000000 0x4000>;
-               mdio@e00 {
-                       compatible = "fsl,mpc885-fec-mdio", "fsl,pq1-fec-mdio";
--                      reg = <e00 188>;
-+                      reg = <0xe00 0x188>;
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       PHY0: ethernet-phy@0 {
--                              reg = <0>;
-+                              reg = <0x0>;
-                               device_type = "ethernet-phy";
-                       };
-                       PHY1: ethernet-phy@1 {
--                              reg = <1>;
-+                              reg = <0x1>;
-                               device_type = "ethernet-phy";
-                       };
-                       PHY2: ethernet-phy@2 {
--                              reg = <2>;
-+                              reg = <0x2>;
-                               device_type = "ethernet-phy";
-                       };
-               };
-@@ -103,7 +104,7 @@
-                       device_type = "network";
-                       compatible = "fsl,mpc885-fec-enet",
-                                    "fsl,pq1-fec-enet";
--                      reg = <e00 188>;
-+                      reg = <0xe00 0x188>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       interrupts = <3 1>;
-                       interrupt-parent = <&PIC>;
-@@ -115,7 +116,7 @@
-                       device_type = "network";
-                       compatible = "fsl,mpc885-fec-enet",
-                                    "fsl,pq1-fec-enet";
--                      reg = <1e00 188>;
-+                      reg = <0x1e00 0x188>;
-                       local-mac-address = [ 00 00 00 00 00 00 ];
-                       interrupts = <7 1>;
-                       interrupt-parent = <&PIC>;
-@@ -126,7 +127,7 @@
-               PIC: interrupt-controller@0 {
-                       interrupt-controller;
-                       #interrupt-cells = <2>;
--                      reg = <0 24>;
-+                      reg = <0x0 0x24>;
-                       compatible = "fsl,mpc885-pic", "fsl,pq1-pic";
-               };
-@@ -136,29 +137,29 @@
-                       #size-cells = <2>;
-                       compatible = "fsl,pq-pcmcia";
-                       device_type = "pcmcia";
--                      reg = <80 80>;
-+                      reg = <0x80 0x80>;
-                       interrupt-parent = <&PIC>;
--                      interrupts = <d 1>;
-+                      interrupts = <13 1>;
-               };
-               cpm@9c0 {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       compatible = "fsl,mpc885-cpm", "fsl,cpm1";
--                      command-proc = <9c0>;
-+                      command-proc = <0x9c0>;
-                       interrupts = <0>;       // cpm error interrupt
-                       interrupt-parent = <&CPM_PIC>;
--                      reg = <9c0 40>;
-+                      reg = <0x9c0 0x40>;
-                       ranges;
-                       muram@2000 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 2000 2000>;
-+                              ranges = <0x0 0x2000 0x2000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 1c00>;
-+                                      reg = <0x0 0x1c00>;
-                               };
-                       };
-@@ -167,7 +168,7 @@
-                                            "fsl,cpm1-brg",
-                                            "fsl,cpm-brg";
-                               clock-frequency = <0>;
--                              reg = <9f0 10>;
-+                              reg = <0x9f0 0x10>;
-                       };
-                       CPM_PIC: interrupt-controller@930 {
-@@ -175,7 +176,7 @@
-                               #interrupt-cells = <1>;
-                               interrupts = <5 2 0 2>;
-                               interrupt-parent = <&PIC>;
--                              reg = <930 20>;
-+                              reg = <0x930 0x20>;
-                               compatible = "fsl,mpc885-cpm-pic",
-                                            "fsl,cpm1-pic";
-                       };
-@@ -184,34 +185,34 @@
-                               device_type = "serial";
-                               compatible = "fsl,mpc885-smc-uart",
-                                            "fsl,cpm1-smc-uart";
--                              reg = <a80 10 3e80 40>;
-+                              reg = <0xa80 0x10 0x3e80 0x40>;
-                               interrupts = <4>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-brg = <1>;
--                              fsl,cpm-command = <0090>;
-+                              fsl,cpm-command = <0x90>;
-                       };
-                       serial@a90 {
-                               device_type = "serial";
-                               compatible = "fsl,mpc885-smc-uart",
-                                            "fsl,cpm1-smc-uart";
--                              reg = <a90 10 3f80 40>;
-+                              reg = <0xa90 0x10 0x3f80 0x40>;
-                               interrupts = <3>;
-                               interrupt-parent = <&CPM_PIC>;
-                               fsl,cpm-brg = <2>;
--                              fsl,cpm-command = <00d0>;
-+                              fsl,cpm-command = <0xd0>;
-                       };
-                       ethernet@a40 {
-                               device_type = "network";
-                               compatible = "fsl,mpc885-scc-enet",
-                                            "fsl,cpm1-scc-enet";
--                              reg = <a40 18 3e00 100>;
-+                              reg = <0xa40 0x18 0x3e00 0x100>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
--                              interrupts = <1c>;
-+                              interrupts = <28>;
-                               interrupt-parent = <&CPM_PIC>;
-                               phy-handle = <&PHY2>;
--                              fsl,cpm-command = <0080>;
-+                              fsl,cpm-command = <0x80>;
-                               linux,network-index = <2>;
-                       };
-               };
---- a/arch/powerpc/boot/dts/pq2fads.dts
-+++ b/arch/powerpc/boot/dts/pq2fads.dts
-@@ -1,7 +1,7 @@
- /*
-  * Device Tree for the PQ2FADS-ZU board with an MPC8280 chip.
-  *
-- * Copyright 2007 Freescale Semiconductor Inc.
-+ * Copyright 2007,2008 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 as published by the
-@@ -9,6 +9,8 @@
-  * option) any later version.
-  */
-+/dts-v1/;
-+
- / {
-       model = "pq2fads";
-       compatible = "fsl,pq2fads";
-@@ -21,11 +23,11 @@
-               cpu@0 {
-                       device_type = "cpu";
--                      reg = <0>;
--                      d-cache-line-size = <d#32>;
--                      i-cache-line-size = <d#32>;
--                      d-cache-size = <d#16384>;
--                      i-cache-size = <d#16384>;
-+                      reg = <0x0>;
-+                      d-cache-line-size = <32>;
-+                      i-cache-line-size = <32>;
-+                      d-cache-size = <16384>;
-+                      i-cache-size = <16384>;
-                       timebase-frequency = <0>;
-                       clock-frequency = <0>;
-               };
-@@ -33,7 +35,7 @@
-       memory {
-               device_type = "memory";
--              reg = <0 0>;
-+              reg = <0x0 0x0>;
-       };
-       localbus@f0010100 {
-@@ -41,67 +43,67 @@
-                            "fsl,pq2-localbus";
-               #address-cells = <2>;
-               #size-cells = <1>;
--              reg = <f0010100 60>;
-+              reg = <0xf0010100 0x60>;
--              ranges = <0 0 fe000000 00800000
--                        1 0 f4500000 00008000
--                        8 0 f8200000 00008000>;
-+              ranges = <0x0 0x0 0xfe000000 0x800000
-+                        0x1 0x0 0xf4500000 0x8000
-+                        0x8 0x0 0xf8200000 0x8000>;
-               flash@0,0 {
-                       compatible = "jedec-flash";
--                      reg = <0 0 800000>;
-+                      reg = <0x0 0x0 0x800000>;
-                       bank-width = <4>;
-                       device-width = <1>;
-               };
-               bcsr@1,0 {
--                      reg = <1 0 20>;
-+                      reg = <0x1 0x0 0x20>;
-                       compatible = "fsl,pq2fads-bcsr";
-               };
-               PCI_PIC: pic@8,0 {
-                       #interrupt-cells = <1>;
-                       interrupt-controller;
--                      reg = <8 0 8>;
-+                      reg = <0x8 0x0 0x8>;
-                       compatible = "fsl,pq2ads-pci-pic";
-                       interrupt-parent = <&PIC>;
--                      interrupts = <18 8>;
-+                      interrupts = <24 8>;
-               };
-       };
-       pci@f0010800 {
-               device_type = "pci";
--              reg = <f0010800 10c f00101ac 8 f00101c4 8>;
-+              reg = <0xf0010800 0x10c 0xf00101ac 0x8 0xf00101c4 0x8>;
-               compatible = "fsl,mpc8280-pci", "fsl,pq2-pci";
-               #interrupt-cells = <1>;
-               #size-cells = <2>;
-               #address-cells = <3>;
--              clock-frequency = <d#66000000>;
--              interrupt-map-mask = <f800 0 0 7>;
-+              clock-frequency = <66000000>;
-+              interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-               interrupt-map = <
-                               /* IDSEL 0x16 */
--                               b000 0 0 1 &PCI_PIC 0
--                               b000 0 0 2 &PCI_PIC 1
--                               b000 0 0 3 &PCI_PIC 2
--                               b000 0 0 4 &PCI_PIC 3
-+                               0xb000 0x0 0x0 0x1 &PCI_PIC 0
-+                               0xb000 0x0 0x0 0x2 &PCI_PIC 1
-+                               0xb000 0x0 0x0 0x3 &PCI_PIC 2
-+                               0xb000 0x0 0x0 0x4 &PCI_PIC 3
-                               /* IDSEL 0x17 */
--                               b800 0 0 1 &PCI_PIC 4
--                               b800 0 0 2 &PCI_PIC 5
--                               b800 0 0 3 &PCI_PIC 6
--                               b800 0 0 4 &PCI_PIC 7
-+                               0xb800 0x0 0x0 0x1 &PCI_PIC 4
-+                               0xb800 0x0 0x0 0x2 &PCI_PIC 5
-+                               0xb800 0x0 0x0 0x3 &PCI_PIC 6
-+                               0xb800 0x0 0x0 0x4 &PCI_PIC 7
-                               /* IDSEL 0x18 */
--                               c000 0 0 1 &PCI_PIC 8
--                               c000 0 0 2 &PCI_PIC 9
--                               c000 0 0 3 &PCI_PIC a
--                               c000 0 0 4 &PCI_PIC b>;
-+                               0xc000 0x0 0x0 0x1 &PCI_PIC 8
-+                               0xc000 0x0 0x0 0x2 &PCI_PIC 9
-+                               0xc000 0x0 0x0 0x3 &PCI_PIC 10
-+                               0xc000 0x0 0x0 0x4 &PCI_PIC 11>;
-               interrupt-parent = <&PIC>;
--              interrupts = <12 8>;
--              ranges = <42000000 0 80000000 80000000 0 20000000
--                        02000000 0 a0000000 a0000000 0 20000000
--                        01000000 0 00000000 f6000000 0 02000000>;
-+              interrupts = <18 8>;
-+              ranges = <0x42000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x2000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x1000000 0x0 0x0 0xf6000000 0x0 0x2000000>;
-       };
-       soc@f0000000 {
-@@ -109,27 +111,27 @@
-               #size-cells = <1>;
-               device_type = "soc";
-               compatible = "fsl,mpc8280", "fsl,pq2-soc";
--              ranges = <00000000 f0000000 00053000>;
-+              ranges = <0x0 0xf0000000 0x53000>;
-               // Temporary -- will go away once kernel uses ranges for get_immrbase().
--              reg = <f0000000 00053000>;
-+              reg = <0xf0000000 0x53000>;
-               cpm@119c0 {
-                       #address-cells = <1>;
-                       #size-cells = <1>;
-                       #interrupt-cells = <2>;
-                       compatible = "fsl,mpc8280-cpm", "fsl,cpm2";
--                      reg = <119c0 30>;
-+                      reg = <0x119c0 0x30>;
-                       ranges;
-                       muram@0 {
-                               #address-cells = <1>;
-                               #size-cells = <1>;
--                              ranges = <0 0 10000>;
-+                              ranges = <0x0 0x0 0x10000>;
-                               data@0 {
-                                       compatible = "fsl,cpm-muram-data";
--                                      reg = <0 2000 9800 800>;
-+                                      reg = <0x0 0x2000 0x9800 0x800>;
-                               };
-                       };
-@@ -137,53 +139,53 @@
-                               compatible = "fsl,mpc8280-brg",
-                                            "fsl,cpm2-brg",
-                                            "fsl,cpm-brg";
--                              reg = <119f0 10 115f0 10>;
-+                              reg = <0x119f0 0x10 0x115f0 0x10>;
-                       };
-                       serial@11a00 {
-                               device_type = "serial";
-                               compatible = "fsl,mpc8280-scc-uart",
-                                            "fsl,cpm2-scc-uart";
--                              reg = <11a00 20 8000 100>;
--                              interrupts = <28 8>;
-+                              reg = <0x11a00 0x20 0x8000 0x100>;
-+                              interrupts = <40 8>;
-                               interrupt-parent = <&PIC>;
-                               fsl,cpm-brg = <1>;
--                              fsl,cpm-command = <00800000>;
-+                              fsl,cpm-command = <0x800000>;
-                       };
-                       serial@11a20 {
-                               device_type = "serial";
-                               compatible = "fsl,mpc8280-scc-uart",
-                                            "fsl,cpm2-scc-uart";
--                              reg = <11a20 20 8100 100>;
--                              interrupts = <29 8>;
-+                              reg = <0x11a20 0x20 0x8100 0x100>;
-+                              interrupts = <41 8>;
-                               interrupt-parent = <&PIC>;
-                               fsl,cpm-brg = <2>;
--                              fsl,cpm-command = <04a00000>;
-+                              fsl,cpm-command = <0x4a00000>;
-                       };
-                       ethernet@11320 {
-                               device_type = "network";
-                               compatible = "fsl,mpc8280-fcc-enet",
-                                            "fsl,cpm2-fcc-enet";
--                              reg = <11320 20 8500 100 113b0 1>;
--                              interrupts = <21 8>;
-+                              reg = <0x11320 0x20 0x8500 0x100 0x113b0 0x1>;
-+                              interrupts = <33 8>;
-                               interrupt-parent = <&PIC>;
-                               phy-handle = <&PHY0>;
-                               linux,network-index = <0>;
--                              fsl,cpm-command = <16200300>;
-+                              fsl,cpm-command = <0x16200300>;
-                       };
-                       ethernet@11340 {
-                               device_type = "network";
-                               compatible = "fsl,mpc8280-fcc-enet",
-                                            "fsl,cpm2-fcc-enet";
--                              reg = <11340 20 8600 100 113d0 1>;
--                              interrupts = <22 8>;
-+                              reg = <0x11340 0x20 0x8600 0x100 0x113d0 0x1>;
-+                              interrupts = <34 8>;
-                               interrupt-parent = <&PIC>;
-                               phy-handle = <&PHY1>;
-                               linux,network-index = <1>;
--                              fsl,cpm-command = <1a400300>;
-+                              fsl,cpm-command = <0x1a400300>;
-                               local-mac-address = [00 e0 0c 00 79 01];
-                       };
-@@ -194,21 +196,21 @@
-                                            "fsl,cpm2-mdio-bitbang";
-                               #address-cells = <1>;
-                               #size-cells = <0>;
--                              reg = <10d40 14>;
-+                              reg = <0x10d40 0x14>;
-                               fsl,mdio-pin = <9>;
--                              fsl,mdc-pin = <a>;
-+                              fsl,mdc-pin = <10>;
-                               PHY0: ethernet-phy@0 {
-                                       interrupt-parent = <&PIC>;
--                                      interrupts = <19 2>;
--                                      reg = <0>;
-+                                      interrupts = <25 2>;
-+                                      reg = <0x0>;
-                                       device_type = "ethernet-phy";
-                               };
-                               PHY1: ethernet-phy@1 {
-                                       interrupt-parent = <&PIC>;
--                                      interrupts = <19 2>;
--                                      reg = <3>;
-+                                      interrupts = <25 2>;
-+                                      reg = <0x3>;
-                                       device_type = "ethernet-phy";
-                               };
-                       };
-@@ -218,17 +220,17 @@
-                               #size-cells = <0>;
-                               compatible = "fsl,mpc8280-usb",
-                                            "fsl,cpm2-usb";
--                              reg = <11b60 18 8b00 100>;
-+                              reg = <0x11b60 0x18 0x8b00 0x100>;
-                               interrupt-parent = <&PIC>;
--                              interrupts = <b 8>;
--                              fsl,cpm-command = <2e600000>;
-+                              interrupts = <11 8>;
-+                              fsl,cpm-command = <0x2e600000>;
-                       };
-               };
-               PIC: interrupt-controller@10c00 {
-                       #interrupt-cells = <2>;
-                       interrupt-controller;
--                      reg = <10c00 80>;
-+                      reg = <0x10c00 0x80>;
-                       compatible = "fsl,mpc8280-pic", "fsl,cpm2-pic";
-               };
---- a/arch/powerpc/boot/dts/prpmc2800.dts
-+++ b/arch/powerpc/boot/dts/prpmc2800.dts
-@@ -11,6 +11,8 @@
-  * if it can determine the exact PrPMC type.
-  */
-+/dts-v1/;
-+
- / {
-       #address-cells = <1>;
-       #size-cells = <1>;
-@@ -25,46 +27,46 @@
-               PowerPC,7447 {
-                       device_type = "cpu";
-                       reg = <0>;
--                      clock-frequency = <2bb0b140>;   /* Default (733 MHz) */
--                      bus-frequency = <7f28155>;      /* 133.333333 MHz */
--                      timebase-frequency = <1fca055>; /* 33.333333 MHz */
--                      i-cache-line-size = <20>;
--                      d-cache-line-size = <20>;
--                      i-cache-size = <8000>;
--                      d-cache-size = <8000>;
-+                      clock-frequency = <733333333>;  /* Default */
-+                      bus-frequency = <133333333>;
-+                      timebase-frequency = <33333333>;
-+                      i-cache-line-size = <32>;
-+                      d-cache-line-size = <32>;
-+                      i-cache-size = <32768>;
-+                      d-cache-size = <32768>;
-               };
-       };
-       memory {
-               device_type = "memory";
--              reg = <00000000 20000000>;      /* Default (512MB) */
-+              reg = <0x0 0x20000000>;                 /* Default (512MB) */
-       };
--      mv64x60@f1000000 { /* Marvell Discovery */
-+      system-controller@f1000000 { /* Marvell Discovery mv64360 */
-               #address-cells = <1>;
-               #size-cells = <1>;
-               model = "mv64360";                      /* Default */
--              compatible = "marvell,mv64x60";
--              clock-frequency = <7f28155>;            /* 133.333333 MHz */
--              reg = <f1000000 00010000>;
--              virtual-reg = <f1000000>;
--              ranges = <88000000 88000000 01000000    /* PCI 0 I/O Space */
--                        80000000 80000000 08000000    /* PCI 0 MEM Space */
--                        a0000000 a0000000 04000000    /* User FLASH */
--                        00000000 f1000000 00010000    /* Bridge's regs */
--                        f2000000 f2000000 00040000>;  /* Integrated SRAM */
-+              compatible = "marvell,mv64360";
-+              clock-frequency = <133333333>;
-+              reg = <0xf1000000 0x10000>;
-+              virtual-reg = <0xf1000000>;
-+              ranges = <0x88000000 0x88000000 0x1000000 /* PCI 0 I/O Space */
-+                        0x80000000 0x80000000 0x8000000 /* PCI 0 MEM Space */
-+                        0xa0000000 0xa0000000 0x4000000 /* User FLASH */
-+                        0x00000000 0xf1000000 0x0010000 /* Bridge's regs */
-+                        0xf2000000 0xf2000000 0x0040000>;/* Integrated SRAM */
-               flash@a0000000 {
-                       device_type = "rom";
-                       compatible = "direct-mapped";
--                      reg = <a0000000 4000000>; /* Default (64MB) */
-+                      reg = <0xa0000000 0x4000000>; /* Default (64MB) */
-                       probe-type = "CFI";
-                       bank-width = <4>;
--                      partitions = <00000000 00100000 /* RO */
--                                    00100000 00040001 /* RW */
--                                    00140000 00400000 /* RO */
--                                    00540000 039c0000 /* RO */
--                                    03f00000 00100000>; /* RO */
-+                      partitions = <0x00000000 0x00100000 /* RO */
-+                                    0x00100000 0x00040001 /* RW */
-+                                    0x00140000 0x00400000 /* RO */
-+                                    0x00540000 0x039c0000 /* RO */
-+                                    0x03f00000 0x00100000>; /* RO */
-                       partition-names = "FW Image A", "FW Config Data", "Kernel Image", "Filesystem", "FW Image B";
-               };
-@@ -72,171 +74,153 @@
-                       #address-cells = <1>;
-                       #size-cells = <0>;
-                       device_type = "mdio";
--                      compatible = "marvell,mv64x60-mdio";
--                      ethernet-phy@1 {
-+                      compatible = "marvell,mv64360-mdio";
-+                      PHY0: ethernet-phy@1 {
-                               device_type = "ethernet-phy";
-                               compatible = "broadcom,bcm5421";
--                              interrupts = <4c>;      /* GPP 12 */
--                              interrupt-parent = <&/mv64x60/pic>;
-+                              interrupts = <76>;      /* GPP 12 */
-+                              interrupt-parent = <&PIC>;
-                               reg = <1>;
-                       };
--                      ethernet-phy@3 {
-+                      PHY1: ethernet-phy@3 {
-                               device_type = "ethernet-phy";
-                               compatible = "broadcom,bcm5421";
--                              interrupts = <4c>;      /* GPP 12 */
--                              interrupt-parent = <&/mv64x60/pic>;
-+                              interrupts = <76>;      /* GPP 12 */
-+                              interrupt-parent = <&PIC>;
-                               reg = <3>;
-                       };
-               };
--              ethernet@2000 {
--                      reg = <2000 2000>;
--                      eth0 {
-+              ethernet-group@2000 {
-+                      #address-cells = <1>;
-+                      #size-cells = <0>;
-+                      compatible = "marvell,mv64360-eth-group";
-+                      reg = <0x2000 0x2000>;
-+                      ethernet@0 {
-                               device_type = "network";
--                              compatible = "marvell,mv64x60-eth";
--                              block-index = <0>;
--                              interrupts = <20>;
--                              interrupt-parent = <&/mv64x60/pic>;
--                              phy = <&/mv64x60/mdio/ethernet-phy@1>;
-+                              compatible = "marvell,mv64360-eth";
-+                              reg = <0>;
-+                              interrupts = <32>;
-+                              interrupt-parent = <&PIC>;
-+                              phy = <&PHY0>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
-                       };
--                      eth1 {
-+                      ethernet@1 {
-                               device_type = "network";
--                              compatible = "marvell,mv64x60-eth";
--                              block-index = <1>;
--                              interrupts = <21>;
--                              interrupt-parent = <&/mv64x60/pic>;
--                              phy = <&/mv64x60/mdio/ethernet-phy@3>;
-+                              compatible = "marvell,mv64360-eth";
-+                              reg = <1>;
-+                              interrupts = <33>;
-+                              interrupt-parent = <&PIC>;
-+                              phy = <&PHY1>;
-                               local-mac-address = [ 00 00 00 00 00 00 ];
-                       };
-               };
--              sdma@4000 {
--                      device_type = "dma";
--                      compatible = "marvell,mv64x60-sdma";
--                      reg = <4000 c18>;
--                      virtual-reg = <f1004000>;
--                      interrupt-base = <0>;
--                      interrupts = <24>;
--                      interrupt-parent = <&/mv64x60/pic>;
--              };
--
--              sdma@6000 {
--                      device_type = "dma";
--                      compatible = "marvell,mv64x60-sdma";
--                      reg = <6000 c18>;
--                      virtual-reg = <f1006000>;
--                      interrupt-base = <0>;
--                      interrupts = <26>;
--                      interrupt-parent = <&/mv64x60/pic>;
--              };
--
--              brg@b200 {
--                      compatible = "marvell,mv64x60-brg";
--                      reg = <b200 8>;
-+              SDMA0: sdma@4000 {
-+                      compatible = "marvell,mv64360-sdma";
-+                      reg = <0x4000 0xc18>;
-+                      virtual-reg = <0xf1004000>;
-+                      interrupts = <36>;
-+                      interrupt-parent = <&PIC>;
-+              };
-+
-+              SDMA1: sdma@6000 {
-+                      compatible = "marvell,mv64360-sdma";
-+                      reg = <0x6000 0xc18>;
-+                      virtual-reg = <0xf1006000>;
-+                      interrupts = <38>;
-+                      interrupt-parent = <&PIC>;
-+              };
-+
-+              BRG0: brg@b200 {
-+                      compatible = "marvell,mv64360-brg";
-+                      reg = <0xb200 0x8>;
-                       clock-src = <8>;
--                      clock-frequency = <7ed6b40>;
--                      current-speed = <2580>;
--                      bcr = <0>;
-+                      clock-frequency = <133333333>;
-+                      current-speed = <9600>;
-               };
--              brg@b208 {
--                      compatible = "marvell,mv64x60-brg";
--                      reg = <b208 8>;
-+              BRG1: brg@b208 {
-+                      compatible = "marvell,mv64360-brg";
-+                      reg = <0xb208 0x8>;
-                       clock-src = <8>;
--                      clock-frequency = <7ed6b40>;
--                      current-speed = <2580>;
--                      bcr = <0>;
-+                      clock-frequency = <133333333>;
-+                      current-speed = <9600>;
-               };
--              cunit@f200 {
--                      reg = <f200 200>;
-+              CUNIT: cunit@f200 {
-+                      reg = <0xf200 0x200>;
-               };
--              mpscrouting@b400 {
--                      reg = <b400 c>;
-+              MPSCROUTING: mpscrouting@b400 {
-+                      reg = <0xb400 0xc>;
-               };
--              mpscintr@b800 {
--                      reg = <b800 100>;
--                      virtual-reg = <f100b800>;
-+              MPSCINTR: mpscintr@b800 {
-+                      reg = <0xb800 0x100>;
-+                      virtual-reg = <0xf100b800>;
-               };
--              mpsc@8000 {
-+              MPSC0: mpsc@8000 {
-                       device_type = "serial";
--                      compatible = "marvell,mpsc";
--                      reg = <8000 38>;
--                      virtual-reg = <f1008000>;
--                      sdma = <&/mv64x60/sdma@4000>;
--                      brg = <&/mv64x60/brg@b200>;
--                      cunit = <&/mv64x60/cunit@f200>;
--                      mpscrouting = <&/mv64x60/mpscrouting@b400>;
--                      mpscintr = <&/mv64x60/mpscintr@b800>;
--                      block-index = <0>;
--                      max_idle = <28>;
--                      chr_1 = <0>;
--                      chr_2 = <0>;
--                      chr_10 = <3>;
--                      mpcr = <0>;
--                      interrupts = <28>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-mpsc";
-+                      reg = <0x8000 0x38>;
-+                      virtual-reg = <0xf1008000>;
-+                      sdma = <&SDMA0>;
-+                      brg = <&BRG0>;
-+                      cunit = <&CUNIT>;
-+                      mpscrouting = <&MPSCROUTING>;
-+                      mpscintr = <&MPSCINTR>;
-+                      cell-index = <0>;
-+                      interrupts = <40>;
-+                      interrupt-parent = <&PIC>;
-               };
--              mpsc@9000 {
-+              MPSC1: mpsc@9000 {
-                       device_type = "serial";
--                      compatible = "marvell,mpsc";
--                      reg = <9000 38>;
--                      virtual-reg = <f1009000>;
--                      sdma = <&/mv64x60/sdma@6000>;
--                      brg = <&/mv64x60/brg@b208>;
--                      cunit = <&/mv64x60/cunit@f200>;
--                      mpscrouting = <&/mv64x60/mpscrouting@b400>;
--                      mpscintr = <&/mv64x60/mpscintr@b800>;
--                      block-index = <1>;
--                      max_idle = <28>;
--                      chr_1 = <0>;
--                      chr_2 = <0>;
--                      chr_10 = <3>;
--                      mpcr = <0>;
--                      interrupts = <2a>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-mpsc";
-+                      reg = <0x9000 0x38>;
-+                      virtual-reg = <0xf1009000>;
-+                      sdma = <&SDMA1>;
-+                      brg = <&BRG1>;
-+                      cunit = <&CUNIT>;
-+                      mpscrouting = <&MPSCROUTING>;
-+                      mpscintr = <&MPSCINTR>;
-+                      cell-index = <1>;
-+                      interrupts = <42>;
-+                      interrupt-parent = <&PIC>;
-               };
-               wdt@b410 {                      /* watchdog timer */
--                      compatible = "marvell,mv64x60-wdt";
--                      reg = <b410 8>;
--                      timeout = <a>;          /* wdt timeout in seconds */
-+                      compatible = "marvell,mv64360-wdt";
-+                      reg = <0xb410 0x8>;
-               };
-               i2c@c000 {
-                       device_type = "i2c";
--                      compatible = "marvell,mv64x60-i2c";
--                      reg = <c000 20>;
--                      virtual-reg = <f100c000>;
--                      freq_m = <8>;
--                      freq_n = <3>;
--                      timeout = <3e8>;                /* 1000 = 1 second */
--                      retries = <1>;
--                      interrupts = <25>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-i2c";
-+                      reg = <0xc000 0x20>;
-+                      virtual-reg = <0xf100c000>;
-+                      interrupts = <37>;
-+                      interrupt-parent = <&PIC>;
-               };
--              pic {
-+              PIC: pic {
-                       #interrupt-cells = <1>;
-                       #address-cells = <0>;
--                      compatible = "marvell,mv64x60-pic";
--                      reg = <0000 88>;
-+                      compatible = "marvell,mv64360-pic";
-+                      reg = <0x0 0x88>;
-                       interrupt-controller;
-               };
-               mpp@f000 {
--                      compatible = "marvell,mv64x60-mpp";
--                      reg = <f000 10>;
-+                      compatible = "marvell,mv64360-mpp";
-+                      reg = <0xf000 0x10>;
-               };
-               gpp@f100 {
--                      compatible = "marvell,mv64x60-gpp";
--                      reg = <f100 20>;
-+                      compatible = "marvell,mv64360-gpp";
-+                      reg = <0xf100 0x20>;
-               };
-               pci@80000000 {
-@@ -244,73 +228,75 @@
-                       #size-cells = <2>;
-                       #interrupt-cells = <1>;
-                       device_type = "pci";
--                      compatible = "marvell,mv64x60-pci";
--                      reg = <0cf8 8>;
--                      ranges = <01000000 0        0 88000000 0 01000000
--                                02000000 0 80000000 80000000 0 08000000>;
--                      bus-range = <0 ff>;
--                      clock-frequency = <3EF1480>;
--                      interrupt-pci-iack = <0c34>;
--                      interrupt-parent = <&/mv64x60/pic>;
--                      interrupt-map-mask = <f800 0 0 7>;
-+                      compatible = "marvell,mv64360-pci";
-+                      reg = <0xcf8 0x8>;
-+                      ranges = <0x01000000 0x0        0x0
-+                                      0x88000000 0x0 0x01000000
-+                                0x02000000 0x0 0x80000000
-+                                      0x80000000 0x0 0x08000000>;
-+                      bus-range = <0 255>;
-+                      clock-frequency = <66000000>;
-+                      interrupt-pci-iack = <0xc34>;
-+                      interrupt-parent = <&PIC>;
-+                      interrupt-map-mask = <0xf800 0x0 0x0 0x7>;
-                       interrupt-map = <
-                               /* IDSEL 0x0a */
--                              5000 0 0 1 &/mv64x60/pic 50
--                              5000 0 0 2 &/mv64x60/pic 51
--                              5000 0 0 3 &/mv64x60/pic 5b
--                              5000 0 0 4 &/mv64x60/pic 5d
-+                              0x5000 0 0 1 &PIC 80
-+                              0x5000 0 0 2 &PIC 81
-+                              0x5000 0 0 3 &PIC 91
-+                              0x5000 0 0 4 &PIC 93
-                               /* IDSEL 0x0b */
--                              5800 0 0 1 &/mv64x60/pic 5b
--                              5800 0 0 2 &/mv64x60/pic 5d
--                              5800 0 0 3 &/mv64x60/pic 50
--                              5800 0 0 4 &/mv64x60/pic 51
-+                              0x5800 0 0 1 &PIC 91
-+                              0x5800 0 0 2 &PIC 93
-+                              0x5800 0 0 3 &PIC 80
-+                              0x5800 0 0 4 &PIC 81
-                               /* IDSEL 0x0c */
--                              6000 0 0 1 &/mv64x60/pic 5b
--                              6000 0 0 2 &/mv64x60/pic 5d
--                              6000 0 0 3 &/mv64x60/pic 50
--                              6000 0 0 4 &/mv64x60/pic 51
-+                              0x6000 0 0 1 &PIC 91
-+                              0x6000 0 0 2 &PIC 93
-+                              0x6000 0 0 3 &PIC 80
-+                              0x6000 0 0 4 &PIC 81
-                               /* IDSEL 0x0d */
--                              6800 0 0 1 &/mv64x60/pic 5d
--                              6800 0 0 2 &/mv64x60/pic 50
--                              6800 0 0 3 &/mv64x60/pic 51
--                              6800 0 0 4 &/mv64x60/pic 5b
-+                              0x6800 0 0 1 &PIC 93
-+                              0x6800 0 0 2 &PIC 80
-+                              0x6800 0 0 3 &PIC 81
-+                              0x6800 0 0 4 &PIC 91
-                       >;
-               };
-               cpu-error@0070 {
--                      compatible = "marvell,mv64x60-cpu-error";
--                      reg = <0070 10 0128 28>;
--                      interrupts = <03>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-cpu-error";
-+                      reg = <0x70 0x10 0x128 0x28>;
-+                      interrupts = <3>;
-+                      interrupt-parent = <&PIC>;
-               };
-               sram-ctrl@0380 {
--                      compatible = "marvell,mv64x60-sram-ctrl";
--                      reg = <0380 80>;
--                      interrupts = <0d>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-sram-ctrl";
-+                      reg = <0x380 0x80>;
-+                      interrupts = <13>;
-+                      interrupt-parent = <&PIC>;
-               };
-               pci-error@1d40 {
--                      compatible = "marvell,mv64x60-pci-error";
--                      reg = <1d40 40 0c28 4>;
--                      interrupts = <0c>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-pci-error";
-+                      reg = <0x1d40 0x40 0xc28 0x4>;
-+                      interrupts = <12>;
-+                      interrupt-parent = <&PIC>;
-               };
-               mem-ctrl@1400 {
--                      compatible = "marvell,mv64x60-mem-ctrl";
--                      reg = <1400 60>;
--                      interrupts = <11>;
--                      interrupt-parent = <&/mv64x60/pic>;
-+                      compatible = "marvell,mv64360-mem-ctrl";
-+                      reg = <0x1400 0x60>;
-+                      interrupts = <17>;
-+                      interrupt-parent = <&PIC>;
-               };
-       };
-       chosen {
-               bootargs = "ip=on";
--              linux,stdout-path = "/mv64x60@f1000000/mpsc@8000";
-+              linux,stdout-path = &MPSC0;
-       };
- };
---- a/arch/powerpc/boot/dts/rainier.dts
-+++ b/arch/powerpc/boot/dts/rainier.dts
-@@ -254,7 +254,6 @@
-                       };
-                       EMAC0: ethernet@ef600e00 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4";
-                               interrupt-parent = <&EMAC0>;
-@@ -270,7 +269,7 @@
-                               mal-tx-channel = <0>;
-                               mal-rx-channel = <0>;
-                               cell-index = <0>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
-@@ -284,7 +283,6 @@
-                       };
-                       EMAC1: ethernet@ef600f00 {
--                              linux,network-index = <1>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440grx", "ibm,emac-440epx", "ibm,emac4";
-                               interrupt-parent = <&EMAC1>;
-@@ -300,7 +298,7 @@
-                               mal-tx-channel = <1>;
-                               mal-rx-channel = <1>;
-                               cell-index = <1>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
---- /dev/null
-+++ b/arch/powerpc/boot/dts/sbc8641d.dts
-@@ -0,0 +1,352 @@
-+/*
-+ * SBC8641D Device Tree Source
-+ *
-+ * Copyright 2008 Wind River Systems Inc.
-+ *
-+ * Paul Gortmaker (see MAINTAINERS for contact information)
-+ *
-+ * Based largely on the mpc8641_hpcn.dts by 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 as published by the
-+ * Free Software Foundation;  either version 2 of the  License, or (at your
-+ * option) any later version.
-+ */
-+
-+/dts-v1/;
-+
-+/ {
-+      model = "SBC8641D";
-+      compatible = "wind,sbc8641";
-+      #address-cells = <1>;
-+      #size-cells = <1>;
-+
-+      aliases {
-+              ethernet0 = &enet0;
-+              ethernet1 = &enet1;
-+              ethernet2 = &enet2;
-+              ethernet3 = &enet3;
-+              serial0 = &serial0;
-+              serial1 = &serial1;
-+              pci0 = &pci0;
-+              pci1 = &pci1;
-+      };
-+
-+      cpus {
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+
-+              PowerPC,8641@0 {
-+                      device_type = "cpu";
-+                      reg = <0>;
-+                      d-cache-line-size = <32>;
-+                      i-cache-line-size = <32>;
-+                      d-cache-size = <32768>;         // L1
-+                      i-cache-size = <32768>;         // L1
-+                      timebase-frequency = <0>;       // From uboot
-+                      bus-frequency = <0>;            // From uboot
-+                      clock-frequency = <0>;          // From uboot
-+              };
-+              PowerPC,8641@1 {
-+                      device_type = "cpu";
-+                      reg = <1>;
-+                      d-cache-line-size = <32>;
-+                      i-cache-line-size = <32>;
-+                      d-cache-size = <32768>;
-+                      i-cache-size = <32768>;
-+                      timebase-frequency = <0>;       // From uboot
-+                      bus-frequency = <0>;            // From uboot
-+                      clock-frequency = <0>;          // From uboot
-+              };
-+      };
-+
-+      memory {
-+              device_type = "memory";
-+              reg = <0x00000000 0x20000000>;  // 512M at 0x0
-+      };
-+
-+      localbus@f8005000 {
-+              #address-cells = <2>;
-+              #size-cells = <1>;
-+              compatible = "fsl,mpc8641-localbus", "simple-bus";
-+              reg = <0xf8005000 0x1000>;
-+              interrupts = <19 2>;
-+              interrupt-parent = <&mpic>;
-+
-+              ranges = <0 0 0xff000000 0x01000000     // 16MB Boot flash
-+                        1 0 0xf0000000 0x00010000     // 64KB EEPROM
-+                        2 0 0xf1000000 0x00100000     // EPLD (1MB)
-+                        3 0 0xe0000000 0x04000000     // 64MB LB SDRAM (CS3)
-+                        4 0 0xe4000000 0x04000000     // 64MB LB SDRAM (CS4)
-+                        6 0 0xf4000000 0x00100000     // LCD display (1MB)
-+                        7 0 0xe8000000 0x04000000>;   // 64MB OneNAND
-+
-+              flash@0,0 {
-+                      compatible = "cfi-flash";
-+                      reg = <0 0 0x01000000>;
-+                      bank-width = <2>;
-+                      device-width = <2>;
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      partition@0 {
-+                              label = "dtb";
-+                              reg = <0x00000000 0x00100000>;
-+                              read-only;
-+                      };
-+                      partition@300000 {
-+                              label = "kernel";
-+                              reg = <0x00100000 0x00400000>;
-+                              read-only;
-+                      };
-+                      partition@400000 {
-+                              label = "fs";
-+                              reg = <0x00500000 0x00a00000>;
-+                      };
-+                      partition@700000 {
-+                              label = "firmware";
-+                              reg = <0x00f00000 0x00100000>;
-+                              read-only;
-+                      };
-+              };
-+
-+              epld@2,0 {
-+                      compatible = "wrs,epld-localbus";
-+                      #address-cells = <2>;
-+                      #size-cells = <1>;
-+                      reg = <2 0 0x100000>;
-+                      ranges = <0 0 5 0 1     // User switches
-+                                1 0 5 1 1     // Board ID/Rev
-+                                3 0 5 3 1>;   // LEDs
-+              };
-+      };
-+
-+      soc@f8000000 {
-+              #address-cells = <1>;
-+              #size-cells = <1>;
-+              device_type = "soc";
-+              compatible = "simple-bus";
-+              ranges = <0x00000000 0xf8000000 0x00100000>;
-+              reg = <0xf8000000 0x00001000>;  // CCSRBAR
-+              bus-frequency = <0>;
-+
-+              i2c@3000 {
-+                      #address-cells = <1>;
-+                      #size-cells = <0>;
-+                      cell-index = <0>;
-+                      compatible = "fsl-i2c";
-+                      reg = <0x3000 0x100>;
-+                      interrupts = <43 2>;
-+                      interrupt-parent = <&mpic>;
-+                      dfsrr;
-+              };
-+
-+              i2c@3100 {
-+                      #address-cells = <1>;
-+                      #size-cells = <0>;
-+                      cell-index = <1>;
-+                      compatible = "fsl-i2c";
-+                      reg = <0x3100 0x100>;
-+                      interrupts = <43 2>;
-+                      interrupt-parent = <&mpic>;
-+                      dfsrr;
-+              };
-+
-+              mdio@24520 {
-+                      #address-cells = <1>;
-+                      #size-cells = <0>;
-+                      compatible = "fsl,gianfar-mdio";
-+                      reg = <0x24520 0x20>;
-+
-+                      phy0: ethernet-phy@1f {
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <10 1>;
-+                              reg = <0x1f>;
-+                              device_type = "ethernet-phy";
-+                      };
-+                      phy1: ethernet-phy@0 {
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <10 1>;
-+                              reg = <0>;
-+                              device_type = "ethernet-phy";
-+                      };
-+                      phy2: ethernet-phy@1 {
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <10 1>;
-+                              reg = <1>;
-+                              device_type = "ethernet-phy";
-+                      };
-+                      phy3: ethernet-phy@2 {
-+                              interrupt-parent = <&mpic>;
-+                              interrupts = <10 1>;
-+                              reg = <2>;
-+                              device_type = "ethernet-phy";
-+                      };
-+              };
-+
-+              enet0: ethernet@24000 {
-+                      cell-index = <0>;
-+                      device_type = "network";
-+                      model = "TSEC";
-+                      compatible = "gianfar";
-+                      reg = <0x24000 0x1000>;
-+                      local-mac-address = [ 00 00 00 00 00 00 ];
-+                      interrupts = <29 2 30  2 34 2>;
-+                      interrupt-parent = <&mpic>;
-+                      phy-handle = <&phy0>;
-+                      phy-connection-type = "rgmii-id";
-+              };
-+
-+              enet1: ethernet@25000 {
-+                      cell-index = <1>;
-+                      device_type = "network";
-+                      model = "TSEC";
-+                      compatible = "gianfar";
-+                      reg = <0x25000 0x1000>;
-+                      local-mac-address = [ 00 00 00 00 00 00 ];
-+                      interrupts = <35 2 36 2 40 2>;
-+                      interrupt-parent = <&mpic>;
-+                      phy-handle = <&phy1>;
-+                      phy-connection-type = "rgmii-id";
-+              };
-+
-+              enet2: ethernet@26000 {
-+                      cell-index = <2>;
-+                      device_type = "network";
-+                      model = "TSEC";
-+                      compatible = "gianfar";
-+                      reg = <0x26000 0x1000>;
-+                      local-mac-address = [ 00 00 00 00 00 00 ];
-+                      interrupts = <31 2 32 2 33 2>;
-+                      interrupt-parent = <&mpic>;
-+                      phy-handle = <&phy2>;
-+                      phy-connection-type = "rgmii-id";
-+              };
-+
-+              enet3: ethernet@27000 {
-+                      cell-index = <3>;
-+                      device_type = "network";
-+                      model = "TSEC";
-+                      compatible = "gianfar";
-+                      reg = <0x27000 0x1000>;
-+                      local-mac-address = [ 00 00 00 00 00 00 ];
-+                      interrupts = <37 2 38 2 39 2>;
-+                      interrupt-parent = <&mpic>;
-+                      phy-handle = <&phy3>;
-+                      phy-connection-type = "rgmii-id";
-+              };
-+
-+              serial0: serial@4500 {
-+                      cell-index = <0>;
-+                      device_type = "serial";
-+                      compatible = "ns16550";
-+                      reg = <0x4500 0x100>;
-+                      clock-frequency = <0>;
-+                      interrupts = <42 2>;
-+                      interrupt-parent = <&mpic>;
-+              };
-+
-+              serial1: serial@4600 {
-+                      cell-index = <1>;
-+                      device_type = "serial";
-+                      compatible = "ns16550";
-+                      reg = <0x4600 0x100>;
-+                      clock-frequency = <0>;
-+                      interrupts = <28 2>;
-+                      interrupt-parent = <&mpic>;
-+              };
-+
-+              mpic: pic@40000 {
-+                      clock-frequency = <0>;
-+                      interrupt-controller;
-+                      #address-cells = <0>;
-+                      #interrupt-cells = <2>;
-+                      reg = <0x40000 0x40000>;
-+                      compatible = "chrp,open-pic";
-+                      device_type = "open-pic";
-+                      big-endian;
-+              };
-+
-+              global-utilities@e0000 {
-+                      compatible = "fsl,mpc8641-guts";
-+                      reg = <0xe0000 0x1000>;
-+                      fsl,has-rstcr;
-+              };
-+      };
-+
-+      pci0: pcie@f8008000 {
-+              cell-index = <0>;
-+              compatible = "fsl,mpc8641-pcie";
-+              device_type = "pci";
-+              #interrupt-cells = <1>;
-+              #size-cells = <2>;
-+              #address-cells = <3>;
-+              reg = <0xf8008000 0x1000>;
-+              bus-range = <0x0 0xff>;
-+              ranges = <0x02000000 0x0 0x80000000 0x80000000 0x0 0x20000000
-+                        0x01000000 0x0 0x00000000 0xe2000000 0x0 0x00100000>;
-+              clock-frequency = <33333333>;
-+              interrupt-parent = <&mpic>;
-+              interrupts = <24 2>;
-+              interrupt-map-mask = <0xff00 0 0 7>;
-+              interrupt-map = <
-+                      /* IDSEL 0x0 */
-+                      0x0000 0 0 1 &mpic 0 1
-+                      0x0000 0 0 2 &mpic 1 1
-+                      0x0000 0 0 3 &mpic 2 1
-+                      0x0000 0 0 4 &mpic 3 1
-+                      >;
-+
-+              pcie@0 {
-+                      reg = <0 0 0 0 0>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      device_type = "pci";
-+                      ranges = <0x02000000 0x0 0x80000000
-+                                0x02000000 0x0 0x80000000
-+                                0x0 0x20000000
-+
-+                                0x01000000 0x0 0x00000000
-+                                0x01000000 0x0 0x00000000
-+                                0x0 0x00100000>;
-+              };
-+
-+      };
-+
-+      pci1: pcie@f8009000 {
-+              cell-index = <1>;
-+              compatible = "fsl,mpc8641-pcie";
-+              device_type = "pci";
-+              #interrupt-cells = <1>;
-+              #size-cells = <2>;
-+              #address-cells = <3>;
-+              reg = <0xf8009000 0x1000>;
-+              bus-range = <0 0xff>;
-+              ranges = <0x02000000 0x0 0xa0000000 0xa0000000 0x0 0x20000000
-+                        0x01000000 0x0 0x00000000 0xe3000000 0x0 0x00100000>;
-+              clock-frequency = <33333333>;
-+              interrupt-parent = <&mpic>;
-+              interrupts = <25 2>;
-+              interrupt-map-mask = <0xf800 0 0 7>;
-+              interrupt-map = <
-+                      /* IDSEL 0x0 */
-+                      0x0000 0 0 1 &mpic 4 1
-+                      0x0000 0 0 2 &mpic 5 1
-+                      0x0000 0 0 3 &mpic 6 1
-+                      0x0000 0 0 4 &mpic 7 1
-+                      >;
-+
-+              pcie@0 {
-+                      reg = <0 0 0 0 0>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      device_type = "pci";
-+                      ranges = <0x02000000 0x0 0xa0000000
-+                                0x02000000 0x0 0xa0000000
-+                                0x0 0x20000000
-+
-+                                0x01000000 0x0 0x00000000
-+                                0x01000000 0x0 0x00000000
-+                                0x0 0x00100000>;
-+              };
-+      };
-+};
---- a/arch/powerpc/boot/dts/sequoia.dts
-+++ b/arch/powerpc/boot/dts/sequoia.dts
-@@ -269,7 +269,6 @@
-                       };
-                       EMAC0: ethernet@ef600e00 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440epx", "ibm,emac4";
-                               interrupt-parent = <&EMAC0>;
-@@ -285,7 +284,7 @@
-                               mal-tx-channel = <0>;
-                               mal-rx-channel = <0>;
-                               cell-index = <0>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
-@@ -299,7 +298,6 @@
-                       };
-                       EMAC1: ethernet@ef600f00 {
--                              linux,network-index = <1>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440epx", "ibm,emac4";
-                               interrupt-parent = <&EMAC1>;
-@@ -315,7 +313,7 @@
-                               mal-tx-channel = <1>;
-                               mal-rx-channel = <1>;
-                               cell-index = <1>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
---- a/arch/powerpc/boot/dts/taishan.dts
-+++ b/arch/powerpc/boot/dts/taishan.dts
-@@ -104,6 +104,16 @@
-               // FIXME: anything else?
-       };
-+      L2C0: l2c {
-+              compatible = "ibm,l2-cache-440gx", "ibm,l2-cache";
-+              dcr-reg = <20 8                 /* Internal SRAM DCR's */
-+                         30 8>;               /* L2 cache DCR's */
-+              cache-line-size = <20>;         /* 32 bytes */
-+              cache-size = <40000>;           /* L2, 256K */
-+              interrupt-parent = <&UIC2>;
-+              interrupts = <17 1>;
-+      };
-+
-       plb {
-               compatible = "ibm,plb-440gx", "ibm,plb4";
-               #address-cells = <2>;
-@@ -232,10 +242,18 @@
-                               reg = <40000790 8>;
-                       };
-+                      TAH0: emac-tah@40000b50 {
-+                              compatible = "ibm,tah-440gx", "ibm,tah";
-+                              reg = <40000b50 30>;
-+                      };
-+
-+                      TAH1: emac-tah@40000d50 {
-+                              compatible = "ibm,tah-440gx", "ibm,tah";
-+                              reg = <40000d50 30>;
-+                      };
-                       EMAC0: ethernet@40000800 {
-                               unused = <1>;
--                              linux,network-index = <2>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440gx", "ibm,emac4";
-                               interrupt-parent = <&UIC1>;
-@@ -256,7 +274,6 @@
-                       };
-                       EMAC1: ethernet@40000900 {
-                               unused = <1>;
--                              linux,network-index = <3>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440gx", "ibm,emac4";
-                               interrupt-parent = <&UIC1>;
-@@ -277,7 +294,6 @@
-                       };
-                       EMAC2: ethernet@40000c00 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440gx", "ibm,emac4";
-                               interrupt-parent = <&UIC2>;
-@@ -288,7 +304,7 @@
-                               mal-tx-channel = <2>;
-                               mal-rx-channel = <2>;
-                               cell-index = <2>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
-@@ -297,10 +313,11 @@
-                               rgmii-channel = <0>;
-                               zmii-device = <&ZMII0>;
-                               zmii-channel = <2>;
-+                              tah-device = <&TAH0>;
-+                              tah-channel = <0>;
-                       };
-                       EMAC3: ethernet@40000e00 {
--                              linux,network-index = <1>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440gx", "ibm,emac4";
-                               interrupt-parent = <&UIC2>;
-@@ -311,7 +328,7 @@
-                               mal-tx-channel = <3>;
-                               mal-rx-channel = <3>;
-                               cell-index = <3>;
--                              max-frame-size = <5dc>;
-+                              max-frame-size = <2328>;
-                               rx-fifo-size = <1000>;
-                               tx-fifo-size = <800>;
-                               phy-mode = "rgmii";
-@@ -320,6 +337,8 @@
-                               rgmii-channel = <1>;
-                               zmii-device = <&ZMII0>;
-                               zmii-channel = <3>;
-+                              tah-device = <&TAH1>;
-+                              tah-channel = <0>;
-                       };
---- a/arch/powerpc/boot/dts/walnut.dts
-+++ b/arch/powerpc/boot/dts/walnut.dts
-@@ -125,7 +125,6 @@
-                       };
-                       EMAC: ethernet@ef600800 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-405gp", "ibm,emac";
-                               interrupt-parent = <&UIC0>;
---- a/arch/powerpc/boot/dts/warp.dts
-+++ b/arch/powerpc/boot/dts/warp.dts
-@@ -204,7 +204,6 @@
-                       };
-                       EMAC0: ethernet@ef600e00 {
--                              linux,network-index = <0>;
-                               device_type = "network";
-                               compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
-                               interrupt-parent = <&UIC1>;
---- /dev/null
-+++ b/arch/powerpc/boot/dts/yosemite.dts
-@@ -0,0 +1,304 @@
-+/*
-+ * Device Tree Source for AMCC Yosemite
-+ *
-+ * Copyright 2008 IBM Corp.
-+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>
-+ *
-+ * 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.
-+ */
-+
-+/ {
-+      #address-cells = <2>;
-+      #size-cells = <1>;
-+      model = "amcc,yosemite";
-+      compatible = "amcc,yosemite","amcc,bamboo";
-+      dcr-parent = <&/cpus/cpu@0>;
-+
-+      aliases {
-+              ethernet0 = &EMAC0;
-+              ethernet1 = &EMAC1;
-+              serial0 = &UART0;
-+              serial1 = &UART1;
-+              serial2 = &UART2;
-+              serial3 = &UART3;
-+      };
-+
-+      cpus {
-+              #address-cells = <1>;
-+              #size-cells = <0>;
-+
-+              cpu@0 {
-+                      device_type = "cpu";
-+                      model = "PowerPC,440EP";
-+                      reg = <0>;
-+                      clock-frequency = <0>; /* Filled in by zImage */
-+                      timebase-frequency = <0>; /* Filled in by zImage */
-+                      i-cache-line-size = <20>;
-+                      d-cache-line-size = <20>;
-+                      i-cache-size = <8000>;
-+                      d-cache-size = <8000>;
-+                      dcr-controller;
-+                      dcr-access-method = "native";
-+              };
-+      };
-+
-+      memory {
-+              device_type = "memory";
-+              reg = <0 0 0>; /* Filled in by zImage */
-+      };
-+
-+      UIC0: interrupt-controller0 {
-+              compatible = "ibm,uic-440ep","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <0>;
-+              dcr-reg = <0c0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+      };
-+
-+      UIC1: interrupt-controller1 {
-+              compatible = "ibm,uic-440ep","ibm,uic";
-+              interrupt-controller;
-+              cell-index = <1>;
-+              dcr-reg = <0d0 009>;
-+              #address-cells = <0>;
-+              #size-cells = <0>;
-+              #interrupt-cells = <2>;
-+              interrupts = <1e 4 1f 4>; /* cascade */
-+              interrupt-parent = <&UIC0>;
-+      };
-+
-+      SDR0: sdr {
-+              compatible = "ibm,sdr-440ep";
-+              dcr-reg = <00e 002>;
-+      };
-+
-+      CPR0: cpr {
-+              compatible = "ibm,cpr-440ep";
-+              dcr-reg = <00c 002>;
-+      };
-+
-+      plb {
-+              compatible = "ibm,plb-440ep", "ibm,plb-440gp", "ibm,plb4";
-+              #address-cells = <2>;
-+              #size-cells = <1>;
-+              ranges;
-+              clock-frequency = <0>; /* Filled in by zImage */
-+
-+              SDRAM0: sdram {
-+                      compatible = "ibm,sdram-440ep", "ibm,sdram-405gp";
-+                      dcr-reg = <010 2>;
-+              };
-+
-+              DMA0: dma {
-+                      compatible = "ibm,dma-440ep", "ibm,dma-440gp";
-+                      dcr-reg = <100 027>;
-+              };
-+
-+              MAL0: mcmal {
-+                      compatible = "ibm,mcmal-440ep", "ibm,mcmal-440gp", "ibm,mcmal";
-+                      dcr-reg = <180 62>;
-+                      num-tx-chans = <4>;
-+                      num-rx-chans = <2>;
-+                      interrupt-parent = <&MAL0>;
-+                      interrupts = <0 1 2 3 4>;
-+                      #interrupt-cells = <1>;
-+                      #address-cells = <0>;
-+                      #size-cells = <0>;
-+                      interrupt-map = </*TXEOB*/ 0 &UIC0 a 4
-+                                      /*RXEOB*/ 1 &UIC0 b 4
-+                                      /*SERR*/  2 &UIC1 0 4
-+                                      /*TXDE*/  3 &UIC1 1 4
-+                                      /*RXDE*/  4 &UIC1 2 4>;
-+              };
-+
-+              POB0: opb {
-+                      compatible = "ibm,opb-440ep", "ibm,opb-440gp", "ibm,opb";
-+                      #address-cells = <1>;
-+                      #size-cells = <1>;
-+                      /* Bamboo is oddball in the 44x world and doesn't use the ERPN
-+                       * bits.
-+                       */
-+                      ranges = <00000000 0 00000000 80000000
-+                                80000000 0 80000000 80000000>;
-+                      interrupt-parent = <&UIC1>;
-+                      interrupts = <7 4>;
-+                      clock-frequency = <0>; /* Filled in by zImage */
-+
-+                      EBC0: ebc {
-+                              compatible = "ibm,ebc-440ep", "ibm,ebc-440gp", "ibm,ebc";
-+                              dcr-reg = <012 2>;
-+                              #address-cells = <2>;
-+                              #size-cells = <1>;
-+                              clock-frequency = <0>; /* Filled in by zImage */
-+                              interrupts = <5 1>;
-+                              interrupt-parent = <&UIC1>;
-+                      };
-+
-+                      UART0: serial@ef600300 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600300 8>;
-+                              virtual-reg = <ef600300>;
-+                              clock-frequency = <0>; /* Filled in by zImage */
-+                              current-speed = <1c200>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <0 4>;
-+                      };
-+
-+                      UART1: serial@ef600400 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600400 8>;
-+                              virtual-reg = <ef600400>;
-+                              clock-frequency = <0>;
-+                              current-speed = <0>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <1 4>;
-+                      };
-+
-+                      UART2: serial@ef600500 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600500 8>;
-+                              virtual-reg = <ef600500>;
-+                              clock-frequency = <0>;
-+                              current-speed = <0>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <3 4>;
-+                              status = "disabled";
-+                      };
-+
-+                      UART3: serial@ef600600 {
-+                              device_type = "serial";
-+                              compatible = "ns16550";
-+                              reg = <ef600600 8>;
-+                              virtual-reg = <ef600600>;
-+                              clock-frequency = <0>;
-+                              current-speed = <0>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <4 4>;
-+                              status = "disabled";
-+                      };
-+
-+                      IIC0: i2c@ef600700 {
-+                              compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
-+                              reg = <ef600700 14>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <2 4>;
-+                      };
-+
-+                      IIC1: i2c@ef600800 {
-+                              compatible = "ibm,iic-440ep", "ibm,iic-440gp", "ibm,iic";
-+                              reg = <ef600800 14>;
-+                              interrupt-parent = <&UIC0>;
-+                              interrupts = <7 4>;
-+                      };
-+
-+                      spi@ef600900 {
-+                              compatible = "amcc,spi-440ep";
-+                              reg = <ef600900 6>;
-+                              interrupts = <8 4>;
-+                              interrupt-parent = <&UIC0>;
-+                      };
-+
-+                      ZMII0: emac-zmii@ef600d00 {
-+                              compatible = "ibm,zmii-440ep", "ibm,zmii-440gp", "ibm,zmii";
-+                              reg = <ef600d00 c>;
-+                      };
-+
-+                      EMAC0: ethernet@ef600e00 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1c 4 1d 4>;
-+                              reg = <ef600e00 70>;
-+                              local-mac-address = [000000000000];
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <0 1>;
-+                              mal-rx-channel = <0>;
-+                              cell-index = <0>;
-+                              max-frame-size = <5dc>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rmii";
-+                              phy-map = <00000000>;
-+                              zmii-device = <&ZMII0>;
-+                              zmii-channel = <0>;
-+                      };
-+
-+                      EMAC1: ethernet@ef600f00 {
-+                              device_type = "network";
-+                              compatible = "ibm,emac-440ep", "ibm,emac-440gp", "ibm,emac";
-+                              interrupt-parent = <&UIC1>;
-+                              interrupts = <1e 4 1f 4>;
-+                              reg = <ef600f00 70>;
-+                              local-mac-address = [000000000000];
-+                              mal-device = <&MAL0>;
-+                              mal-tx-channel = <2 3>;
-+                              mal-rx-channel = <1>;
-+                              cell-index = <1>;
-+                              max-frame-size = <5dc>;
-+                              rx-fifo-size = <1000>;
-+                              tx-fifo-size = <800>;
-+                              phy-mode = "rmii";
-+                              phy-map = <00000000>;
-+                              zmii-device = <&ZMII0>;
-+                              zmii-channel = <1>;
-+                      };
-+
-+                      usb@ef601000 {
-+                              compatible = "ohci-be";
-+                              reg = <ef601000 80>;
-+                              interrupts = <8 4 9 4>;
-+                              interrupt-parent = < &UIC1 >;
-+                      };
-+              };
-+
-+              PCI0: pci@ec000000 {
-+                      device_type = "pci";
-+                      #interrupt-cells = <1>;
-+                      #size-cells = <2>;
-+                      #address-cells = <3>;
-+                      compatible = "ibm,plb440ep-pci", "ibm,plb-pci";
-+                      primary;
-+                      reg = <0 eec00000 8     /* Config space access */
-+                             0 eed00000 4     /* IACK */
-+                             0 eed00000 4     /* Special cycle */
-+                             0 ef400000 40>;  /* Internal registers */
-+
-+                      /* Outbound ranges, one memory and one IO,
-+                       * later cannot be changed. Chip supports a second
-+                       * IO range but we don't use it for now
-+                       */
-+                      ranges = <02000000 0 a0000000 0 a0000000 0 20000000
-+                                01000000 0 00000000 0 e8000000 0 00010000>;
-+
-+                      /* Inbound 2GB range starting at 0 */
-+                      dma-ranges = <42000000 0 0 0 0 0 80000000>;
-+
-+                      /* Bamboo has all 4 IRQ pins tied together per slot */
-+                      interrupt-map-mask = <f800 0 0 0>;
-+                      interrupt-map = <
-+                              /* IDSEL 1 */
-+                              0800 0 0 0 &UIC0 1c 8
-+
-+                              /* IDSEL 2 */
-+                              1000 0 0 0 &UIC0 1b 8
-+
-+                              /* IDSEL 3 */
-+                              1800 0 0 0 &UIC0 1a 8
-+
-+                              /* IDSEL 4 */
-+                              2000 0 0 0 &UIC0 19 8
-+                      >;
-+              };
-+      };
-+
-+      chosen {
-+              linux,stdout-path = "/plb/opb/serial@ef600300";
-+      };
-+};
---- a/arch/powerpc/boot/ebony.c
-+++ b/arch/powerpc/boot/ebony.c
-@@ -75,7 +75,8 @@ static void ebony_fixups(void)
-       ibm440gp_fixup_clocks(sysclk, 6 * 1843200);
-       ibm4xx_sdram_fixup_memsize();
--      dt_fixup_mac_addresses(ebony_mac0, ebony_mac1);
-+      dt_fixup_mac_address_by_alias("ethernet0", ebony_mac0);
-+      dt_fixup_mac_address_by_alias("ethernet1", ebony_mac1);
-       ibm4xx_fixup_ebc_ranges("/plb/opb/ebc");
-       ebony_flashsel_fixup();
- }
---- a/arch/powerpc/boot/libfdt-wrapper.c
-+++ b/arch/powerpc/boot/libfdt-wrapper.c
-@@ -35,7 +35,7 @@
- #define check_err(err) \
-       ({ \
-               if (BAD_ERROR(err) || ((err < 0) && DEBUG)) \
--                      printf("%s():%d  %s\n\r", __FUNCTION__, __LINE__, \
-+                      printf("%s():%d  %s\n\r", __func__, __LINE__, \
-                              fdt_strerror(err)); \
-               if (BAD_ERROR(err)) \
-                       exit(); \
---- a/arch/powerpc/boot/mpc52xx-psc.c
-+++ b/arch/powerpc/boot/mpc52xx-psc.c
-@@ -51,14 +51,9 @@ static unsigned char psc_getc(void)
- int mpc5200_psc_console_init(void *devp, struct serial_console_data *scdp)
- {
--      int n;
--
-       /* Get the base address of the psc registers */
--      n = getprop(devp, "virtual-reg", &psc, sizeof(psc));
--      if (n != sizeof(psc)) {
--              if (!dt_xlate_reg(devp, 0, (void *)&psc, NULL))
--                      return -1;
--      }
-+      if (dt_get_virtual_reg(devp, &psc, 1) < 1)
-+              return -1;
-       scdp->open = psc_open;
-       scdp->putc = psc_putc;
---- a/arch/powerpc/boot/mpsc.c
-+++ b/arch/powerpc/boot/mpsc.c
-@@ -141,7 +141,7 @@ int mpsc_console_init(void *devp, struct
-       if (mpscintr_base == NULL)
-               goto err_out;
--      n = getprop(devp, "block-index", &v, sizeof(v));
-+      n = getprop(devp, "cell-index", &v, sizeof(v));
-       if (n != sizeof(v))
-               goto err_out;
-       reg_set = (int)v;
---- a/arch/powerpc/boot/mv64x60.c
-+++ b/arch/powerpc/boot/mv64x60.c
-@@ -535,7 +535,7 @@ u8 *mv64x60_get_bridge_pbase(void)
-       u32 v[2];
-       void *devp;
--      devp = finddevice("/mv64x60");
-+      devp = find_node_by_compatible(NULL, "marvell,mv64360");
-       if (devp == NULL)
-               goto err_out;
-       if (getprop(devp, "reg", v, sizeof(v)) != sizeof(v))
-@@ -553,7 +553,7 @@ u8 *mv64x60_get_bridge_base(void)
-       u32 v;
-       void *devp;
--      devp = finddevice("/mv64x60");
-+      devp = find_node_by_compatible(NULL, "marvell,mv64360");
-       if (devp == NULL)
-               goto err_out;
-       if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v))
---- a/arch/powerpc/boot/mv64x60_i2c.c
-+++ b/arch/powerpc/boot/mv64x60_i2c.c
-@@ -185,7 +185,7 @@ int mv64x60_i2c_open(void)
-       u32 v;
-       void *devp;
--      devp = finddevice("/mv64x60/i2c");
-+      devp = find_node_by_compatible(NULL, "marvell,mv64360-i2c");
-       if (devp == NULL)
-               goto err_out;
-       if (getprop(devp, "virtual-reg", &v, sizeof(v)) != sizeof(v))
---- a/arch/powerpc/boot/ns16550.c
-+++ b/arch/powerpc/boot/ns16550.c
-@@ -55,15 +55,9 @@ static u8 ns16550_tstc(void)
- int ns16550_console_init(void *devp, struct serial_console_data *scdp)
- {
-       int n;
--      unsigned long reg_phys;
--      n = getprop(devp, "virtual-reg", &reg_base, sizeof(reg_base));
--      if (n != sizeof(reg_base)) {
--              if (!dt_xlate_reg(devp, 0, &reg_phys, NULL))
--                      return -1;
--
--              reg_base = (void *)reg_phys;
--      }
-+      if (dt_get_virtual_reg(devp, (void **)&reg_base, 1) < 1)
-+              return -1;
-       n = getprop(devp, "reg-shift", &reg_shift, sizeof(reg_shift));
-       if (n != sizeof(reg_shift))
---- a/arch/powerpc/boot/ops.h
-+++ b/arch/powerpc/boot/ops.h
-@@ -95,6 +95,7 @@ int dt_xlate_reg(void *node, int res, un
- int dt_xlate_addr(void *node, u32 *buf, int buflen, unsigned long *xlated_addr);
- int dt_is_compatible(void *node, const char *compat);
- void dt_get_reg_format(void *node, u32 *naddr, u32 *nsize);
-+int dt_get_virtual_reg(void *node, void **addr, int nres);
- static inline void *finddevice(const char *name)
- {
---- a/arch/powerpc/boot/prpmc2800.c
-+++ b/arch/powerpc/boot/prpmc2800.c
-@@ -344,20 +344,20 @@ static void prpmc2800_bridge_setup(u32 m
-                       acc_bits);
-       /* Get the cpu -> pci i/o & mem mappings from the device tree */
--      devp = finddevice("/mv64x60/pci@80000000");
-+      devp = find_node_by_compatible(NULL, "marvell,mv64360-pci");
-       if (devp == NULL)
--              fatal("Error: Missing /mv64x60/pci@80000000"
-+              fatal("Error: Missing marvell,mv64360-pci"
-                               " device tree node\n\r");
-       rc = getprop(devp, "ranges", v, sizeof(v));
-       if (rc != sizeof(v))
--              fatal("Error: Can't find /mv64x60/pci@80000000/ranges"
-+              fatal("Error: Can't find marvell,mv64360-pci ranges"
-                               " property\n\r");
-       /* Get the cpu -> pci i/o & mem mappings from the device tree */
--      devp = finddevice("/mv64x60");
-+      devp = find_node_by_compatible(NULL, "marvell,mv64360");
-       if (devp == NULL)
--              fatal("Error: Missing /mv64x60 device tree node\n\r");
-+              fatal("Error: Missing marvell,mv64360 device tree node\n\r");
-       enables = in_le32((u32 *)(bridge_base + MV64x60_CPU_BAR_ENABLE));
-       enables |= 0x0007fe00; /* Disable all cpu->pci windows */
-@@ -429,9 +429,9 @@ static void prpmc2800_fixups(void)
-       setprop(devp, "model", model, l);
-       /* Set /cpus/PowerPC,7447/clock-frequency */
--      devp = finddevice("/cpus/PowerPC,7447");
-+      devp = find_node_by_prop_value_str(NULL, "device_type", "cpu");
-       if (devp == NULL)
--              fatal("Error: Missing proper /cpus device tree node\n\r");
-+              fatal("Error: Missing proper cpu device tree node\n\r");
-       v[0] = bip->core_speed;
-       setprop(devp, "clock-frequency", &v[0], sizeof(v[0]));
-@@ -443,16 +443,17 @@ static void prpmc2800_fixups(void)
-       v[1] = bip->mem_size;
-       setprop(devp, "reg", v, sizeof(v));
--      /* Update /mv64x60/model, if this is a mv64362 */
-+      /* Update model, if this is a mv64362 */
-       if (bip->bridge_type == BRIDGE_TYPE_MV64362) {
--              devp = finddevice("/mv64x60");
-+              devp = find_node_by_compatible(NULL, "marvell,mv64360");
-               if (devp == NULL)
--                      fatal("Error: Missing /mv64x60 device tree node\n\r");
-+                      fatal("Error: Missing marvell,mv64360"
-+                                      " device tree node\n\r");
-               setprop(devp, "model", "mv64362", strlen("mv64362") + 1);
-       }
-       /* Set User FLASH size */
--      devp = finddevice("/mv64x60/flash@a0000000");
-+      devp = find_node_by_compatible(NULL, "direct-mapped");
-       if (devp == NULL)
-               fatal("Error: Missing User FLASH device tree node\n\r");
-       rc = getprop(devp, "reg", v, sizeof(v));
---- a/arch/powerpc/boot/ps3-head.S
-+++ b/arch/powerpc/boot/ps3-head.S
-@@ -27,8 +27,9 @@
- /*
-  * __system_reset_overlay - The PS3 first stage entry.
-  *
-- * The bootwraper build script copies the 0x100 bytes at symbol
-- * __system_reset_overlay to offset 0x100 of the rom image.
-+ * The bootwraper build script copies the 512 bytes at symbol
-+ * __system_reset_overlay to offset 0x100 of the rom image.  This symbol
-+ * must occupy 512 or less bytes.
-  *
-  * The PS3 has a single processor with two threads.
-  */
-@@ -47,8 +48,6 @@ __system_reset_overlay:
-       mfspr   r3, 0x88
-       cntlzw. r3, r3
--      li      r4, 0
--      li      r5, 0
-       beq     1f
-       /* Secondary goes to __secondary_hold in kernel. */
-@@ -57,8 +56,14 @@ __system_reset_overlay:
-       mtctr   r4
-       bctr
--      /* Primary delays then goes to _zimage_start in wrapper. */
- 1:
-+      /* Save the value at addr zero for a null pointer write check later. */
-+
-+      li      r4, 0
-+      lwz     r3, 0(r4)
-+
-+      /* Primary delays then goes to _zimage_start in wrapper. */
-+
-       or      31, 31, 31 /* db16cyc */
-       or      31, 31, 31 /* db16cyc */
-@@ -67,16 +72,18 @@ __system_reset_overlay:
-       mtctr   r4
-       bctr
-+      . = __system_reset_overlay + 512
-+
- /*
-  * __system_reset_kernel - Place holder for the kernel reset vector.
-  *
-- * The bootwrapper build script copies 0x100 bytes from offset 0x100
-+ * The bootwrapper build script copies 512 bytes from offset 0x100
-  * of the rom image to the symbol __system_reset_kernel.  At runtime
-- * the bootwrapper program copies the 0x100 bytes at __system_reset_kernel
-- * to ram address 0x100.  This symbol must occupy 0x100 bytes.
-+ * the bootwrapper program copies the 512 bytes at __system_reset_kernel
-+ * to ram address 0x100.  This symbol must occupy 512 bytes.
-  */
-       .globl __system_reset_kernel
- __system_reset_kernel:
--      . = __system_reset_kernel + 0x100
-+      . = __system_reset_kernel + 512
---- a/arch/powerpc/boot/ps3.c
-+++ b/arch/powerpc/boot/ps3.c
-@@ -27,10 +27,10 @@
- #include "page.h"
- #include "ops.h"
--extern s64 lv1_panic(u64 in_1);
--extern s64 lv1_get_logical_partition_id(u64 *out_1);
--extern s64 lv1_get_logical_ppe_id(u64 *out_1);
--extern s64 lv1_get_repository_node_value(u64 in_1, u64 in_2, u64 in_3,
-+extern int lv1_panic(u64 in_1);
-+extern int lv1_get_logical_partition_id(u64 *out_1);
-+extern int lv1_get_logical_ppe_id(u64 *out_1);
-+extern int lv1_get_repository_node_value(u64 in_1, u64 in_2, u64 in_3,
-       u64 in_4, u64 in_5, u64 *out_1, u64 *out_2);
- #ifdef DEBUG
-@@ -46,6 +46,7 @@ BSS_STACK(4096);
-  * edit the command line passed to vmlinux (by setting /chosen/bootargs).
-  * The buffer is put in it's own section so that tools may locate it easier.
-  */
-+
- static char cmdline[COMMAND_LINE_SIZE]
-       __attribute__((__section__("__builtin_cmdline")));
-@@ -75,7 +76,7 @@ static void ps3_exit(void)
- static int ps3_repository_read_rm_size(u64 *rm_size)
- {
--      s64 result;
-+      int result;
-       u64 lpar_id;
-       u64 ppe_id;
-       u64 v2;
-@@ -114,16 +115,17 @@ void ps3_copy_vectors(void)
- {
-       extern char __system_reset_kernel[];
--      memcpy((void *)0x100, __system_reset_kernel, 0x100);
--      flush_cache((void *)0x100, 0x100);
-+      memcpy((void *)0x100, __system_reset_kernel, 512);
-+      flush_cache((void *)0x100, 512);
- }
--void platform_init(void)
-+void platform_init(unsigned long null_check)
- {
-       const u32 heapsize = 0x1000000 - (u32)_end; /* 16MiB */
-       void *chosen;
-       unsigned long ft_addr;
-       u64 rm_size;
-+      unsigned long val;
-       console_ops.write = ps3_console_write;
-       platform_ops.exit = ps3_exit;
-@@ -151,6 +153,11 @@ void platform_init(void)
-       printf(" flat tree at 0x%lx\n\r", ft_addr);
-+      val = *(unsigned long *)0;
-+
-+      if (val != null_check)
-+              printf("null check failed: %lx != %lx\n\r", val, null_check);
-+
-       ((kernel_entry_t)0)(ft_addr, 0, NULL);
-       ps3_exit();
---- a/arch/powerpc/boot/serial.c
-+++ b/arch/powerpc/boot/serial.c
-@@ -119,7 +119,7 @@ int serial_console_init(void)
-       if (dt_is_compatible(devp, "ns16550"))
-               rc = ns16550_console_init(devp, &serial_cd);
--      else if (dt_is_compatible(devp, "marvell,mpsc"))
-+      else if (dt_is_compatible(devp, "marvell,mv64360-mpsc"))
-               rc = mpsc_console_init(devp, &serial_cd);
-       else if (dt_is_compatible(devp, "fsl,cpm1-scc-uart") ||
-                dt_is_compatible(devp, "fsl,cpm1-smc-uart") ||
---- /dev/null
-+++ b/arch/powerpc/boot/simpleboot.c
-@@ -0,0 +1,84 @@
-+/*
-+ * The simple platform -- for booting when firmware doesn't supply a device
-+ *                        tree or any platform configuration information.
-+ *                        All data is extracted from an embedded device tree
-+ *                        blob.
-+ *
-+ * Authors: Scott Wood <scottwood@freescale.com>
-+ *          Grant Likely <grant.likely@secretlab.ca>
-+ *
-+ * Copyright (c) 2007 Freescale Semiconductor, Inc.
-+ * Copyright (c) 2008 Secret Lab Technologies Ltd.
-+ *
-+ * 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 "ops.h"
-+#include "types.h"
-+#include "io.h"
-+#include "stdio.h"
-+#include "libfdt/libfdt.h"
-+
-+BSS_STACK(4*1024);
-+
-+void platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
-+                 unsigned long r6, unsigned long r7)
-+{
-+      const u32 *na, *ns, *reg, *timebase;
-+      u64 memsize64;
-+      int node, size, i;
-+
-+      /* Make sure FDT blob is sane */
-+      if (fdt_check_header(_dtb_start) != 0)
-+              fatal("Invalid device tree blob\n");
-+
-+      /* Find the #address-cells and #size-cells properties */
-+      node = fdt_path_offset(_dtb_start, "/");
-+      if (node < 0)
-+              fatal("Cannot find root node\n");
-+      na = fdt_getprop(_dtb_start, node, "#address-cells", &size);
-+      if (!na || (size != 4))
-+              fatal("Cannot find #address-cells property");
-+      ns = fdt_getprop(_dtb_start, node, "#size-cells", &size);
-+      if (!ns || (size != 4))
-+              fatal("Cannot find #size-cells property");
-+
-+      /* Find the memory range */
-+      node = fdt_node_offset_by_prop_value(_dtb_start, -1, "device_type",
-+                                           "memory", sizeof("memory"));
-+      if (node < 0)
-+              fatal("Cannot find memory node\n");
-+      reg = fdt_getprop(_dtb_start, node, "reg", &size);
-+      if (size < (*na+*ns) * sizeof(u32))
-+              fatal("cannot get memory range\n");
-+
-+      /* Only interested in memory based at 0 */
-+      for (i = 0; i < *na; i++)
-+              if (*reg++ != 0)
-+                      fatal("Memory range is not based at address 0\n");
-+
-+      /* get the memsize and trucate it to under 4G on 32 bit machines */
-+      memsize64 = 0;
-+      for (i = 0; i < *ns; i++)
-+              memsize64 = (memsize64 << 32) | *reg++;
-+      if (sizeof(void *) == 4 && memsize64 >= 0x100000000ULL)
-+              memsize64 = 0xffffffff;
-+
-+      /* finally, setup the timebase */
-+      node = fdt_node_offset_by_prop_value(_dtb_start, -1, "device_type",
-+                                           "cpu", sizeof("cpu"));
-+      if (!node)
-+              fatal("Cannot find cpu node\n");
-+      timebase = fdt_getprop(_dtb_start, node, "timebase-frequency", &size);
-+      if (timebase && (size == 4))
-+              timebase_period_ns = 1000000000 / *timebase;
-+
-+      /* Now we have the memory size; initialize the heap */
-+      simple_alloc_init(_end, memsize64 - (unsigned long)_end, 32, 64);
-+
-+      /* prepare the device tree and find the console */
-+      fdt_init(_dtb_start);
-+      serial_console_init();
-+}
---- a/arch/powerpc/boot/treeboot-walnut.c
-+++ b/arch/powerpc/boot/treeboot-walnut.c
-@@ -68,7 +68,7 @@ static void walnut_fixups(void)
-       ibm4xx_quiesce_eth((u32 *)0xef600800, NULL);
-       ibm4xx_fixup_ebc_ranges("/plb/ebc");
-       walnut_flashsel_fixup();
--      dt_fixup_mac_addresses((u8 *) WALNUT_OPENBIOS_MAC_OFF);
-+      dt_fixup_mac_address_by_alias("ethernet0", (u8 *) WALNUT_OPENBIOS_MAC_OFF);
- }
- void platform_init(void)
---- /dev/null
-+++ b/arch/powerpc/boot/virtex405-head.S
-@@ -0,0 +1,30 @@
-+#include "ppc_asm.h"
-+
-+      .text
-+      .global _zimage_start
-+_zimage_start:
-+
-+      /* PPC errata 213: needed by Virtex-4 FX */
-+      mfccr0  0
-+      oris    0,0,0x50000000@h
-+      mtccr0  0
-+
-+      /*
-+       * Invalidate the data cache if the data cache is turned off.
-+       * - The 405 core does not invalidate the data cache on power-up
-+       *   or reset but does turn off the data cache. We cannot assume
-+       *   that the cache contents are valid.
-+       * - If the data cache is turned on this must have been done by
-+       *   a bootloader and we assume that the cache contents are
-+       *   valid.
-+       */
-+      mfdccr  r9
-+      cmplwi  r9,0
-+      bne     2f
-+      lis     r9,0
-+      li      r8,256
-+      mtctr   r8
-+1:    dccci   r0,r9
-+      addi    r9,r9,0x20
-+      bdnz    1b
-+2:    b       _zimage_start_lib
---- a/arch/powerpc/boot/wrapper
-+++ b/arch/powerpc/boot/wrapper
-@@ -174,7 +174,7 @@ cuboot*)
-     *-mpc83*)
-         platformo=$object/cuboot-83xx.o
-         ;;
--    *-tqm8541|*-mpc8560*|*-tqm8560|*-tqm8555)
-+    *-tqm8541|*-mpc8560*|*-tqm8560|*-tqm8555|*-ksi8560*)
-         platformo=$object/cuboot-85xx-cpm2.o
-         ;;
-     *-mpc85*|*-tqm8540|*-sbc85*)
-@@ -199,6 +199,10 @@ adder875-redboot)
-     platformo="$object/fixed-head.o $object/redboot-8xx.o"
-     binary=y
-     ;;
-+simpleboot-virtex405-*)
-+    platformo="$object/virtex405-head.o $object/simpleboot.o"
-+    binary=y
-+    ;;
- esac
- vmz="$tmpdir/`basename \"$kernel\"`.$ext"
-@@ -226,10 +230,13 @@ if [ -n "$version" ]; then
-     uboot_version="-n Linux-$version"
- fi
-+# physical offset of kernel image
-+membase=`${CROSS}objdump -p "$kernel" | grep -m 1 LOAD | awk '{print $7}'`
-+
- case "$platform" in
- uboot)
-     rm -f "$ofile"
--    mkimage -A ppc -O linux -T kernel -C gzip -a 00000000 -e 00000000 \
-+    mkimage -A ppc -O linux -T kernel -C gzip -a $membase -e $membase \
-       $uboot_version -d "$vmz" "$ofile"
-     if [ -z "$cacheit" ]; then
-       rm -f "$vmz"
-@@ -298,15 +305,16 @@ treeboot*)
-     exit 0
-     ;;
- ps3)
--    # The ps3's loader supports loading gzipped binary images from flash
--    # rom to addr zero. The loader enters the image at addr 0x100.  A
--    # bootwrapper overlay is use to arrange for the kernel to be loaded
--    # to addr zero and to have a suitable bootwrapper entry at 0x100.
--    # To construct the rom image, 0x100 bytes from offset 0x100 in the
--    # kernel is copied to the bootwrapper symbol __system_reset_kernel.
--    # The 0x100 bytes at the bootwrapper symbol __system_reset_overlay is
--    # then copied to offset 0x100.  At runtime the bootwrapper program
--    # copies the 0x100 bytes at __system_reset_kernel to addr 0x100.
-+    # The ps3's loader supports loading a gzipped binary image from flash
-+    # rom to ram addr zero. The loader then enters the system reset
-+    # vector at addr 0x100.  A bootwrapper overlay is used to arrange for
-+    # a binary image of the kernel to be at addr zero, and yet have a
-+    # suitable bootwrapper entry at 0x100.  To construct the final rom
-+    # image 512 bytes from offset 0x100 is copied to the bootwrapper
-+    # place holder at symbol __system_reset_kernel.  The 512 bytes of the
-+    # bootwrapper entry code at symbol __system_reset_overlay is then
-+    # copied to offset 0x100.  At runtime the bootwrapper program copies
-+    # the data at __system_reset_kernel back to addr 0x100.
-     system_reset_overlay=0x`${CROSS}nm "$ofile" \
-         | grep ' __system_reset_overlay$'       \
-@@ -317,7 +325,7 @@ ps3)
-         | cut -d' ' -f1`
-     system_reset_kernel=`printf "%d" $system_reset_kernel`
-     overlay_dest="256"
--    overlay_size="256"
-+    overlay_size="512"
-     ${CROSS}objcopy -O binary "$ofile" "$ofile.bin"
---- /dev/null
-+++ b/arch/powerpc/configs/40x/ep405_defconfig
-@@ -0,0 +1,968 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:50:09 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+CONFIG_40x=y
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_EP405=y
-+# CONFIG_KILAUEA is not set
-+# CONFIG_MAKALU is not set
-+# CONFIG_WALNUT is not set
-+# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
-+CONFIG_405GP=y
-+CONFIG_IBM405_ERR77=y
-+CONFIG_IBM405_ERR51=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x00400000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+# CONFIG_USB_EHCI_HCD is not set
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
-+CONFIG_USB_OHCI_HCD_PCI=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+# CONFIG_USB_UHCI_HCD is not set
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST is not set
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/40x/kilauea_defconfig
-@@ -0,0 +1,839 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:51:43 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+CONFIG_40x=y
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+CONFIG_PPC4xx_PCI_EXPRESS=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_EP405 is not set
-+CONFIG_KILAUEA=y
-+# CONFIG_MAKALU is not set
-+# CONFIG_WALNUT is not set
-+# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
-+CONFIG_405EX=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x00400000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+# CONFIG_MISC_DEVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=256
-+CONFIG_IBM_NEW_EMAC_TXB=256
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+# CONFIG_NETDEV_1000 is not set
-+# CONFIG_NETDEV_10000 is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+# CONFIG_USB_SUPPORT is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/40x/makalu_defconfig
-@@ -0,0 +1,839 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:52:30 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+CONFIG_40x=y
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+CONFIG_PPC4xx_PCI_EXPRESS=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_EP405 is not set
-+# CONFIG_KILAUEA is not set
-+CONFIG_MAKALU=y
-+# CONFIG_WALNUT is not set
-+# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
-+CONFIG_405EX=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x00400000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+# CONFIG_MISC_DEVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=256
-+CONFIG_IBM_NEW_EMAC_TXB=256
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+# CONFIG_NETDEV_1000 is not set
-+# CONFIG_NETDEV_10000 is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+# CONFIG_USB_SUPPORT is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/40x/walnut_defconfig
-@@ -0,0 +1,887 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:54:12 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+CONFIG_40x=y
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_EP405 is not set
-+# CONFIG_KILAUEA is not set
-+# CONFIG_MAKALU is not set
-+CONFIG_WALNUT=y
-+# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
-+CONFIG_405GP=y
-+CONFIG_IBM405_ERR77=y
-+CONFIG_IBM405_ERR51=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_OF_RTC=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+# CONFIG_PCI_LEGACY is not set
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x00400000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/bamboo_defconfig
-@@ -0,0 +1,815 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:36:39 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_BAMBOO=y
-+# CONFIG_EBONY is not set
-+# CONFIG_SEQUOIA is not set
-+# CONFIG_TAISHAN is not set
-+# CONFIG_KATMAI is not set
-+# CONFIG_RAINIER is not set
-+# CONFIG_WARP is not set
-+CONFIG_440EP=y
-+CONFIG_IBM440EP_ERR42=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE=""
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_KGDB is not set
-+# CONFIG_XMON is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/canyonlands_defconfig
-@@ -0,0 +1,721 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc1
-+# Thu Feb 21 14:29:28 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+# CONFIG_LOGBUFFER is not set
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+CONFIG_PPC4xx_PCI_EXPRESS=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+# CONFIG_EBONY is not set
-+# CONFIG_SEQUOIA is not set
-+# CONFIG_TAISHAN is not set
-+# CONFIG_KATMAI is not set
-+# CONFIG_RAINIER is not set
-+# CONFIG_WARP is not set
-+CONFIG_CANYONLANDS=y
-+CONFIG_460EX=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE=""
-+CONFIG_SECCOMP=y
-+CONFIG_WANT_DEVICE_TREE=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+# CONFIG_MISC_DEVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=256
-+CONFIG_IBM_NEW_EMAC_TXB=256
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+CONFIG_IBM_NEW_EMAC_TAH=y
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+# CONFIG_NETDEV_1000 is not set
-+# CONFIG_NETDEV_10000 is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+# CONFIG_USB_SUPPORT is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_KGDB is not set
-+# CONFIG_XMON is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+# CONFIG_CRYPTO is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/ebony_defconfig
-@@ -0,0 +1,898 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:50:44 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+CONFIG_EBONY=y
-+# CONFIG_SEQUOIA is not set
-+# CONFIG_TAISHAN is not set
-+# CONFIG_KATMAI is not set
-+# CONFIG_RAINIER is not set
-+# CONFIG_WARP is not set
-+CONFIG_440GP=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_OF_RTC=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+# CONFIG_CRYPTO_HW is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/katmai_defconfig
-@@ -0,0 +1,790 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.24-rc6
-+# Mon Dec 24 11:17:43 2007
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_USER_NS is not set
-+# CONFIG_PID_NS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_FAIR_GROUP_SCHED=y
-+CONFIG_FAIR_USER_SCHED=y
-+# CONFIG_FAIR_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_PPC4xx_PCI_EXPRESS=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC52xx is not set
-+# CONFIG_PPC_MPC5200 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+# CONFIG_EBONY is not set
-+# CONFIG_SEQUOIA is not set
-+# CONFIG_TAISHAN is not set
-+CONFIG_KATMAI=y
-+# CONFIG_RAINIER is not set
-+CONFIG_440SPe=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE=""
-+CONFIG_SECCOMP=y
-+CONFIG_WANT_DEVICE_TREE=y
-+CONFIG_DEVICE_TREE="katmai.dts"
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+CONFIG_MACINTOSH_DRIVERS=y
-+# CONFIG_MAC_EMUMOUSEBTN is not set
-+# CONFIG_WINDFARM is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_SHAPER is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# USB Gadget Support
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+CONFIG_DNOTIFY=y
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+# CONFIG_UCC_SLOW is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+CONFIG_INSTRUMENTATION=y
-+# CONFIG_PROFILING is not set
-+# CONFIG_KPROBES is not set
-+# CONFIG_MARKERS is not set
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+CONFIG_FORCED_INLINING=y
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_KGDB is not set
-+# CONFIG_XMON is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/rainier_defconfig
-@@ -0,0 +1,899 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:53:10 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+# CONFIG_EBONY is not set
-+# CONFIG_SEQUOIA is not set
-+# CONFIG_TAISHAN is not set
-+# CONFIG_KATMAI is not set
-+CONFIG_RAINIER=y
-+# CONFIG_WARP is not set
-+CONFIG_440GRX=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE=""
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+# CONFIG_MTD_BLKDEVS is not set
-+# CONFIG_MTD_BLOCK is not set
-+# 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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+CONFIG_MACINTOSH_DRIVERS=y
-+# CONFIG_MAC_EMUMOUSEBTN is not set
-+# CONFIG_WINDFARM is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_NET_ETHERNET is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_KGDB is not set
-+# CONFIG_XMON is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+CONFIG_PPC_EARLY_DEBUG=y
-+# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
-+# CONFIG_PPC_EARLY_DEBUG_G5 is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
-+# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
-+# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
-+CONFIG_PPC_EARLY_DEBUG_44x=y
-+# CONFIG_PPC_EARLY_DEBUG_40x is not set
-+# CONFIG_PPC_EARLY_DEBUG_CPM is not set
-+CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
-+CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/sequoia_defconfig
-@@ -0,0 +1,916 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:53:46 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+# CONFIG_EBONY is not set
-+CONFIG_SEQUOIA=y
-+# CONFIG_TAISHAN is not set
-+# CONFIG_KATMAI is not set
-+# CONFIG_RAINIER is not set
-+# CONFIG_WARP is not set
-+CONFIG_440EPX=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE=""
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+# CONFIG_MTD_BLKDEVS is not set
-+# CONFIG_MTD_BLOCK is not set
-+# 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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_KGDB is not set
-+# CONFIG_XMON is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+CONFIG_PPC_EARLY_DEBUG=y
-+# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
-+# CONFIG_PPC_EARLY_DEBUG_G5 is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
-+# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
-+# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
-+CONFIG_PPC_EARLY_DEBUG_44x=y
-+# CONFIG_PPC_EARLY_DEBUG_40x is not set
-+# CONFIG_PPC_EARLY_DEBUG_CPM is not set
-+CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
-+CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/taishan_defconfig
-@@ -0,0 +1,815 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:40:44 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+# CONFIG_PPC4xx_PCI_EXPRESS is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+# CONFIG_EBONY is not set
-+# CONFIG_SEQUOIA is not set
-+CONFIG_TAISHAN=y
-+# CONFIG_KATMAI is not set
-+# CONFIG_RAINIER is not set
-+# CONFIG_WARP is not set
-+CONFIG_440GX=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE=""
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+CONFIG_MACINTOSH_DRIVERS=y
-+# CONFIG_MAC_EMUMOUSEBTN is not set
-+# CONFIG_WINDFARM is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+CONFIG_IBM_NEW_EMAC_TAH=y
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_KGDB is not set
-+# CONFIG_XMON is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/44x/warp_defconfig
-@@ -0,0 +1,1110 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc2
-+# Fri Feb 15 21:54:43 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+CONFIG_44x=y
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+CONFIG_4xx=y
-+CONFIG_BOOKE=y
-+CONFIG_PTE_64BIT=y
-+CONFIG_PHYS_64BIT=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION="-pika"
-+# CONFIG_LOCALVERSION_AUTO is not set
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+# CONFIG_HOTPLUG is not set
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_BAMBOO is not set
-+# CONFIG_EBONY is not set
-+# CONFIG_SEQUOIA is not set
-+# CONFIG_TAISHAN is not set
-+# CONFIG_KATMAI is not set
-+# CONFIG_RAINIER is not set
-+CONFIG_WARP=y
-+CONFIG_440EP=y
-+CONFIG_IBM440EP_ERR42=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+# CONFIG_HZ_250 is not set
-+# CONFIG_HZ_300 is not set
-+CONFIG_HZ_1000=y
-+CONFIG_HZ=1000
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+CONFIG_CMDLINE_BOOL=y
-+CONFIG_CMDLINE="ip=on"
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x01000000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+# CONFIG_IP_PNP_BOOTP is not set
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IP_VS is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+CONFIG_NETFILTER=y
-+# CONFIG_NETFILTER_DEBUG is not set
-+CONFIG_NETFILTER_ADVANCED=y
-+
-+#
-+# Core Netfilter Configuration
-+#
-+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-+# CONFIG_NETFILTER_NETLINK_LOG is not set
-+# CONFIG_NF_CONNTRACK is not set
-+# CONFIG_NETFILTER_XTABLES is not set
-+
-+#
-+# IP: Netfilter Configuration
-+#
-+# CONFIG_IP_NF_QUEUE is not set
-+# CONFIG_IP_NF_IPTABLES is not set
-+# CONFIG_IP_NF_ARPTABLES is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+CONFIG_VLAN_8021Q=y
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+# CONFIG_STANDALONE is not set
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+CONFIG_MTD_OOPS=m
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+CONFIG_MTD_NAND=y
-+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
-+CONFIG_MTD_NAND_ECC_SMC=y
-+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-+CONFIG_MTD_NAND_IDS=y
-+# CONFIG_MTD_NAND_DISKONCHIP 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_FSL_ELBC is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=4096
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+CONFIG_SCSI_SPI_ATTRS=y
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_ATTRS is not set
-+# CONFIG_SCSI_SAS_LIBSAS is not set
-+# CONFIG_SCSI_SRP_ATTRS is not set
-+# CONFIG_SCSI_LOWLEVEL is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+# CONFIG_NETDEV_1000 is not set
-+# CONFIG_NETDEV_10000 is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+# CONFIG_I2C_CHARDEV is not set
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_MPC is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+CONFIG_SENSORS_EEPROM=y
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+# CONFIG_USB_ARCH_HAS_EHCI is not set
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+# CONFIG_USB_DEVICEFS is not set
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_GADGET is not set
-+CONFIG_MMC=m
-+# CONFIG_MMC_DEBUG is not set
-+# CONFIG_MMC_UNSAFE_RESUME is not set
-+
-+#
-+# MMC/SD Card Drivers
-+#
-+CONFIG_MMC_BLOCK=m
-+CONFIG_MMC_BLOCK_BOUNCE=y
-+# CONFIG_SDIO_UART is not set
-+
-+#
-+# MMC/SD Host Controller Drivers
-+#
-+# CONFIG_MMC_WBSD is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+# CONFIG_TMPFS is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+CONFIG_NLS_CODEPAGE_437=y
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+CONFIG_NLS_CODEPAGE_850=y
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+CONFIG_NLS_ASCII=y
-+CONFIG_NLS_ISO8859_1=y
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+CONFIG_NLS_ISO8859_15=y
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+CONFIG_NLS_UTF8=y
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+CONFIG_CRC_CCITT=y
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+# CONFIG_SCHED_DEBUG is not set
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_DEBUG_SLAB is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+CONFIG_DEBUG_INFO=y
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+CONFIG_BDI_SWITCH=y
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc8313_rdb_defconfig
-@@ -0,0 +1,1395 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Fri Apr 11 11:10:09 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+CONFIG_MPC831x_RDB=y
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC831x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_FORCE_MAX_ZONEORDER=11
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_DATAFLASH is not set
-+# CONFIG_MTD_M25P80 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+CONFIG_MTD_NAND=y
-+CONFIG_MTD_NAND_VERIFY_WRITE=y
-+# CONFIG_MTD_NAND_ECC_SMC is not set
-+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-+CONFIG_MTD_NAND_IDS=y
-+# CONFIG_MTD_NAND_DISKONCHIP is not set
-+# CONFIG_MTD_NAND_CAFE 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_FSL_ELBC=y
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+CONFIG_SCSI_SPI_ATTRS=y
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+CONFIG_MD=y
-+CONFIG_BLK_DEV_MD=y
-+CONFIG_MD_LINEAR=y
-+CONFIG_MD_RAID0=y
-+CONFIG_MD_RAID1=y
-+# CONFIG_MD_RAID10 is not set
-+# CONFIG_MD_RAID456 is not set
-+# CONFIG_MD_MULTIPATH is not set
-+# CONFIG_MD_FAULTY is not set
-+# CONFIG_BLK_DEV_DM is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_VITESSE_PHY is not set
-+# CONFIG_SMSC_PHY is not set
-+# CONFIG_BROADCOM_PHY is not set
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_ENC28J60 is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+CONFIG_SPI=y
-+# CONFIG_SPI_DEBUG is not set
-+CONFIG_SPI_MASTER=y
-+
-+#
-+# SPI Master Controller Drivers
-+#
-+CONFIG_SPI_BITBANG=y
-+CONFIG_SPI_MPC83xx=y
-+
-+#
-+# SPI Protocol Masters
-+#
-+# CONFIG_SPI_AT25 is not set
-+# CONFIG_SPI_SPIDEV is not set
-+# CONFIG_SPI_TLE62X0 is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM70 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# USB-based Watchdog Cards
-+#
-+# CONFIG_USBPCWATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+
-+#
-+# USB Input Devices
-+#
-+# CONFIG_USB_HID is not set
-+
-+#
-+# USB HID Boot Protocol drivers
-+#
-+# CONFIG_USB_KBD is not set
-+# CONFIG_USB_MOUSE is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_ROOT_HUB_TT=y
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+CONFIG_USB_EHCI_FSL=y
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
-+CONFIG_USB_OHCI_HCD_PCI=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+CONFIG_USB_UHCI_HCD=y
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST 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_SELECTED=y
-+# CONFIG_USB_GADGET_AMD5536UDC is not set
-+# CONFIG_USB_GADGET_ATMEL_USBA is not set
-+# CONFIG_USB_GADGET_FSL_USB2 is not set
-+CONFIG_USB_GADGET_NET2280=y
-+CONFIG_USB_NET2280=y
-+# CONFIG_USB_GADGET_PXA2XX is not set
-+# CONFIG_USB_GADGET_M66592 is not set
-+# CONFIG_USB_GADGET_GOKU is not set
-+# CONFIG_USB_GADGET_LH7A40X is not set
-+# CONFIG_USB_GADGET_OMAP is not set
-+# CONFIG_USB_GADGET_S3C2410 is not set
-+# CONFIG_USB_GADGET_AT91 is not set
-+# CONFIG_USB_GADGET_DUMMY_HCD is not set
-+CONFIG_USB_GADGET_DUALSPEED=y
-+# CONFIG_USB_ZERO is not set
-+CONFIG_USB_ETH=y
-+CONFIG_USB_ETH_RNDIS=y
-+# CONFIG_USB_GADGETFS is not set
-+# CONFIG_USB_FILE_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_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+CONFIG_RTC_DRV_DS1307=y
-+# CONFIG_RTC_DRV_DS1374 is not set
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+# CONFIG_RTC_DRV_MAX6902 is not set
-+# CONFIG_RTC_DRV_R9701 is not set
-+# CONFIG_RTC_DRV_RS5C348 is not set
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc8315_rdb_defconfig
-@@ -0,0 +1,1451 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:15 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+CONFIG_MPC831x_RDB=y
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC831x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+# CONFIG_MTD_OF_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_DATAFLASH is not set
-+# CONFIG_MTD_M25P80 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+CONFIG_MTD_NAND=y
-+CONFIG_MTD_NAND_VERIFY_WRITE=y
-+# CONFIG_MTD_NAND_ECC_SMC is not set
-+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-+CONFIG_MTD_NAND_IDS=y
-+# CONFIG_MTD_NAND_DISKONCHIP is not set
-+# CONFIG_MTD_NAND_CAFE 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_FSL_ELBC is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+CONFIG_SCSI_SPI_ATTRS=y
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_IPR is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+CONFIG_ATA=y
-+# CONFIG_ATA_NONSTANDARD is not set
-+# CONFIG_SATA_AHCI is not set
-+# CONFIG_SATA_SVW is not set
-+# CONFIG_ATA_PIIX is not set
-+# CONFIG_SATA_MV is not set
-+# CONFIG_SATA_NV is not set
-+# CONFIG_PDC_ADMA is not set
-+# CONFIG_SATA_QSTOR is not set
-+# CONFIG_SATA_PROMISE is not set
-+# CONFIG_SATA_SX4 is not set
-+# CONFIG_SATA_SIL is not set
-+# CONFIG_SATA_SIL24 is not set
-+# CONFIG_SATA_SIS is not set
-+# CONFIG_SATA_ULI is not set
-+# CONFIG_SATA_VIA is not set
-+# CONFIG_SATA_VITESSE is not set
-+# CONFIG_SATA_INIC162X is not set
-+CONFIG_SATA_FSL=y
-+# CONFIG_PATA_ALI is not set
-+# CONFIG_PATA_AMD is not set
-+# CONFIG_PATA_ARTOP is not set
-+# CONFIG_PATA_ATIIXP is not set
-+# CONFIG_PATA_CMD640_PCI is not set
-+# CONFIG_PATA_CMD64X is not set
-+# CONFIG_PATA_CS5520 is not set
-+# CONFIG_PATA_CS5530 is not set
-+# CONFIG_PATA_CYPRESS is not set
-+# CONFIG_PATA_EFAR is not set
-+# CONFIG_ATA_GENERIC is not set
-+# CONFIG_PATA_HPT366 is not set
-+# CONFIG_PATA_HPT37X is not set
-+# CONFIG_PATA_HPT3X2N is not set
-+# CONFIG_PATA_HPT3X3 is not set
-+# CONFIG_PATA_IT821X is not set
-+# CONFIG_PATA_IT8213 is not set
-+# CONFIG_PATA_JMICRON is not set
-+# CONFIG_PATA_TRIFLEX is not set
-+# CONFIG_PATA_MARVELL is not set
-+# CONFIG_PATA_MPIIX is not set
-+# CONFIG_PATA_OLDPIIX is not set
-+# CONFIG_PATA_NETCELL is not set
-+# CONFIG_PATA_NINJA32 is not set
-+# CONFIG_PATA_NS87410 is not set
-+# CONFIG_PATA_NS87415 is not set
-+# CONFIG_PATA_OPTI is not set
-+# CONFIG_PATA_OPTIDMA is not set
-+# CONFIG_PATA_PDC_OLD is not set
-+# CONFIG_PATA_RADISYS is not set
-+# CONFIG_PATA_RZ1000 is not set
-+# CONFIG_PATA_SC1200 is not set
-+# CONFIG_PATA_SERVERWORKS is not set
-+# CONFIG_PATA_PDC2027X is not set
-+# CONFIG_PATA_SIL680 is not set
-+# CONFIG_PATA_SIS is not set
-+# CONFIG_PATA_VIA is not set
-+# CONFIG_PATA_WINBOND is not set
-+# CONFIG_PATA_PLATFORM is not set
-+CONFIG_MD=y
-+CONFIG_BLK_DEV_MD=y
-+CONFIG_MD_LINEAR=y
-+CONFIG_MD_RAID0=y
-+CONFIG_MD_RAID1=y
-+# CONFIG_MD_RAID10 is not set
-+# CONFIG_MD_RAID456 is not set
-+# CONFIG_MD_MULTIPATH is not set
-+# CONFIG_MD_FAULTY is not set
-+# CONFIG_BLK_DEV_DM is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_ENC28J60 is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+CONFIG_SPI=y
-+# CONFIG_SPI_DEBUG is not set
-+CONFIG_SPI_MASTER=y
-+
-+#
-+# SPI Master Controller Drivers
-+#
-+CONFIG_SPI_BITBANG=y
-+CONFIG_SPI_MPC83xx=y
-+
-+#
-+# SPI Protocol Masters
-+#
-+# CONFIG_SPI_AT25 is not set
-+# CONFIG_SPI_SPIDEV is not set
-+# CONFIG_SPI_TLE62X0 is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM70 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# USB-based Watchdog Cards
-+#
-+# CONFIG_USBPCWATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+
-+#
-+# USB Input Devices
-+#
-+# CONFIG_USB_HID is not set
-+
-+#
-+# USB HID Boot Protocol drivers
-+#
-+# CONFIG_USB_KBD is not set
-+# CONFIG_USB_MOUSE is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_ROOT_HUB_TT=y
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+CONFIG_USB_EHCI_FSL=y
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
-+CONFIG_USB_OHCI_HCD_PCI=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+CONFIG_USB_UHCI_HCD=y
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST 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_SELECTED=y
-+# CONFIG_USB_GADGET_AMD5536UDC is not set
-+# CONFIG_USB_GADGET_ATMEL_USBA is not set
-+# CONFIG_USB_GADGET_FSL_USB2 is not set
-+CONFIG_USB_GADGET_NET2280=y
-+CONFIG_USB_NET2280=y
-+# CONFIG_USB_GADGET_PXA2XX is not set
-+# CONFIG_USB_GADGET_M66592 is not set
-+# CONFIG_USB_GADGET_GOKU is not set
-+# CONFIG_USB_GADGET_LH7A40X is not set
-+# CONFIG_USB_GADGET_OMAP is not set
-+# CONFIG_USB_GADGET_S3C2410 is not set
-+# CONFIG_USB_GADGET_AT91 is not set
-+# CONFIG_USB_GADGET_DUMMY_HCD is not set
-+CONFIG_USB_GADGET_DUALSPEED=y
-+# CONFIG_USB_ZERO is not set
-+CONFIG_USB_ETH=y
-+CONFIG_USB_ETH_RNDIS=y
-+# CONFIG_USB_GADGETFS is not set
-+# CONFIG_USB_FILE_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_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+CONFIG_RTC_DRV_DS1307=y
-+# CONFIG_RTC_DRV_DS1374 is not set
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+# CONFIG_RTC_DRV_MAX6902 is not set
-+# CONFIG_RTC_DRV_R9701 is not set
-+# CONFIG_RTC_DRV_RS5C348 is not set
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc832x_mds_defconfig
-@@ -0,0 +1,1081 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc7
-+# Mon Mar 31 11:36:51 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+CONFIG_MPC832x_MDS=y
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC832x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_QUICC_ENGINE=y
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# CONFIG_MARVELL_PHY is not set
-+CONFIG_DAVICOM_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_GIANFAR is not set
-+CONFIG_UCC_GETH=y
-+# CONFIG_UGETH_NAPI is not set
-+# CONFIG_UGETH_MAGIC_PACKET is not set
-+# CONFIG_UGETH_FILTERING is not set
-+# CONFIG_UGETH_TX_ON_DEMAND is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+# CONFIG_SERIAL_QE is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+# CONFIG_RTC_DRV_DS1307 is not set
-+CONFIG_RTC_DRV_DS1374=y
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+CONFIG_UCC_FAST=y
-+CONFIG_UCC=y
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc832x_rdb_defconfig
-@@ -0,0 +1,1233 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:16 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+CONFIG_MPC832x_RDB=y
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC832x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_QUICC_ENGINE=y
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY=y
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_ENC28J60 is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+CONFIG_E1000=y
-+# CONFIG_E1000_NAPI is not set
-+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_GIANFAR is not set
-+CONFIG_UCC_GETH=y
-+CONFIG_UGETH_NAPI=y
-+# CONFIG_UGETH_MAGIC_PACKET is not set
-+# CONFIG_UGETH_FILTERING is not set
-+# CONFIG_UGETH_TX_ON_DEMAND is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+# CONFIG_SERIAL_QE is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+CONFIG_SPI=y
-+CONFIG_SPI_MASTER=y
-+
-+#
-+# SPI Master Controller Drivers
-+#
-+CONFIG_SPI_BITBANG=y
-+CONFIG_SPI_MPC83xx=y
-+
-+#
-+# SPI Protocol Masters
-+#
-+# CONFIG_SPI_AT25 is not set
-+# CONFIG_SPI_SPIDEV is not set
-+# CONFIG_SPI_TLE62X0 is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM70 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# USB-based Watchdog Cards
-+#
-+# CONFIG_USBPCWATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+
-+#
-+# USB Input Devices
-+#
-+# CONFIG_USB_HID is not set
-+
-+#
-+# USB HID Boot Protocol drivers
-+#
-+# CONFIG_USB_KBD is not set
-+# CONFIG_USB_MOUSE is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+# CONFIG_USB_EHCI_FSL is not set
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
-+CONFIG_USB_OHCI_HCD_PCI=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+# CONFIG_USB_UHCI_HCD is not set
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST is not set
-+# CONFIG_USB_GADGET is not set
-+CONFIG_MMC=y
-+# CONFIG_MMC_DEBUG is not set
-+# CONFIG_MMC_UNSAFE_RESUME is not set
-+
-+#
-+# MMC/SD Card Drivers
-+#
-+CONFIG_MMC_BLOCK=y
-+CONFIG_MMC_BLOCK_BOUNCE=y
-+# CONFIG_SDIO_UART is not set
-+
-+#
-+# MMC/SD Host Controller Drivers
-+#
-+# CONFIG_MMC_SDHCI is not set
-+# CONFIG_MMC_WBSD is not set
-+# CONFIG_MMC_TIFM_SD is not set
-+CONFIG_MMC_SPI=y
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+CONFIG_LDM_PARTITION=y
-+# CONFIG_LDM_DEBUG is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+CONFIG_NLS_CODEPAGE_437=y
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+CONFIG_NLS_CODEPAGE_932=y
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+CONFIG_NLS_ISO8859_8=y
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
-+CONFIG_NLS_ISO8859_1=y
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+# CONFIG_DLM is not set
-+CONFIG_UCC_FAST=y
-+CONFIG_UCC=y
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+CONFIG_CRC_ITU_T=y
-+CONFIG_CRC32=y
-+CONFIG_CRC7=y
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc834x_itx_defconfig
-@@ -0,0 +1,1295 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:17 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+CONFIG_MPC834x_ITX=y
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC834x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+# CONFIG_MTD_PARTITIONS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+# CONFIG_MTD_BLKDEVS is not set
-+# CONFIG_MTD_BLOCK is not set
-+# 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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+CONFIG_MTD_PHYSMAP=y
-+CONFIG_MTD_PHYSMAP_START=0xfe000000
-+CONFIG_MTD_PHYSMAP_LEN=0x1000000
-+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-+# CONFIG_MTD_PHYSMAP_OF is not set
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_DATAFLASH is not set
-+# CONFIG_MTD_M25P80 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+# CONFIG_BLK_DEV_IDE is not set
-+# CONFIG_BLK_DEV_HD_ONLY is not set
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+CONFIG_SCSI_SPI_ATTRS=y
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_IPR is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+CONFIG_ATA=y
-+# CONFIG_ATA_NONSTANDARD is not set
-+# CONFIG_SATA_AHCI is not set
-+# CONFIG_SATA_SVW is not set
-+# CONFIG_ATA_PIIX is not set
-+# CONFIG_SATA_MV is not set
-+# CONFIG_SATA_NV is not set
-+# CONFIG_PDC_ADMA is not set
-+# CONFIG_SATA_QSTOR is not set
-+# CONFIG_SATA_PROMISE is not set
-+# CONFIG_SATA_SX4 is not set
-+CONFIG_SATA_SIL=y
-+# CONFIG_SATA_SIL24 is not set
-+# CONFIG_SATA_SIS is not set
-+# CONFIG_SATA_ULI is not set
-+# CONFIG_SATA_VIA is not set
-+# CONFIG_SATA_VITESSE is not set
-+# CONFIG_SATA_INIC162X is not set
-+# CONFIG_SATA_FSL is not set
-+# CONFIG_PATA_ALI is not set
-+# CONFIG_PATA_AMD is not set
-+# CONFIG_PATA_ARTOP is not set
-+# CONFIG_PATA_ATIIXP is not set
-+# CONFIG_PATA_CMD640_PCI is not set
-+# CONFIG_PATA_CMD64X is not set
-+# CONFIG_PATA_CS5520 is not set
-+# CONFIG_PATA_CS5530 is not set
-+# CONFIG_PATA_CYPRESS is not set
-+# CONFIG_PATA_EFAR is not set
-+# CONFIG_ATA_GENERIC is not set
-+# CONFIG_PATA_HPT366 is not set
-+# CONFIG_PATA_HPT37X is not set
-+# CONFIG_PATA_HPT3X2N is not set
-+# CONFIG_PATA_HPT3X3 is not set
-+# CONFIG_PATA_IT821X is not set
-+# CONFIG_PATA_IT8213 is not set
-+# CONFIG_PATA_JMICRON is not set
-+# CONFIG_PATA_TRIFLEX is not set
-+# CONFIG_PATA_MARVELL is not set
-+# CONFIG_PATA_MPIIX is not set
-+# CONFIG_PATA_OLDPIIX is not set
-+# CONFIG_PATA_NETCELL is not set
-+# CONFIG_PATA_NINJA32 is not set
-+# CONFIG_PATA_NS87410 is not set
-+# CONFIG_PATA_NS87415 is not set
-+# CONFIG_PATA_OPTI is not set
-+# CONFIG_PATA_OPTIDMA is not set
-+# CONFIG_PATA_PDC_OLD is not set
-+# CONFIG_PATA_RADISYS is not set
-+# CONFIG_PATA_RZ1000 is not set
-+# CONFIG_PATA_SC1200 is not set
-+# CONFIG_PATA_SERVERWORKS is not set
-+# CONFIG_PATA_PDC2027X is not set
-+# CONFIG_PATA_SIL680 is not set
-+# CONFIG_PATA_SIS is not set
-+# CONFIG_PATA_VIA is not set
-+# CONFIG_PATA_WINBOND is not set
-+CONFIG_PATA_PLATFORM=y
-+CONFIG_PATA_OF_PLATFORM=y
-+CONFIG_MD=y
-+CONFIG_BLK_DEV_MD=y
-+CONFIG_MD_LINEAR=y
-+CONFIG_MD_RAID0=y
-+CONFIG_MD_RAID1=y
-+# CONFIG_MD_RAID10 is not set
-+# CONFIG_MD_RAID456 is not set
-+# CONFIG_MD_MULTIPATH is not set
-+# CONFIG_MD_FAULTY is not set
-+# CONFIG_BLK_DEV_DM is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_VITESSE_PHY is not set
-+# CONFIG_SMSC_PHY is not set
-+# CONFIG_BROADCOM_PHY is not set
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+# CONFIG_NET_ETHERNET is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+CONFIG_SENSORS_PCF8574=y
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+CONFIG_SPI=y
-+CONFIG_SPI_MASTER=y
-+
-+#
-+# SPI Master Controller Drivers
-+#
-+CONFIG_SPI_BITBANG=y
-+CONFIG_SPI_MPC83xx=y
-+
-+#
-+# SPI Protocol Masters
-+#
-+# CONFIG_SPI_AT25 is not set
-+# CONFIG_SPI_SPIDEV is not set
-+# CONFIG_SPI_TLE62X0 is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# USB-based Watchdog Cards
-+#
-+# CONFIG_USBPCWATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_ROOT_HUB_TT=y
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+CONFIG_USB_EHCI_FSL=y
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+# CONFIG_USB_OHCI_HCD is not set
-+CONFIG_USB_UHCI_HCD=y
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST is not set
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+CONFIG_RTC_DRV_DS1307=y
-+# CONFIG_RTC_DRV_DS1374 is not set
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+# CONFIG_RTC_DRV_MAX6902 is not set
-+# CONFIG_RTC_DRV_R9701 is not set
-+# CONFIG_RTC_DRV_RS5C348 is not set
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+CONFIG_MAC_PARTITION=y
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc834x_itxgp_defconfig
-@@ -0,0 +1,1222 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:18 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+CONFIG_MPC834x_ITX=y
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC834x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+# CONFIG_MTD_PARTITIONS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+# CONFIG_MTD_BLKDEVS is not set
-+# CONFIG_MTD_BLOCK is not set
-+# 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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+CONFIG_MTD_PHYSMAP=y
-+CONFIG_MTD_PHYSMAP_START=0xfe000000
-+CONFIG_MTD_PHYSMAP_LEN=0x800000
-+CONFIG_MTD_PHYSMAP_BANKWIDTH=2
-+# CONFIG_MTD_PHYSMAP_OF is not set
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_DATAFLASH is not set
-+# CONFIG_MTD_M25P80 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+CONFIG_SCSI_SPI_ATTRS=y
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_VITESSE_PHY is not set
-+# CONFIG_SMSC_PHY is not set
-+# CONFIG_BROADCOM_PHY is not set
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+# CONFIG_NET_ETHERNET is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+CONFIG_SENSORS_PCF8574=y
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+CONFIG_SPI=y
-+CONFIG_SPI_MASTER=y
-+
-+#
-+# SPI Master Controller Drivers
-+#
-+CONFIG_SPI_BITBANG=y
-+CONFIG_SPI_MPC83xx=y
-+
-+#
-+# SPI Protocol Masters
-+#
-+# CONFIG_SPI_AT25 is not set
-+# CONFIG_SPI_SPIDEV is not set
-+# CONFIG_SPI_TLE62X0 is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# USB-based Watchdog Cards
-+#
-+# CONFIG_USBPCWATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+# CONFIG_USB_DEVICEFS is not set
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_ROOT_HUB_TT=y
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+CONFIG_USB_EHCI_FSL=y
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+# CONFIG_USB_OHCI_HCD is not set
-+CONFIG_USB_UHCI_HCD=y
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+CONFIG_RTC_INTF_DEV_UIE_EMUL=y
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+CONFIG_RTC_DRV_DS1307=y
-+# CONFIG_RTC_DRV_DS1374 is not set
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+# CONFIG_RTC_DRV_MAX6902 is not set
-+# CONFIG_RTC_DRV_R9701 is not set
-+# CONFIG_RTC_DRV_RS5C348 is not set
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=y
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+CONFIG_MAC_PARTITION=y
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc834x_mds_defconfig
-@@ -0,0 +1,1021 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc7
-+# Mon Mar 31 11:36:56 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+CONFIG_MPC834x_MDS=y
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC834x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=m
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+# CONFIG_GFAR_NAPI is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+# CONFIG_RTC_DRV_DS1307 is not set
-+CONFIG_RTC_DRV_DS1374=y
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc836x_mds_defconfig
-@@ -0,0 +1,1079 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc7
-+# Mon Mar 31 11:36:57 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+CONFIG_MPC836x_MDS=y
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_QUICC_ENGINE=y
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_GIANFAR is not set
-+CONFIG_UCC_GETH=y
-+# CONFIG_UGETH_NAPI is not set
-+# CONFIG_UGETH_MAGIC_PACKET is not set
-+# CONFIG_UGETH_FILTERING is not set
-+# CONFIG_UGETH_TX_ON_DEMAND is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+# CONFIG_SERIAL_QE is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+# CONFIG_RTC_DRV_DS1307 is not set
-+CONFIG_RTC_DRV_DS1374=y
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+CONFIG_UCC_FAST=y
-+CONFIG_UCC=y
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc837x_mds_defconfig
-@@ -0,0 +1,899 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:23 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+CONFIG_MPC837x_MDS=y
-+# CONFIG_MPC837x_RDB is not set
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC837x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=m
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+CONFIG_ATA=y
-+# CONFIG_ATA_NONSTANDARD is not set
-+# CONFIG_SATA_MV is not set
-+CONFIG_SATA_FSL=y
-+# CONFIG_PATA_PLATFORM is not set
-+# CONFIG_MD is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_E1000E_ENABLED is not set
-+CONFIG_GIANFAR=y
-+# CONFIG_GFAR_NAPI is not set
-+CONFIG_NETDEV_10000=y
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+# CONFIG_USB_ARCH_HAS_OHCI is not set
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/mpc837x_rdb_defconfig
-@@ -0,0 +1,930 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:24 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+CONFIG_MPC837x_RDB=y
-+# CONFIG_SBC834x is not set
-+CONFIG_PPC_MPC837x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+CONFIG_ATA=y
-+# CONFIG_ATA_NONSTANDARD is not set
-+# CONFIG_SATA_MV is not set
-+CONFIG_SATA_FSL=y
-+# CONFIG_PATA_PLATFORM is not set
-+CONFIG_MD=y
-+CONFIG_BLK_DEV_MD=y
-+# CONFIG_MD_LINEAR is not set
-+# CONFIG_MD_RAID0 is not set
-+CONFIG_MD_RAID1=y
-+# CONFIG_MD_RAID10 is not set
-+CONFIG_MD_RAID456=y
-+CONFIG_MD_RAID5_RESHAPE=y
-+# CONFIG_MD_MULTIPATH is not set
-+# CONFIG_MD_FAULTY is not set
-+# CONFIG_BLK_DEV_DM is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_E1000E_ENABLED is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_NETDEV_10000 is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+# CONFIG_USB_ARCH_HAS_OHCI is not set
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+# CONFIG_USB_DEVICEFS is not set
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+CONFIG_USB_EHCI_ROOT_HUB_TT=y
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+CONFIG_USB_EHCI_FSL=y
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+# CONFIG_ENABLE_MUST_CHECK is not set
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_XOR_BLOCKS=y
-+CONFIG_ASYNC_CORE=y
-+CONFIG_ASYNC_MEMCPY=y
-+CONFIG_ASYNC_XOR=y
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/83xx/sbc834x_defconfig
-@@ -0,0 +1,828 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:38 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+# CONFIG_FSL_EMB_PERFMON is not set
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+# CONFIG_SMP is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+CONFIG_PPC_83xx=y
-+# CONFIG_PPC_86xx is not set
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC83xx=y
-+# CONFIG_MPC831x_RDB is not set
-+# CONFIG_MPC832x_MDS is not set
-+# CONFIG_MPC832x_RDB is not set
-+# CONFIG_MPC834x_MDS is not set
-+# CONFIG_MPC834x_ITX is not set
-+# CONFIG_MPC836x_MDS is not set
-+# CONFIG_MPC837x_MDS is not set
-+# CONFIG_MPC837x_RDB is not set
-+CONFIG_SBC834x=y
-+CONFIG_PPC_MPC834x=y
-+CONFIG_IPIC=y
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=m
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_E1000E_ENABLED is not set
-+CONFIG_GIANFAR=y
-+# CONFIG_GFAR_NAPI is not set
-+# CONFIG_NETDEV_10000 is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+CONFIG_83xx_WDT=y
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+# CONFIG_USB_SUPPORT is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+# CONFIG_EXT2_FS is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+# CONFIG_CRYPTO_HW is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/ksi8560_defconfig
-@@ -0,0 +1,899 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.24
-+# Mon Feb 11 16:25:19 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_USER_NS is not set
-+# CONFIG_PID_NS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_FAIR_GROUP_SCHED=y
-+CONFIG_FAIR_USER_SCHED=y
-+# CONFIG_FAIR_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+# CONFIG_RELAY is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+# CONFIG_PREEMPT_RCU is not set
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+CONFIG_KSI8560=y
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_CPM2=y
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_CPM=y
-+
-+#
-+# Kernel options
-+#
-+CONFIG_HIGHMEM=y
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_RCU_TRACE=y
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+# CONFIG_SECCOMP is not set
-+CONFIG_WANT_DEVICE_TREE=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_FSL_SOC=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+# CONFIG_BLK_DEV_IDEDISK is not set
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+# CONFIG_BLK_DEV_IDEDMA is not set
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+CONFIG_MDIO_BITBANG=y
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+CONFIG_FS_ENET=y
-+# CONFIG_FS_ENET_HAS_SCC is not set
-+CONFIG_FS_ENET_HAS_FCC=y
-+CONFIG_FS_ENET_MDIO_FCC=y
-+CONFIG_NETDEV_1000=y
-+# CONFIG_E1000E_ENABLED is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+CONFIG_NETDEV_10000=y
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+# CONFIG_SERIAL_8250 is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+CONFIG_SERIAL_CPM=y
-+CONFIG_SERIAL_CPM_CONSOLE=y
-+CONFIG_SERIAL_CPM_SCC1=y
-+# CONFIG_SERIAL_CPM_SCC2 is not set
-+# CONFIG_SERIAL_CPM_SCC3 is not set
-+# CONFIG_SERIAL_CPM_SCC4 is not set
-+# CONFIG_SERIAL_CPM_SMC1 is not set
-+# CONFIG_SERIAL_CPM_SMC2 is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+# CONFIG_USB_ARCH_HAS_HCD is not set
-+# CONFIG_USB_ARCH_HAS_OHCI is not set
-+# CONFIG_USB_ARCH_HAS_EHCI is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+# CONFIG_JBD_DEBUG is not set
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+CONFIG_DNOTIFY=y
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_DEBUG_RT_MUTEXES is not set
-+# CONFIG_RT_MUTEX_TESTER is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+CONFIG_DEBUG_MUTEXES=y
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_HIGHMEM is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+CONFIG_FORCED_INLINING=y
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_KGDB_CONSOLE is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/mpc8540_ads_defconfig
-@@ -0,0 +1,796 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:25 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+CONFIG_MPC8540_ADS=y
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+# CONFIG_SECCOMP is not set
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_FSL_SOC=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_E1000E_ENABLED is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+CONFIG_NETDEV_10000=y
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+# CONFIG_USB_ARCH_HAS_HCD is not set
-+# CONFIG_USB_ARCH_HAS_OHCI is not set
-+# CONFIG_USB_ARCH_HAS_EHCI is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_RT_MUTEXES is not set
-+# CONFIG_RT_MUTEX_TESTER is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+CONFIG_DEBUG_MUTEXES=y
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/mpc8544_ds_defconfig
-@@ -0,0 +1,1564 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc7
-+# Mon Mar 31 11:37:03 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-+# CONFIG_TASKSTATS is not set
-+CONFIG_AUDIT=y
-+# CONFIG_AUDITSYSCALL is not set
-+CONFIG_IKCONFIG=y
-+CONFIG_IKCONFIG_PROC=y
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+CONFIG_MODULE_FORCE_UNLOAD=y
-+CONFIG_MODVERSIONS=y
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+# CONFIG_DEFAULT_AS is not set
-+# CONFIG_DEFAULT_DEADLINE is not set
-+CONFIG_DEFAULT_CFQ=y
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="cfq"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+CONFIG_MPC85xx_DS=y
-+# CONFIG_KSI8560 is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+CONFIG_PPC_I8259=y
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+CONFIG_FSL_ULI1575=y
-+
-+#
-+# Kernel options
-+#
-+CONFIG_HIGHMEM=y
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=m
-+CONFIG_FORCE_MAX_ZONEORDER=11
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+CONFIG_NET_KEY=m
-+# CONFIG_NET_KEY_MIGRATE is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+CONFIG_IP_ADVANCED_ROUTER=y
-+CONFIG_ASK_IP_FIB_HASH=y
-+# CONFIG_IP_FIB_TRIE is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_MULTIPLE_TABLES=y
-+CONFIG_IP_ROUTE_MULTIPATH=y
-+CONFIG_IP_ROUTE_VERBOSE=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+CONFIG_IP_PNP_RARP=y
-+CONFIG_NET_IPIP=y
-+CONFIG_NET_IPGRE=y
-+CONFIG_NET_IPGRE_BROADCAST=y
-+CONFIG_IP_MROUTE=y
-+CONFIG_IP_PIMSM_V1=y
-+CONFIG_IP_PIMSM_V2=y
-+CONFIG_ARPD=y
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+CONFIG_INET_TUNNEL=y
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+CONFIG_IPV6=y
-+# CONFIG_IPV6_PRIVACY is not set
-+# CONFIG_IPV6_ROUTER_PREF is not set
-+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-+# CONFIG_INET6_AH is not set
-+# CONFIG_INET6_ESP is not set
-+# CONFIG_INET6_IPCOMP is not set
-+# CONFIG_IPV6_MIP6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET6_XFRM_MODE_TUNNEL=y
-+CONFIG_INET6_XFRM_MODE_BEET=y
-+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-+CONFIG_IPV6_SIT=y
-+# CONFIG_IPV6_TUNNEL is not set
-+# CONFIG_IPV6_MULTIPLE_TABLES is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# 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_HMAC_NONE is not set
-+# CONFIG_SCTP_HMAC_SHA1 is not set
-+CONFIG_SCTP_HMAC_MD5=y
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+CONFIG_FIB_RULES=y
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+CONFIG_BLK_DEV_NBD=y
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=131072
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+CONFIG_CHR_DEV_ST=y
-+# CONFIG_CHR_DEV_OSST is not set
-+CONFIG_BLK_DEV_SR=y
-+# CONFIG_BLK_DEV_SR_VENDOR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+CONFIG_SCSI_MULTI_LUN=y
-+# CONFIG_SCSI_CONSTANTS is not set
-+CONFIG_SCSI_LOGGING=y
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_IPR is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+CONFIG_ATA=y
-+# CONFIG_ATA_NONSTANDARD is not set
-+CONFIG_SATA_AHCI=y
-+# CONFIG_SATA_SVW is not set
-+# CONFIG_ATA_PIIX is not set
-+# CONFIG_SATA_MV is not set
-+# CONFIG_SATA_NV is not set
-+# CONFIG_PDC_ADMA is not set
-+# CONFIG_SATA_QSTOR is not set
-+# CONFIG_SATA_PROMISE is not set
-+# CONFIG_SATA_SX4 is not set
-+# CONFIG_SATA_SIL is not set
-+# CONFIG_SATA_SIL24 is not set
-+# CONFIG_SATA_SIS is not set
-+# CONFIG_SATA_ULI is not set
-+# CONFIG_SATA_VIA is not set
-+# CONFIG_SATA_VITESSE is not set
-+# CONFIG_SATA_INIC162X is not set
-+# CONFIG_SATA_FSL is not set
-+CONFIG_PATA_ALI=y
-+# CONFIG_PATA_AMD is not set
-+# CONFIG_PATA_ARTOP is not set
-+# CONFIG_PATA_ATIIXP is not set
-+# CONFIG_PATA_CMD640_PCI is not set
-+# CONFIG_PATA_CMD64X is not set
-+# CONFIG_PATA_CS5520 is not set
-+# CONFIG_PATA_CS5530 is not set
-+# CONFIG_PATA_CYPRESS is not set
-+# CONFIG_PATA_EFAR is not set
-+# CONFIG_ATA_GENERIC is not set
-+# CONFIG_PATA_HPT366 is not set
-+# CONFIG_PATA_HPT37X is not set
-+# CONFIG_PATA_HPT3X2N is not set
-+# CONFIG_PATA_HPT3X3 is not set
-+# CONFIG_PATA_IT821X is not set
-+# CONFIG_PATA_IT8213 is not set
-+# CONFIG_PATA_JMICRON is not set
-+# CONFIG_PATA_TRIFLEX is not set
-+# CONFIG_PATA_MARVELL is not set
-+# CONFIG_PATA_MPIIX is not set
-+# CONFIG_PATA_OLDPIIX is not set
-+# CONFIG_PATA_NETCELL is not set
-+# CONFIG_PATA_NINJA32 is not set
-+# CONFIG_PATA_NS87410 is not set
-+# CONFIG_PATA_NS87415 is not set
-+# CONFIG_PATA_OPTI is not set
-+# CONFIG_PATA_OPTIDMA is not set
-+# CONFIG_PATA_PDC_OLD is not set
-+# CONFIG_PATA_RADISYS is not set
-+# CONFIG_PATA_RZ1000 is not set
-+# CONFIG_PATA_SC1200 is not set
-+# CONFIG_PATA_SERVERWORKS is not set
-+# CONFIG_PATA_PDC2027X is not set
-+# CONFIG_PATA_SIL680 is not set
-+# CONFIG_PATA_SIS is not set
-+# CONFIG_PATA_VIA is not set
-+# CONFIG_PATA_WINBOND is not set
-+# CONFIG_PATA_PLATFORM is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+CONFIG_DUMMY=y
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_SMSC_PHY is not set
-+# CONFIG_BROADCOM_PHY is not set
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+CONFIG_SERIO=y
-+CONFIG_SERIO_I8042=y
-+CONFIG_SERIO_SERPORT=y
-+# CONFIG_SERIO_PCIPS2 is not set
-+CONFIG_SERIO_LIBPS2=y
-+# CONFIG_SERIO_RAW is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+CONFIG_VT=y
-+CONFIG_VT_CONSOLE=y
-+CONFIG_HW_CONSOLE=y
-+# CONFIG_VT_HW_CONSOLE_BINDING is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=2
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-+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
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+CONFIG_NVRAM=y
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+# CONFIG_I2C_CHARDEV is not set
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+CONFIG_SENSORS_EEPROM=y
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+CONFIG_DVB_CORE=m
-+# CONFIG_DVB_CORE_ATTACH is not set
-+CONFIG_DVB_CAPTURE_DRIVERS=y
-+
-+#
-+# Supported SAA7146 based PCI Adapters
-+#
-+# CONFIG_TTPCI_EEPROM is not set
-+# CONFIG_DVB_BUDGET_CORE is not set
-+
-+#
-+# Supported USB Adapters
-+#
-+# CONFIG_DVB_USB is not set
-+# CONFIG_DVB_TTUSB_BUDGET is not set
-+# CONFIG_DVB_TTUSB_DEC is not set
-+# CONFIG_DVB_CINERGYT2 is not set
-+
-+#
-+# Supported FlexCopII (B2C2) Adapters
-+#
-+# CONFIG_DVB_B2C2_FLEXCOP is not set
-+
-+#
-+# Supported BT878 Adapters
-+#
-+
-+#
-+# Supported Pluto2 Adapters
-+#
-+# CONFIG_DVB_PLUTO2 is not set
-+
-+#
-+# Supported DVB Frontends
-+#
-+
-+#
-+# Customise DVB Frontends
-+#
-+# CONFIG_DVB_FE_CUSTOMISE is not set
-+
-+#
-+# DVB-S (satellite) frontends
-+#
-+# CONFIG_DVB_STV0299 is not set
-+# CONFIG_DVB_CX24110 is not set
-+# CONFIG_DVB_CX24123 is not set
-+# CONFIG_DVB_TDA8083 is not set
-+# CONFIG_DVB_MT312 is not set
-+# CONFIG_DVB_VES1X93 is not set
-+# CONFIG_DVB_S5H1420 is not set
-+# CONFIG_DVB_TDA10086 is not set
-+
-+#
-+# DVB-T (terrestrial) frontends
-+#
-+# CONFIG_DVB_SP8870 is not set
-+# CONFIG_DVB_SP887X is not set
-+# CONFIG_DVB_CX22700 is not set
-+# CONFIG_DVB_CX22702 is not set
-+# CONFIG_DVB_L64781 is not set
-+# CONFIG_DVB_TDA1004X is not set
-+# CONFIG_DVB_NXT6000 is not set
-+# CONFIG_DVB_MT352 is not set
-+# CONFIG_DVB_ZL10353 is not set
-+# CONFIG_DVB_DIB3000MB is not set
-+# CONFIG_DVB_DIB3000MC is not set
-+# CONFIG_DVB_DIB7000M is not set
-+# CONFIG_DVB_DIB7000P is not set
-+
-+#
-+# DVB-C (cable) frontends
-+#
-+# CONFIG_DVB_VES1820 is not set
-+# CONFIG_DVB_TDA10021 is not set
-+# CONFIG_DVB_TDA10023 is not set
-+# CONFIG_DVB_STV0297 is not set
-+
-+#
-+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-+#
-+# CONFIG_DVB_NXT200X is not set
-+# CONFIG_DVB_OR51211 is not set
-+# CONFIG_DVB_OR51132 is not set
-+# CONFIG_DVB_BCM3510 is not set
-+# CONFIG_DVB_LGDT330X is not set
-+# CONFIG_DVB_S5H1409 is not set
-+
-+#
-+# Tuners/PLL support
-+#
-+# CONFIG_DVB_PLL is not set
-+# CONFIG_DVB_TDA826X is not set
-+# CONFIG_DVB_TDA827X is not set
-+# CONFIG_DVB_TDA18271 is not set
-+# CONFIG_DVB_TUNER_QT1010 is not set
-+# CONFIG_DVB_TUNER_MT2060 is not set
-+# CONFIG_DVB_TUNER_MT2266 is not set
-+# CONFIG_DVB_TUNER_MT2131 is not set
-+# CONFIG_DVB_TUNER_DIB0070 is not set
-+# CONFIG_DVB_TUNER_XC5000 is not set
-+
-+#
-+# Miscellaneous devices
-+#
-+# CONFIG_DVB_LNBP21 is not set
-+# CONFIG_DVB_ISL6421 is not set
-+# CONFIG_DVB_TUA6100 is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Console display driver support
-+#
-+CONFIG_VGA_CONSOLE=y
-+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-+CONFIG_DUMMY_CONSOLE=y
-+
-+#
-+# Sound
-+#
-+CONFIG_SOUND=y
-+
-+#
-+# Advanced Linux Sound Architecture
-+#
-+CONFIG_SND=y
-+CONFIG_SND_TIMER=y
-+CONFIG_SND_PCM=y
-+# CONFIG_SND_SEQUENCER is not set
-+# CONFIG_SND_MIXER_OSS is not set
-+# CONFIG_SND_PCM_OSS 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
-+
-+#
-+# Generic devices
-+#
-+CONFIG_SND_AC97_CODEC=y
-+# CONFIG_SND_DUMMY is not set
-+# CONFIG_SND_MTPAV is not set
-+# CONFIG_SND_SERIAL_U16550 is not set
-+# CONFIG_SND_MPU401 is not set
-+
-+#
-+# PCI devices
-+#
-+# CONFIG_SND_AD1889 is not set
-+# CONFIG_SND_ALS300 is not set
-+# CONFIG_SND_ALS4000 is not set
-+# CONFIG_SND_ALI5451 is not set
-+# CONFIG_SND_ATIIXP is not set
-+# CONFIG_SND_ATIIXP_MODEM is not set
-+# CONFIG_SND_AU8810 is not set
-+# CONFIG_SND_AU8820 is not set
-+# CONFIG_SND_AU8830 is not set
-+# CONFIG_SND_AZT3328 is not set
-+# CONFIG_SND_BT87X is not set
-+# CONFIG_SND_CA0106 is not set
-+# CONFIG_SND_CMIPCI is not set
-+# CONFIG_SND_OXYGEN is not set
-+# CONFIG_SND_CS4281 is not set
-+# CONFIG_SND_CS46XX is not set
-+# CONFIG_SND_CS5530 is not set
-+# CONFIG_SND_DARLA20 is not set
-+# CONFIG_SND_GINA20 is not set
-+# CONFIG_SND_LAYLA20 is not set
-+# CONFIG_SND_DARLA24 is not set
-+# CONFIG_SND_GINA24 is not set
-+# CONFIG_SND_LAYLA24 is not set
-+# CONFIG_SND_MONA is not set
-+# CONFIG_SND_MIA is not set
-+# CONFIG_SND_ECHO3G is not set
-+# CONFIG_SND_INDIGO is not set
-+# CONFIG_SND_INDIGOIO is not set
-+# CONFIG_SND_INDIGODJ is not set
-+# CONFIG_SND_EMU10K1 is not set
-+# CONFIG_SND_EMU10K1X is not set
-+# CONFIG_SND_ENS1370 is not set
-+# CONFIG_SND_ENS1371 is not set
-+# CONFIG_SND_ES1938 is not set
-+# CONFIG_SND_ES1968 is not set
-+# CONFIG_SND_FM801 is not set
-+# CONFIG_SND_HDA_INTEL is not set
-+# CONFIG_SND_HDSP is not set
-+# CONFIG_SND_HDSPM is not set
-+# CONFIG_SND_HIFIER is not set
-+# CONFIG_SND_ICE1712 is not set
-+# CONFIG_SND_ICE1724 is not set
-+CONFIG_SND_INTEL8X0=y
-+# CONFIG_SND_INTEL8X0M is not set
-+# CONFIG_SND_KORG1212 is not set
-+# CONFIG_SND_MAESTRO3 is not set
-+# CONFIG_SND_MIXART is not set
-+# CONFIG_SND_NM256 is not set
-+# CONFIG_SND_PCXHR is not set
-+# CONFIG_SND_RIPTIDE is not set
-+# CONFIG_SND_RME32 is not set
-+# CONFIG_SND_RME96 is not set
-+# CONFIG_SND_RME9652 is not set
-+# CONFIG_SND_SONICVIBES is not set
-+# CONFIG_SND_TRIDENT is not set
-+# CONFIG_SND_VIA82XX is not set
-+# CONFIG_SND_VIA82XX_MODEM is not set
-+# CONFIG_SND_VIRTUOSO is not set
-+# CONFIG_SND_VX222 is not set
-+# CONFIG_SND_YMFPCI is not set
-+# CONFIG_SND_AC97_POWER_SAVE is not set
-+
-+#
-+# ALSA PowerMac devices
-+#
-+
-+#
-+# ALSA PowerPC devices
-+#
-+
-+#
-+# USB devices
-+#
-+# CONFIG_SND_USB_AUDIO is not set
-+# CONFIG_SND_USB_USX2Y is not set
-+# CONFIG_SND_USB_CAIAQ is not set
-+
-+#
-+# System on Chip audio support
-+#
-+# CONFIG_SND_SOC is not set
-+
-+#
-+# SoC Audio support for SuperH
-+#
-+
-+#
-+# ALSA SoC audio for Freescale SOCs
-+#
-+
-+#
-+# Open Sound System
-+#
-+# CONFIG_SOUND_PRIME is not set
-+CONFIG_AC97_BUS=y
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+
-+#
-+# USB Input Devices
-+#
-+CONFIG_USB_HID=y
-+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-+# CONFIG_HID_FF is not set
-+# CONFIG_USB_HIDDEV is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+# CONFIG_USB_EHCI_FSL is not set
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
-+CONFIG_USB_OHCI_HCD_PCI=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+# CONFIG_USB_UHCI_HCD is not set
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST is not set
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+# CONFIG_RTC_DRV_DS1307 is not set
-+# CONFIG_RTC_DRV_DS1374 is not set
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+CONFIG_RTC_DRV_CMOS=y
-+# 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+CONFIG_DMADEVICES=y
-+
-+#
-+# DMA Devices
-+#
-+CONFIG_FSL_DMA=y
-+# CONFIG_FSL_DMA_SELFTEST is not set
-+CONFIG_DMA_ENGINE=y
-+
-+#
-+# DMA Clients
-+#
-+# CONFIG_NET_DMA is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+CONFIG_ISO9660_FS=m
-+CONFIG_JOLIET=y
-+CONFIG_ZISOFS=y
-+CONFIG_UDF_FS=m
-+CONFIG_UDF_NLS=y
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=m
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+CONFIG_NTFS_FS=y
-+# CONFIG_NTFS_DEBUG is not set
-+# CONFIG_NTFS_RW is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+CONFIG_ADFS_FS=m
-+# CONFIG_ADFS_FS_RW is not set
-+CONFIG_AFFS_FS=m
-+CONFIG_HFS_FS=m
-+CONFIG_HFSPLUS_FS=m
-+CONFIG_BEFS_FS=m
-+# CONFIG_BEFS_DEBUG is not set
-+CONFIG_BFS_FS=m
-+CONFIG_EFS_FS=m
-+CONFIG_CRAMFS=y
-+CONFIG_VXFS_FS=m
-+# CONFIG_MINIX_FS is not set
-+CONFIG_HPFS_FS=m
-+CONFIG_QNX4FS_FS=m
-+# CONFIG_ROMFS_FS is not set
-+CONFIG_SYSV_FS=m
-+CONFIG_UFS_FS=m
-+# CONFIG_UFS_FS_WRITE is not set
-+# CONFIG_UFS_DEBUG is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+CONFIG_NFSD=y
-+# CONFIG_NFSD_V3 is not set
-+CONFIG_NFSD_TCP=y
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_EXPORTFS=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+CONFIG_MAC_PARTITION=y
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+CONFIG_NLS_UTF8=m
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+CONFIG_LIBCRC32C=m
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_HIGHMEM is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+CONFIG_DEBUG_INFO=y
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_HASH=y
-+CONFIG_CRYPTO_MANAGER=y
-+CONFIG_CRYPTO_HMAC=y
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+CONFIG_CRYPTO_SHA1=m
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/mpc8560_ads_defconfig
-@@ -0,0 +1,885 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:27 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+CONFIG_MPC8560_ADS=y
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_CPM2=y
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_CPM=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+# CONFIG_SECCOMP is not set
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+CONFIG_PCI_DEBUG=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+CONFIG_DAVICOM_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_FS_ENET=y
-+# CONFIG_FS_ENET_HAS_SCC is not set
-+CONFIG_FS_ENET_HAS_FCC=y
-+# CONFIG_FS_ENET_MDIO_FCC is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+CONFIG_E1000=y
-+CONFIG_E1000_NAPI=y
-+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+# CONFIG_SERIAL_8250 is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+CONFIG_SERIAL_CPM=y
-+CONFIG_SERIAL_CPM_CONSOLE=y
-+CONFIG_SERIAL_CPM_SCC1=y
-+CONFIG_SERIAL_CPM_SCC2=y
-+# CONFIG_SERIAL_CPM_SCC3 is not set
-+# CONFIG_SERIAL_CPM_SCC4 is not set
-+# CONFIG_SERIAL_CPM_SMC1 is not set
-+# CONFIG_SERIAL_CPM_SMC2 is not set
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_RT_MUTEXES is not set
-+# CONFIG_RT_MUTEX_TESTER is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+CONFIG_DEBUG_MUTEXES=y
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_KGDB_CONSOLE is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/mpc8568mds_defconfig
-@@ -0,0 +1,1117 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc7
-+# Mon Mar 31 11:37:05 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+# CONFIG_KMOD is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+CONFIG_MPC85xx_MDS=y
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_QUICC_ENGINE=y
-+# CONFIG_CPM2 is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+# CONFIG_BLK_DEV_SD is not set
-+# CONFIG_CHR_DEV_ST is not set
-+# CONFIG_CHR_DEV_OSST is not set
-+# CONFIG_BLK_DEV_SR is not set
-+# CONFIG_CHR_DEV_SG is not set
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_UCC_GETH is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+# CONFIG_SERIAL_QE is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+# CONFIG_SOFT_WATCHDOG is not set
-+# CONFIG_BOOKE_WDT is not set
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+# CONFIG_RTC_DRV_DS1307 is not set
-+CONFIG_RTC_DRV_DS1374=y
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_XMON is not set
-+# CONFIG_BDI_SWITCH is not set
-+CONFIG_PPC_EARLY_DEBUG=y
-+# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
-+# CONFIG_PPC_EARLY_DEBUG_G5 is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
-+# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
-+# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
-+# CONFIG_PPC_EARLY_DEBUG_44x is not set
-+# CONFIG_PPC_EARLY_DEBUG_40x is not set
-+# CONFIG_PPC_EARLY_DEBUG_CPM is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/mpc8572_ds_defconfig
-@@ -0,0 +1,1549 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc7
-+# Mon Mar 31 11:37:06 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
-+# CONFIG_TASKSTATS is not set
-+CONFIG_AUDIT=y
-+# CONFIG_AUDITSYSCALL is not set
-+CONFIG_IKCONFIG=y
-+CONFIG_IKCONFIG_PROC=y
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+CONFIG_MODULE_FORCE_UNLOAD=y
-+CONFIG_MODVERSIONS=y
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+# CONFIG_DEFAULT_AS is not set
-+# CONFIG_DEFAULT_DEADLINE is not set
-+CONFIG_DEFAULT_CFQ=y
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="cfq"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+CONFIG_MPC85xx_DS=y
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+CONFIG_PPC_I8259=y
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+CONFIG_FSL_ULI1575=y
-+
-+#
-+# Kernel options
-+#
-+CONFIG_HIGHMEM=y
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=m
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+CONFIG_NET_KEY=m
-+# CONFIG_NET_KEY_MIGRATE is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+CONFIG_IP_ADVANCED_ROUTER=y
-+CONFIG_ASK_IP_FIB_HASH=y
-+# CONFIG_IP_FIB_TRIE is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_MULTIPLE_TABLES=y
-+CONFIG_IP_ROUTE_MULTIPATH=y
-+CONFIG_IP_ROUTE_VERBOSE=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+CONFIG_IP_PNP_RARP=y
-+CONFIG_NET_IPIP=y
-+CONFIG_NET_IPGRE=y
-+CONFIG_NET_IPGRE_BROADCAST=y
-+CONFIG_IP_MROUTE=y
-+CONFIG_IP_PIMSM_V1=y
-+CONFIG_IP_PIMSM_V2=y
-+CONFIG_ARPD=y
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+CONFIG_INET_TUNNEL=y
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+CONFIG_IPV6=y
-+# CONFIG_IPV6_PRIVACY is not set
-+# CONFIG_IPV6_ROUTER_PREF is not set
-+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-+# CONFIG_INET6_AH is not set
-+# CONFIG_INET6_ESP is not set
-+# CONFIG_INET6_IPCOMP is not set
-+# CONFIG_IPV6_MIP6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+CONFIG_INET6_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET6_XFRM_MODE_TUNNEL=y
-+CONFIG_INET6_XFRM_MODE_BEET=y
-+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-+CONFIG_IPV6_SIT=y
-+# CONFIG_IPV6_TUNNEL is not set
-+# CONFIG_IPV6_MULTIPLE_TABLES is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# 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_HMAC_NONE is not set
-+# CONFIG_SCTP_HMAC_SHA1 is not set
-+CONFIG_SCTP_HMAC_MD5=y
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+CONFIG_FIB_RULES=y
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+CONFIG_BLK_DEV_NBD=y
-+# CONFIG_BLK_DEV_SX8 is not set
-+# CONFIG_BLK_DEV_UB is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=131072
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=y
-+CONFIG_CHR_DEV_ST=y
-+# CONFIG_CHR_DEV_OSST is not set
-+CONFIG_BLK_DEV_SR=y
-+# CONFIG_BLK_DEV_SR_VENDOR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+CONFIG_SCSI_MULTI_LUN=y
-+# CONFIG_SCSI_CONSTANTS is not set
-+CONFIG_SCSI_LOGGING=y
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_IPR is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+CONFIG_ATA=y
-+# CONFIG_ATA_NONSTANDARD is not set
-+CONFIG_SATA_AHCI=y
-+# CONFIG_SATA_SVW is not set
-+# CONFIG_ATA_PIIX is not set
-+# CONFIG_SATA_MV is not set
-+# CONFIG_SATA_NV is not set
-+# CONFIG_PDC_ADMA is not set
-+# CONFIG_SATA_QSTOR is not set
-+# CONFIG_SATA_PROMISE is not set
-+# CONFIG_SATA_SX4 is not set
-+# CONFIG_SATA_SIL is not set
-+# CONFIG_SATA_SIL24 is not set
-+# CONFIG_SATA_SIS is not set
-+# CONFIG_SATA_ULI is not set
-+# CONFIG_SATA_VIA is not set
-+# CONFIG_SATA_VITESSE is not set
-+# CONFIG_SATA_INIC162X is not set
-+# CONFIG_SATA_FSL is not set
-+CONFIG_PATA_ALI=y
-+# CONFIG_PATA_AMD is not set
-+# CONFIG_PATA_ARTOP is not set
-+# CONFIG_PATA_ATIIXP is not set
-+# CONFIG_PATA_CMD640_PCI is not set
-+# CONFIG_PATA_CMD64X is not set
-+# CONFIG_PATA_CS5520 is not set
-+# CONFIG_PATA_CS5530 is not set
-+# CONFIG_PATA_CYPRESS is not set
-+# CONFIG_PATA_EFAR is not set
-+# CONFIG_ATA_GENERIC is not set
-+# CONFIG_PATA_HPT366 is not set
-+# CONFIG_PATA_HPT37X is not set
-+# CONFIG_PATA_HPT3X2N is not set
-+# CONFIG_PATA_HPT3X3 is not set
-+# CONFIG_PATA_IT821X is not set
-+# CONFIG_PATA_IT8213 is not set
-+# CONFIG_PATA_JMICRON is not set
-+# CONFIG_PATA_TRIFLEX is not set
-+# CONFIG_PATA_MARVELL is not set
-+# CONFIG_PATA_MPIIX is not set
-+# CONFIG_PATA_OLDPIIX is not set
-+# CONFIG_PATA_NETCELL is not set
-+# CONFIG_PATA_NINJA32 is not set
-+# CONFIG_PATA_NS87410 is not set
-+# CONFIG_PATA_NS87415 is not set
-+# CONFIG_PATA_OPTI is not set
-+# CONFIG_PATA_OPTIDMA is not set
-+# CONFIG_PATA_PDC_OLD is not set
-+# CONFIG_PATA_RADISYS is not set
-+# CONFIG_PATA_RZ1000 is not set
-+# CONFIG_PATA_SC1200 is not set
-+# CONFIG_PATA_SERVERWORKS is not set
-+# CONFIG_PATA_PDC2027X is not set
-+# CONFIG_PATA_SIL680 is not set
-+# CONFIG_PATA_SIS is not set
-+# CONFIG_PATA_VIA is not set
-+# CONFIG_PATA_WINBOND is not set
-+# CONFIG_PATA_PLATFORM is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+CONFIG_DUMMY=y
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_SMSC_PHY is not set
-+# CONFIG_BROADCOM_PHY is not set
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+CONFIG_SERIO=y
-+CONFIG_SERIO_I8042=y
-+CONFIG_SERIO_SERPORT=y
-+# CONFIG_SERIO_PCIPS2 is not set
-+CONFIG_SERIO_LIBPS2=y
-+# CONFIG_SERIO_RAW is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+CONFIG_VT=y
-+CONFIG_VT_CONSOLE=y
-+CONFIG_HW_CONSOLE=y
-+# CONFIG_VT_HW_CONSOLE_BINDING is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=2
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-+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
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+CONFIG_NVRAM=y
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+# CONFIG_I2C_CHARDEV is not set
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+CONFIG_SENSORS_EEPROM=y
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+CONFIG_DVB_CORE=m
-+# CONFIG_DVB_CORE_ATTACH is not set
-+CONFIG_DVB_CAPTURE_DRIVERS=y
-+
-+#
-+# Supported SAA7146 based PCI Adapters
-+#
-+# CONFIG_TTPCI_EEPROM is not set
-+# CONFIG_DVB_BUDGET_CORE is not set
-+
-+#
-+# Supported USB Adapters
-+#
-+# CONFIG_DVB_USB is not set
-+# CONFIG_DVB_TTUSB_BUDGET is not set
-+# CONFIG_DVB_TTUSB_DEC is not set
-+# CONFIG_DVB_CINERGYT2 is not set
-+
-+#
-+# Supported FlexCopII (B2C2) Adapters
-+#
-+# CONFIG_DVB_B2C2_FLEXCOP is not set
-+
-+#
-+# Supported BT878 Adapters
-+#
-+
-+#
-+# Supported Pluto2 Adapters
-+#
-+# CONFIG_DVB_PLUTO2 is not set
-+
-+#
-+# Supported DVB Frontends
-+#
-+
-+#
-+# Customise DVB Frontends
-+#
-+# CONFIG_DVB_FE_CUSTOMISE is not set
-+
-+#
-+# DVB-S (satellite) frontends
-+#
-+# CONFIG_DVB_STV0299 is not set
-+# CONFIG_DVB_CX24110 is not set
-+# CONFIG_DVB_CX24123 is not set
-+# CONFIG_DVB_TDA8083 is not set
-+# CONFIG_DVB_MT312 is not set
-+# CONFIG_DVB_VES1X93 is not set
-+# CONFIG_DVB_S5H1420 is not set
-+# CONFIG_DVB_TDA10086 is not set
-+
-+#
-+# DVB-T (terrestrial) frontends
-+#
-+# CONFIG_DVB_SP8870 is not set
-+# CONFIG_DVB_SP887X is not set
-+# CONFIG_DVB_CX22700 is not set
-+# CONFIG_DVB_CX22702 is not set
-+# CONFIG_DVB_L64781 is not set
-+# CONFIG_DVB_TDA1004X is not set
-+# CONFIG_DVB_NXT6000 is not set
-+# CONFIG_DVB_MT352 is not set
-+# CONFIG_DVB_ZL10353 is not set
-+# CONFIG_DVB_DIB3000MB is not set
-+# CONFIG_DVB_DIB3000MC is not set
-+# CONFIG_DVB_DIB7000M is not set
-+# CONFIG_DVB_DIB7000P is not set
-+
-+#
-+# DVB-C (cable) frontends
-+#
-+# CONFIG_DVB_VES1820 is not set
-+# CONFIG_DVB_TDA10021 is not set
-+# CONFIG_DVB_TDA10023 is not set
-+# CONFIG_DVB_STV0297 is not set
-+
-+#
-+# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-+#
-+# CONFIG_DVB_NXT200X is not set
-+# CONFIG_DVB_OR51211 is not set
-+# CONFIG_DVB_OR51132 is not set
-+# CONFIG_DVB_BCM3510 is not set
-+# CONFIG_DVB_LGDT330X is not set
-+# CONFIG_DVB_S5H1409 is not set
-+
-+#
-+# Tuners/PLL support
-+#
-+# CONFIG_DVB_PLL is not set
-+# CONFIG_DVB_TDA826X is not set
-+# CONFIG_DVB_TDA827X is not set
-+# CONFIG_DVB_TDA18271 is not set
-+# CONFIG_DVB_TUNER_QT1010 is not set
-+# CONFIG_DVB_TUNER_MT2060 is not set
-+# CONFIG_DVB_TUNER_MT2266 is not set
-+# CONFIG_DVB_TUNER_MT2131 is not set
-+# CONFIG_DVB_TUNER_DIB0070 is not set
-+# CONFIG_DVB_TUNER_XC5000 is not set
-+
-+#
-+# Miscellaneous devices
-+#
-+# CONFIG_DVB_LNBP21 is not set
-+# CONFIG_DVB_ISL6421 is not set
-+# CONFIG_DVB_TUA6100 is not set
-+CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Console display driver support
-+#
-+CONFIG_VGA_CONSOLE=y
-+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-+CONFIG_DUMMY_CONSOLE=y
-+
-+#
-+# Sound
-+#
-+CONFIG_SOUND=y
-+
-+#
-+# Advanced Linux Sound Architecture
-+#
-+CONFIG_SND=y
-+CONFIG_SND_TIMER=y
-+CONFIG_SND_PCM=y
-+# CONFIG_SND_SEQUENCER is not set
-+# CONFIG_SND_MIXER_OSS is not set
-+# CONFIG_SND_PCM_OSS 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
-+
-+#
-+# Generic devices
-+#
-+CONFIG_SND_AC97_CODEC=y
-+# CONFIG_SND_DUMMY is not set
-+# CONFIG_SND_MTPAV is not set
-+# CONFIG_SND_SERIAL_U16550 is not set
-+# CONFIG_SND_MPU401 is not set
-+
-+#
-+# PCI devices
-+#
-+# CONFIG_SND_AD1889 is not set
-+# CONFIG_SND_ALS300 is not set
-+# CONFIG_SND_ALS4000 is not set
-+# CONFIG_SND_ALI5451 is not set
-+# CONFIG_SND_ATIIXP is not set
-+# CONFIG_SND_ATIIXP_MODEM is not set
-+# CONFIG_SND_AU8810 is not set
-+# CONFIG_SND_AU8820 is not set
-+# CONFIG_SND_AU8830 is not set
-+# CONFIG_SND_AZT3328 is not set
-+# CONFIG_SND_BT87X is not set
-+# CONFIG_SND_CA0106 is not set
-+# CONFIG_SND_CMIPCI is not set
-+# CONFIG_SND_OXYGEN is not set
-+# CONFIG_SND_CS4281 is not set
-+# CONFIG_SND_CS46XX is not set
-+# CONFIG_SND_CS5530 is not set
-+# CONFIG_SND_DARLA20 is not set
-+# CONFIG_SND_GINA20 is not set
-+# CONFIG_SND_LAYLA20 is not set
-+# CONFIG_SND_DARLA24 is not set
-+# CONFIG_SND_GINA24 is not set
-+# CONFIG_SND_LAYLA24 is not set
-+# CONFIG_SND_MONA is not set
-+# CONFIG_SND_MIA is not set
-+# CONFIG_SND_ECHO3G is not set
-+# CONFIG_SND_INDIGO is not set
-+# CONFIG_SND_INDIGOIO is not set
-+# CONFIG_SND_INDIGODJ is not set
-+# CONFIG_SND_EMU10K1 is not set
-+# CONFIG_SND_EMU10K1X is not set
-+# CONFIG_SND_ENS1370 is not set
-+# CONFIG_SND_ENS1371 is not set
-+# CONFIG_SND_ES1938 is not set
-+# CONFIG_SND_ES1968 is not set
-+# CONFIG_SND_FM801 is not set
-+# CONFIG_SND_HDA_INTEL is not set
-+# CONFIG_SND_HDSP is not set
-+# CONFIG_SND_HDSPM is not set
-+# CONFIG_SND_HIFIER is not set
-+# CONFIG_SND_ICE1712 is not set
-+# CONFIG_SND_ICE1724 is not set
-+CONFIG_SND_INTEL8X0=y
-+# CONFIG_SND_INTEL8X0M is not set
-+# CONFIG_SND_KORG1212 is not set
-+# CONFIG_SND_MAESTRO3 is not set
-+# CONFIG_SND_MIXART is not set
-+# CONFIG_SND_NM256 is not set
-+# CONFIG_SND_PCXHR is not set
-+# CONFIG_SND_RIPTIDE is not set
-+# CONFIG_SND_RME32 is not set
-+# CONFIG_SND_RME96 is not set
-+# CONFIG_SND_RME9652 is not set
-+# CONFIG_SND_SONICVIBES is not set
-+# CONFIG_SND_TRIDENT is not set
-+# CONFIG_SND_VIA82XX is not set
-+# CONFIG_SND_VIA82XX_MODEM is not set
-+# CONFIG_SND_VIRTUOSO is not set
-+# CONFIG_SND_VX222 is not set
-+# CONFIG_SND_YMFPCI is not set
-+# CONFIG_SND_AC97_POWER_SAVE is not set
-+
-+#
-+# ALSA PowerMac devices
-+#
-+
-+#
-+# ALSA PowerPC devices
-+#
-+
-+#
-+# USB devices
-+#
-+# CONFIG_SND_USB_AUDIO is not set
-+# CONFIG_SND_USB_USX2Y is not set
-+# CONFIG_SND_USB_CAIAQ is not set
-+
-+#
-+# System on Chip audio support
-+#
-+# CONFIG_SND_SOC is not set
-+
-+#
-+# SoC Audio support for SuperH
-+#
-+
-+#
-+# ALSA SoC audio for Freescale SOCs
-+#
-+
-+#
-+# Open Sound System
-+#
-+# CONFIG_SOUND_PRIME is not set
-+CONFIG_AC97_BUS=y
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+
-+#
-+# USB Input Devices
-+#
-+CONFIG_USB_HID=y
-+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-+# CONFIG_HID_FF is not set
-+# CONFIG_USB_HIDDEV is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+CONFIG_USB=y
-+# CONFIG_USB_DEBUG is not set
-+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
-+
-+#
-+# Miscellaneous USB options
-+#
-+CONFIG_USB_DEVICEFS=y
-+CONFIG_USB_DEVICE_CLASS=y
-+# CONFIG_USB_DYNAMIC_MINORS is not set
-+# CONFIG_USB_OTG is not set
-+
-+#
-+# USB Host Controller Drivers
-+#
-+CONFIG_USB_EHCI_HCD=y
-+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
-+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
-+# CONFIG_USB_EHCI_FSL is not set
-+CONFIG_USB_EHCI_HCD_PPC_OF=y
-+# CONFIG_USB_ISP116X_HCD is not set
-+CONFIG_USB_OHCI_HCD=y
-+CONFIG_USB_OHCI_HCD_PPC_OF=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
-+CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
-+CONFIG_USB_OHCI_HCD_PCI=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
-+CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
-+CONFIG_USB_OHCI_LITTLE_ENDIAN=y
-+# CONFIG_USB_UHCI_HCD is not set
-+# CONFIG_USB_SL811_HCD is not set
-+# CONFIG_USB_R8A66597_HCD is not set
-+
-+#
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+CONFIG_USB_STORAGE=y
-+# CONFIG_USB_STORAGE_DEBUG is not set
-+# CONFIG_USB_STORAGE_DATAFAB is not set
-+# CONFIG_USB_STORAGE_FREECOM is not set
-+# CONFIG_USB_STORAGE_ISD200 is not set
-+# CONFIG_USB_STORAGE_DPCM is not set
-+# CONFIG_USB_STORAGE_USBAT is not set
-+# CONFIG_USB_STORAGE_SDDR09 is not set
-+# CONFIG_USB_STORAGE_SDDR55 is not set
-+# CONFIG_USB_STORAGE_JUMPSHOT is not set
-+# CONFIG_USB_STORAGE_ALAUDA is not set
-+# CONFIG_USB_STORAGE_KARMA is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
-+# CONFIG_USB_TEST is not set
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# I2C RTC drivers
-+#
-+# CONFIG_RTC_DRV_DS1307 is not set
-+# CONFIG_RTC_DRV_DS1374 is not set
-+# CONFIG_RTC_DRV_DS1672 is not set
-+# CONFIG_RTC_DRV_MAX6900 is not set
-+# CONFIG_RTC_DRV_RS5C372 is not set
-+# CONFIG_RTC_DRV_ISL1208 is not set
-+# CONFIG_RTC_DRV_X1205 is not set
-+# CONFIG_RTC_DRV_PCF8563 is not set
-+# CONFIG_RTC_DRV_PCF8583 is not set
-+# CONFIG_RTC_DRV_M41T80 is not set
-+# CONFIG_RTC_DRV_S35390A is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+CONFIG_RTC_DRV_CMOS=y
-+# 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_M48T59 is not set
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+CONFIG_ISO9660_FS=m
-+CONFIG_JOLIET=y
-+CONFIG_ZISOFS=y
-+CONFIG_UDF_FS=m
-+CONFIG_UDF_NLS=y
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=y
-+CONFIG_MSDOS_FS=m
-+CONFIG_VFAT_FS=y
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+CONFIG_NTFS_FS=y
-+# CONFIG_NTFS_DEBUG is not set
-+# CONFIG_NTFS_RW is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+CONFIG_ADFS_FS=m
-+# CONFIG_ADFS_FS_RW is not set
-+CONFIG_AFFS_FS=m
-+CONFIG_HFS_FS=m
-+CONFIG_HFSPLUS_FS=m
-+CONFIG_BEFS_FS=m
-+# CONFIG_BEFS_DEBUG is not set
-+CONFIG_BFS_FS=m
-+CONFIG_EFS_FS=m
-+CONFIG_CRAMFS=y
-+CONFIG_VXFS_FS=m
-+# CONFIG_MINIX_FS is not set
-+CONFIG_HPFS_FS=m
-+CONFIG_QNX4FS_FS=m
-+# CONFIG_ROMFS_FS is not set
-+CONFIG_SYSV_FS=m
-+CONFIG_UFS_FS=m
-+# CONFIG_UFS_FS_WRITE is not set
-+# CONFIG_UFS_DEBUG is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+# CONFIG_NFS_DIRECTIO is not set
-+CONFIG_NFSD=y
-+# CONFIG_NFSD_V3 is not set
-+CONFIG_NFSD_TCP=y
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_EXPORTFS=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+CONFIG_MAC_PARTITION=y
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_BSD_DISKLABEL is not set
-+# CONFIG_MINIX_SUBPARTITION is not set
-+# CONFIG_SOLARIS_X86_PARTITION is not set
-+# CONFIG_UNIXWARE_DISKLABEL is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+CONFIG_NLS_UTF8=m
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+CONFIG_LIBCRC32C=m
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_HIGHMEM is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+CONFIG_DEBUG_INFO=y
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_HASH=y
-+CONFIG_CRYPTO_MANAGER=y
-+CONFIG_CRYPTO_HMAC=y
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+CONFIG_CRYPTO_SHA1=m
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/mpc85xx_cds_defconfig
-@@ -0,0 +1,935 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:30 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+# CONFIG_FAIR_GROUP_SCHED is not set
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+CONFIG_MPC85xx_CDS=y
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+CONFIG_PPC_I8259=y
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+CONFIG_NO_HZ=y
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+# CONFIG_SECCOMP is not set
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+# CONFIG_BLK_DEV_IDEDISK is not set
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+CONFIG_BLK_DEV_IDEDMA_SFF=y
-+
-+#
-+# PCI IDE chipsets support
-+#
-+CONFIG_BLK_DEV_IDEPCI=y
-+CONFIG_IDEPCI_PCIBUS_ORDER=y
-+# CONFIG_BLK_DEV_OFFBOARD is not set
-+CONFIG_BLK_DEV_GENERIC=y
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SL82C105 is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+CONFIG_BLK_DEV_VIA82CXXX=y
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+CONFIG_E1000=y
-+CONFIG_E1000_NAPI=y
-+# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_RT_MUTEXES is not set
-+# CONFIG_RT_MUTEX_TESTER is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+CONFIG_DEBUG_MUTEXES=y
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/sbc8548_defconfig
-@@ -0,0 +1,812 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:39 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+CONFIG_SBC8548=y
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+# CONFIG_SECCOMP is not set
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+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_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+# CONFIG_HID_SUPPORT is not set
-+# CONFIG_USB_SUPPORT is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+# CONFIG_EXT2_FS is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/sbc8560_defconfig
-@@ -0,0 +1,830 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:39 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+CONFIG_SBC8560=y
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=y
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+# CONFIG_SECCOMP is not set
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_FSL_SOC=y
-+# CONFIG_PCI is not set
-+# CONFIG_PCI_DOMAINS is not set
-+# CONFIG_PCI_SYSCALL is not set
-+# CONFIG_ARCH_SUPPORTS_MSI is not set
-+# CONFIG_PCCARD is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=y
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_E1000E_ENABLED is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+CONFIG_NETDEV_10000=y
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_NR_UARTS=2
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=y
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+# CONFIG_USB_ARCH_HAS_HCD is not set
-+# CONFIG_USB_ARCH_HAS_OHCI is not set
-+# CONFIG_USB_ARCH_HAS_EHCI is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_EDAC is not set
-+CONFIG_RTC_LIB=y
-+CONFIG_RTC_CLASS=y
-+CONFIG_RTC_HCTOSYS=y
-+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-+# CONFIG_RTC_DEBUG is not set
-+
-+#
-+# RTC interfaces
-+#
-+CONFIG_RTC_INTF_SYSFS=y
-+CONFIG_RTC_INTF_PROC=y
-+CONFIG_RTC_INTF_DEV=y
-+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-+# CONFIG_RTC_DRV_TEST is not set
-+
-+#
-+# SPI RTC drivers
-+#
-+
-+#
-+# Platform RTC drivers
-+#
-+# CONFIG_RTC_DRV_CMOS 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_M48T59=y
-+# CONFIG_RTC_DRV_V3020 is not set
-+
-+#
-+# on-CPU RTC drivers
-+#
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+# CONFIG_EXT2_FS is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_DEBUG_SLAB is not set
-+# CONFIG_DEBUG_RT_MUTEXES is not set
-+# CONFIG_RT_MUTEX_TESTER is not set
-+# CONFIG_DEBUG_SPINLOCK is not set
-+CONFIG_DEBUG_MUTEXES=y
-+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_BDI_SWITCH is not set
-+CONFIG_PPC_EARLY_DEBUG=y
-+# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
-+# CONFIG_PPC_EARLY_DEBUG_G5 is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
-+# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
-+# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
-+# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
-+# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
-+# CONFIG_PPC_EARLY_DEBUG_44x is not set
-+# CONFIG_PPC_EARLY_DEBUG_40x is not set
-+# CONFIG_PPC_EARLY_DEBUG_CPM is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/stx_gp3_defconfig
-@@ -0,0 +1,1253 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:42 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+# CONFIG_MODULE_UNLOAD is not set
-+CONFIG_MODVERSIONS=y
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+# CONFIG_DEFAULT_AS is not set
-+# CONFIG_DEFAULT_DEADLINE is not set
-+CONFIG_DEFAULT_CFQ=y
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="cfq"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+CONFIG_STX_GP3=y
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_CPM2=y
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_CPM=y
-+
-+#
-+# Kernel options
-+#
-+CONFIG_HIGHMEM=y
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=m
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+# CONFIG_IP_PNP_DHCP is not set
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IP_VS is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+CONFIG_NETFILTER=y
-+# CONFIG_NETFILTER_DEBUG is not set
-+CONFIG_NETFILTER_ADVANCED=y
-+
-+#
-+# Core Netfilter Configuration
-+#
-+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-+# CONFIG_NETFILTER_NETLINK_LOG is not set
-+# CONFIG_NF_CONNTRACK is not set
-+CONFIG_NETFILTER_XTABLES=m
-+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-+
-+#
-+# IP: Netfilter Configuration
-+#
-+# CONFIG_IP_NF_QUEUE is not set
-+CONFIG_IP_NF_IPTABLES=m
-+# CONFIG_IP_NF_MATCH_RECENT is not set
-+# CONFIG_IP_NF_MATCH_ECN is not set
-+# CONFIG_IP_NF_MATCH_AH is not set
-+# CONFIG_IP_NF_MATCH_TTL is not set
-+# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
-+CONFIG_IP_NF_FILTER=m
-+# CONFIG_IP_NF_TARGET_REJECT is not set
-+# CONFIG_IP_NF_TARGET_LOG is not set
-+# CONFIG_IP_NF_TARGET_ULOG is not set
-+# CONFIG_IP_NF_MANGLE is not set
-+# CONFIG_IP_NF_RAW is not set
-+# CONFIG_IP_NF_ARPTABLES is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+CONFIG_NET_PKTGEN=y
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+# CONFIG_MTD is not set
-+CONFIG_OF_DEVICE=y
-+CONFIG_PARPORT=m
-+CONFIG_PARPORT_PC=m
-+# CONFIG_PARPORT_PC_FIFO is not set
-+# CONFIG_PARPORT_PC_SUPERIO is not set
-+# CONFIG_PARPORT_GSC is not set
-+# CONFIG_PARPORT_AX88796 is not set
-+# CONFIG_PARPORT_1284 is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_PARIDE is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=m
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+CONFIG_BLK_DEV_NBD=m
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_BLK_DEV_IDEDISK=y
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+CONFIG_BLK_DEV_IDECD=m
-+CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_BLK_DEV_IDESCSI is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+
-+#
-+# PCI IDE chipsets support
-+#
-+# CONFIG_BLK_DEV_GENERIC is not set
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SL82C105 is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+# CONFIG_BLK_DEV_VIA82CXXX is not set
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+# CONFIG_BLK_DEV_IDEDMA is not set
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+CONFIG_SCSI=m
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
-+# CONFIG_SCSI_NETLINK is not set
-+CONFIG_SCSI_PROC_FS=y
-+
-+#
-+# SCSI support type (disk, tape, CD-ROM)
-+#
-+CONFIG_BLK_DEV_SD=m
-+CONFIG_CHR_DEV_ST=m
-+# CONFIG_CHR_DEV_OSST is not set
-+CONFIG_BLK_DEV_SR=m
-+# CONFIG_BLK_DEV_SR_VENDOR is not set
-+CONFIG_CHR_DEV_SG=m
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+CONFIG_SCSI_MULTI_LUN=y
-+CONFIG_SCSI_CONSTANTS=y
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_DPT_I2O is not set
-+# CONFIG_SCSI_ADVANSYS is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_BUSLOGIC is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_PPA is not set
-+# CONFIG_SCSI_IMM is not set
-+# CONFIG_SCSI_MVSAS is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_NSP32 is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+CONFIG_MARVELL_PHY=y
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+# CONFIG_NET_POCKET is not set
-+# CONFIG_FS_ENET is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PLIP is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+CONFIG_INPUT_MOUSEDEV=y
-+CONFIG_INPUT_MOUSEDEV_PSAUX=y
-+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280
-+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1024
-+CONFIG_INPUT_JOYDEV=m
-+CONFIG_INPUT_EVDEV=m
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+CONFIG_INPUT_KEYBOARD=y
-+CONFIG_KEYBOARD_ATKBD=y
-+# CONFIG_KEYBOARD_SUNKBD is not set
-+# CONFIG_KEYBOARD_LKKBD is not set
-+# CONFIG_KEYBOARD_XTKBD is not set
-+# CONFIG_KEYBOARD_NEWTON is not set
-+# CONFIG_KEYBOARD_STOWAWAY is not set
-+CONFIG_INPUT_MOUSE=y
-+CONFIG_MOUSE_PS2=y
-+CONFIG_MOUSE_PS2_ALPS=y
-+CONFIG_MOUSE_PS2_LOGIPS2PP=y
-+CONFIG_MOUSE_PS2_SYNAPTICS=y
-+CONFIG_MOUSE_PS2_LIFEBOOK=y
-+CONFIG_MOUSE_PS2_TRACKPOINT=y
-+# CONFIG_MOUSE_PS2_TOUCHKIT is not set
-+# CONFIG_MOUSE_SERIAL is not set
-+# CONFIG_MOUSE_APPLETOUCH is not set
-+# CONFIG_MOUSE_VSXXXAA is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+CONFIG_SERIO=y
-+CONFIG_SERIO_I8042=y
-+CONFIG_SERIO_SERPORT=y
-+# CONFIG_SERIO_PARKBD is not set
-+# CONFIG_SERIO_PCIPS2 is not set
-+CONFIG_SERIO_LIBPS2=y
-+# CONFIG_SERIO_RAW is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+# CONFIG_SERIAL_8250 is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+CONFIG_SERIAL_CPM=y
-+CONFIG_SERIAL_CPM_CONSOLE=y
-+# CONFIG_SERIAL_CPM_SCC1 is not set
-+CONFIG_SERIAL_CPM_SCC2=y
-+# CONFIG_SERIAL_CPM_SCC3 is not set
-+# CONFIG_SERIAL_CPM_SCC4 is not set
-+# CONFIG_SERIAL_CPM_SMC1 is not set
-+# CONFIG_SERIAL_CPM_SMC2 is not set
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+CONFIG_PRINTER=m
-+# CONFIG_LP_CONSOLE is not set
-+# CONFIG_PPDEV is not set
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=m
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=m
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=m
-+
-+#
-+# I2C Algorithms
-+#
-+CONFIG_I2C_ALGOBIT=m
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+# CONFIG_I2C_MPC is not set
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+CONFIG_AGP=m
-+CONFIG_DRM=m
-+# CONFIG_DRM_TDFX is not set
-+# CONFIG_DRM_R128 is not set
-+# CONFIG_DRM_RADEON is not set
-+# CONFIG_DRM_MGA is not set
-+# CONFIG_DRM_SIS is not set
-+# CONFIG_DRM_VIA is not set
-+# CONFIG_DRM_SAVAGE is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+CONFIG_SOUND=m
-+
-+#
-+# Advanced Linux Sound Architecture
-+#
-+# CONFIG_SND is not set
-+
-+#
-+# Open Sound System
-+#
-+# CONFIG_SOUND_PRIME is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+# CONFIG_AUXDISPLAY is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+CONFIG_AUTOFS_FS=m
-+CONFIG_AUTOFS4_FS=y
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+CONFIG_ISO9660_FS=m
-+# CONFIG_JOLIET is not set
-+# CONFIG_ZISOFS is not set
-+CONFIG_UDF_FS=m
-+CONFIG_UDF_NLS=y
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+CONFIG_FAT_FS=m
-+CONFIG_MSDOS_FS=m
-+CONFIG_VFAT_FS=m
-+CONFIG_FAT_DEFAULT_CODEPAGE=437
-+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+# CONFIG_PROC_KCORE is not set
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_CRAMFS=m
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+CONFIG_SMB_FS=m
-+# CONFIG_SMB_NLS_DEFAULT is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+CONFIG_NLS=y
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+# CONFIG_NLS_CODEPAGE_437 is not set
-+# CONFIG_NLS_CODEPAGE_737 is not set
-+# CONFIG_NLS_CODEPAGE_775 is not set
-+# CONFIG_NLS_CODEPAGE_850 is not set
-+# CONFIG_NLS_CODEPAGE_852 is not set
-+# CONFIG_NLS_CODEPAGE_855 is not set
-+# CONFIG_NLS_CODEPAGE_857 is not set
-+# CONFIG_NLS_CODEPAGE_860 is not set
-+# CONFIG_NLS_CODEPAGE_861 is not set
-+# CONFIG_NLS_CODEPAGE_862 is not set
-+# CONFIG_NLS_CODEPAGE_863 is not set
-+# CONFIG_NLS_CODEPAGE_864 is not set
-+# CONFIG_NLS_CODEPAGE_865 is not set
-+# CONFIG_NLS_CODEPAGE_866 is not set
-+# CONFIG_NLS_CODEPAGE_869 is not set
-+# CONFIG_NLS_CODEPAGE_936 is not set
-+# CONFIG_NLS_CODEPAGE_950 is not set
-+# CONFIG_NLS_CODEPAGE_932 is not set
-+# CONFIG_NLS_CODEPAGE_949 is not set
-+# CONFIG_NLS_CODEPAGE_874 is not set
-+# CONFIG_NLS_ISO8859_8 is not set
-+# CONFIG_NLS_CODEPAGE_1250 is not set
-+# CONFIG_NLS_CODEPAGE_1251 is not set
-+# CONFIG_NLS_ASCII is not set
-+# CONFIG_NLS_ISO8859_1 is not set
-+# CONFIG_NLS_ISO8859_2 is not set
-+# CONFIG_NLS_ISO8859_3 is not set
-+# CONFIG_NLS_ISO8859_4 is not set
-+# CONFIG_NLS_ISO8859_5 is not set
-+# CONFIG_NLS_ISO8859_6 is not set
-+# CONFIG_NLS_ISO8859_7 is not set
-+# CONFIG_NLS_ISO8859_9 is not set
-+# CONFIG_NLS_ISO8859_13 is not set
-+# CONFIG_NLS_ISO8859_14 is not set
-+# CONFIG_NLS_ISO8859_15 is not set
-+# CONFIG_NLS_KOI8_R is not set
-+# CONFIG_NLS_KOI8_U is not set
-+# CONFIG_NLS_UTF8 is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+CONFIG_CRC_CCITT=y
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=m
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_HIGHMEM is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_DEBUG_INFO is not set
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_KGDB_CONSOLE is not set
-+CONFIG_BDI_SWITCH=y
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/tqm8540_defconfig
-@@ -0,0 +1,1097 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:43 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+# CONFIG_HOTPLUG is not set
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+CONFIG_TQM8540=y
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+CONFIG_TQM85xx=y
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_CPM2 is not set
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+# CONFIG_MTD_OF_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+# CONFIG_MTD_PHYSMAP_OF is not set
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_BLK_DEV_IDEDISK=y
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+CONFIG_BLK_DEV_IDEDMA_SFF=y
-+
-+#
-+# PCI IDE chipsets support
-+#
-+CONFIG_BLK_DEV_IDEPCI=y
-+CONFIG_IDEPCI_PCIBUS_ORDER=y
-+# CONFIG_BLK_DEV_OFFBOARD is not set
-+CONFIG_BLK_DEV_GENERIC=y
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SL82C105 is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+CONFIG_BLK_DEV_VIA82CXXX=y
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+CONFIG_SENSORS_LM75=y
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+CONFIG_HWMON_DEBUG_CHIP=y
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/tqm8541_defconfig
-@@ -0,0 +1,1109 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:44 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+# CONFIG_HOTPLUG is not set
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+CONFIG_TQM8541=y
-+# CONFIG_TQM8555 is not set
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+CONFIG_TQM85xx=y
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_CPM2=y
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_CPM=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+# CONFIG_MTD_OF_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+# CONFIG_MTD_PHYSMAP_OF is not set
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_BLK_DEV_IDEDISK=y
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+CONFIG_BLK_DEV_IDEDMA_SFF=y
-+
-+#
-+# PCI IDE chipsets support
-+#
-+CONFIG_BLK_DEV_IDEPCI=y
-+CONFIG_IDEPCI_PCIBUS_ORDER=y
-+# CONFIG_BLK_DEV_OFFBOARD is not set
-+CONFIG_BLK_DEV_GENERIC=y
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SL82C105 is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+CONFIG_BLK_DEV_VIA82CXXX=y
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+# CONFIG_FS_ENET is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+CONFIG_SERIAL_CPM=y
-+CONFIG_SERIAL_CPM_CONSOLE=y
-+CONFIG_SERIAL_CPM_SCC1=y
-+# CONFIG_SERIAL_CPM_SCC2 is not set
-+# CONFIG_SERIAL_CPM_SCC3 is not set
-+# CONFIG_SERIAL_CPM_SCC4 is not set
-+# CONFIG_SERIAL_CPM_SMC1 is not set
-+# CONFIG_SERIAL_CPM_SMC2 is not set
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+CONFIG_SENSORS_LM75=y
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+CONFIG_HWMON_DEBUG_CHIP=y
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_KGDB_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/tqm8555_defconfig
-@@ -0,0 +1,1109 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:44 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+# CONFIG_HOTPLUG is not set
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+CONFIG_TQM8555=y
-+# CONFIG_TQM8560 is not set
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+CONFIG_TQM85xx=y
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_CPM2=y
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_CPM=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+# CONFIG_MTD_OF_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+# CONFIG_MTD_PHYSMAP_OF is not set
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_BLK_DEV_IDEDISK=y
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+CONFIG_BLK_DEV_IDEDMA_SFF=y
-+
-+#
-+# PCI IDE chipsets support
-+#
-+CONFIG_BLK_DEV_IDEPCI=y
-+CONFIG_IDEPCI_PCIBUS_ORDER=y
-+# CONFIG_BLK_DEV_OFFBOARD is not set
-+CONFIG_BLK_DEV_GENERIC=y
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SL82C105 is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+CONFIG_BLK_DEV_VIA82CXXX=y
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+# CONFIG_FS_ENET is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+CONFIG_SERIAL_CPM=y
-+CONFIG_SERIAL_CPM_CONSOLE=y
-+CONFIG_SERIAL_CPM_SCC1=y
-+# CONFIG_SERIAL_CPM_SCC2 is not set
-+# CONFIG_SERIAL_CPM_SCC3 is not set
-+# CONFIG_SERIAL_CPM_SCC4 is not set
-+# CONFIG_SERIAL_CPM_SMC1 is not set
-+# CONFIG_SERIAL_CPM_SMC2 is not set
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+CONFIG_SENSORS_LM75=y
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+CONFIG_HWMON_DEBUG_CHIP=y
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_KGDB_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- /dev/null
-+++ b/arch/powerpc/configs/85xx/tqm8560_defconfig
-@@ -0,0 +1,1109 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Mon Mar 24 08:48:45 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+CONFIG_PPC_85xx=y
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_E500=y
-+CONFIG_BOOKE=y
-+CONFIG_FSL_BOOKE=y
-+CONFIG_FSL_EMB_PERFMON=y
-+# CONFIG_PHYS_64BIT is not set
-+CONFIG_SPE=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+# CONFIG_POSIX_MQUEUE is not set
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+# CONFIG_KALLSYMS is not set
-+# CONFIG_HOTPLUG is not set
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+# CONFIG_EPOLL is not set
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+# CONFIG_MODULES is not set
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_MPC85xx=y
-+# CONFIG_MPC8540_ADS is not set
-+# CONFIG_MPC8560_ADS is not set
-+# CONFIG_MPC85xx_CDS is not set
-+# CONFIG_MPC85xx_MDS is not set
-+# CONFIG_MPC85xx_DS is not set
-+# CONFIG_STX_GP3 is not set
-+# CONFIG_TQM8540 is not set
-+# CONFIG_TQM8541 is not set
-+# CONFIG_TQM8555 is not set
-+CONFIG_TQM8560=y
-+# CONFIG_SBC8548 is not set
-+# CONFIG_SBC8560 is not set
-+CONFIG_TQM85xx=y
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+CONFIG_CPM2=y
-+CONFIG_PPC_CPM_NEW_BINDING=y
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_CPM=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+CONFIG_MATH_EMULATION=y
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+# CONFIG_XFRM_USER is not set
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_IP_MROUTE is not set
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+CONFIG_INET_XFRM_MODE_TRANSPORT=y
-+CONFIG_INET_XFRM_MODE_TUNNEL=y
-+CONFIG_INET_XFRM_MODE_BEET=y
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+# CONFIG_MTD_OF_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+# CONFIG_MTD_PHYSMAP_OF is not set
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=y
-+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=32768
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+CONFIG_IDE=y
-+CONFIG_IDE_MAX_HWIFS=4
-+CONFIG_BLK_DEV_IDE=y
-+
-+#
-+# Please see Documentation/ide/ide.txt for help/info on IDE drives
-+#
-+# CONFIG_BLK_DEV_IDE_SATA is not set
-+CONFIG_BLK_DEV_IDEDISK=y
-+# CONFIG_IDEDISK_MULTI_MODE is not set
-+# CONFIG_BLK_DEV_IDECD is not set
-+# CONFIG_BLK_DEV_IDETAPE is not set
-+# CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_IDE_TASK_IOCTL is not set
-+CONFIG_IDE_PROC_FS=y
-+
-+#
-+# IDE chipset support/bugfixes
-+#
-+CONFIG_IDE_GENERIC=y
-+# CONFIG_BLK_DEV_PLATFORM is not set
-+CONFIG_BLK_DEV_IDEDMA_SFF=y
-+
-+#
-+# PCI IDE chipsets support
-+#
-+CONFIG_BLK_DEV_IDEPCI=y
-+CONFIG_IDEPCI_PCIBUS_ORDER=y
-+# CONFIG_BLK_DEV_OFFBOARD is not set
-+CONFIG_BLK_DEV_GENERIC=y
-+# CONFIG_BLK_DEV_OPTI621 is not set
-+CONFIG_BLK_DEV_IDEDMA_PCI=y
-+# CONFIG_BLK_DEV_AEC62XX is not set
-+# CONFIG_BLK_DEV_ALI15X3 is not set
-+# CONFIG_BLK_DEV_AMD74XX is not set
-+# CONFIG_BLK_DEV_CMD64X is not set
-+# CONFIG_BLK_DEV_TRIFLEX is not set
-+# CONFIG_BLK_DEV_CY82C693 is not set
-+# CONFIG_BLK_DEV_CS5520 is not set
-+# CONFIG_BLK_DEV_CS5530 is not set
-+# CONFIG_BLK_DEV_HPT34X is not set
-+# CONFIG_BLK_DEV_HPT366 is not set
-+# CONFIG_BLK_DEV_JMICRON is not set
-+# CONFIG_BLK_DEV_SC1200 is not set
-+# CONFIG_BLK_DEV_PIIX is not set
-+# CONFIG_BLK_DEV_IT8213 is not set
-+# CONFIG_BLK_DEV_IT821X is not set
-+# CONFIG_BLK_DEV_NS87415 is not set
-+# CONFIG_BLK_DEV_PDC202XX_OLD is not set
-+# CONFIG_BLK_DEV_PDC202XX_NEW is not set
-+# CONFIG_BLK_DEV_SVWKS is not set
-+# CONFIG_BLK_DEV_SIIMAGE is not set
-+# CONFIG_BLK_DEV_SL82C105 is not set
-+# CONFIG_BLK_DEV_SLC90E66 is not set
-+# CONFIG_BLK_DEV_TRM290 is not set
-+CONFIG_BLK_DEV_VIA82CXXX=y
-+# CONFIG_BLK_DEV_TC86C001 is not set
-+CONFIG_BLK_DEV_IDEDMA=y
-+CONFIG_IDE_ARCH_OBSOLETE_INIT=y
-+# CONFIG_BLK_DEV_HD is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+CONFIG_NET_PCI=y
-+# CONFIG_PCNET32 is not set
-+# CONFIG_AMD8111_ETH is not set
-+# CONFIG_ADAPTEC_STARFIRE is not set
-+# CONFIG_B44 is not set
-+# CONFIG_FORCEDETH is not set
-+# CONFIG_EEPRO100 is not set
-+CONFIG_E100=y
-+# CONFIG_FEALNX is not set
-+# CONFIG_NATSEMI is not set
-+# CONFIG_NE2K_PCI is not set
-+# CONFIG_8139CP is not set
-+# CONFIG_8139TOO is not set
-+# CONFIG_R6040 is not set
-+# CONFIG_SIS900 is not set
-+# CONFIG_EPIC100 is not set
-+# CONFIG_SUNDANCE is not set
-+# CONFIG_TLAN is not set
-+# CONFIG_VIA_RHINE is not set
-+# CONFIG_SC92031 is not set
-+# CONFIG_FS_ENET is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+CONFIG_GFAR_NAPI=y
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+# CONFIG_INPUT_MOUSEDEV is not set
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+CONFIG_SERIAL_CPM=y
-+CONFIG_SERIAL_CPM_CONSOLE=y
-+CONFIG_SERIAL_CPM_SCC1=y
-+# CONFIG_SERIAL_CPM_SCC2 is not set
-+# CONFIG_SERIAL_CPM_SCC3 is not set
-+# CONFIG_SERIAL_CPM_SCC4 is not set
-+# CONFIG_SERIAL_CPM_SMC1 is not set
-+# CONFIG_SERIAL_CPM_SMC2 is not set
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=y
-+# CONFIG_NVRAM is not set
-+CONFIG_GEN_RTC=y
-+# CONFIG_GEN_RTC_X is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+CONFIG_SENSORS_LM75=y
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+CONFIG_HWMON_DEBUG_CHIP=y
-+# CONFIG_THERMAL is not set
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+# CONFIG_EXT3_FS_POSIX_ACL is not set
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+CONFIG_FS_MBCACHE=y
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+CONFIG_JFFS2_FS=y
-+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 is not set
-+CONFIG_JFFS2_ZLIB=y
-+# CONFIG_JFFS2_LZO is not set
-+CONFIG_JFFS2_RTIME=y
-+# CONFIG_JFFS2_RUBIN is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+# CONFIG_NFS_V3 is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+CONFIG_PARTITION_ADVANCED=y
-+# CONFIG_ACORN_PARTITION is not set
-+# CONFIG_OSF_PARTITION is not set
-+# CONFIG_AMIGA_PARTITION is not set
-+# CONFIG_ATARI_PARTITION is not set
-+# CONFIG_MAC_PARTITION is not set
-+# CONFIG_MSDOS_PARTITION is not set
-+# CONFIG_LDM_PARTITION is not set
-+# CONFIG_SGI_PARTITION is not set
-+# CONFIG_ULTRIX_PARTITION is not set
-+# CONFIG_SUN_PARTITION is not set
-+# CONFIG_KARMA_PARTITION is not set
-+# CONFIG_EFI_PARTITION is not set
-+# CONFIG_SYSV68_PARTITION is not set
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_ZLIB_DEFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+# CONFIG_MAGIC_SYSRQ is not set
-+# CONFIG_UNUSED_SYMBOLS is not set
-+# CONFIG_DEBUG_FS is not set
-+# CONFIG_HEADERS_CHECK is not set
-+# CONFIG_DEBUG_KERNEL is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_KGDB_CONSOLE is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+# CONFIG_CRYPTO_MANAGER is not set
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+# CONFIG_CRYPTO_MD5 is not set
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+# CONFIG_CRYPTO_ECB is not set
-+# CONFIG_CRYPTO_CBC is not set
-+# CONFIG_CRYPTO_PCBC is not set
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+# CONFIG_CRYPTO_DES is not set
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
-+CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/bamboo_defconfig
-+++ /dev/null
-@@ -1,815 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:36:39 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_BAMBOO=y
--# CONFIG_EBONY is not set
--# CONFIG_SEQUOIA is not set
--# CONFIG_TAISHAN is not set
--# CONFIG_KATMAI is not set
--# CONFIG_RAINIER is not set
--# CONFIG_WARP is not set
--CONFIG_440EP=y
--CONFIG_IBM440EP_ERR42=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--CONFIG_CMDLINE_BOOL=y
--CONFIG_CMDLINE=""
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--CONFIG_DEBUGGER=y
--# CONFIG_KGDB is not set
--# CONFIG_XMON is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/chrp32_defconfig
-+++ b/arch/powerpc/configs/chrp32_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux kernel version: 2.6.25-rc6
--# Thu Mar 20 10:33:36 2008
-+# Thu Mar 27 13:55:37 2008
- #
- # CONFIG_PPC64 is not set
-@@ -74,8 +74,6 @@ CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=15
- # CONFIG_CGROUPS is not set
- # CONFIG_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--# CONFIG_CGROUP_SCHED is not set
- CONFIG_SYSFS_DEPRECATED=y
- CONFIG_SYSFS_DEPRECATED_V2=y
- # CONFIG_RELAY is not set
-@@ -243,7 +241,7 @@ CONFIG_PCI_SYSCALL=y
- # CONFIG_PCIEPORTBUS is not set
- CONFIG_ARCH_SUPPORTS_MSI=y
- # CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_LEGACY is not set
- # CONFIG_PCI_DEBUG is not set
- # CONFIG_PCCARD is not set
- # CONFIG_HOTPLUG_PCI is not set
-@@ -1328,6 +1326,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/ebony_defconfig
-+++ /dev/null
-@@ -1,898 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:50:44 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_BAMBOO is not set
--CONFIG_EBONY=y
--# CONFIG_SEQUOIA is not set
--# CONFIG_TAISHAN is not set
--# CONFIG_KATMAI is not set
--# CONFIG_RAINIER is not set
--# CONFIG_WARP is not set
--CONFIG_440GP=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_OF_RTC=y
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--# CONFIG_MTD_CMDLINE_PARTS is not set
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--# CONFIG_CRYPTO_HW is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/ep405_defconfig
-+++ /dev/null
-@@ -1,968 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:50:09 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--CONFIG_40x=y
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_EP405=y
--# CONFIG_KILAUEA is not set
--# CONFIG_MAKALU is not set
--# CONFIG_WALNUT is not set
--# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
--CONFIG_405GP=y
--CONFIG_IBM405_ERR77=y
--CONFIG_IBM405_ERR51=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x00400000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--# CONFIG_USB_EHCI_HCD is not set
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
--CONFIG_USB_OHCI_HCD_PCI=y
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--# CONFIG_USB_UHCI_HCD is not set
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST is not set
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_JFFS2_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/g5_defconfig
-+++ b/arch/powerpc/configs/g5_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux kernel version: 2.6.25-rc6
--# Thu Mar 20 10:36:41 2008
-+# Thu Mar 27 13:55:43 2008
- #
- CONFIG_PPC64=y
-@@ -77,8 +77,6 @@ CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=17
- # CONFIG_CGROUPS is not set
- # CONFIG_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--# CONFIG_CGROUP_SCHED is not set
- CONFIG_SYSFS_DEPRECATED=y
- CONFIG_SYSFS_DEPRECATED_V2=y
- # CONFIG_RELAY is not set
-@@ -276,7 +274,7 @@ CONFIG_PCI_SYSCALL=y
- # CONFIG_PCIEPORTBUS is not set
- CONFIG_ARCH_SUPPORTS_MSI=y
- CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_LEGACY is not set
- # CONFIG_PCI_DEBUG is not set
- # CONFIG_PCCARD is not set
- # CONFIG_HOTPLUG_PCI is not set
-@@ -1596,6 +1594,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/iseries_defconfig
-+++ b/arch/powerpc/configs/iseries_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux kernel version: 2.6.25-rc6
--# Thu Mar 20 10:43:46 2008
-+# Thu Mar 27 13:55:45 2008
- #
- CONFIG_PPC64=y
-@@ -77,8 +77,6 @@ CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=17
- # CONFIG_CGROUPS is not set
- # CONFIG_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--# CONFIG_CGROUP_SCHED is not set
- CONFIG_SYSFS_DEPRECATED=y
- CONFIG_SYSFS_DEPRECATED_V2=y
- # CONFIG_RELAY is not set
-@@ -261,7 +259,7 @@ CONFIG_PCI_SYSCALL=y
- # CONFIG_PCIEPORTBUS is not set
- CONFIG_ARCH_SUPPORTS_MSI=y
- # CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_LEGACY is not set
- # CONFIG_PCI_DEBUG is not set
- # CONFIG_PCCARD is not set
- # CONFIG_HOTPLUG_PCI is not set
-@@ -1065,6 +1063,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/katmai_defconfig
-+++ /dev/null
-@@ -1,790 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.24-rc6
--# Mon Dec 24 11:17:43 2007
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_USER_NS is not set
--# CONFIG_PID_NS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_FAIR_GROUP_SCHED=y
--CONFIG_FAIR_USER_SCHED=y
--# CONFIG_FAIR_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_PPC4xx_PCI_EXPRESS=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC52xx is not set
--# CONFIG_PPC_MPC5200 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_BAMBOO is not set
--# CONFIG_EBONY is not set
--# CONFIG_SEQUOIA is not set
--# CONFIG_TAISHAN is not set
--CONFIG_KATMAI=y
--# CONFIG_RAINIER is not set
--CONFIG_440SPe=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--CONFIG_CMDLINE_BOOL=y
--CONFIG_CMDLINE=""
--CONFIG_SECCOMP=y
--CONFIG_WANT_DEVICE_TREE=y
--CONFIG_DEVICE_TREE="katmai.dts"
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--CONFIG_BLK_DEV_RAM_BLOCKSIZE=1024
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--CONFIG_MACINTOSH_DRIVERS=y
--# CONFIG_MAC_EMUMOUSEBTN is not set
--# CONFIG_WINDFARM is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_IP1000 is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--CONFIG_IBM_NEW_EMAC_EMAC4=y
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_SHAPER is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# USB Gadget Support
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_ROMFS_FS is not set
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--CONFIG_DNOTIFY=y
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--# CONFIG_UCC_SLOW is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--CONFIG_INSTRUMENTATION=y
--# CONFIG_PROFILING is not set
--# CONFIG_KPROBES is not set
--# CONFIG_MARKERS is not set
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--CONFIG_FORCED_INLINING=y
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--CONFIG_DEBUGGER=y
--# CONFIG_KGDB is not set
--# CONFIG_XMON is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/kilauea_defconfig
-+++ /dev/null
-@@ -1,839 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:51:43 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--CONFIG_40x=y
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--CONFIG_PPC4xx_PCI_EXPRESS=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_EP405 is not set
--CONFIG_KILAUEA=y
--# CONFIG_MAKALU is not set
--# CONFIG_WALNUT is not set
--# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
--CONFIG_405EX=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x00400000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--# CONFIG_MISC_DEVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=256
--CONFIG_IBM_NEW_EMAC_TXB=256
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--CONFIG_IBM_NEW_EMAC_RGMII=y
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--CONFIG_IBM_NEW_EMAC_EMAC4=y
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--# CONFIG_NETDEV_1000 is not set
--# CONFIG_NETDEV_10000 is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--# CONFIG_USB_SUPPORT is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_JFFS2_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/makalu_defconfig
-+++ /dev/null
-@@ -1,839 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:52:30 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--CONFIG_40x=y
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--CONFIG_PPC4xx_PCI_EXPRESS=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_EP405 is not set
--# CONFIG_KILAUEA is not set
--CONFIG_MAKALU=y
--# CONFIG_WALNUT is not set
--# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
--CONFIG_405EX=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x00400000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--# CONFIG_MISC_DEVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=256
--CONFIG_IBM_NEW_EMAC_TXB=256
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--CONFIG_IBM_NEW_EMAC_RGMII=y
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--CONFIG_IBM_NEW_EMAC_EMAC4=y
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--# CONFIG_NETDEV_1000 is not set
--# CONFIG_NETDEV_10000 is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--# CONFIG_USB_SUPPORT is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_JFFS2_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/maple_defconfig
-+++ b/arch/powerpc/configs/maple_defconfig
-@@ -333,7 +333,7 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
- CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
- CONFIG_STANDALONE=y
- CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
-+CONFIG_FW_LOADER=y
- # CONFIG_DEBUG_DRIVER is not set
- # CONFIG_DEBUG_DEVRES is not set
- # CONFIG_SYS_HYPERVISOR is not set
-@@ -374,6 +374,7 @@ CONFIG_BLK_DEV_IDEDISK=y
- CONFIG_BLK_DEV_IDECD=y
- # CONFIG_BLK_DEV_IDETAPE is not set
- # CONFIG_BLK_DEV_IDEFLOPPY is not set
-+# CONFIG_BLK_DEV_IDESCSI is not set
- CONFIG_IDE_TASK_IOCTL=y
- CONFIG_IDE_PROC_FS=y
-@@ -427,10 +428,129 @@ CONFIG_IDE_ARCH_OBSOLETE_INIT=y
- # SCSI device support
- #
- # CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
-+CONFIG_SCSI=y
-+CONFIG_SCSI_DMA=y
-+# CONFIG_SCSI_TGT is not set
- # CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA 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_BLK_DEV_SR is not set
-+CONFIG_CHR_DEV_SG=y
-+# CONFIG_CHR_DEV_SCH is not set
-+
-+#
-+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-+#
-+# CONFIG_SCSI_MULTI_LUN is not set
-+# CONFIG_SCSI_CONSTANTS is not set
-+# CONFIG_SCSI_LOGGING is not set
-+# CONFIG_SCSI_SCAN_ASYNC is not set
-+CONFIG_SCSI_WAIT_SCAN=m
-+
-+#
-+# SCSI Transports
-+#
-+# CONFIG_SCSI_SPI_ATTRS is not set
-+# CONFIG_SCSI_FC_ATTRS is not set
-+# CONFIG_SCSI_ISCSI_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 is not set
-+# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
-+# CONFIG_SCSI_3W_9XXX is not set
-+# CONFIG_SCSI_ACARD is not set
-+# CONFIG_SCSI_AACRAID is not set
-+# CONFIG_SCSI_AIC7XXX is not set
-+# CONFIG_SCSI_AIC7XXX_OLD is not set
-+# CONFIG_SCSI_AIC79XX is not set
-+# CONFIG_SCSI_AIC94XX is not set
-+# CONFIG_SCSI_ARCMSR is not set
-+# CONFIG_MEGARAID_NEWGEN is not set
-+# CONFIG_MEGARAID_LEGACY is not set
-+# CONFIG_MEGARAID_SAS is not set
-+# CONFIG_SCSI_HPTIOP is not set
-+# CONFIG_SCSI_DMX3191D is not set
-+# CONFIG_SCSI_EATA is not set
-+# CONFIG_SCSI_FUTURE_DOMAIN is not set
-+# CONFIG_SCSI_GDTH is not set
-+# CONFIG_SCSI_IPS is not set
-+# CONFIG_SCSI_INITIO is not set
-+# CONFIG_SCSI_INIA100 is not set
-+# CONFIG_SCSI_STEX is not set
-+# CONFIG_SCSI_SYM53C8XX_2 is not set
-+CONFIG_SCSI_IPR=y
-+CONFIG_SCSI_IPR_TRACE=y
-+CONFIG_SCSI_IPR_DUMP=y
-+# CONFIG_SCSI_QLOGIC_1280 is not set
-+# CONFIG_SCSI_QLA_FC is not set
-+# CONFIG_SCSI_QLA_ISCSI is not set
-+# CONFIG_SCSI_LPFC is not set
-+# CONFIG_SCSI_DC395x is not set
-+# CONFIG_SCSI_DC390T is not set
-+# CONFIG_SCSI_DEBUG is not set
-+# CONFIG_SCSI_SRP is not set
-+CONFIG_ATA=y
-+CONFIG_ATA_NONSTANDARD=y
-+# CONFIG_SATA_AHCI is not set
-+# CONFIG_SATA_SVW is not set
-+# CONFIG_ATA_PIIX is not set
-+# CONFIG_SATA_MV is not set
-+# CONFIG_SATA_NV is not set
-+# CONFIG_PDC_ADMA is not set
-+# CONFIG_SATA_QSTOR is not set
-+# CONFIG_SATA_PROMISE is not set
-+# CONFIG_SATA_SX4 is not set
-+# CONFIG_SATA_SIL is not set
-+# CONFIG_SATA_SIL24 is not set
-+# CONFIG_SATA_SIS is not set
-+# CONFIG_SATA_ULI is not set
-+# CONFIG_SATA_VIA is not set
-+# CONFIG_SATA_VITESSE is not set
-+# CONFIG_SATA_INIC162X is not set
-+# CONFIG_PATA_ALI is not set
-+# CONFIG_PATA_AMD is not set
-+# CONFIG_PATA_ARTOP is not set
-+# CONFIG_PATA_ATIIXP is not set
-+# CONFIG_PATA_CMD640_PCI is not set
-+# CONFIG_PATA_CMD64X is not set
-+# CONFIG_PATA_CS5520 is not set
-+# CONFIG_PATA_CS5530 is not set
-+# CONFIG_PATA_CYPRESS is not set
-+# CONFIG_PATA_EFAR is not set
-+# CONFIG_ATA_GENERIC is not set
-+# CONFIG_PATA_HPT366 is not set
-+# CONFIG_PATA_HPT37X is not set
-+# CONFIG_PATA_HPT3X2N is not set
-+# CONFIG_PATA_HPT3X3 is not set
-+# CONFIG_PATA_IT821X is not set
-+# CONFIG_PATA_IT8213 is not set
-+# CONFIG_PATA_JMICRON is not set
-+# CONFIG_PATA_TRIFLEX is not set
-+# CONFIG_PATA_MARVELL is not set
-+# CONFIG_PATA_MPIIX is not set
-+# CONFIG_PATA_OLDPIIX is not set
-+# CONFIG_PATA_NETCELL is not set
-+# CONFIG_PATA_NS87410 is not set
-+# CONFIG_PATA_NS87415 is not set
-+# CONFIG_PATA_OPTI is not set
-+# CONFIG_PATA_OPTIDMA is not set
-+# CONFIG_PATA_PDC_OLD is not set
-+# CONFIG_PATA_RADISYS is not set
-+# CONFIG_PATA_RZ1000 is not set
-+# CONFIG_PATA_SC1200 is not set
-+# CONFIG_PATA_SERVERWORKS is not set
-+# CONFIG_PATA_PDC2027X is not set
-+# CONFIG_PATA_SIL680 is not set
-+# CONFIG_PATA_SIS is not set
-+# CONFIG_PATA_VIA is not set
-+# CONFIG_PATA_WINBOND is not set
- # CONFIG_MD is not set
- # CONFIG_FUSION is not set
-@@ -536,6 +656,7 @@ CONFIG_USB_PEGASUS=y
- # CONFIG_HIPPI is not set
- # CONFIG_PPP is not set
- # CONFIG_SLIP is not set
-+# CONFIG_NET_FC is not set
- # CONFIG_SHAPER is not set
- # CONFIG_NETCONSOLE is not set
- # CONFIG_NETPOLL is not set
-@@ -783,12 +904,14 @@ CONFIG_USB_UHCI_HCD=y
- #
- # may also be needed; see USB_STORAGE Help for more information
- #
-+# CONFIG_USB_STORAGE is not set
- # CONFIG_USB_LIBUSUAL is not set
- #
- # USB Imaging devices
- #
- # CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
- CONFIG_USB_MON=y
- #
---- a/arch/powerpc/configs/mpc8313_rdb_defconfig
-+++ /dev/null
-@@ -1,1393 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:14 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--CONFIG_MPC831x_RDB=y
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC831x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--# CONFIG_MTD_CMDLINE_PARTS is not set
--# CONFIG_MTD_OF_PARTS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--CONFIG_MTD_NAND=y
--CONFIG_MTD_NAND_VERIFY_WRITE=y
--# CONFIG_MTD_NAND_ECC_SMC is not set
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=y
--# CONFIG_MTD_NAND_DISKONCHIP is not set
--# CONFIG_MTD_NAND_CAFE 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_FSL_ELBC is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--# CONFIG_BLK_DEV_SD is not set
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=y
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=y
--CONFIG_MD_RAID0=y
--CONFIG_MD_RAID1=y
--# CONFIG_MD_RAID10 is not set
--# CONFIG_MD_RAID456 is not set
--# CONFIG_MD_MULTIPATH is not set
--# CONFIG_MD_FAULTY is not set
--# CONFIG_BLK_DEV_DM is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_VITESSE_PHY is not set
--# CONFIG_SMSC_PHY is not set
--# CONFIG_BROADCOM_PHY is not set
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_ENC28J60 is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--CONFIG_SPI=y
--# CONFIG_SPI_DEBUG is not set
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=y
--CONFIG_SPI_MPC83xx=y
--
--#
--# SPI Protocol Masters
--#
--# CONFIG_SPI_AT25 is not set
--# CONFIG_SPI_SPIDEV is not set
--# CONFIG_SPI_TLE62X0 is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM70 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# USB-based Watchdog Cards
--#
--# CONFIG_USBPCWATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--
--#
--# USB Input Devices
--#
--# CONFIG_USB_HID is not set
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--CONFIG_USB_EHCI_FSL=y
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
--CONFIG_USB_OHCI_HCD_PCI=y
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=y
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST 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_SELECTED=y
--# CONFIG_USB_GADGET_AMD5536UDC is not set
--# CONFIG_USB_GADGET_ATMEL_USBA is not set
--# CONFIG_USB_GADGET_FSL_USB2 is not set
--CONFIG_USB_GADGET_NET2280=y
--CONFIG_USB_NET2280=y
--# CONFIG_USB_GADGET_PXA2XX is not set
--# CONFIG_USB_GADGET_M66592 is not set
--# CONFIG_USB_GADGET_GOKU is not set
--# CONFIG_USB_GADGET_LH7A40X is not set
--# CONFIG_USB_GADGET_OMAP is not set
--# CONFIG_USB_GADGET_S3C2410 is not set
--# CONFIG_USB_GADGET_AT91 is not set
--# CONFIG_USB_GADGET_DUMMY_HCD is not set
--CONFIG_USB_GADGET_DUALSPEED=y
--# CONFIG_USB_ZERO is not set
--CONFIG_USB_ETH=y
--CONFIG_USB_ETH_RNDIS=y
--# CONFIG_USB_GADGETFS is not set
--# CONFIG_USB_FILE_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_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=y
--# CONFIG_RTC_DRV_DS1374 is not set
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--# CONFIG_RTC_DRV_MAX6902 is not set
--# CONFIG_RTC_DRV_R9701 is not set
--# CONFIG_RTC_DRV_RS5C348 is not set
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc8315_rdb_defconfig
-+++ /dev/null
-@@ -1,1451 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:15 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--CONFIG_MPC831x_RDB=y
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC831x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--# CONFIG_MTD_CMDLINE_PARTS is not set
--# CONFIG_MTD_OF_PARTS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--CONFIG_MTD_NAND=y
--CONFIG_MTD_NAND_VERIFY_WRITE=y
--# CONFIG_MTD_NAND_ECC_SMC is not set
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=y
--# CONFIG_MTD_NAND_DISKONCHIP is not set
--# CONFIG_MTD_NAND_CAFE 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_FSL_ELBC is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--# CONFIG_BLK_DEV_SD is not set
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=y
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_IPR is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--CONFIG_ATA=y
--# CONFIG_ATA_NONSTANDARD is not set
--# CONFIG_SATA_AHCI is not set
--# CONFIG_SATA_SVW is not set
--# CONFIG_ATA_PIIX is not set
--# CONFIG_SATA_MV is not set
--# CONFIG_SATA_NV is not set
--# CONFIG_PDC_ADMA is not set
--# CONFIG_SATA_QSTOR is not set
--# CONFIG_SATA_PROMISE is not set
--# CONFIG_SATA_SX4 is not set
--# CONFIG_SATA_SIL is not set
--# CONFIG_SATA_SIL24 is not set
--# CONFIG_SATA_SIS is not set
--# CONFIG_SATA_ULI is not set
--# CONFIG_SATA_VIA is not set
--# CONFIG_SATA_VITESSE is not set
--# CONFIG_SATA_INIC162X is not set
--CONFIG_SATA_FSL=y
--# CONFIG_PATA_ALI is not set
--# CONFIG_PATA_AMD is not set
--# CONFIG_PATA_ARTOP is not set
--# CONFIG_PATA_ATIIXP is not set
--# CONFIG_PATA_CMD640_PCI is not set
--# CONFIG_PATA_CMD64X is not set
--# CONFIG_PATA_CS5520 is not set
--# CONFIG_PATA_CS5530 is not set
--# CONFIG_PATA_CYPRESS is not set
--# CONFIG_PATA_EFAR is not set
--# CONFIG_ATA_GENERIC is not set
--# CONFIG_PATA_HPT366 is not set
--# CONFIG_PATA_HPT37X is not set
--# CONFIG_PATA_HPT3X2N is not set
--# CONFIG_PATA_HPT3X3 is not set
--# CONFIG_PATA_IT821X is not set
--# CONFIG_PATA_IT8213 is not set
--# CONFIG_PATA_JMICRON is not set
--# CONFIG_PATA_TRIFLEX is not set
--# CONFIG_PATA_MARVELL is not set
--# CONFIG_PATA_MPIIX is not set
--# CONFIG_PATA_OLDPIIX is not set
--# CONFIG_PATA_NETCELL is not set
--# CONFIG_PATA_NINJA32 is not set
--# CONFIG_PATA_NS87410 is not set
--# CONFIG_PATA_NS87415 is not set
--# CONFIG_PATA_OPTI is not set
--# CONFIG_PATA_OPTIDMA is not set
--# CONFIG_PATA_PDC_OLD is not set
--# CONFIG_PATA_RADISYS is not set
--# CONFIG_PATA_RZ1000 is not set
--# CONFIG_PATA_SC1200 is not set
--# CONFIG_PATA_SERVERWORKS is not set
--# CONFIG_PATA_PDC2027X is not set
--# CONFIG_PATA_SIL680 is not set
--# CONFIG_PATA_SIS is not set
--# CONFIG_PATA_VIA is not set
--# CONFIG_PATA_WINBOND is not set
--# CONFIG_PATA_PLATFORM is not set
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=y
--CONFIG_MD_RAID0=y
--CONFIG_MD_RAID1=y
--# CONFIG_MD_RAID10 is not set
--# CONFIG_MD_RAID456 is not set
--# CONFIG_MD_MULTIPATH is not set
--# CONFIG_MD_FAULTY is not set
--# CONFIG_BLK_DEV_DM is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_ENC28J60 is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--CONFIG_SPI=y
--# CONFIG_SPI_DEBUG is not set
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=y
--CONFIG_SPI_MPC83xx=y
--
--#
--# SPI Protocol Masters
--#
--# CONFIG_SPI_AT25 is not set
--# CONFIG_SPI_SPIDEV is not set
--# CONFIG_SPI_TLE62X0 is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM70 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# USB-based Watchdog Cards
--#
--# CONFIG_USBPCWATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--
--#
--# USB Input Devices
--#
--# CONFIG_USB_HID is not set
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--CONFIG_USB_EHCI_FSL=y
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
--CONFIG_USB_OHCI_HCD_PCI=y
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--CONFIG_USB_UHCI_HCD=y
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST 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_SELECTED=y
--# CONFIG_USB_GADGET_AMD5536UDC is not set
--# CONFIG_USB_GADGET_ATMEL_USBA is not set
--# CONFIG_USB_GADGET_FSL_USB2 is not set
--CONFIG_USB_GADGET_NET2280=y
--CONFIG_USB_NET2280=y
--# CONFIG_USB_GADGET_PXA2XX is not set
--# CONFIG_USB_GADGET_M66592 is not set
--# CONFIG_USB_GADGET_GOKU is not set
--# CONFIG_USB_GADGET_LH7A40X is not set
--# CONFIG_USB_GADGET_OMAP is not set
--# CONFIG_USB_GADGET_S3C2410 is not set
--# CONFIG_USB_GADGET_AT91 is not set
--# CONFIG_USB_GADGET_DUMMY_HCD is not set
--CONFIG_USB_GADGET_DUALSPEED=y
--# CONFIG_USB_ZERO is not set
--CONFIG_USB_ETH=y
--CONFIG_USB_ETH_RNDIS=y
--# CONFIG_USB_GADGETFS is not set
--# CONFIG_USB_FILE_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_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=y
--# CONFIG_RTC_DRV_DS1374 is not set
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--# CONFIG_RTC_DRV_MAX6902 is not set
--# CONFIG_RTC_DRV_R9701 is not set
--# CONFIG_RTC_DRV_RS5C348 is not set
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc832x_mds_defconfig
-+++ /dev/null
-@@ -1,1081 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc7
--# Mon Mar 31 11:36:51 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--CONFIG_MPC832x_MDS=y
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC832x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_QUICC_ENGINE=y
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--# CONFIG_BLK_DEV_SD is not set
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--# CONFIG_CHR_DEV_SG is not set
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# CONFIG_MARVELL_PHY is not set
--CONFIG_DAVICOM_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_GIANFAR is not set
--CONFIG_UCC_GETH=y
--# CONFIG_UGETH_NAPI is not set
--# CONFIG_UGETH_MAGIC_PACKET is not set
--# CONFIG_UGETH_FILTERING is not set
--# CONFIG_UGETH_TX_ON_DEMAND is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--# CONFIG_SERIAL_QE is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--# CONFIG_RTC_DRV_DS1307 is not set
--CONFIG_RTC_DRV_DS1374=y
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--CONFIG_UCC_FAST=y
--CONFIG_UCC=y
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/mpc832x_rdb_defconfig
-+++ /dev/null
-@@ -1,1233 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:16 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--CONFIG_MPC832x_RDB=y
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC832x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_QUICC_ENGINE=y
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--# CONFIG_CHR_DEV_SG is not set
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY=y
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_ENC28J60 is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--CONFIG_E1000=y
--# CONFIG_E1000_NAPI is not set
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_GIANFAR is not set
--CONFIG_UCC_GETH=y
--CONFIG_UGETH_NAPI=y
--# CONFIG_UGETH_MAGIC_PACKET is not set
--# CONFIG_UGETH_FILTERING is not set
--# CONFIG_UGETH_TX_ON_DEMAND is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--# CONFIG_SERIAL_QE is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--CONFIG_SPI=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=y
--CONFIG_SPI_MPC83xx=y
--
--#
--# SPI Protocol Masters
--#
--# CONFIG_SPI_AT25 is not set
--# CONFIG_SPI_SPIDEV is not set
--# CONFIG_SPI_TLE62X0 is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM70 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# USB-based Watchdog Cards
--#
--# CONFIG_USBPCWATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--
--#
--# USB Input Devices
--#
--# CONFIG_USB_HID is not set
--
--#
--# USB HID Boot Protocol drivers
--#
--# CONFIG_USB_KBD is not set
--# CONFIG_USB_MOUSE is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--# CONFIG_USB_EHCI_FSL is not set
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
--CONFIG_USB_OHCI_HCD_PCI=y
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--# CONFIG_USB_UHCI_HCD is not set
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST is not set
--# CONFIG_USB_GADGET is not set
--CONFIG_MMC=y
--# CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
--
--#
--# MMC/SD Card Drivers
--#
--CONFIG_MMC_BLOCK=y
--CONFIG_MMC_BLOCK_BOUNCE=y
--# CONFIG_SDIO_UART is not set
--
--#
--# MMC/SD Host Controller Drivers
--#
--# CONFIG_MMC_SDHCI is not set
--# CONFIG_MMC_WBSD is not set
--# CONFIG_MMC_TIFM_SD is not set
--CONFIG_MMC_SPI=y
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=y
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--CONFIG_LDM_PARTITION=y
--# CONFIG_LDM_DEBUG is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--CONFIG_NLS_CODEPAGE_437=y
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--# CONFIG_NLS_CODEPAGE_850 is not set
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--CONFIG_NLS_CODEPAGE_932=y
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--CONFIG_NLS_ISO8859_8=y
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--# CONFIG_NLS_ASCII is not set
--CONFIG_NLS_ISO8859_1=y
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--# CONFIG_NLS_ISO8859_15 is not set
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--# CONFIG_NLS_UTF8 is not set
--# CONFIG_DLM is not set
--CONFIG_UCC_FAST=y
--CONFIG_UCC=y
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--CONFIG_CRC_ITU_T=y
--CONFIG_CRC32=y
--CONFIG_CRC7=y
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/mpc834x_itx_defconfig
-+++ /dev/null
-@@ -1,1295 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:17 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--CONFIG_MPC834x_ITX=y
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC834x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--# CONFIG_MTD_PARTITIONS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--# CONFIG_MTD_BLKDEVS is not set
--# CONFIG_MTD_BLOCK is not set
--# 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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--CONFIG_MTD_PHYSMAP=y
--CONFIG_MTD_PHYSMAP_START=0xfe000000
--CONFIG_MTD_PHYSMAP_LEN=0x1000000
--CONFIG_MTD_PHYSMAP_BANKWIDTH=2
--# CONFIG_MTD_PHYSMAP_OF is not set
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--# CONFIG_BLK_DEV_IDE is not set
--# CONFIG_BLK_DEV_HD_ONLY is not set
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=y
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_IPR is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--CONFIG_ATA=y
--# CONFIG_ATA_NONSTANDARD is not set
--# CONFIG_SATA_AHCI is not set
--# CONFIG_SATA_SVW is not set
--# CONFIG_ATA_PIIX is not set
--# CONFIG_SATA_MV is not set
--# CONFIG_SATA_NV is not set
--# CONFIG_PDC_ADMA is not set
--# CONFIG_SATA_QSTOR is not set
--# CONFIG_SATA_PROMISE is not set
--# CONFIG_SATA_SX4 is not set
--CONFIG_SATA_SIL=y
--# CONFIG_SATA_SIL24 is not set
--# CONFIG_SATA_SIS is not set
--# CONFIG_SATA_ULI is not set
--# CONFIG_SATA_VIA is not set
--# CONFIG_SATA_VITESSE is not set
--# CONFIG_SATA_INIC162X is not set
--# CONFIG_SATA_FSL is not set
--# CONFIG_PATA_ALI is not set
--# CONFIG_PATA_AMD is not set
--# CONFIG_PATA_ARTOP is not set
--# CONFIG_PATA_ATIIXP is not set
--# CONFIG_PATA_CMD640_PCI is not set
--# CONFIG_PATA_CMD64X is not set
--# CONFIG_PATA_CS5520 is not set
--# CONFIG_PATA_CS5530 is not set
--# CONFIG_PATA_CYPRESS is not set
--# CONFIG_PATA_EFAR is not set
--# CONFIG_ATA_GENERIC is not set
--# CONFIG_PATA_HPT366 is not set
--# CONFIG_PATA_HPT37X is not set
--# CONFIG_PATA_HPT3X2N is not set
--# CONFIG_PATA_HPT3X3 is not set
--# CONFIG_PATA_IT821X is not set
--# CONFIG_PATA_IT8213 is not set
--# CONFIG_PATA_JMICRON is not set
--# CONFIG_PATA_TRIFLEX is not set
--# CONFIG_PATA_MARVELL is not set
--# CONFIG_PATA_MPIIX is not set
--# CONFIG_PATA_OLDPIIX is not set
--# CONFIG_PATA_NETCELL is not set
--# CONFIG_PATA_NINJA32 is not set
--# CONFIG_PATA_NS87410 is not set
--# CONFIG_PATA_NS87415 is not set
--# CONFIG_PATA_OPTI is not set
--# CONFIG_PATA_OPTIDMA is not set
--# CONFIG_PATA_PDC_OLD is not set
--# CONFIG_PATA_RADISYS is not set
--# CONFIG_PATA_RZ1000 is not set
--# CONFIG_PATA_SC1200 is not set
--# CONFIG_PATA_SERVERWORKS is not set
--# CONFIG_PATA_PDC2027X is not set
--# CONFIG_PATA_SIL680 is not set
--# CONFIG_PATA_SIS is not set
--# CONFIG_PATA_VIA is not set
--# CONFIG_PATA_WINBOND is not set
--CONFIG_PATA_PLATFORM=y
--CONFIG_PATA_OF_PLATFORM=y
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--CONFIG_MD_LINEAR=y
--CONFIG_MD_RAID0=y
--CONFIG_MD_RAID1=y
--# CONFIG_MD_RAID10 is not set
--# CONFIG_MD_RAID456 is not set
--# CONFIG_MD_MULTIPATH is not set
--# CONFIG_MD_FAULTY is not set
--# CONFIG_BLK_DEV_DM is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_VITESSE_PHY is not set
--# CONFIG_SMSC_PHY is not set
--# CONFIG_BROADCOM_PHY is not set
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--# CONFIG_NET_ETHERNET is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--CONFIG_SENSORS_PCF8574=y
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--CONFIG_SPI=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=y
--CONFIG_SPI_MPC83xx=y
--
--#
--# SPI Protocol Masters
--#
--# CONFIG_SPI_AT25 is not set
--# CONFIG_SPI_SPIDEV is not set
--# CONFIG_SPI_TLE62X0 is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# USB-based Watchdog Cards
--#
--# CONFIG_USBPCWATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--CONFIG_USB_EHCI_FSL=y
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--# CONFIG_USB_OHCI_HCD is not set
--CONFIG_USB_UHCI_HCD=y
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST is not set
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=y
--# CONFIG_RTC_DRV_DS1374 is not set
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--# CONFIG_RTC_DRV_MAX6902 is not set
--# CONFIG_RTC_DRV_R9701 is not set
--# CONFIG_RTC_DRV_RS5C348 is not set
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=y
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_JFFS2_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--# CONFIG_NLS_CODEPAGE_437 is not set
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--# CONFIG_NLS_CODEPAGE_850 is not set
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--# CONFIG_NLS_CODEPAGE_932 is not set
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--# CONFIG_NLS_ISO8859_8 is not set
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--# CONFIG_NLS_ASCII is not set
--# CONFIG_NLS_ISO8859_1 is not set
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--# CONFIG_NLS_ISO8859_15 is not set
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--# CONFIG_NLS_UTF8 is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc834x_itxgp_defconfig
-+++ /dev/null
-@@ -1,1222 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:18 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--CONFIG_MPC834x_ITX=y
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC834x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--# CONFIG_MTD_PARTITIONS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--# CONFIG_MTD_BLKDEVS is not set
--# CONFIG_MTD_BLOCK is not set
--# 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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--CONFIG_MTD_PHYSMAP=y
--CONFIG_MTD_PHYSMAP_START=0xfe000000
--CONFIG_MTD_PHYSMAP_LEN=0x800000
--CONFIG_MTD_PHYSMAP_BANKWIDTH=2
--# CONFIG_MTD_PHYSMAP_OF is not set
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_DATAFLASH is not set
--# CONFIG_MTD_M25P80 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=y
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_VITESSE_PHY is not set
--# CONFIG_SMSC_PHY is not set
--# CONFIG_BROADCOM_PHY is not set
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--# CONFIG_NET_ETHERNET is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--CONFIG_SENSORS_PCF8574=y
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--CONFIG_SPI=y
--CONFIG_SPI_MASTER=y
--
--#
--# SPI Master Controller Drivers
--#
--CONFIG_SPI_BITBANG=y
--CONFIG_SPI_MPC83xx=y
--
--#
--# SPI Protocol Masters
--#
--# CONFIG_SPI_AT25 is not set
--# CONFIG_SPI_SPIDEV is not set
--# CONFIG_SPI_TLE62X0 is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# USB-based Watchdog Cards
--#
--# CONFIG_USBPCWATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--# CONFIG_USB_DEVICEFS is not set
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--CONFIG_USB_EHCI_FSL=y
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--# CONFIG_USB_OHCI_HCD is not set
--CONFIG_USB_UHCI_HCD=y
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--CONFIG_RTC_INTF_DEV_UIE_EMUL=y
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--CONFIG_RTC_DRV_DS1307=y
--# CONFIG_RTC_DRV_DS1374 is not set
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--# CONFIG_RTC_DRV_MAX6902 is not set
--# CONFIG_RTC_DRV_R9701 is not set
--# CONFIG_RTC_DRV_RS5C348 is not set
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=y
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_JFFS2_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--# CONFIG_NLS_CODEPAGE_437 is not set
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--# CONFIG_NLS_CODEPAGE_850 is not set
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--# CONFIG_NLS_CODEPAGE_932 is not set
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--# CONFIG_NLS_ISO8859_8 is not set
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--# CONFIG_NLS_ASCII is not set
--# CONFIG_NLS_ISO8859_1 is not set
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--# CONFIG_NLS_ISO8859_15 is not set
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--# CONFIG_NLS_UTF8 is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc834x_mds_defconfig
-+++ /dev/null
-@@ -1,1021 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc7
--# Mon Mar 31 11:36:56 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--CONFIG_MPC834x_MDS=y
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC834x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--# CONFIG_GFAR_NAPI is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--# CONFIG_RTC_DRV_DS1307 is not set
--CONFIG_RTC_DRV_DS1374=y
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc836x_mds_defconfig
-+++ /dev/null
-@@ -1,1079 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc7
--# Mon Mar 31 11:36:57 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--CONFIG_MPC836x_MDS=y
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_QUICC_ENGINE=y
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--# CONFIG_BLK_DEV_SD is not set
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--# CONFIG_CHR_DEV_SG is not set
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_GIANFAR is not set
--CONFIG_UCC_GETH=y
--# CONFIG_UGETH_NAPI is not set
--# CONFIG_UGETH_MAGIC_PACKET is not set
--# CONFIG_UGETH_FILTERING is not set
--# CONFIG_UGETH_TX_ON_DEMAND is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--# CONFIG_SERIAL_QE is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--# CONFIG_RTC_DRV_DS1307 is not set
--CONFIG_RTC_DRV_DS1374=y
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--CONFIG_UCC_FAST=y
--CONFIG_UCC=y
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/mpc837x_mds_defconfig
-+++ /dev/null
-@@ -1,899 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:23 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--CONFIG_MPC837x_MDS=y
--# CONFIG_MPC837x_RDB is not set
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC837x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--# CONFIG_PCI is not set
--# CONFIG_PCI_DOMAINS is not set
--# CONFIG_PCI_SYSCALL is not set
--# CONFIG_ARCH_SUPPORTS_MSI is not set
--# CONFIG_PCCARD is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_SCSI_DEBUG is not set
--CONFIG_ATA=y
--# CONFIG_ATA_NONSTANDARD is not set
--# CONFIG_SATA_MV is not set
--CONFIG_SATA_FSL=y
--# CONFIG_PATA_PLATFORM is not set
--# CONFIG_MD is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_E1000E_ENABLED is not set
--CONFIG_GIANFAR=y
--# CONFIG_GFAR_NAPI is not set
--CONFIG_NETDEV_10000=y
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--# CONFIG_USB_ARCH_HAS_OHCI is not set
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc837x_rdb_defconfig
-+++ /dev/null
-@@ -1,930 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:24 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--CONFIG_MPC837x_RDB=y
--# CONFIG_SBC834x is not set
--CONFIG_PPC_MPC837x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--# CONFIG_PCI is not set
--# CONFIG_PCI_DOMAINS is not set
--# CONFIG_PCI_SYSCALL is not set
--# CONFIG_ARCH_SUPPORTS_MSI is not set
--# CONFIG_PCCARD is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_SCSI_DEBUG is not set
--CONFIG_ATA=y
--# CONFIG_ATA_NONSTANDARD is not set
--# CONFIG_SATA_MV is not set
--CONFIG_SATA_FSL=y
--# CONFIG_PATA_PLATFORM is not set
--CONFIG_MD=y
--CONFIG_BLK_DEV_MD=y
--# CONFIG_MD_LINEAR is not set
--# CONFIG_MD_RAID0 is not set
--CONFIG_MD_RAID1=y
--# CONFIG_MD_RAID10 is not set
--CONFIG_MD_RAID456=y
--CONFIG_MD_RAID5_RESHAPE=y
--# CONFIG_MD_MULTIPATH is not set
--# CONFIG_MD_FAULTY is not set
--# CONFIG_BLK_DEV_DM is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_E1000E_ENABLED is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_NETDEV_10000 is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--# CONFIG_USB_ARCH_HAS_OHCI is not set
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--# CONFIG_USB_DEVICEFS is not set
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--CONFIG_USB_EHCI_ROOT_HUB_TT=y
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--CONFIG_USB_EHCI_FSL=y
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--# CONFIG_ENABLE_MUST_CHECK is not set
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_XOR_BLOCKS=y
--CONFIG_ASYNC_CORE=y
--CONFIG_ASYNC_MEMCPY=y
--CONFIG_ASYNC_XOR=y
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc83xx_defconfig
-+++ b/arch/powerpc/configs/mpc83xx_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:25 2008
-+# Linux kernel version: 2.6.25-rc9
-+# Tue Apr 15 18:07:36 2008
- #
- # CONFIG_PPC64 is not set
-@@ -201,6 +201,7 @@ CONFIG_PREEMPT_NONE=y
- # CONFIG_PREEMPT is not set
- CONFIG_BINFMT_ELF=y
- # CONFIG_BINFMT_MISC is not set
-+CONFIG_FORCE_MAX_ZONEORDER=11
- CONFIG_MATH_EMULATION=y
- # CONFIG_IOMMU_HELPER is not set
- CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-@@ -353,7 +354,90 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
- # CONFIG_FW_LOADER is not set
- # CONFIG_SYS_HYPERVISOR is not set
- # CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+CONFIG_MTD_NAND=y
-+CONFIG_MTD_NAND_VERIFY_WRITE=y
-+# CONFIG_MTD_NAND_ECC_SMC is not set
-+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
-+CONFIG_MTD_NAND_IDS=y
-+# CONFIG_MTD_NAND_DISKONCHIP 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_FSL_ELBC=y
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
- CONFIG_OF_DEVICE=y
- # CONFIG_PARPORT is not set
- CONFIG_BLK_DEV=y
-@@ -362,6 +446,7 @@ CONFIG_BLK_DEV=y
- CONFIG_BLK_DEV_LOOP=y
- # CONFIG_BLK_DEV_CRYPTOLOOP is not set
- # CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_UB is not set
- CONFIG_BLK_DEV_RAM=y
- CONFIG_BLK_DEV_RAM_COUNT=16
- CONFIG_BLK_DEV_RAM_SIZE=32768
-@@ -469,6 +554,15 @@ CONFIG_NETDEV_10000=y
- #
- # CONFIG_WLAN_PRE80211 is not set
- # CONFIG_WLAN_80211 is not set
-+
-+#
-+# USB Network Adapters
-+#
-+# CONFIG_USB_CATC is not set
-+# CONFIG_USB_KAWETH is not set
-+# CONFIG_USB_PEGASUS is not set
-+# CONFIG_USB_RTL8150 is not set
-+# CONFIG_USB_USBNET is not set
- # CONFIG_WAN is not set
- # CONFIG_PPP is not set
- # CONFIG_SLIP is not set
-@@ -563,6 +657,7 @@ CONFIG_I2C_MPC=y
- # CONFIG_I2C_SIMTEC is not set
- # CONFIG_I2C_TAOS_EVM is not set
- # CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_TINY_USB is not set
- #
- # Miscellaneous I2C Chip support
-@@ -648,6 +743,11 @@ CONFIG_WATCHDOG=y
- CONFIG_83xx_WDT=y
- #
-+# USB-based Watchdog Cards
-+#
-+# CONFIG_USBPCWATCHDOG is not set
-+
-+#
- # Sonics Silicon Backplane
- #
- CONFIG_SSB_POSSIBLE=y
-@@ -664,6 +764,7 @@ CONFIG_SSB_POSSIBLE=y
- # CONFIG_VIDEO_DEV is not set
- # CONFIG_DVB_CORE is not set
- CONFIG_DAB=y
-+# CONFIG_USB_DABUSB is not set
- #
- # Graphics support
-@@ -686,6 +787,14 @@ CONFIG_HID_SUPPORT=y
- CONFIG_HID=y
- # CONFIG_HID_DEBUG is not set
- # CONFIG_HIDRAW is not set
-+
-+#
-+# USB Input Devices
-+#
-+CONFIG_USB_HID=y
-+# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-+# CONFIG_HID_FF is not set
-+# CONFIG_USB_HIDDEV is not set
- CONFIG_USB_SUPPORT=y
- CONFIG_USB_ARCH_HAS_HCD=y
- # CONFIG_USB_ARCH_HAS_OHCI is not set
-@@ -715,8 +824,55 @@ CONFIG_USB_EHCI_HCD_PPC_OF=y
- # CONFIG_USB_R8A66597_HCD is not set
- #
-+# USB Device Class drivers
-+#
-+# CONFIG_USB_ACM is not set
-+# CONFIG_USB_PRINTER is not set
-+
-+#
- # NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
- #
-+
-+#
-+# may also be needed; see USB_STORAGE Help for more information
-+#
-+# CONFIG_USB_STORAGE is not set
-+# CONFIG_USB_LIBUSUAL is not set
-+
-+#
-+# USB Imaging devices
-+#
-+# CONFIG_USB_MDC800 is not set
-+# CONFIG_USB_MICROTEK is not set
-+CONFIG_USB_MON=y
-+
-+#
-+# USB port drivers
-+#
-+# CONFIG_USB_SERIAL is not set
-+
-+#
-+# USB Miscellaneous drivers
-+#
-+# CONFIG_USB_EMI62 is not set
-+# CONFIG_USB_EMI26 is not set
-+# CONFIG_USB_ADUTUX is not set
-+# CONFIG_USB_AUERSWALD is not set
-+# CONFIG_USB_RIO500 is not set
-+# CONFIG_USB_LEGOTOWER is not set
-+# CONFIG_USB_LCD is not set
-+# CONFIG_USB_BERRY_CHARGE is not set
-+# CONFIG_USB_LED is not set
-+# CONFIG_USB_CYPRESS_CY7C63 is not set
-+# CONFIG_USB_CYTHERM is not set
-+# CONFIG_USB_PHIDGET is not set
-+# CONFIG_USB_IDMOUSE is not set
-+# CONFIG_USB_FTDI_ELAN is not set
-+# CONFIG_USB_APPLEDISPLAY is not set
-+# CONFIG_USB_SISUSBVGA is not set
-+# CONFIG_USB_LD is not set
-+# CONFIG_USB_TRANCEVIBRATOR is not set
-+# CONFIG_USB_IOWARRIOR is not set
- # CONFIG_USB_GADGET is not set
- # CONFIG_MMC is not set
- # CONFIG_MEMSTICK is not set
-@@ -792,6 +948,7 @@ CONFIG_TMPFS=y
- # CONFIG_BEFS_FS is not set
- # CONFIG_BFS_FS is not set
- # CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
- # CONFIG_CRAMFS is not set
- # CONFIG_VXFS_FS is not set
- # CONFIG_MINIX_FS is not set
-@@ -862,6 +1019,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/mpc8540_ads_defconfig
-+++ /dev/null
-@@ -1,796 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:25 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--CONFIG_MPC8540_ADS=y
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=y
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--# CONFIG_SECCOMP is not set
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_FSL_SOC=y
--# CONFIG_PCI is not set
--# CONFIG_PCI_DOMAINS is not set
--# CONFIG_PCI_SYSCALL is not set
--# CONFIG_ARCH_SUPPORTS_MSI is not set
--# CONFIG_PCCARD is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=y
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_E1000E_ENABLED is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--CONFIG_NETDEV_10000=y
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--# CONFIG_USB_ARCH_HAS_HCD is not set
--# CONFIG_USB_ARCH_HAS_OHCI is not set
--# CONFIG_USB_ARCH_HAS_EHCI is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--CONFIG_DEBUG_MUTEXES=y
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc8544_ds_defconfig
-+++ /dev/null
-@@ -1,1549 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc7
--# Mon Mar 31 11:37:03 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--# CONFIG_BSD_PROCESS_ACCT_V3 is not set
--# CONFIG_TASKSTATS is not set
--CONFIG_AUDIT=y
--# CONFIG_AUDITSYSCALL is not set
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--CONFIG_MODULE_FORCE_UNLOAD=y
--CONFIG_MODVERSIONS=y
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--# CONFIG_DEFAULT_DEADLINE is not set
--CONFIG_DEFAULT_CFQ=y
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="cfq"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--CONFIG_MPC85xx_DS=y
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--CONFIG_PPC_I8259=y
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--CONFIG_FSL_ULI1575=y
--
--#
--# Kernel options
--#
--CONFIG_HIGHMEM=y
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=m
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=y
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--CONFIG_NET_KEY=m
--# CONFIG_NET_KEY_MIGRATE is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--CONFIG_IP_ROUTE_MULTIPATH=y
--CONFIG_IP_ROUTE_VERBOSE=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--CONFIG_IP_PNP_RARP=y
--CONFIG_NET_IPIP=y
--CONFIG_NET_IPGRE=y
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--CONFIG_ARPD=y
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--CONFIG_INET_TUNNEL=y
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--CONFIG_IPV6=y
--# CONFIG_IPV6_PRIVACY is not set
--# CONFIG_IPV6_ROUTER_PREF is not set
--# CONFIG_IPV6_OPTIMISTIC_DAD is not set
--# CONFIG_INET6_AH is not set
--# CONFIG_INET6_ESP is not set
--# CONFIG_INET6_IPCOMP is not set
--# CONFIG_IPV6_MIP6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--CONFIG_INET6_XFRM_MODE_TRANSPORT=y
--CONFIG_INET6_XFRM_MODE_TUNNEL=y
--CONFIG_INET6_XFRM_MODE_BEET=y
--# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
--CONFIG_IPV6_SIT=y
--# CONFIG_IPV6_TUNNEL is not set
--# CONFIG_IPV6_MULTIPLE_TABLES is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# 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_HMAC_NONE is not set
--# CONFIG_SCTP_HMAC_SHA1 is not set
--CONFIG_SCTP_HMAC_MD5=y
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--CONFIG_FIB_RULES=y
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--CONFIG_BLK_DEV_NBD=y
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=131072
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--CONFIG_CHR_DEV_ST=y
--# CONFIG_CHR_DEV_OSST is not set
--CONFIG_BLK_DEV_SR=y
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--# CONFIG_SCSI_CONSTANTS is not set
--CONFIG_SCSI_LOGGING=y
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_IPR is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--CONFIG_ATA=y
--# CONFIG_ATA_NONSTANDARD is not set
--CONFIG_SATA_AHCI=y
--# CONFIG_SATA_SVW is not set
--# CONFIG_ATA_PIIX is not set
--# CONFIG_SATA_MV is not set
--# CONFIG_SATA_NV is not set
--# CONFIG_PDC_ADMA is not set
--# CONFIG_SATA_QSTOR is not set
--# CONFIG_SATA_PROMISE is not set
--# CONFIG_SATA_SX4 is not set
--# CONFIG_SATA_SIL is not set
--# CONFIG_SATA_SIL24 is not set
--# CONFIG_SATA_SIS is not set
--# CONFIG_SATA_ULI is not set
--# CONFIG_SATA_VIA is not set
--# CONFIG_SATA_VITESSE is not set
--# CONFIG_SATA_INIC162X is not set
--# CONFIG_SATA_FSL is not set
--CONFIG_PATA_ALI=y
--# CONFIG_PATA_AMD is not set
--# CONFIG_PATA_ARTOP is not set
--# CONFIG_PATA_ATIIXP is not set
--# CONFIG_PATA_CMD640_PCI is not set
--# CONFIG_PATA_CMD64X is not set
--# CONFIG_PATA_CS5520 is not set
--# CONFIG_PATA_CS5530 is not set
--# CONFIG_PATA_CYPRESS is not set
--# CONFIG_PATA_EFAR is not set
--# CONFIG_ATA_GENERIC is not set
--# CONFIG_PATA_HPT366 is not set
--# CONFIG_PATA_HPT37X is not set
--# CONFIG_PATA_HPT3X2N is not set
--# CONFIG_PATA_HPT3X3 is not set
--# CONFIG_PATA_IT821X is not set
--# CONFIG_PATA_IT8213 is not set
--# CONFIG_PATA_JMICRON is not set
--# CONFIG_PATA_TRIFLEX is not set
--# CONFIG_PATA_MARVELL is not set
--# CONFIG_PATA_MPIIX is not set
--# CONFIG_PATA_OLDPIIX is not set
--# CONFIG_PATA_NETCELL is not set
--# CONFIG_PATA_NINJA32 is not set
--# CONFIG_PATA_NS87410 is not set
--# CONFIG_PATA_NS87415 is not set
--# CONFIG_PATA_OPTI is not set
--# CONFIG_PATA_OPTIDMA is not set
--# CONFIG_PATA_PDC_OLD is not set
--# CONFIG_PATA_RADISYS is not set
--# CONFIG_PATA_RZ1000 is not set
--# CONFIG_PATA_SC1200 is not set
--# CONFIG_PATA_SERVERWORKS is not set
--# CONFIG_PATA_PDC2027X is not set
--# CONFIG_PATA_SIL680 is not set
--# CONFIG_PATA_SIS is not set
--# CONFIG_PATA_VIA is not set
--# CONFIG_PATA_WINBOND is not set
--# CONFIG_PATA_PLATFORM is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--CONFIG_DUMMY=y
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_SMSC_PHY is not set
--# CONFIG_BROADCOM_PHY is not set
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=y
--# CONFIG_SERIO_PCIPS2 is not set
--CONFIG_SERIO_LIBPS2=y
--# CONFIG_SERIO_RAW is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--# CONFIG_VT_HW_CONSOLE_BINDING is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=2
--CONFIG_SERIAL_8250_RUNTIME_UARTS=2
--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
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--CONFIG_NVRAM=y
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--# CONFIG_I2C_CHARDEV is not set
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--CONFIG_SENSORS_EEPROM=y
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--CONFIG_DVB_CORE=m
--# CONFIG_DVB_CORE_ATTACH is not set
--CONFIG_DVB_CAPTURE_DRIVERS=y
--
--#
--# Supported SAA7146 based PCI Adapters
--#
--# CONFIG_TTPCI_EEPROM is not set
--# CONFIG_DVB_BUDGET_CORE is not set
--
--#
--# Supported USB Adapters
--#
--# CONFIG_DVB_USB is not set
--# CONFIG_DVB_TTUSB_BUDGET is not set
--# CONFIG_DVB_TTUSB_DEC is not set
--# CONFIG_DVB_CINERGYT2 is not set
--
--#
--# Supported FlexCopII (B2C2) Adapters
--#
--# CONFIG_DVB_B2C2_FLEXCOP is not set
--
--#
--# Supported BT878 Adapters
--#
--
--#
--# Supported Pluto2 Adapters
--#
--# CONFIG_DVB_PLUTO2 is not set
--
--#
--# Supported DVB Frontends
--#
--
--#
--# Customise DVB Frontends
--#
--# CONFIG_DVB_FE_CUSTOMISE is not set
--
--#
--# DVB-S (satellite) frontends
--#
--# CONFIG_DVB_STV0299 is not set
--# CONFIG_DVB_CX24110 is not set
--# CONFIG_DVB_CX24123 is not set
--# CONFIG_DVB_TDA8083 is not set
--# CONFIG_DVB_MT312 is not set
--# CONFIG_DVB_VES1X93 is not set
--# CONFIG_DVB_S5H1420 is not set
--# CONFIG_DVB_TDA10086 is not set
--
--#
--# DVB-T (terrestrial) frontends
--#
--# CONFIG_DVB_SP8870 is not set
--# CONFIG_DVB_SP887X is not set
--# CONFIG_DVB_CX22700 is not set
--# CONFIG_DVB_CX22702 is not set
--# CONFIG_DVB_L64781 is not set
--# CONFIG_DVB_TDA1004X is not set
--# CONFIG_DVB_NXT6000 is not set
--# CONFIG_DVB_MT352 is not set
--# CONFIG_DVB_ZL10353 is not set
--# CONFIG_DVB_DIB3000MB is not set
--# CONFIG_DVB_DIB3000MC is not set
--# CONFIG_DVB_DIB7000M is not set
--# CONFIG_DVB_DIB7000P is not set
--
--#
--# DVB-C (cable) frontends
--#
--# CONFIG_DVB_VES1820 is not set
--# CONFIG_DVB_TDA10021 is not set
--# CONFIG_DVB_TDA10023 is not set
--# CONFIG_DVB_STV0297 is not set
--
--#
--# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
--#
--# CONFIG_DVB_NXT200X is not set
--# CONFIG_DVB_OR51211 is not set
--# CONFIG_DVB_OR51132 is not set
--# CONFIG_DVB_BCM3510 is not set
--# CONFIG_DVB_LGDT330X is not set
--# CONFIG_DVB_S5H1409 is not set
--
--#
--# Tuners/PLL support
--#
--# CONFIG_DVB_PLL is not set
--# CONFIG_DVB_TDA826X is not set
--# CONFIG_DVB_TDA827X is not set
--# CONFIG_DVB_TDA18271 is not set
--# CONFIG_DVB_TUNER_QT1010 is not set
--# CONFIG_DVB_TUNER_MT2060 is not set
--# CONFIG_DVB_TUNER_MT2266 is not set
--# CONFIG_DVB_TUNER_MT2131 is not set
--# CONFIG_DVB_TUNER_DIB0070 is not set
--# CONFIG_DVB_TUNER_XC5000 is not set
--
--#
--# Miscellaneous devices
--#
--# CONFIG_DVB_LNBP21 is not set
--# CONFIG_DVB_ISL6421 is not set
--# CONFIG_DVB_TUA6100 is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Console display driver support
--#
--CONFIG_VGA_CONSOLE=y
--# CONFIG_VGACON_SOFT_SCROLLBACK is not set
--CONFIG_DUMMY_CONSOLE=y
--
--#
--# Sound
--#
--CONFIG_SOUND=y
--
--#
--# Advanced Linux Sound Architecture
--#
--CONFIG_SND=y
--CONFIG_SND_TIMER=y
--CONFIG_SND_PCM=y
--# CONFIG_SND_SEQUENCER is not set
--# CONFIG_SND_MIXER_OSS is not set
--# CONFIG_SND_PCM_OSS 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
--
--#
--# Generic devices
--#
--CONFIG_SND_AC97_CODEC=y
--# CONFIG_SND_DUMMY is not set
--# CONFIG_SND_MTPAV is not set
--# CONFIG_SND_SERIAL_U16550 is not set
--# CONFIG_SND_MPU401 is not set
--
--#
--# PCI devices
--#
--# CONFIG_SND_AD1889 is not set
--# CONFIG_SND_ALS300 is not set
--# CONFIG_SND_ALS4000 is not set
--# CONFIG_SND_ALI5451 is not set
--# CONFIG_SND_ATIIXP is not set
--# CONFIG_SND_ATIIXP_MODEM is not set
--# CONFIG_SND_AU8810 is not set
--# CONFIG_SND_AU8820 is not set
--# CONFIG_SND_AU8830 is not set
--# CONFIG_SND_AZT3328 is not set
--# CONFIG_SND_BT87X is not set
--# CONFIG_SND_CA0106 is not set
--# CONFIG_SND_CMIPCI is not set
--# CONFIG_SND_OXYGEN is not set
--# CONFIG_SND_CS4281 is not set
--# CONFIG_SND_CS46XX is not set
--# CONFIG_SND_CS5530 is not set
--# CONFIG_SND_DARLA20 is not set
--# CONFIG_SND_GINA20 is not set
--# CONFIG_SND_LAYLA20 is not set
--# CONFIG_SND_DARLA24 is not set
--# CONFIG_SND_GINA24 is not set
--# CONFIG_SND_LAYLA24 is not set
--# CONFIG_SND_MONA is not set
--# CONFIG_SND_MIA is not set
--# CONFIG_SND_ECHO3G is not set
--# CONFIG_SND_INDIGO is not set
--# CONFIG_SND_INDIGOIO is not set
--# CONFIG_SND_INDIGODJ is not set
--# CONFIG_SND_EMU10K1 is not set
--# CONFIG_SND_EMU10K1X is not set
--# CONFIG_SND_ENS1370 is not set
--# CONFIG_SND_ENS1371 is not set
--# CONFIG_SND_ES1938 is not set
--# CONFIG_SND_ES1968 is not set
--# CONFIG_SND_FM801 is not set
--# CONFIG_SND_HDA_INTEL is not set
--# CONFIG_SND_HDSP is not set
--# CONFIG_SND_HDSPM is not set
--# CONFIG_SND_HIFIER is not set
--# CONFIG_SND_ICE1712 is not set
--# CONFIG_SND_ICE1724 is not set
--CONFIG_SND_INTEL8X0=y
--# CONFIG_SND_INTEL8X0M is not set
--# CONFIG_SND_KORG1212 is not set
--# CONFIG_SND_MAESTRO3 is not set
--# CONFIG_SND_MIXART is not set
--# CONFIG_SND_NM256 is not set
--# CONFIG_SND_PCXHR is not set
--# CONFIG_SND_RIPTIDE is not set
--# CONFIG_SND_RME32 is not set
--# CONFIG_SND_RME96 is not set
--# CONFIG_SND_RME9652 is not set
--# CONFIG_SND_SONICVIBES is not set
--# CONFIG_SND_TRIDENT is not set
--# CONFIG_SND_VIA82XX is not set
--# CONFIG_SND_VIA82XX_MODEM is not set
--# CONFIG_SND_VIRTUOSO is not set
--# CONFIG_SND_VX222 is not set
--# CONFIG_SND_YMFPCI is not set
--# CONFIG_SND_AC97_POWER_SAVE is not set
--
--#
--# ALSA PowerMac devices
--#
--
--#
--# ALSA PowerPC devices
--#
--
--#
--# USB devices
--#
--# CONFIG_SND_USB_AUDIO is not set
--# CONFIG_SND_USB_USX2Y is not set
--# CONFIG_SND_USB_CAIAQ is not set
--
--#
--# System on Chip audio support
--#
--# CONFIG_SND_SOC is not set
--
--#
--# SoC Audio support for SuperH
--#
--
--#
--# ALSA SoC audio for Freescale SOCs
--#
--
--#
--# Open Sound System
--#
--# CONFIG_SOUND_PRIME is not set
--CONFIG_AC97_BUS=y
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=y
--# CONFIG_USB_HIDINPUT_POWERBOOK is not set
--# CONFIG_HID_FF is not set
--# CONFIG_USB_HIDDEV is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--# CONFIG_USB_EHCI_FSL is not set
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
--CONFIG_USB_OHCI_HCD_PCI=y
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--# CONFIG_USB_UHCI_HCD is not set
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST is not set
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--# CONFIG_RTC_DRV_DS1307 is not set
--# CONFIG_RTC_DRV_DS1374 is not set
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--CONFIG_RTC_DRV_CMOS=y
--# 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=m
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=y
--# CONFIG_NTFS_DEBUG is not set
--# CONFIG_NTFS_RW is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--CONFIG_ADFS_FS=m
--# CONFIG_ADFS_FS_RW is not set
--CONFIG_AFFS_FS=m
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--CONFIG_BEFS_FS=m
--# CONFIG_BEFS_DEBUG is not set
--CONFIG_BFS_FS=m
--CONFIG_EFS_FS=m
--CONFIG_CRAMFS=y
--CONFIG_VXFS_FS=m
--# CONFIG_MINIX_FS is not set
--CONFIG_HPFS_FS=m
--CONFIG_QNX4FS_FS=m
--# CONFIG_ROMFS_FS is not set
--CONFIG_SYSV_FS=m
--CONFIG_UFS_FS=m
--# CONFIG_UFS_FS_WRITE is not set
--# CONFIG_UFS_DEBUG is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--CONFIG_NFSD=y
--# CONFIG_NFSD_V3 is not set
--CONFIG_NFSD_TCP=y
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--# CONFIG_NLS_CODEPAGE_437 is not set
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--# CONFIG_NLS_CODEPAGE_850 is not set
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--# CONFIG_NLS_CODEPAGE_932 is not set
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--# CONFIG_NLS_ISO8859_8 is not set
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--# CONFIG_NLS_ASCII is not set
--# CONFIG_NLS_ISO8859_1 is not set
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--# CONFIG_NLS_ISO8859_15 is not set
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--CONFIG_NLS_UTF8=m
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--CONFIG_LIBCRC32C=m
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_HIGHMEM is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_HMAC=y
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--CONFIG_CRYPTO_SHA1=m
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc8560_ads_defconfig
-+++ /dev/null
-@@ -1,885 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:27 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--CONFIG_MPC8560_ADS=y
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_CPM2=y
--CONFIG_PPC_CPM_NEW_BINDING=y
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_CPM=y
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=y
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--# CONFIG_PROC_DEVICETREE is not set
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--# CONFIG_SECCOMP is not set
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--CONFIG_PCI_DEBUG=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--CONFIG_DAVICOM_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_FS_ENET=y
--# CONFIG_FS_ENET_HAS_SCC is not set
--CONFIG_FS_ENET_HAS_FCC=y
--# CONFIG_FS_ENET_MDIO_FCC is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--CONFIG_E1000=y
--CONFIG_E1000_NAPI=y
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--# CONFIG_SERIAL_8250 is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_CPM=y
--CONFIG_SERIAL_CPM_CONSOLE=y
--CONFIG_SERIAL_CPM_SCC1=y
--CONFIG_SERIAL_CPM_SCC2=y
--# CONFIG_SERIAL_CPM_SCC3 is not set
--# CONFIG_SERIAL_CPM_SCC4 is not set
--# CONFIG_SERIAL_CPM_SMC1 is not set
--# CONFIG_SERIAL_CPM_SMC2 is not set
--# CONFIG_SERIAL_JSM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--CONFIG_DEBUG_MUTEXES=y
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_KGDB_CONSOLE is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/mpc8568mds_defconfig
-+++ /dev/null
-@@ -1,1117 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc7
--# Mon Mar 31 11:37:05 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--CONFIG_MPC85xx_MDS=y
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_QUICC_ENGINE=y
--# CONFIG_CPM2 is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--# CONFIG_BLK_DEV_SD is not set
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--# CONFIG_CHR_DEV_SG is not set
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_UCC_GETH is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--# CONFIG_SERIAL_QE is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--# CONFIG_BOOKE_WDT is not set
--
--#
--# PCI-based Watchdog Cards
--#
--# CONFIG_PCIPCWATCHDOG is not set
--# CONFIG_WDTPCI is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--# CONFIG_RTC_DRV_DS1307 is not set
--CONFIG_RTC_DRV_DS1374=y
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--CONFIG_DEBUGGER=y
--# CONFIG_XMON is not set
--# CONFIG_BDI_SWITCH is not set
--CONFIG_PPC_EARLY_DEBUG=y
--# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
--# CONFIG_PPC_EARLY_DEBUG_G5 is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
--# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
--# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
--# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
--# CONFIG_PPC_EARLY_DEBUG_44x is not set
--# CONFIG_PPC_EARLY_DEBUG_40x is not set
--# CONFIG_PPC_EARLY_DEBUG_CPM is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/mpc8572_ds_defconfig
-+++ /dev/null
-@@ -1,1549 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc7
--# Mon Mar 31 11:37:06 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--CONFIG_BSD_PROCESS_ACCT=y
--# CONFIG_BSD_PROCESS_ACCT_V3 is not set
--# CONFIG_TASKSTATS is not set
--CONFIG_AUDIT=y
--# CONFIG_AUDITSYSCALL is not set
--CONFIG_IKCONFIG=y
--CONFIG_IKCONFIG_PROC=y
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--CONFIG_MODULE_FORCE_UNLOAD=y
--CONFIG_MODVERSIONS=y
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--# CONFIG_DEFAULT_DEADLINE is not set
--CONFIG_DEFAULT_CFQ=y
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="cfq"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--CONFIG_MPC85xx_DS=y
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--CONFIG_PPC_I8259=y
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--CONFIG_FSL_ULI1575=y
--
--#
--# Kernel options
--#
--CONFIG_HIGHMEM=y
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=m
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=y
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--CONFIG_NET_KEY=m
--# CONFIG_NET_KEY_MIGRATE is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--CONFIG_IP_ADVANCED_ROUTER=y
--CONFIG_ASK_IP_FIB_HASH=y
--# CONFIG_IP_FIB_TRIE is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_MULTIPLE_TABLES=y
--CONFIG_IP_ROUTE_MULTIPATH=y
--CONFIG_IP_ROUTE_VERBOSE=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--CONFIG_IP_PNP_RARP=y
--CONFIG_NET_IPIP=y
--CONFIG_NET_IPGRE=y
--CONFIG_NET_IPGRE_BROADCAST=y
--CONFIG_IP_MROUTE=y
--CONFIG_IP_PIMSM_V1=y
--CONFIG_IP_PIMSM_V2=y
--CONFIG_ARPD=y
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--CONFIG_INET_TUNNEL=y
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--CONFIG_IPV6=y
--# CONFIG_IPV6_PRIVACY is not set
--# CONFIG_IPV6_ROUTER_PREF is not set
--# CONFIG_IPV6_OPTIMISTIC_DAD is not set
--# CONFIG_INET6_AH is not set
--# CONFIG_INET6_ESP is not set
--# CONFIG_INET6_IPCOMP is not set
--# CONFIG_IPV6_MIP6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--CONFIG_INET6_XFRM_MODE_TRANSPORT=y
--CONFIG_INET6_XFRM_MODE_TUNNEL=y
--CONFIG_INET6_XFRM_MODE_BEET=y
--# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
--CONFIG_IPV6_SIT=y
--# CONFIG_IPV6_TUNNEL is not set
--# CONFIG_IPV6_MULTIPLE_TABLES is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# 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_HMAC_NONE is not set
--# CONFIG_SCTP_HMAC_SHA1 is not set
--CONFIG_SCTP_HMAC_MD5=y
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--CONFIG_FIB_RULES=y
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--CONFIG_BLK_DEV_NBD=y
--# CONFIG_BLK_DEV_SX8 is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=131072
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--CONFIG_CHR_DEV_ST=y
--# CONFIG_CHR_DEV_OSST is not set
--CONFIG_BLK_DEV_SR=y
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=y
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--# CONFIG_SCSI_CONSTANTS is not set
--CONFIG_SCSI_LOGGING=y
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_IPR is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--CONFIG_ATA=y
--# CONFIG_ATA_NONSTANDARD is not set
--CONFIG_SATA_AHCI=y
--# CONFIG_SATA_SVW is not set
--# CONFIG_ATA_PIIX is not set
--# CONFIG_SATA_MV is not set
--# CONFIG_SATA_NV is not set
--# CONFIG_PDC_ADMA is not set
--# CONFIG_SATA_QSTOR is not set
--# CONFIG_SATA_PROMISE is not set
--# CONFIG_SATA_SX4 is not set
--# CONFIG_SATA_SIL is not set
--# CONFIG_SATA_SIL24 is not set
--# CONFIG_SATA_SIS is not set
--# CONFIG_SATA_ULI is not set
--# CONFIG_SATA_VIA is not set
--# CONFIG_SATA_VITESSE is not set
--# CONFIG_SATA_INIC162X is not set
--# CONFIG_SATA_FSL is not set
--CONFIG_PATA_ALI=y
--# CONFIG_PATA_AMD is not set
--# CONFIG_PATA_ARTOP is not set
--# CONFIG_PATA_ATIIXP is not set
--# CONFIG_PATA_CMD640_PCI is not set
--# CONFIG_PATA_CMD64X is not set
--# CONFIG_PATA_CS5520 is not set
--# CONFIG_PATA_CS5530 is not set
--# CONFIG_PATA_CYPRESS is not set
--# CONFIG_PATA_EFAR is not set
--# CONFIG_ATA_GENERIC is not set
--# CONFIG_PATA_HPT366 is not set
--# CONFIG_PATA_HPT37X is not set
--# CONFIG_PATA_HPT3X2N is not set
--# CONFIG_PATA_HPT3X3 is not set
--# CONFIG_PATA_IT821X is not set
--# CONFIG_PATA_IT8213 is not set
--# CONFIG_PATA_JMICRON is not set
--# CONFIG_PATA_TRIFLEX is not set
--# CONFIG_PATA_MARVELL is not set
--# CONFIG_PATA_MPIIX is not set
--# CONFIG_PATA_OLDPIIX is not set
--# CONFIG_PATA_NETCELL is not set
--# CONFIG_PATA_NINJA32 is not set
--# CONFIG_PATA_NS87410 is not set
--# CONFIG_PATA_NS87415 is not set
--# CONFIG_PATA_OPTI is not set
--# CONFIG_PATA_OPTIDMA is not set
--# CONFIG_PATA_PDC_OLD is not set
--# CONFIG_PATA_RADISYS is not set
--# CONFIG_PATA_RZ1000 is not set
--# CONFIG_PATA_SC1200 is not set
--# CONFIG_PATA_SERVERWORKS is not set
--# CONFIG_PATA_PDC2027X is not set
--# CONFIG_PATA_SIL680 is not set
--# CONFIG_PATA_SIS is not set
--# CONFIG_PATA_VIA is not set
--# CONFIG_PATA_WINBOND is not set
--# CONFIG_PATA_PLATFORM is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--CONFIG_DUMMY=y
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_SMSC_PHY is not set
--# CONFIG_BROADCOM_PHY is not set
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=y
--# CONFIG_SERIO_PCIPS2 is not set
--CONFIG_SERIO_LIBPS2=y
--# CONFIG_SERIO_RAW is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--CONFIG_VT=y
--CONFIG_VT_CONSOLE=y
--CONFIG_HW_CONSOLE=y
--# CONFIG_VT_HW_CONSOLE_BINDING is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=2
--CONFIG_SERIAL_8250_RUNTIME_UARTS=2
--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
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--CONFIG_NVRAM=y
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--# CONFIG_I2C_CHARDEV is not set
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--CONFIG_SENSORS_EEPROM=y
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--CONFIG_DVB_CORE=m
--# CONFIG_DVB_CORE_ATTACH is not set
--CONFIG_DVB_CAPTURE_DRIVERS=y
--
--#
--# Supported SAA7146 based PCI Adapters
--#
--# CONFIG_TTPCI_EEPROM is not set
--# CONFIG_DVB_BUDGET_CORE is not set
--
--#
--# Supported USB Adapters
--#
--# CONFIG_DVB_USB is not set
--# CONFIG_DVB_TTUSB_BUDGET is not set
--# CONFIG_DVB_TTUSB_DEC is not set
--# CONFIG_DVB_CINERGYT2 is not set
--
--#
--# Supported FlexCopII (B2C2) Adapters
--#
--# CONFIG_DVB_B2C2_FLEXCOP is not set
--
--#
--# Supported BT878 Adapters
--#
--
--#
--# Supported Pluto2 Adapters
--#
--# CONFIG_DVB_PLUTO2 is not set
--
--#
--# Supported DVB Frontends
--#
--
--#
--# Customise DVB Frontends
--#
--# CONFIG_DVB_FE_CUSTOMISE is not set
--
--#
--# DVB-S (satellite) frontends
--#
--# CONFIG_DVB_STV0299 is not set
--# CONFIG_DVB_CX24110 is not set
--# CONFIG_DVB_CX24123 is not set
--# CONFIG_DVB_TDA8083 is not set
--# CONFIG_DVB_MT312 is not set
--# CONFIG_DVB_VES1X93 is not set
--# CONFIG_DVB_S5H1420 is not set
--# CONFIG_DVB_TDA10086 is not set
--
--#
--# DVB-T (terrestrial) frontends
--#
--# CONFIG_DVB_SP8870 is not set
--# CONFIG_DVB_SP887X is not set
--# CONFIG_DVB_CX22700 is not set
--# CONFIG_DVB_CX22702 is not set
--# CONFIG_DVB_L64781 is not set
--# CONFIG_DVB_TDA1004X is not set
--# CONFIG_DVB_NXT6000 is not set
--# CONFIG_DVB_MT352 is not set
--# CONFIG_DVB_ZL10353 is not set
--# CONFIG_DVB_DIB3000MB is not set
--# CONFIG_DVB_DIB3000MC is not set
--# CONFIG_DVB_DIB7000M is not set
--# CONFIG_DVB_DIB7000P is not set
--
--#
--# DVB-C (cable) frontends
--#
--# CONFIG_DVB_VES1820 is not set
--# CONFIG_DVB_TDA10021 is not set
--# CONFIG_DVB_TDA10023 is not set
--# CONFIG_DVB_STV0297 is not set
--
--#
--# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
--#
--# CONFIG_DVB_NXT200X is not set
--# CONFIG_DVB_OR51211 is not set
--# CONFIG_DVB_OR51132 is not set
--# CONFIG_DVB_BCM3510 is not set
--# CONFIG_DVB_LGDT330X is not set
--# CONFIG_DVB_S5H1409 is not set
--
--#
--# Tuners/PLL support
--#
--# CONFIG_DVB_PLL is not set
--# CONFIG_DVB_TDA826X is not set
--# CONFIG_DVB_TDA827X is not set
--# CONFIG_DVB_TDA18271 is not set
--# CONFIG_DVB_TUNER_QT1010 is not set
--# CONFIG_DVB_TUNER_MT2060 is not set
--# CONFIG_DVB_TUNER_MT2266 is not set
--# CONFIG_DVB_TUNER_MT2131 is not set
--# CONFIG_DVB_TUNER_DIB0070 is not set
--# CONFIG_DVB_TUNER_XC5000 is not set
--
--#
--# Miscellaneous devices
--#
--# CONFIG_DVB_LNBP21 is not set
--# CONFIG_DVB_ISL6421 is not set
--# CONFIG_DVB_TUA6100 is not set
--CONFIG_DAB=y
--# CONFIG_USB_DABUSB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Console display driver support
--#
--CONFIG_VGA_CONSOLE=y
--# CONFIG_VGACON_SOFT_SCROLLBACK is not set
--CONFIG_DUMMY_CONSOLE=y
--
--#
--# Sound
--#
--CONFIG_SOUND=y
--
--#
--# Advanced Linux Sound Architecture
--#
--CONFIG_SND=y
--CONFIG_SND_TIMER=y
--CONFIG_SND_PCM=y
--# CONFIG_SND_SEQUENCER is not set
--# CONFIG_SND_MIXER_OSS is not set
--# CONFIG_SND_PCM_OSS 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
--
--#
--# Generic devices
--#
--CONFIG_SND_AC97_CODEC=y
--# CONFIG_SND_DUMMY is not set
--# CONFIG_SND_MTPAV is not set
--# CONFIG_SND_SERIAL_U16550 is not set
--# CONFIG_SND_MPU401 is not set
--
--#
--# PCI devices
--#
--# CONFIG_SND_AD1889 is not set
--# CONFIG_SND_ALS300 is not set
--# CONFIG_SND_ALS4000 is not set
--# CONFIG_SND_ALI5451 is not set
--# CONFIG_SND_ATIIXP is not set
--# CONFIG_SND_ATIIXP_MODEM is not set
--# CONFIG_SND_AU8810 is not set
--# CONFIG_SND_AU8820 is not set
--# CONFIG_SND_AU8830 is not set
--# CONFIG_SND_AZT3328 is not set
--# CONFIG_SND_BT87X is not set
--# CONFIG_SND_CA0106 is not set
--# CONFIG_SND_CMIPCI is not set
--# CONFIG_SND_OXYGEN is not set
--# CONFIG_SND_CS4281 is not set
--# CONFIG_SND_CS46XX is not set
--# CONFIG_SND_CS5530 is not set
--# CONFIG_SND_DARLA20 is not set
--# CONFIG_SND_GINA20 is not set
--# CONFIG_SND_LAYLA20 is not set
--# CONFIG_SND_DARLA24 is not set
--# CONFIG_SND_GINA24 is not set
--# CONFIG_SND_LAYLA24 is not set
--# CONFIG_SND_MONA is not set
--# CONFIG_SND_MIA is not set
--# CONFIG_SND_ECHO3G is not set
--# CONFIG_SND_INDIGO is not set
--# CONFIG_SND_INDIGOIO is not set
--# CONFIG_SND_INDIGODJ is not set
--# CONFIG_SND_EMU10K1 is not set
--# CONFIG_SND_EMU10K1X is not set
--# CONFIG_SND_ENS1370 is not set
--# CONFIG_SND_ENS1371 is not set
--# CONFIG_SND_ES1938 is not set
--# CONFIG_SND_ES1968 is not set
--# CONFIG_SND_FM801 is not set
--# CONFIG_SND_HDA_INTEL is not set
--# CONFIG_SND_HDSP is not set
--# CONFIG_SND_HDSPM is not set
--# CONFIG_SND_HIFIER is not set
--# CONFIG_SND_ICE1712 is not set
--# CONFIG_SND_ICE1724 is not set
--CONFIG_SND_INTEL8X0=y
--# CONFIG_SND_INTEL8X0M is not set
--# CONFIG_SND_KORG1212 is not set
--# CONFIG_SND_MAESTRO3 is not set
--# CONFIG_SND_MIXART is not set
--# CONFIG_SND_NM256 is not set
--# CONFIG_SND_PCXHR is not set
--# CONFIG_SND_RIPTIDE is not set
--# CONFIG_SND_RME32 is not set
--# CONFIG_SND_RME96 is not set
--# CONFIG_SND_RME9652 is not set
--# CONFIG_SND_SONICVIBES is not set
--# CONFIG_SND_TRIDENT is not set
--# CONFIG_SND_VIA82XX is not set
--# CONFIG_SND_VIA82XX_MODEM is not set
--# CONFIG_SND_VIRTUOSO is not set
--# CONFIG_SND_VX222 is not set
--# CONFIG_SND_YMFPCI is not set
--# CONFIG_SND_AC97_POWER_SAVE is not set
--
--#
--# ALSA PowerMac devices
--#
--
--#
--# ALSA PowerPC devices
--#
--
--#
--# USB devices
--#
--# CONFIG_SND_USB_AUDIO is not set
--# CONFIG_SND_USB_USX2Y is not set
--# CONFIG_SND_USB_CAIAQ is not set
--
--#
--# System on Chip audio support
--#
--# CONFIG_SND_SOC is not set
--
--#
--# SoC Audio support for SuperH
--#
--
--#
--# ALSA SoC audio for Freescale SOCs
--#
--
--#
--# Open Sound System
--#
--# CONFIG_SOUND_PRIME is not set
--CONFIG_AC97_BUS=y
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--
--#
--# USB Input Devices
--#
--CONFIG_USB_HID=y
--# CONFIG_USB_HIDINPUT_POWERBOOK is not set
--# CONFIG_HID_FF is not set
--# CONFIG_USB_HIDDEV is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--CONFIG_USB_DEVICEFS=y
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--CONFIG_USB_EHCI_HCD=y
--# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
--# CONFIG_USB_EHCI_TT_NEWSCHED is not set
--# CONFIG_USB_EHCI_FSL is not set
--CONFIG_USB_EHCI_HCD_PPC_OF=y
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--CONFIG_USB_OHCI_HCD_PPC_OF_LE=y
--CONFIG_USB_OHCI_HCD_PCI=y
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--# CONFIG_USB_UHCI_HCD is not set
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_SISUSBVGA is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_TEST is not set
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# I2C RTC drivers
--#
--# CONFIG_RTC_DRV_DS1307 is not set
--# CONFIG_RTC_DRV_DS1374 is not set
--# CONFIG_RTC_DRV_DS1672 is not set
--# CONFIG_RTC_DRV_MAX6900 is not set
--# CONFIG_RTC_DRV_RS5C372 is not set
--# CONFIG_RTC_DRV_ISL1208 is not set
--# CONFIG_RTC_DRV_X1205 is not set
--# CONFIG_RTC_DRV_PCF8563 is not set
--# CONFIG_RTC_DRV_PCF8583 is not set
--# CONFIG_RTC_DRV_M41T80 is not set
--# CONFIG_RTC_DRV_S35390A is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--CONFIG_RTC_DRV_CMOS=y
--# 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_M48T59 is not set
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=m
--CONFIG_JOLIET=y
--CONFIG_ZISOFS=y
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--CONFIG_NTFS_FS=y
--# CONFIG_NTFS_DEBUG is not set
--# CONFIG_NTFS_RW is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--CONFIG_ADFS_FS=m
--# CONFIG_ADFS_FS_RW is not set
--CONFIG_AFFS_FS=m
--CONFIG_HFS_FS=m
--CONFIG_HFSPLUS_FS=m
--CONFIG_BEFS_FS=m
--# CONFIG_BEFS_DEBUG is not set
--CONFIG_BFS_FS=m
--CONFIG_EFS_FS=m
--CONFIG_CRAMFS=y
--CONFIG_VXFS_FS=m
--# CONFIG_MINIX_FS is not set
--CONFIG_HPFS_FS=m
--CONFIG_QNX4FS_FS=m
--# CONFIG_ROMFS_FS is not set
--CONFIG_SYSV_FS=m
--CONFIG_UFS_FS=m
--# CONFIG_UFS_FS_WRITE is not set
--# CONFIG_UFS_DEBUG is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--CONFIG_NFSD=y
--# CONFIG_NFSD_V3 is not set
--CONFIG_NFSD_TCP=y
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_EXPORTFS=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--CONFIG_MAC_PARTITION=y
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_BSD_DISKLABEL is not set
--# CONFIG_MINIX_SUBPARTITION is not set
--# CONFIG_SOLARIS_X86_PARTITION is not set
--# CONFIG_UNIXWARE_DISKLABEL is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--# CONFIG_NLS_CODEPAGE_437 is not set
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--# CONFIG_NLS_CODEPAGE_850 is not set
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--# CONFIG_NLS_CODEPAGE_932 is not set
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--# CONFIG_NLS_ISO8859_8 is not set
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--# CONFIG_NLS_ASCII is not set
--# CONFIG_NLS_ISO8859_1 is not set
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--# CONFIG_NLS_ISO8859_15 is not set
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--CONFIG_NLS_UTF8=m
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--CONFIG_LIBCRC32C=m
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_HIGHMEM is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_HASH=y
--CONFIG_CRYPTO_MANAGER=y
--CONFIG_CRYPTO_HMAC=y
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--CONFIG_CRYPTO_SHA1=m
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/mpc85xx_cds_defconfig
-+++ /dev/null
-@@ -1,935 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:30 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--CONFIG_MPC85xx_CDS=y
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--CONFIG_PPC_I8259=y
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=y
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--# CONFIG_SECCOMP is not set
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=y
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--# CONFIG_BLK_DEV_IDEDISK is not set
--# CONFIG_IDEDISK_MULTI_MODE is not set
--# CONFIG_BLK_DEV_IDECD is not set
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--# CONFIG_BLK_DEV_PLATFORM is not set
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_IDEPCI_PCIBUS_ORDER=y
--# CONFIG_BLK_DEV_OFFBOARD is not set
--CONFIG_BLK_DEV_GENERIC=y
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--# CONFIG_BLK_DEV_AMD74XX is not set
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_JMICRON is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT8213 is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--# CONFIG_BLK_DEV_SIIMAGE is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=y
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--CONFIG_IDE_ARCH_OBSOLETE_INIT=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--CONFIG_E1000=y
--CONFIG_E1000_NAPI=y
--# CONFIG_E1000_DISABLE_PACKET_SPLIT is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--CONFIG_DEBUG_MUTEXES=y
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/pmac32_defconfig
-+++ b/arch/powerpc/configs/pmac32_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux kernel version: 2.6.25-rc6
--# Thu Mar 20 11:05:14 2008
-+# Thu Mar 27 13:56:21 2008
- #
- # CONFIG_PPC64 is not set
-@@ -77,8 +77,6 @@ CONFIG_IKCONFIG_PROC=y
- CONFIG_LOG_BUF_SHIFT=14
- # CONFIG_CGROUPS is not set
- # CONFIG_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--# CONFIG_CGROUP_SCHED is not set
- CONFIG_SYSFS_DEPRECATED=y
- CONFIG_SYSFS_DEPRECATED_V2=y
- # CONFIG_RELAY is not set
-@@ -272,7 +270,7 @@ CONFIG_PCI_SYSCALL=y
- # CONFIG_PCIEPORTBUS is not set
- CONFIG_ARCH_SUPPORTS_MSI=y
- # CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_LEGACY is not set
- # CONFIG_PCI_DEBUG is not set
- CONFIG_PCCARD=m
- # CONFIG_PCMCIA_DEBUG is not set
-@@ -1895,6 +1893,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- /dev/null
-+++ b/arch/powerpc/configs/ppc40x_defconfig
-@@ -0,0 +1,896 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc9
-+# Tue Apr 15 08:46:44 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+# CONFIG_6xx is not set
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+CONFIG_40x=y
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_4xx=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_NOT_COHERENT_CACHE=y
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+# CONFIG_GENERIC_TBSYNC is not set
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+# CONFIG_DEFAULT_UIMAGE is not set
-+CONFIG_PPC_DCR_NATIVE=y
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_PPC_DCR=y
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_BROKEN_ON_SMP=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+# CONFIG_BSD_PROCESS_ACCT is not set
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+# CONFIG_IKCONFIG is not set
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+# CONFIG_RELAY is not set
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+CONFIG_KALLSYMS_ALL=y
-+CONFIG_KALLSYMS_EXTRA_PASS=y
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLUB_DEBUG=y
-+# CONFIG_SLAB is not set
-+CONFIG_SLUB=y
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_BLOCK=y
-+CONFIG_LBD=y
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+CONFIG_DEFAULT_AS=y
-+# CONFIG_DEFAULT_DEADLINE is not set
-+# CONFIG_DEFAULT_CFQ is not set
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="anticipatory"
-+CONFIG_CLASSIC_RCU=y
-+CONFIG_PPC4xx_PCI_EXPRESS=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+CONFIG_EP405=y
-+CONFIG_KILAUEA=y
-+CONFIG_MAKALU=y
-+CONFIG_WALNUT=y
-+CONFIG_XILINX_VIRTEX_GENERIC_BOARD=y
-+CONFIG_405GP=y
-+CONFIG_405EX=y
-+CONFIG_XILINX_VIRTEX=y
-+CONFIG_XILINX_VIRTEX_II_PRO=y
-+CONFIG_XILINX_VIRTEX_4_FX=y
-+CONFIG_IBM405_ERR77=y
-+CONFIG_IBM405_ERR51=y
-+# CONFIG_IPIC is not set
-+# CONFIG_MPIC is not set
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+CONFIG_OF_RTC=y
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+# CONFIG_TICK_ONESHOT is not set
-+# CONFIG_NO_HZ is not set
-+# CONFIG_HIGH_RES_TIMERS is not set
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+CONFIG_PREEMPT_NONE=y
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+# CONFIG_PREEMPT is not set
-+CONFIG_BINFMT_ELF=y
-+# CONFIG_BINFMT_MISC is not set
-+# CONFIG_MATH_EMULATION is not set
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+CONFIG_RESOURCES_64BIT=y
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+CONFIG_FORCE_MAX_ZONEORDER=11
-+CONFIG_PROC_DEVICETREE=y
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_4xx_SOC=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+# CONFIG_PCIEPORTBUS is not set
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+# CONFIG_PCI_LEGACY is not set
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_CONSISTENT_START=0xff100000
-+CONFIG_CONSISTENT_SIZE=0x00200000
-+CONFIG_BOOT_LOAD=0x00400000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+# CONFIG_PACKET_MMAP is not set
-+CONFIG_UNIX=y
-+# CONFIG_NET_KEY is not set
-+CONFIG_INET=y
-+# CONFIG_IP_MULTICAST is not set
-+# CONFIG_IP_ADVANCED_ROUTER is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+# CONFIG_IP_PNP_RARP is not set
-+# CONFIG_NET_IPIP is not set
-+# CONFIG_NET_IPGRE is not set
-+# CONFIG_ARPD is not set
-+# CONFIG_SYN_COOKIES is not set
-+# CONFIG_INET_AH is not set
-+# CONFIG_INET_ESP is not set
-+# CONFIG_INET_IPCOMP is not set
-+# CONFIG_INET_XFRM_TUNNEL is not set
-+# CONFIG_INET_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
-+# CONFIG_INET_XFRM_MODE_TUNNEL is not set
-+# CONFIG_INET_XFRM_MODE_BEET is not set
-+# CONFIG_INET_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IPV6 is not set
-+# CONFIG_INET6_XFRM_TUNNEL is not set
-+# CONFIG_INET6_TUNNEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+# CONFIG_NETFILTER is not set
-+# CONFIG_IP_DCCP is not set
-+# CONFIG_IP_SCTP is not set
-+# CONFIG_TIPC is not set
-+# CONFIG_ATM is not set
-+# CONFIG_BRIDGE is not set
-+# CONFIG_VLAN_8021Q is not set
-+# CONFIG_DECNET is not set
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+# CONFIG_WAN_ROUTER is not set
-+# CONFIG_NET_SCHED is not set
-+
-+#
-+# Network testing
-+#
-+# CONFIG_NET_PKTGEN is not set
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+CONFIG_FW_LOADER=y
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+CONFIG_CONNECTOR=y
-+CONFIG_PROC_EVENTS=y
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+# CONFIG_MTD_CONCAT is not set
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+CONFIG_MTD_CMDLINE_PARTS=y
-+CONFIG_MTD_OF_PARTS=y
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+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_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+CONFIG_MTD_JEDECPROBE=y
-+CONFIG_MTD_GEN_PROBE=y
-+# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
-+CONFIG_MTD_CFI_AMDSTD=y
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+# CONFIG_BLK_DEV_LOOP is not set
-+# CONFIG_BLK_DEV_NBD is not set
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+CONFIG_BLK_DEV_RAM_COUNT=16
-+CONFIG_BLK_DEV_RAM_SIZE=35000
-+# CONFIG_BLK_DEV_XIP is not set
-+# CONFIG_CDROM_PKTCDVD is not set
-+# CONFIG_ATA_OVER_ETH is not set
-+# CONFIG_XILINX_SYSACE is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+# CONFIG_MD is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+# CONFIG_DUMMY is not set
-+# CONFIG_BONDING is not set
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+# CONFIG_TUN is not set
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+# CONFIG_PHYLIB is not set
-+CONFIG_NET_ETHERNET=y
-+# CONFIG_MII is not set
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+CONFIG_IBM_NEW_EMAC=y
-+CONFIG_IBM_NEW_EMAC_RXB=128
-+CONFIG_IBM_NEW_EMAC_TXB=64
-+CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
-+CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
-+CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
-+# CONFIG_IBM_NEW_EMAC_DEBUG is not set
-+CONFIG_IBM_NEW_EMAC_ZMII=y
-+CONFIG_IBM_NEW_EMAC_RGMII=y
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+CONFIG_IBM_NEW_EMAC_EMAC4=y
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+CONFIG_NETDEV_10000=y
-+# CONFIG_CHELSIO_T1 is not set
-+# CONFIG_CHELSIO_T3 is not set
-+# CONFIG_IXGBE is not set
-+# CONFIG_IXGB is not set
-+# CONFIG_S2IO is not set
-+# CONFIG_MYRI10GE is not set
-+# CONFIG_NETXEN_NIC is not set
-+# CONFIG_NIU is not set
-+# CONFIG_MLX4_CORE is not set
-+# CONFIG_TEHUTI is not set
-+# CONFIG_BNX2X is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+# CONFIG_PPP is not set
-+# CONFIG_SLIP is not set
-+# CONFIG_NETCONSOLE is not set
-+# CONFIG_NETPOLL is not set
-+# CONFIG_NET_POLL_CONTROLLER is not set
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+# CONFIG_INPUT is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+# CONFIG_VT is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+CONFIG_SERIAL_8250_PCI=y
-+CONFIG_SERIAL_8250_NR_UARTS=4
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-+CONFIG_SERIAL_8250_EXTENDED=y
-+# CONFIG_SERIAL_8250_MANY_PORTS is not set
-+CONFIG_SERIAL_8250_SHARE_IRQ=y
-+# CONFIG_SERIAL_8250_DETECT_IRQ is not set
-+# CONFIG_SERIAL_8250_RSA is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+CONFIG_SERIAL_OF_PLATFORM=y
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+# CONFIG_HW_RANDOM is not set
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+CONFIG_XILINX_HWICAP=m
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+# CONFIG_I2C is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+# CONFIG_HWMON is not set
-+CONFIG_THERMAL=y
-+# CONFIG_WATCHDOG is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+# CONFIG_DAB is not set
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+# CONFIG_EXT2_FS_XATTR is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+# CONFIG_EXT3_FS is not set
-+# CONFIG_EXT4DEV_FS is not set
-+# CONFIG_REISERFS_FS is not set
-+# CONFIG_JFS_FS is not set
-+# CONFIG_FS_POSIX_ACL is not set
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+# CONFIG_OCFS2_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+# CONFIG_AUTOFS_FS is not set
-+# CONFIG_AUTOFS4_FS is not set
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+# CONFIG_CONFIGFS_FS is not set
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+CONFIG_CRAMFS=y
-+# CONFIG_VXFS_FS is not set
-+# CONFIG_MINIX_FS is not set
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+# CONFIG_ROMFS_FS is not set
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+# CONFIG_NFS_V4 is not set
-+# CONFIG_NFS_DIRECTIO is not set
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+# CONFIG_RPCSEC_GSS_KRB5 is not set
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+# CONFIG_SMB_FS is not set
-+# CONFIG_CIFS is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+# CONFIG_NLS is not set
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+# CONFIG_CRC_CCITT is not set
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+# CONFIG_LIBCRC32C is not set
-+CONFIG_ZLIB_INFLATE=y
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_SLUB_DEBUG_ON is not set
-+# CONFIG_SLUB_STATS is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+# CONFIG_DEBUGGER is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+# CONFIG_SECURITY is not set
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_MANAGER=y
-+# CONFIG_CRYPTO_HMAC is not set
-+# CONFIG_CRYPTO_XCBC is not set
-+# CONFIG_CRYPTO_NULL is not set
-+# CONFIG_CRYPTO_MD4 is not set
-+CONFIG_CRYPTO_MD5=y
-+# CONFIG_CRYPTO_SHA1 is not set
-+# CONFIG_CRYPTO_SHA256 is not set
-+# CONFIG_CRYPTO_SHA512 is not set
-+# CONFIG_CRYPTO_WP512 is not set
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=y
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=y
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+# CONFIG_CRYPTO_BLOWFISH is not set
-+# CONFIG_CRYPTO_TWOFISH is not set
-+# CONFIG_CRYPTO_SERPENT is not set
-+# CONFIG_CRYPTO_AES is not set
-+# CONFIG_CRYPTO_CAST5 is not set
-+# CONFIG_CRYPTO_CAST6 is not set
-+# CONFIG_CRYPTO_TEA is not set
-+# CONFIG_CRYPTO_ARC4 is not set
-+# CONFIG_CRYPTO_KHAZAD is not set
-+# CONFIG_CRYPTO_ANUBIS is not set
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+# CONFIG_CRYPTO_DEFLATE is not set
-+# CONFIG_CRYPTO_MICHAEL_MIC is not set
-+# CONFIG_CRYPTO_CRC32C is not set
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+# CONFIG_CRYPTO_TEST is not set
-+# CONFIG_CRYPTO_AUTHENC is not set
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/ppc44x_defconfig
-+++ b/arch/powerpc/configs/ppc44x_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:57:35 2008
-+# Linux kernel version: 2.6.25-rc6
-+# Sat Apr  5 09:35:48 2008
- #
- # CONFIG_PPC64 is not set
-@@ -79,6 +79,7 @@ CONFIG_FAIR_GROUP_SCHED=y
- CONFIG_USER_SCHED=y
- # CONFIG_CGROUP_SCHED is not set
- CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
- # CONFIG_RELAY is not set
- # CONFIG_NAMESPACES is not set
- CONFIG_BLK_DEV_INITRD=y
-@@ -113,6 +114,7 @@ CONFIG_SLUB=y
- CONFIG_HAVE_OPROFILE=y
- # CONFIG_KPROBES is not set
- CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
- CONFIG_PROC_PAGE_MONITOR=y
- CONFIG_SLABINFO=y
- CONFIG_RT_MUTEXES=y
-@@ -143,7 +145,6 @@ CONFIG_DEFAULT_AS=y
- # CONFIG_DEFAULT_NOOP is not set
- CONFIG_DEFAULT_IOSCHED="anticipatory"
- CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
- CONFIG_PPC4xx_PCI_EXPRESS=y
- #
-@@ -161,12 +162,15 @@ CONFIG_TAISHAN=y
- CONFIG_KATMAI=y
- CONFIG_RAINIER=y
- CONFIG_WARP=y
-+CONFIG_CANYONLANDS=y
-+CONFIG_YOSEMITE=y
- CONFIG_440EP=y
- CONFIG_440EPX=y
- CONFIG_440GRX=y
- CONFIG_440GP=y
- CONFIG_440GX=y
- CONFIG_440SPe=y
-+CONFIG_460EX=y
- CONFIG_IBM440EP_ERR42=y
- # CONFIG_IPIC is not set
- # CONFIG_MPIC is not set
-@@ -199,7 +203,6 @@ CONFIG_HZ=250
- CONFIG_PREEMPT_NONE=y
- # CONFIG_PREEMPT_VOLUNTARY is not set
- # CONFIG_PREEMPT is not set
--# CONFIG_RCU_TRACE is not set
- CONFIG_BINFMT_ELF=y
- # CONFIG_BINFMT_MISC is not set
- CONFIG_MATH_EMULATION=y
-@@ -232,6 +235,7 @@ CONFIG_ISA_DMA_API=y
- #
- CONFIG_ZONE_DMA=y
- CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_4xx_SOC=y
- CONFIG_PCI=y
- CONFIG_PCI_DOMAINS=y
- CONFIG_PCI_SYSCALL=y
-@@ -678,6 +682,7 @@ CONFIG_USB_ARCH_HAS_EHCI=y
- # CONFIG_INFINIBAND is not set
- # CONFIG_EDAC is not set
- # CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
- #
- # Userspace I/O
-@@ -805,6 +810,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/ppc64_defconfig
-+++ b/arch/powerpc/configs/ppc64_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux kernel version: 2.6.25-rc6
--# Thu Mar 20 11:06:28 2008
-+# Thu Mar 27 13:56:24 2008
- #
- CONFIG_PPC64=y
-@@ -84,8 +84,6 @@ CONFIG_CGROUPS=y
- # CONFIG_CGROUP_NS is not set
- CONFIG_CPUSETS=y
- # CONFIG_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--# CONFIG_CGROUP_SCHED is not set
- # CONFIG_CGROUP_CPUACCT is not set
- # CONFIG_RESOURCE_COUNTERS is not set
- CONFIG_SYSFS_DEPRECATED=y
-@@ -289,6 +287,7 @@ CONFIG_ARCH_HAS_WALK_MEMORY=y
- CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
- CONFIG_KEXEC=y
- # CONFIG_CRASH_DUMP is not set
-+# CONFIG_PHYP_DUMP is not set
- CONFIG_IRQ_ALL_CPUS=y
- # CONFIG_NUMA is not set
- CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-@@ -335,7 +334,7 @@ CONFIG_PCI_SYSCALL=y
- # CONFIG_PCIEPORTBUS is not set
- CONFIG_ARCH_SUPPORTS_MSI=y
- CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_LEGACY is not set
- # CONFIG_PCI_DEBUG is not set
- CONFIG_PCCARD=y
- # CONFIG_PCMCIA_DEBUG is not set
-@@ -1881,6 +1880,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/pseries_defconfig
-+++ b/arch/powerpc/configs/pseries_defconfig
-@@ -1,7 +1,7 @@
- #
- # Automatically generated make config: don't edit
- # Linux kernel version: 2.6.25-rc6
--# Thu Mar 20 11:08:01 2008
-+# Thu Mar 27 13:56:28 2008
- #
- CONFIG_PPC64=y
-@@ -83,8 +83,6 @@ CONFIG_CGROUPS=y
- CONFIG_CGROUP_NS=y
- CONFIG_CPUSETS=y
- # CONFIG_GROUP_SCHED is not set
--# CONFIG_USER_SCHED is not set
--# CONFIG_CGROUP_SCHED is not set
- CONFIG_CGROUP_CPUACCT=y
- # CONFIG_RESOURCE_COUNTERS is not set
- CONFIG_SYSFS_DEPRECATED=y
-@@ -237,6 +235,7 @@ CONFIG_ARCH_HAS_WALK_MEMORY=y
- CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
- CONFIG_KEXEC=y
- # CONFIG_CRASH_DUMP is not set
-+# CONFIG_PHYP_DUMP is not set
- CONFIG_IRQ_ALL_CPUS=y
- CONFIG_NUMA=y
- CONFIG_NODES_SHIFT=4
-@@ -283,7 +282,7 @@ CONFIG_PCI_SYSCALL=y
- # CONFIG_PCIEPORTBUS is not set
- CONFIG_ARCH_SUPPORTS_MSI=y
- CONFIG_PCI_MSI=y
--CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_LEGACY is not set
- # CONFIG_PCI_DEBUG is not set
- # CONFIG_PCCARD is not set
- CONFIG_HOTPLUG_PCI=m
-@@ -1519,6 +1518,7 @@ CONFIG_PLIST=y
- CONFIG_HAS_IOMEM=y
- CONFIG_HAS_IOPORT=y
- CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
- #
- # Kernel hacking
---- a/arch/powerpc/configs/rainier_defconfig
-+++ /dev/null
-@@ -1,899 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:53:10 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_BAMBOO is not set
--# CONFIG_EBONY is not set
--# CONFIG_SEQUOIA is not set
--# CONFIG_TAISHAN is not set
--# CONFIG_KATMAI is not set
--CONFIG_RAINIER=y
--# CONFIG_WARP is not set
--CONFIG_440GRX=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--CONFIG_CMDLINE_BOOL=y
--CONFIG_CMDLINE=""
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--# CONFIG_MTD_BLKDEVS is not set
--# CONFIG_MTD_BLOCK is not set
--# 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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--CONFIG_MACINTOSH_DRIVERS=y
--# CONFIG_MAC_EMUMOUSEBTN is not set
--# CONFIG_WINDFARM is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_NET_ETHERNET is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--CONFIG_IBM_NEW_EMAC_RGMII=y
--CONFIG_IBM_NEW_EMAC_EMAC4=y
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--CONFIG_DEBUGGER=y
--# CONFIG_KGDB is not set
--# CONFIG_XMON is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--CONFIG_PPC_EARLY_DEBUG=y
--# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
--# CONFIG_PPC_EARLY_DEBUG_G5 is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
--# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
--# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
--# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
--CONFIG_PPC_EARLY_DEBUG_44x=y
--# CONFIG_PPC_EARLY_DEBUG_40x is not set
--# CONFIG_PPC_EARLY_DEBUG_CPM is not set
--CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
--CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/sbc834x_defconfig
-+++ /dev/null
-@@ -1,828 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:38 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--CONFIG_6xx=y
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--# CONFIG_FSL_EMB_PERFMON is not set
--CONFIG_PPC_STD_MMU=y
--CONFIG_PPC_STD_MMU_32=y
--# CONFIG_PPC_MM_SLICES is not set
--# CONFIG_SMP is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--# CONFIG_KMOD is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MULTIPLATFORM is not set
--# CONFIG_PPC_82xx is not set
--CONFIG_PPC_83xx=y
--# CONFIG_PPC_86xx is not set
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC83xx=y
--# CONFIG_MPC831x_RDB is not set
--# CONFIG_MPC832x_MDS is not set
--# CONFIG_MPC832x_RDB is not set
--# CONFIG_MPC834x_MDS is not set
--# CONFIG_MPC834x_ITX is not set
--# CONFIG_MPC836x_MDS is not set
--# CONFIG_MPC837x_MDS is not set
--# CONFIG_MPC837x_RDB is not set
--CONFIG_SBC834x=y
--CONFIG_PPC_MPC834x=y
--CONFIG_IPIC=y
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_GENERIC_ISA_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--# CONFIG_PCI is not set
--# CONFIG_PCI_DOMAINS is not set
--# CONFIG_PCI_SYSCALL is not set
--# CONFIG_ARCH_SUPPORTS_MSI is not set
--# CONFIG_PCCARD is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=m
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_E1000E_ENABLED is not set
--CONFIG_GIANFAR=y
--# CONFIG_GFAR_NAPI is not set
--# CONFIG_NETDEV_10000 is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--CONFIG_WATCHDOG=y
--# CONFIG_WATCHDOG_NOWAYOUT is not set
--
--#
--# Watchdog Device Drivers
--#
--# CONFIG_SOFT_WATCHDOG is not set
--CONFIG_83xx_WDT=y
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--# CONFIG_USB_SUPPORT is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--# CONFIG_EXT2_FS is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--CONFIG_NFS_V4=y
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--CONFIG_SUNRPC_GSS=y
--# CONFIG_SUNRPC_BIND34 is not set
--CONFIG_RPCSEC_GSS_KRB5=y
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=m
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=m
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--# CONFIG_CRYPTO_HW is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/sbc8548_defconfig
-+++ /dev/null
-@@ -1,812 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:39 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--CONFIG_SBC8548=y
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=y
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--# CONFIG_SECCOMP is not set
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=y
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--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_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--# CONFIG_HID_SUPPORT is not set
--# CONFIG_USB_SUPPORT is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--# CONFIG_EXT2_FS is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/sbc8560_defconfig
-+++ /dev/null
-@@ -1,830 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:39 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--CONFIG_SBC8560=y
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=y
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--# CONFIG_SECCOMP is not set
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_FSL_SOC=y
--# CONFIG_PCI is not set
--# CONFIG_PCI_DOMAINS is not set
--# CONFIG_PCI_SYSCALL is not set
--# CONFIG_ARCH_SUPPORTS_MSI is not set
--# CONFIG_PCCARD is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--CONFIG_XFRM_USER=y
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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=y
--# CONFIG_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_E1000E_ENABLED is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--CONFIG_NETDEV_10000=y
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=2
--CONFIG_SERIAL_8250_RUNTIME_UARTS=2
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=y
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--# CONFIG_USB_ARCH_HAS_HCD is not set
--# CONFIG_USB_ARCH_HAS_OHCI is not set
--# CONFIG_USB_ARCH_HAS_EHCI is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_EDAC is not set
--CONFIG_RTC_LIB=y
--CONFIG_RTC_CLASS=y
--CONFIG_RTC_HCTOSYS=y
--CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
--# CONFIG_RTC_DEBUG is not set
--
--#
--# RTC interfaces
--#
--CONFIG_RTC_INTF_SYSFS=y
--CONFIG_RTC_INTF_PROC=y
--CONFIG_RTC_INTF_DEV=y
--# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
--# CONFIG_RTC_DRV_TEST is not set
--
--#
--# SPI RTC drivers
--#
--
--#
--# Platform RTC drivers
--#
--# CONFIG_RTC_DRV_CMOS 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_M48T59=y
--# CONFIG_RTC_DRV_V3020 is not set
--
--#
--# on-CPU RTC drivers
--#
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--# CONFIG_EXT2_FS is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_CRAMFS is not set
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_DEBUG_SLAB is not set
--# CONFIG_DEBUG_RT_MUTEXES is not set
--# CONFIG_RT_MUTEX_TESTER is not set
--# CONFIG_DEBUG_SPINLOCK is not set
--CONFIG_DEBUG_MUTEXES=y
--# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_BDI_SWITCH is not set
--CONFIG_PPC_EARLY_DEBUG=y
--# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
--# CONFIG_PPC_EARLY_DEBUG_G5 is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
--# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
--# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
--# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
--# CONFIG_PPC_EARLY_DEBUG_44x is not set
--# CONFIG_PPC_EARLY_DEBUG_40x is not set
--# CONFIG_PPC_EARLY_DEBUG_CPM is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_PPC_CLOCK is not set
---- /dev/null
-+++ b/arch/powerpc/configs/sbc8641d_defconfig
-@@ -0,0 +1,1342 @@
-+#
-+# Automatically generated make config: don't edit
-+# Linux kernel version: 2.6.25-rc6
-+# Thu Apr 10 18:03:25 2008
-+#
-+# CONFIG_PPC64 is not set
-+
-+#
-+# Processor support
-+#
-+CONFIG_6xx=y
-+# CONFIG_PPC_85xx is not set
-+# CONFIG_PPC_8xx is not set
-+# CONFIG_40x is not set
-+# CONFIG_44x is not set
-+# CONFIG_E200 is not set
-+CONFIG_PPC_FPU=y
-+CONFIG_ALTIVEC=y
-+CONFIG_PPC_STD_MMU=y
-+CONFIG_PPC_STD_MMU_32=y
-+# CONFIG_PPC_MM_SLICES is not set
-+CONFIG_SMP=y
-+CONFIG_NR_CPUS=2
-+CONFIG_PPC32=y
-+CONFIG_WORD_SIZE=32
-+CONFIG_PPC_MERGE=y
-+CONFIG_MMU=y
-+CONFIG_GENERIC_CMOS_UPDATE=y
-+CONFIG_GENERIC_TIME=y
-+CONFIG_GENERIC_TIME_VSYSCALL=y
-+CONFIG_GENERIC_CLOCKEVENTS=y
-+CONFIG_GENERIC_HARDIRQS=y
-+# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
-+CONFIG_IRQ_PER_CPU=y
-+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-+CONFIG_GENERIC_LOCKBREAK=y
-+CONFIG_ARCH_HAS_ILOG2_U32=y
-+CONFIG_GENERIC_HWEIGHT=y
-+CONFIG_GENERIC_CALIBRATE_DELAY=y
-+CONFIG_GENERIC_FIND_NEXT_BIT=y
-+# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
-+CONFIG_PPC=y
-+CONFIG_EARLY_PRINTK=y
-+CONFIG_GENERIC_NVRAM=y
-+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-+CONFIG_PPC_OF=y
-+CONFIG_OF=y
-+CONFIG_PPC_UDBG_16550=y
-+CONFIG_GENERIC_TBSYNC=y
-+CONFIG_AUDIT_ARCH=y
-+CONFIG_GENERIC_BUG=y
-+CONFIG_DEFAULT_UIMAGE=y
-+# CONFIG_PPC_DCR_NATIVE is not set
-+# CONFIG_PPC_DCR_MMIO is not set
-+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-+
-+#
-+# General setup
-+#
-+CONFIG_EXPERIMENTAL=y
-+CONFIG_LOCK_KERNEL=y
-+CONFIG_INIT_ENV_ARG_LIMIT=32
-+CONFIG_LOCALVERSION=""
-+CONFIG_LOCALVERSION_AUTO=y
-+CONFIG_SWAP=y
-+CONFIG_SYSVIPC=y
-+CONFIG_SYSVIPC_SYSCTL=y
-+CONFIG_POSIX_MQUEUE=y
-+CONFIG_BSD_PROCESS_ACCT=y
-+CONFIG_BSD_PROCESS_ACCT_V3=y
-+# CONFIG_TASKSTATS is not set
-+# CONFIG_AUDIT is not set
-+CONFIG_IKCONFIG=y
-+CONFIG_IKCONFIG_PROC=y
-+CONFIG_LOG_BUF_SHIFT=14
-+# CONFIG_CGROUPS is not set
-+CONFIG_GROUP_SCHED=y
-+CONFIG_FAIR_GROUP_SCHED=y
-+# CONFIG_RT_GROUP_SCHED is not set
-+CONFIG_USER_SCHED=y
-+# CONFIG_CGROUP_SCHED is not set
-+CONFIG_SYSFS_DEPRECATED=y
-+CONFIG_SYSFS_DEPRECATED_V2=y
-+CONFIG_RELAY=y
-+# CONFIG_NAMESPACES is not set
-+CONFIG_BLK_DEV_INITRD=y
-+CONFIG_INITRAMFS_SOURCE=""
-+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-+CONFIG_SYSCTL=y
-+CONFIG_EMBEDDED=y
-+CONFIG_SYSCTL_SYSCALL=y
-+CONFIG_KALLSYMS=y
-+# CONFIG_KALLSYMS_ALL is not set
-+# CONFIG_KALLSYMS_EXTRA_PASS is not set
-+CONFIG_HOTPLUG=y
-+CONFIG_PRINTK=y
-+CONFIG_BUG=y
-+CONFIG_ELF_CORE=y
-+CONFIG_COMPAT_BRK=y
-+CONFIG_BASE_FULL=y
-+CONFIG_FUTEX=y
-+CONFIG_ANON_INODES=y
-+CONFIG_EPOLL=y
-+CONFIG_SIGNALFD=y
-+CONFIG_TIMERFD=y
-+CONFIG_EVENTFD=y
-+CONFIG_SHMEM=y
-+CONFIG_VM_EVENT_COUNTERS=y
-+CONFIG_SLAB=y
-+# CONFIG_SLUB is not set
-+# CONFIG_SLOB is not set
-+# CONFIG_PROFILING is not set
-+# CONFIG_MARKERS is not set
-+CONFIG_HAVE_OPROFILE=y
-+# CONFIG_KPROBES is not set
-+CONFIG_HAVE_KPROBES=y
-+CONFIG_HAVE_KRETPROBES=y
-+CONFIG_PROC_PAGE_MONITOR=y
-+CONFIG_SLABINFO=y
-+CONFIG_RT_MUTEXES=y
-+# CONFIG_TINY_SHMEM is not set
-+CONFIG_BASE_SMALL=0
-+CONFIG_MODULES=y
-+CONFIG_MODULE_UNLOAD=y
-+# CONFIG_MODULE_FORCE_UNLOAD is not set
-+# CONFIG_MODVERSIONS is not set
-+# CONFIG_MODULE_SRCVERSION_ALL is not set
-+CONFIG_KMOD=y
-+CONFIG_STOP_MACHINE=y
-+CONFIG_BLOCK=y
-+# CONFIG_LBD is not set
-+# CONFIG_BLK_DEV_IO_TRACE is not set
-+# CONFIG_LSF is not set
-+# CONFIG_BLK_DEV_BSG is not set
-+
-+#
-+# IO Schedulers
-+#
-+CONFIG_IOSCHED_NOOP=y
-+CONFIG_IOSCHED_AS=y
-+CONFIG_IOSCHED_DEADLINE=y
-+CONFIG_IOSCHED_CFQ=y
-+# CONFIG_DEFAULT_AS is not set
-+# CONFIG_DEFAULT_DEADLINE is not set
-+CONFIG_DEFAULT_CFQ=y
-+# CONFIG_DEFAULT_NOOP is not set
-+CONFIG_DEFAULT_IOSCHED="cfq"
-+CONFIG_CLASSIC_RCU=y
-+
-+#
-+# Platform support
-+#
-+# CONFIG_PPC_MULTIPLATFORM is not set
-+# CONFIG_PPC_82xx is not set
-+# CONFIG_PPC_83xx is not set
-+CONFIG_PPC_86xx=y
-+# CONFIG_PPC_MPC512x is not set
-+# CONFIG_PPC_MPC5121 is not set
-+# CONFIG_PPC_CELL is not set
-+# CONFIG_PPC_CELL_NATIVE is not set
-+# CONFIG_PQ2ADS is not set
-+# CONFIG_MPC8641_HPCN is not set
-+CONFIG_SBC8641D=y
-+# CONFIG_MPC8610_HPCD is not set
-+CONFIG_MPC8641=y
-+# CONFIG_IPIC is not set
-+CONFIG_MPIC=y
-+# CONFIG_MPIC_WEIRD is not set
-+# CONFIG_PPC_I8259 is not set
-+# CONFIG_PPC_RTAS is not set
-+# CONFIG_MMIO_NVRAM is not set
-+# CONFIG_PPC_MPC106 is not set
-+# CONFIG_PPC_970_NAP is not set
-+# CONFIG_PPC_INDIRECT_IO is not set
-+# CONFIG_GENERIC_IOMAP is not set
-+# CONFIG_CPU_FREQ is not set
-+# CONFIG_FSL_ULI1575 is not set
-+
-+#
-+# Kernel options
-+#
-+# CONFIG_HIGHMEM is not set
-+CONFIG_TICK_ONESHOT=y
-+# CONFIG_NO_HZ is not set
-+CONFIG_HIGH_RES_TIMERS=y
-+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-+# CONFIG_HZ_100 is not set
-+CONFIG_HZ_250=y
-+# CONFIG_HZ_300 is not set
-+# CONFIG_HZ_1000 is not set
-+CONFIG_HZ=250
-+# CONFIG_SCHED_HRTICK is not set
-+# CONFIG_PREEMPT_NONE is not set
-+# CONFIG_PREEMPT_VOLUNTARY is not set
-+CONFIG_PREEMPT=y
-+# CONFIG_PREEMPT_RCU is not set
-+CONFIG_BINFMT_ELF=y
-+CONFIG_BINFMT_MISC=m
-+CONFIG_FORCE_MAX_ZONEORDER=11
-+# CONFIG_IOMMU_HELPER is not set
-+CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-+CONFIG_ARCH_HAS_WALK_MEMORY=y
-+CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
-+CONFIG_IRQ_ALL_CPUS=y
-+CONFIG_ARCH_FLATMEM_ENABLE=y
-+CONFIG_ARCH_POPULATES_NODE_MAP=y
-+CONFIG_SELECT_MEMORY_MODEL=y
-+CONFIG_FLATMEM_MANUAL=y
-+# CONFIG_DISCONTIGMEM_MANUAL is not set
-+# CONFIG_SPARSEMEM_MANUAL is not set
-+CONFIG_FLATMEM=y
-+CONFIG_FLAT_NODE_MEM_MAP=y
-+# CONFIG_SPARSEMEM_STATIC is not set
-+# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-+CONFIG_SPLIT_PTLOCK_CPUS=4
-+# CONFIG_RESOURCES_64BIT is not set
-+CONFIG_ZONE_DMA_FLAG=1
-+CONFIG_BOUNCE=y
-+CONFIG_VIRT_TO_BUS=y
-+# CONFIG_PROC_DEVICETREE is not set
-+# CONFIG_CMDLINE_BOOL is not set
-+# CONFIG_PM is not set
-+CONFIG_SECCOMP=y
-+CONFIG_ISA_DMA_API=y
-+
-+#
-+# Bus options
-+#
-+CONFIG_ZONE_DMA=y
-+CONFIG_GENERIC_ISA_DMA=y
-+CONFIG_PPC_INDIRECT_PCI=y
-+CONFIG_FSL_SOC=y
-+CONFIG_FSL_PCI=y
-+CONFIG_PCI=y
-+CONFIG_PCI_DOMAINS=y
-+CONFIG_PCI_SYSCALL=y
-+CONFIG_PCIEPORTBUS=y
-+CONFIG_PCIEAER=y
-+CONFIG_ARCH_SUPPORTS_MSI=y
-+# CONFIG_PCI_MSI is not set
-+CONFIG_PCI_LEGACY=y
-+# CONFIG_PCI_DEBUG is not set
-+# CONFIG_PCCARD is not set
-+# CONFIG_HOTPLUG_PCI is not set
-+
-+#
-+# Advanced setup
-+#
-+# CONFIG_ADVANCED_OPTIONS is not set
-+
-+#
-+# Default settings for advanced configuration options are used
-+#
-+CONFIG_HIGHMEM_START=0xfe000000
-+CONFIG_LOWMEM_SIZE=0x30000000
-+CONFIG_KERNEL_START=0xc0000000
-+CONFIG_TASK_SIZE=0xc0000000
-+CONFIG_BOOT_LOAD=0x00800000
-+
-+#
-+# Networking
-+#
-+CONFIG_NET=y
-+
-+#
-+# Networking options
-+#
-+CONFIG_PACKET=y
-+CONFIG_PACKET_MMAP=y
-+CONFIG_UNIX=y
-+CONFIG_XFRM=y
-+CONFIG_XFRM_USER=m
-+# CONFIG_XFRM_SUB_POLICY is not set
-+# CONFIG_XFRM_MIGRATE is not set
-+# CONFIG_XFRM_STATISTICS is not set
-+CONFIG_NET_KEY=m
-+# CONFIG_NET_KEY_MIGRATE is not set
-+CONFIG_INET=y
-+CONFIG_IP_MULTICAST=y
-+CONFIG_IP_ADVANCED_ROUTER=y
-+CONFIG_ASK_IP_FIB_HASH=y
-+# CONFIG_IP_FIB_TRIE is not set
-+CONFIG_IP_FIB_HASH=y
-+CONFIG_IP_MULTIPLE_TABLES=y
-+CONFIG_IP_ROUTE_MULTIPATH=y
-+CONFIG_IP_ROUTE_VERBOSE=y
-+CONFIG_IP_PNP=y
-+CONFIG_IP_PNP_DHCP=y
-+CONFIG_IP_PNP_BOOTP=y
-+CONFIG_IP_PNP_RARP=y
-+CONFIG_NET_IPIP=m
-+CONFIG_NET_IPGRE=m
-+CONFIG_NET_IPGRE_BROADCAST=y
-+CONFIG_IP_MROUTE=y
-+CONFIG_IP_PIMSM_V1=y
-+CONFIG_IP_PIMSM_V2=y
-+# CONFIG_ARPD is not set
-+CONFIG_SYN_COOKIES=y
-+CONFIG_INET_AH=m
-+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_LRO is not set
-+CONFIG_INET_DIAG=y
-+CONFIG_INET_TCP_DIAG=y
-+# CONFIG_TCP_CONG_ADVANCED is not set
-+CONFIG_TCP_CONG_CUBIC=y
-+CONFIG_DEFAULT_TCP_CONG="cubic"
-+# CONFIG_TCP_MD5SIG is not set
-+# CONFIG_IP_VS is not set
-+CONFIG_IPV6=m
-+# CONFIG_IPV6_PRIVACY is not set
-+# CONFIG_IPV6_ROUTER_PREF is not set
-+# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-+CONFIG_INET6_AH=m
-+CONFIG_INET6_ESP=m
-+CONFIG_INET6_IPCOMP=m
-+# CONFIG_IPV6_MIP6 is not set
-+CONFIG_INET6_XFRM_TUNNEL=m
-+CONFIG_INET6_TUNNEL=m
-+CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-+CONFIG_INET6_XFRM_MODE_TUNNEL=m
-+CONFIG_INET6_XFRM_MODE_BEET=m
-+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set
-+CONFIG_IPV6_SIT=m
-+CONFIG_IPV6_TUNNEL=m
-+# CONFIG_IPV6_MULTIPLE_TABLES is not set
-+# CONFIG_NETLABEL is not set
-+# CONFIG_NETWORK_SECMARK is not set
-+CONFIG_NETFILTER=y
-+# CONFIG_NETFILTER_DEBUG is not set
-+CONFIG_NETFILTER_ADVANCED=y
-+CONFIG_BRIDGE_NETFILTER=y
-+
-+#
-+# Core Netfilter Configuration
-+#
-+# CONFIG_NETFILTER_NETLINK_QUEUE is not set
-+# CONFIG_NETFILTER_NETLINK_LOG is not set
-+# CONFIG_NF_CONNTRACK is not set
-+CONFIG_NETFILTER_XTABLES=m
-+# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
-+# CONFIG_NETFILTER_XT_TARGET_DSCP is not set
-+# CONFIG_NETFILTER_XT_TARGET_MARK is not set
-+# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
-+# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
-+# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
-+# CONFIG_NETFILTER_XT_TARGET_TRACE is not set
-+# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
-+# CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP is not set
-+# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
-+# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
-+# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
-+# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-+# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
-+# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
-+# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
-+# CONFIG_NETFILTER_XT_MATCH_MAC is not set
-+# CONFIG_NETFILTER_XT_MATCH_MARK is not set
-+# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
-+# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
-+# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-+# CONFIG_NETFILTER_XT_MATCH_PHYSDEV is not set
-+# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
-+# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
-+# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
-+# CONFIG_NETFILTER_XT_MATCH_REALM is not set
-+# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
-+# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
-+# CONFIG_NETFILTER_XT_MATCH_STRING is not set
-+# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
-+# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-+# CONFIG_NETFILTER_XT_MATCH_U32 is not set
-+# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
-+
-+#
-+# IP: Netfilter Configuration
-+#
-+CONFIG_IP_NF_QUEUE=m
-+CONFIG_IP_NF_IPTABLES=m
-+CONFIG_IP_NF_MATCH_RECENT=m
-+CONFIG_IP_NF_MATCH_ECN=m
-+# CONFIG_IP_NF_MATCH_AH is not set
-+CONFIG_IP_NF_MATCH_TTL=m
-+CONFIG_IP_NF_MATCH_ADDRTYPE=m
-+CONFIG_IP_NF_FILTER=m
-+CONFIG_IP_NF_TARGET_REJECT=m
-+CONFIG_IP_NF_TARGET_LOG=m
-+CONFIG_IP_NF_TARGET_ULOG=m
-+CONFIG_IP_NF_MANGLE=m
-+CONFIG_IP_NF_TARGET_ECN=m
-+# CONFIG_IP_NF_TARGET_TTL is not set
-+CONFIG_IP_NF_RAW=m
-+CONFIG_IP_NF_ARPTABLES=m
-+CONFIG_IP_NF_ARPFILTER=m
-+CONFIG_IP_NF_ARP_MANGLE=m
-+
-+#
-+# IPv6: Netfilter Configuration
-+#
-+CONFIG_IP6_NF_QUEUE=m
-+CONFIG_IP6_NF_IPTABLES=m
-+CONFIG_IP6_NF_MATCH_RT=m
-+CONFIG_IP6_NF_MATCH_OPTS=m
-+CONFIG_IP6_NF_MATCH_FRAG=m
-+CONFIG_IP6_NF_MATCH_HL=m
-+CONFIG_IP6_NF_MATCH_IPV6HEADER=m
-+# CONFIG_IP6_NF_MATCH_AH is not set
-+# CONFIG_IP6_NF_MATCH_MH is not set
-+CONFIG_IP6_NF_MATCH_EUI64=m
-+CONFIG_IP6_NF_FILTER=m
-+CONFIG_IP6_NF_TARGET_LOG=m
-+# CONFIG_IP6_NF_TARGET_REJECT is not set
-+CONFIG_IP6_NF_MANGLE=m
-+# CONFIG_IP6_NF_TARGET_HL is not set
-+CONFIG_IP6_NF_RAW=m
-+
-+#
-+# Bridge: Netfilter Configuration
-+#
-+# CONFIG_BRIDGE_NF_EBTABLES is not set
-+# 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_HMAC_NONE is not set
-+# CONFIG_SCTP_HMAC_SHA1 is not set
-+CONFIG_SCTP_HMAC_MD5=y
-+CONFIG_TIPC=m
-+# CONFIG_TIPC_ADVANCED is not set
-+# CONFIG_TIPC_DEBUG is not set
-+CONFIG_ATM=m
-+CONFIG_ATM_CLIP=m
-+# CONFIG_ATM_CLIP_NO_ICMP is not set
-+CONFIG_ATM_LANE=m
-+CONFIG_ATM_MPOA=m
-+CONFIG_ATM_BR2684=m
-+# CONFIG_ATM_BR2684_IPFILTER is not set
-+CONFIG_BRIDGE=m
-+CONFIG_VLAN_8021Q=m
-+# CONFIG_DECNET is not set
-+CONFIG_LLC=m
-+# CONFIG_LLC2 is not set
-+# CONFIG_IPX is not set
-+# CONFIG_ATALK is not set
-+# CONFIG_X25 is not set
-+# CONFIG_LAPB is not set
-+# CONFIG_ECONET is not set
-+CONFIG_WAN_ROUTER=m
-+CONFIG_NET_SCHED=y
-+
-+#
-+# Queueing/Scheduling
-+#
-+CONFIG_NET_SCH_CBQ=m
-+CONFIG_NET_SCH_HTB=m
-+CONFIG_NET_SCH_HFSC=m
-+CONFIG_NET_SCH_ATM=m
-+CONFIG_NET_SCH_PRIO=m
-+# CONFIG_NET_SCH_RR is not set
-+CONFIG_NET_SCH_RED=m
-+CONFIG_NET_SCH_SFQ=m
-+CONFIG_NET_SCH_TEQL=m
-+CONFIG_NET_SCH_TBF=m
-+CONFIG_NET_SCH_GRED=m
-+CONFIG_NET_SCH_DSMARK=m
-+CONFIG_NET_SCH_NETEM=m
-+
-+#
-+# Classification
-+#
-+CONFIG_NET_CLS=y
-+# CONFIG_NET_CLS_BASIC is not set
-+CONFIG_NET_CLS_TCINDEX=m
-+CONFIG_NET_CLS_ROUTE4=m
-+CONFIG_NET_CLS_ROUTE=y
-+CONFIG_NET_CLS_FW=m
-+CONFIG_NET_CLS_U32=m
-+# CONFIG_CLS_U32_PERF is not set
-+# CONFIG_CLS_U32_MARK is not set
-+CONFIG_NET_CLS_RSVP=m
-+CONFIG_NET_CLS_RSVP6=m
-+# CONFIG_NET_CLS_FLOW is not set
-+# CONFIG_NET_EMATCH is not set
-+# CONFIG_NET_CLS_ACT is not set
-+# CONFIG_NET_CLS_IND is not set
-+CONFIG_NET_SCH_FIFO=y
-+
-+#
-+# Network testing
-+#
-+CONFIG_NET_PKTGEN=m
-+# CONFIG_HAMRADIO is not set
-+# CONFIG_CAN is not set
-+# CONFIG_IRDA is not set
-+# CONFIG_BT is not set
-+# CONFIG_AF_RXRPC is not set
-+CONFIG_FIB_RULES=y
-+
-+#
-+# Wireless
-+#
-+# CONFIG_CFG80211 is not set
-+# CONFIG_WIRELESS_EXT is not set
-+# CONFIG_MAC80211 is not set
-+# CONFIG_IEEE80211 is not set
-+# CONFIG_RFKILL is not set
-+# CONFIG_NET_9P is not set
-+
-+#
-+# Device Drivers
-+#
-+
-+#
-+# Generic Driver Options
-+#
-+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-+CONFIG_STANDALONE=y
-+CONFIG_PREVENT_FIRMWARE_BUILD=y
-+# CONFIG_FW_LOADER is not set
-+# CONFIG_DEBUG_DRIVER is not set
-+# CONFIG_DEBUG_DEVRES is not set
-+# CONFIG_SYS_HYPERVISOR is not set
-+# CONFIG_CONNECTOR is not set
-+CONFIG_MTD=y
-+# CONFIG_MTD_DEBUG is not set
-+CONFIG_MTD_CONCAT=y
-+CONFIG_MTD_PARTITIONS=y
-+# CONFIG_MTD_REDBOOT_PARTS is not set
-+# CONFIG_MTD_CMDLINE_PARTS is not set
-+# CONFIG_MTD_OF_PARTS is not set
-+
-+#
-+# User Modules And Translation Layers
-+#
-+CONFIG_MTD_CHAR=y
-+CONFIG_MTD_BLKDEVS=y
-+CONFIG_MTD_BLOCK=y
-+# CONFIG_FTL is not set
-+# CONFIG_NFTL is not set
-+# CONFIG_INFTL is not set
-+# CONFIG_RFD_FTL is not set
-+# CONFIG_SSFDC is not set
-+# CONFIG_MTD_OOPS is not set
-+
-+#
-+# RAM/ROM/Flash chip drivers
-+#
-+CONFIG_MTD_CFI=y
-+# CONFIG_MTD_JEDECPROBE is not set
-+CONFIG_MTD_GEN_PROBE=y
-+CONFIG_MTD_CFI_ADV_OPTIONS=y
-+# CONFIG_MTD_CFI_NOSWAP is not set
-+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
-+CONFIG_MTD_CFI_LE_BYTE_SWAP=y
-+# CONFIG_MTD_CFI_GEOMETRY 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_OTP is not set
-+CONFIG_MTD_CFI_INTELEXT=y
-+# CONFIG_MTD_CFI_AMDSTD is not set
-+# CONFIG_MTD_CFI_STAA is not set
-+CONFIG_MTD_CFI_UTIL=y
-+# CONFIG_MTD_RAM is not set
-+# CONFIG_MTD_ROM is not set
-+# CONFIG_MTD_ABSENT is not set
-+
-+#
-+# Mapping drivers for chip access
-+#
-+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-+# CONFIG_MTD_PHYSMAP is not set
-+CONFIG_MTD_PHYSMAP_OF=y
-+# CONFIG_MTD_INTEL_VR_NOR is not set
-+# CONFIG_MTD_PLATRAM is not set
-+
-+#
-+# Self-contained MTD device drivers
-+#
-+# CONFIG_MTD_PMC551 is not set
-+# CONFIG_MTD_SLRAM is not set
-+# CONFIG_MTD_PHRAM is not set
-+# CONFIG_MTD_MTDRAM is not set
-+# CONFIG_MTD_BLOCK2MTD is not set
-+
-+#
-+# Disk-On-Chip Device Drivers
-+#
-+# CONFIG_MTD_DOC2000 is not set
-+# CONFIG_MTD_DOC2001 is not set
-+# CONFIG_MTD_DOC2001PLUS is not set
-+# CONFIG_MTD_NAND is not set
-+# CONFIG_MTD_ONENAND is not set
-+
-+#
-+# UBI - Unsorted block images
-+#
-+# CONFIG_MTD_UBI is not set
-+CONFIG_OF_DEVICE=y
-+# CONFIG_PARPORT is not set
-+CONFIG_BLK_DEV=y
-+# CONFIG_BLK_DEV_FD is not set
-+# CONFIG_BLK_CPQ_DA is not set
-+# CONFIG_BLK_CPQ_CISS_DA is not set
-+# CONFIG_BLK_DEV_DAC960 is not set
-+# CONFIG_BLK_DEV_UMEM is not set
-+# CONFIG_BLK_DEV_COW_COMMON is not set
-+CONFIG_BLK_DEV_LOOP=m
-+CONFIG_BLK_DEV_CRYPTOLOOP=m
-+CONFIG_BLK_DEV_NBD=m
-+# CONFIG_BLK_DEV_SX8 is not set
-+CONFIG_BLK_DEV_RAM=y
-+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_ATA_OVER_ETH is not set
-+CONFIG_MISC_DEVICES=y
-+# CONFIG_PHANTOM is not set
-+# CONFIG_EEPROM_93CX6 is not set
-+# CONFIG_SGI_IOC4 is not set
-+# CONFIG_TIFM_CORE is not set
-+# CONFIG_ENCLOSURE_SERVICES is not set
-+CONFIG_HAVE_IDE=y
-+# CONFIG_IDE is not set
-+
-+#
-+# SCSI device support
-+#
-+# CONFIG_RAID_ATTRS is not set
-+# CONFIG_SCSI is not set
-+# CONFIG_SCSI_DMA is not set
-+# CONFIG_SCSI_NETLINK is not set
-+# CONFIG_ATA is not set
-+CONFIG_MD=y
-+CONFIG_BLK_DEV_MD=y
-+CONFIG_MD_LINEAR=y
-+CONFIG_MD_RAID0=y
-+CONFIG_MD_RAID1=y
-+CONFIG_MD_RAID10=y
-+# CONFIG_MD_RAID456 is not set
-+CONFIG_MD_MULTIPATH=y
-+CONFIG_MD_FAULTY=y
-+CONFIG_BLK_DEV_DM=y
-+# CONFIG_DM_DEBUG is not set
-+CONFIG_DM_CRYPT=y
-+CONFIG_DM_SNAPSHOT=y
-+CONFIG_DM_MIRROR=y
-+CONFIG_DM_ZERO=y
-+# CONFIG_DM_MULTIPATH is not set
-+# CONFIG_DM_DELAY is not set
-+# CONFIG_DM_UEVENT is not set
-+# CONFIG_FUSION is not set
-+
-+#
-+# IEEE 1394 (FireWire) support
-+#
-+# CONFIG_FIREWIRE is not set
-+# CONFIG_IEEE1394 is not set
-+# CONFIG_I2O is not set
-+# CONFIG_MACINTOSH_DRIVERS is not set
-+CONFIG_NETDEVICES=y
-+# CONFIG_NETDEVICES_MULTIQUEUE is not set
-+CONFIG_DUMMY=m
-+CONFIG_BONDING=m
-+# CONFIG_MACVLAN is not set
-+# CONFIG_EQUALIZER is not set
-+CONFIG_TUN=m
-+# CONFIG_VETH is not set
-+# CONFIG_ARCNET is not set
-+CONFIG_PHYLIB=y
-+
-+#
-+# MII PHY device drivers
-+#
-+# 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=y
-+# CONFIG_ICPLUS_PHY is not set
-+# CONFIG_REALTEK_PHY is not set
-+# CONFIG_FIXED_PHY is not set
-+# CONFIG_MDIO_BITBANG is not set
-+CONFIG_NET_ETHERNET=y
-+CONFIG_MII=y
-+# CONFIG_HAPPYMEAL is not set
-+# CONFIG_SUNGEM is not set
-+# CONFIG_CASSINI is not set
-+# CONFIG_NET_VENDOR_3COM is not set
-+# CONFIG_NET_TULIP is not set
-+# CONFIG_HP100 is not set
-+# CONFIG_IBM_NEW_EMAC_ZMII is not set
-+# CONFIG_IBM_NEW_EMAC_RGMII is not set
-+# CONFIG_IBM_NEW_EMAC_TAH is not set
-+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
-+# CONFIG_NET_PCI is not set
-+# CONFIG_B44 is not set
-+CONFIG_NETDEV_1000=y
-+# CONFIG_ACENIC is not set
-+# CONFIG_DL2K is not set
-+# CONFIG_E1000 is not set
-+# CONFIG_E1000E is not set
-+# CONFIG_E1000E_ENABLED is not set
-+# CONFIG_IP1000 is not set
-+# CONFIG_IGB is not set
-+# CONFIG_NS83820 is not set
-+# CONFIG_HAMACHI is not set
-+# CONFIG_YELLOWFIN is not set
-+# CONFIG_R8169 is not set
-+# CONFIG_SIS190 is not set
-+# CONFIG_SKGE is not set
-+# CONFIG_SKY2 is not set
-+# CONFIG_SK98LIN is not set
-+# CONFIG_VIA_VELOCITY is not set
-+# CONFIG_TIGON3 is not set
-+# CONFIG_BNX2 is not set
-+CONFIG_GIANFAR=y
-+# CONFIG_GFAR_NAPI is not set
-+# CONFIG_QLA3XXX is not set
-+# CONFIG_ATL1 is not set
-+# CONFIG_NETDEV_10000 is not set
-+# CONFIG_TR is not set
-+
-+#
-+# Wireless LAN
-+#
-+# CONFIG_WLAN_PRE80211 is not set
-+# CONFIG_WLAN_80211 is not set
-+# CONFIG_WAN is not set
-+CONFIG_ATM_DRIVERS=y
-+# CONFIG_ATM_DUMMY is not set
-+# CONFIG_ATM_TCP is not set
-+# CONFIG_ATM_LANAI is not set
-+# CONFIG_ATM_ENI is not set
-+# CONFIG_ATM_FIRESTREAM is not set
-+# CONFIG_ATM_ZATM is not set
-+# CONFIG_ATM_NICSTAR is not set
-+# CONFIG_ATM_IDT77252 is not set
-+# CONFIG_ATM_AMBASSADOR is not set
-+# CONFIG_ATM_HORIZON is not set
-+# CONFIG_ATM_IA is not set
-+# CONFIG_ATM_FORE200E_MAYBE is not set
-+# CONFIG_ATM_HE is not set
-+# CONFIG_FDDI is not set
-+# CONFIG_HIPPI is not set
-+CONFIG_PPP=m
-+CONFIG_PPP_MULTILINK=y
-+CONFIG_PPP_FILTER=y
-+CONFIG_PPP_ASYNC=m
-+CONFIG_PPP_SYNC_TTY=m
-+CONFIG_PPP_DEFLATE=m
-+CONFIG_PPP_BSDCOMP=m
-+# CONFIG_PPP_MPPE is not set
-+CONFIG_PPPOE=m
-+CONFIG_PPPOATM=m
-+# CONFIG_PPPOL2TP is not set
-+CONFIG_SLIP=m
-+CONFIG_SLIP_COMPRESSED=y
-+CONFIG_SLHC=m
-+CONFIG_SLIP_SMART=y
-+CONFIG_SLIP_MODE_SLIP6=y
-+CONFIG_NETCONSOLE=y
-+# CONFIG_NETCONSOLE_DYNAMIC is not set
-+CONFIG_NETPOLL=y
-+CONFIG_NETPOLL_TRAP=y
-+CONFIG_NET_POLL_CONTROLLER=y
-+# CONFIG_ISDN is not set
-+# CONFIG_PHONE is not set
-+
-+#
-+# Input device support
-+#
-+CONFIG_INPUT=y
-+# CONFIG_INPUT_FF_MEMLESS is not set
-+# CONFIG_INPUT_POLLDEV is not set
-+
-+#
-+# Userland interfaces
-+#
-+CONFIG_INPUT_MOUSEDEV=y
-+CONFIG_INPUT_MOUSEDEV_PSAUX=y
-+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
-+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
-+# CONFIG_INPUT_JOYDEV is not set
-+# CONFIG_INPUT_EVDEV is not set
-+# CONFIG_INPUT_EVBUG is not set
-+
-+#
-+# Input Device Drivers
-+#
-+# CONFIG_INPUT_KEYBOARD is not set
-+# CONFIG_INPUT_MOUSE is not set
-+# CONFIG_INPUT_JOYSTICK is not set
-+# CONFIG_INPUT_TABLET is not set
-+# CONFIG_INPUT_TOUCHSCREEN is not set
-+# CONFIG_INPUT_MISC is not set
-+
-+#
-+# Hardware I/O ports
-+#
-+# CONFIG_SERIO is not set
-+# CONFIG_GAMEPORT is not set
-+
-+#
-+# Character devices
-+#
-+CONFIG_VT=y
-+CONFIG_VT_CONSOLE=y
-+CONFIG_HW_CONSOLE=y
-+# CONFIG_VT_HW_CONSOLE_BINDING is not set
-+# CONFIG_SERIAL_NONSTANDARD is not set
-+# CONFIG_NOZOMI is not set
-+
-+#
-+# Serial drivers
-+#
-+CONFIG_SERIAL_8250=y
-+CONFIG_SERIAL_8250_CONSOLE=y
-+# CONFIG_SERIAL_8250_PCI is not set
-+CONFIG_SERIAL_8250_NR_UARTS=2
-+CONFIG_SERIAL_8250_RUNTIME_UARTS=2
-+# CONFIG_SERIAL_8250_EXTENDED is not set
-+
-+#
-+# Non-8250 serial port support
-+#
-+# CONFIG_SERIAL_UARTLITE is not set
-+CONFIG_SERIAL_CORE=y
-+CONFIG_SERIAL_CORE_CONSOLE=y
-+# CONFIG_SERIAL_JSM is not set
-+# CONFIG_SERIAL_OF_PLATFORM is not set
-+CONFIG_UNIX98_PTYS=y
-+CONFIG_LEGACY_PTYS=y
-+CONFIG_LEGACY_PTY_COUNT=256
-+# CONFIG_IPMI_HANDLER is not set
-+CONFIG_HW_RANDOM=m
-+# CONFIG_NVRAM is not set
-+# CONFIG_GEN_RTC is not set
-+# CONFIG_R3964 is not set
-+# CONFIG_APPLICOM is not set
-+# CONFIG_RAW_DRIVER is not set
-+# CONFIG_TCG_TPM is not set
-+CONFIG_DEVPORT=y
-+CONFIG_I2C=y
-+CONFIG_I2C_BOARDINFO=y
-+CONFIG_I2C_CHARDEV=y
-+
-+#
-+# I2C Algorithms
-+#
-+# CONFIG_I2C_ALGOBIT is not set
-+# CONFIG_I2C_ALGOPCF is not set
-+# CONFIG_I2C_ALGOPCA is not set
-+
-+#
-+# I2C Hardware Bus support
-+#
-+# CONFIG_I2C_ALI1535 is not set
-+# CONFIG_I2C_ALI1563 is not set
-+# CONFIG_I2C_ALI15X3 is not set
-+# CONFIG_I2C_AMD756 is not set
-+# CONFIG_I2C_AMD8111 is not set
-+# CONFIG_I2C_I801 is not set
-+# CONFIG_I2C_I810 is not set
-+# CONFIG_I2C_PIIX4 is not set
-+CONFIG_I2C_MPC=y
-+# CONFIG_I2C_NFORCE2 is not set
-+# CONFIG_I2C_OCORES is not set
-+# CONFIG_I2C_PARPORT_LIGHT is not set
-+# CONFIG_I2C_PROSAVAGE is not set
-+# CONFIG_I2C_SAVAGE4 is not set
-+# CONFIG_I2C_SIMTEC is not set
-+# CONFIG_I2C_SIS5595 is not set
-+# CONFIG_I2C_SIS630 is not set
-+# CONFIG_I2C_SIS96X is not set
-+# CONFIG_I2C_TAOS_EVM is not set
-+# CONFIG_I2C_STUB is not set
-+# CONFIG_I2C_VIA is not set
-+# CONFIG_I2C_VIAPRO is not set
-+# CONFIG_I2C_VOODOO3 is not set
-+
-+#
-+# Miscellaneous I2C Chip support
-+#
-+# CONFIG_DS1682 is not set
-+# CONFIG_SENSORS_EEPROM is not set
-+# CONFIG_SENSORS_PCF8574 is not set
-+# CONFIG_PCF8575 is not set
-+# CONFIG_SENSORS_PCF8591 is not set
-+# CONFIG_TPS65010 is not set
-+# CONFIG_SENSORS_MAX6875 is not set
-+# CONFIG_SENSORS_TSL2550 is not set
-+# CONFIG_I2C_DEBUG_CORE is not set
-+# CONFIG_I2C_DEBUG_ALGO is not set
-+# CONFIG_I2C_DEBUG_BUS is not set
-+# CONFIG_I2C_DEBUG_CHIP is not set
-+
-+#
-+# SPI support
-+#
-+# CONFIG_SPI is not set
-+# CONFIG_SPI_MASTER is not set
-+# CONFIG_W1 is not set
-+# CONFIG_POWER_SUPPLY is not set
-+CONFIG_HWMON=y
-+# CONFIG_HWMON_VID is not set
-+# CONFIG_SENSORS_AD7418 is not set
-+# CONFIG_SENSORS_ADM1021 is not set
-+# CONFIG_SENSORS_ADM1025 is not set
-+# CONFIG_SENSORS_ADM1026 is not set
-+# CONFIG_SENSORS_ADM1029 is not set
-+# CONFIG_SENSORS_ADM1031 is not set
-+# CONFIG_SENSORS_ADM9240 is not set
-+# CONFIG_SENSORS_ADT7470 is not set
-+# CONFIG_SENSORS_ADT7473 is not set
-+# CONFIG_SENSORS_ATXP1 is not set
-+# CONFIG_SENSORS_DS1621 is not set
-+# CONFIG_SENSORS_I5K_AMB is not set
-+# CONFIG_SENSORS_F71805F is not set
-+# CONFIG_SENSORS_F71882FG is not set
-+# CONFIG_SENSORS_F75375S is not set
-+# CONFIG_SENSORS_GL518SM is not set
-+# CONFIG_SENSORS_GL520SM is not set
-+# CONFIG_SENSORS_IT87 is not set
-+# CONFIG_SENSORS_LM63 is not set
-+# CONFIG_SENSORS_LM75 is not set
-+# CONFIG_SENSORS_LM77 is not set
-+# CONFIG_SENSORS_LM78 is not set
-+# CONFIG_SENSORS_LM80 is not set
-+# CONFIG_SENSORS_LM83 is not set
-+# CONFIG_SENSORS_LM85 is not set
-+# CONFIG_SENSORS_LM87 is not set
-+# CONFIG_SENSORS_LM90 is not set
-+# CONFIG_SENSORS_LM92 is not set
-+# CONFIG_SENSORS_LM93 is not set
-+# CONFIG_SENSORS_MAX1619 is not set
-+# CONFIG_SENSORS_MAX6650 is not set
-+# CONFIG_SENSORS_PC87360 is not set
-+# CONFIG_SENSORS_PC87427 is not set
-+# CONFIG_SENSORS_SIS5595 is not set
-+# CONFIG_SENSORS_DME1737 is not set
-+# CONFIG_SENSORS_SMSC47M1 is not set
-+# CONFIG_SENSORS_SMSC47M192 is not set
-+# CONFIG_SENSORS_SMSC47B397 is not set
-+# CONFIG_SENSORS_ADS7828 is not set
-+# CONFIG_SENSORS_THMC50 is not set
-+# CONFIG_SENSORS_VIA686A is not set
-+# CONFIG_SENSORS_VT1211 is not set
-+# CONFIG_SENSORS_VT8231 is not set
-+# CONFIG_SENSORS_W83781D is not set
-+# CONFIG_SENSORS_W83791D is not set
-+# CONFIG_SENSORS_W83792D is not set
-+# CONFIG_SENSORS_W83793 is not set
-+# CONFIG_SENSORS_W83L785TS is not set
-+# CONFIG_SENSORS_W83L786NG is not set
-+# CONFIG_SENSORS_W83627HF is not set
-+# CONFIG_SENSORS_W83627EHF is not set
-+# CONFIG_HWMON_DEBUG_CHIP is not set
-+# CONFIG_THERMAL is not set
-+CONFIG_WATCHDOG=y
-+# CONFIG_WATCHDOG_NOWAYOUT is not set
-+
-+#
-+# Watchdog Device Drivers
-+#
-+CONFIG_SOFT_WATCHDOG=m
-+
-+#
-+# PCI-based Watchdog Cards
-+#
-+# CONFIG_PCIPCWATCHDOG is not set
-+# CONFIG_WDTPCI is not set
-+
-+#
-+# Sonics Silicon Backplane
-+#
-+CONFIG_SSB_POSSIBLE=y
-+# CONFIG_SSB is not set
-+
-+#
-+# Multifunction device drivers
-+#
-+# CONFIG_MFD_SM501 is not set
-+
-+#
-+# Multimedia devices
-+#
-+# CONFIG_VIDEO_DEV is not set
-+# CONFIG_DVB_CORE is not set
-+CONFIG_DAB=y
-+
-+#
-+# Graphics support
-+#
-+# CONFIG_AGP is not set
-+# CONFIG_DRM is not set
-+# CONFIG_VGASTATE is not set
-+CONFIG_VIDEO_OUTPUT_CONTROL=m
-+# CONFIG_FB is not set
-+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
-+
-+#
-+# Display device support
-+#
-+# CONFIG_DISPLAY_SUPPORT is not set
-+
-+#
-+# Console display driver support
-+#
-+CONFIG_VGA_CONSOLE=y
-+# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-+CONFIG_DUMMY_CONSOLE=y
-+
-+#
-+# Sound
-+#
-+# CONFIG_SOUND is not set
-+CONFIG_HID_SUPPORT=y
-+CONFIG_HID=y
-+# CONFIG_HID_DEBUG is not set
-+# CONFIG_HIDRAW is not set
-+CONFIG_USB_SUPPORT=y
-+CONFIG_USB_ARCH_HAS_HCD=y
-+CONFIG_USB_ARCH_HAS_OHCI=y
-+CONFIG_USB_ARCH_HAS_EHCI=y
-+# CONFIG_USB is not set
-+
-+#
-+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-+#
-+# CONFIG_USB_GADGET is not set
-+# CONFIG_MMC is not set
-+# CONFIG_MEMSTICK is not set
-+# CONFIG_NEW_LEDS is not set
-+# CONFIG_INFINIBAND is not set
-+# CONFIG_EDAC is not set
-+# CONFIG_RTC_CLASS is not set
-+# CONFIG_DMADEVICES is not set
-+
-+#
-+# Userspace I/O
-+#
-+# CONFIG_UIO is not set
-+
-+#
-+# File systems
-+#
-+CONFIG_EXT2_FS=y
-+CONFIG_EXT2_FS_XATTR=y
-+CONFIG_EXT2_FS_POSIX_ACL=y
-+# CONFIG_EXT2_FS_SECURITY is not set
-+# CONFIG_EXT2_FS_XIP is not set
-+CONFIG_EXT3_FS=y
-+CONFIG_EXT3_FS_XATTR=y
-+CONFIG_EXT3_FS_POSIX_ACL=y
-+# CONFIG_EXT3_FS_SECURITY is not set
-+# CONFIG_EXT4DEV_FS is not set
-+CONFIG_JBD=y
-+# CONFIG_JBD_DEBUG is not set
-+CONFIG_FS_MBCACHE=y
-+CONFIG_REISERFS_FS=m
-+# CONFIG_REISERFS_CHECK is not set
-+# CONFIG_REISERFS_PROC_INFO is not set
-+CONFIG_REISERFS_FS_XATTR=y
-+CONFIG_REISERFS_FS_POSIX_ACL=y
-+# CONFIG_REISERFS_FS_SECURITY is not set
-+# CONFIG_JFS_FS is not set
-+CONFIG_FS_POSIX_ACL=y
-+# CONFIG_XFS_FS is not set
-+# CONFIG_GFS2_FS is not set
-+CONFIG_OCFS2_FS=m
-+CONFIG_OCFS2_DEBUG_MASKLOG=y
-+# CONFIG_OCFS2_DEBUG_FS is not set
-+CONFIG_DNOTIFY=y
-+CONFIG_INOTIFY=y
-+CONFIG_INOTIFY_USER=y
-+# CONFIG_QUOTA is not set
-+CONFIG_AUTOFS_FS=m
-+CONFIG_AUTOFS4_FS=m
-+# CONFIG_FUSE_FS is not set
-+
-+#
-+# CD-ROM/DVD Filesystems
-+#
-+# CONFIG_ISO9660_FS is not set
-+# CONFIG_UDF_FS is not set
-+
-+#
-+# DOS/FAT/NT Filesystems
-+#
-+# CONFIG_MSDOS_FS is not set
-+# CONFIG_VFAT_FS is not set
-+# CONFIG_NTFS_FS is not set
-+
-+#
-+# Pseudo filesystems
-+#
-+CONFIG_PROC_FS=y
-+CONFIG_PROC_KCORE=y
-+CONFIG_PROC_SYSCTL=y
-+CONFIG_SYSFS=y
-+CONFIG_TMPFS=y
-+# CONFIG_TMPFS_POSIX_ACL is not set
-+# CONFIG_HUGETLB_PAGE is not set
-+CONFIG_CONFIGFS_FS=m
-+
-+#
-+# Miscellaneous filesystems
-+#
-+# CONFIG_ADFS_FS is not set
-+# CONFIG_AFFS_FS is not set
-+# CONFIG_HFS_FS is not set
-+# CONFIG_HFSPLUS_FS is not set
-+# CONFIG_BEFS_FS is not set
-+# CONFIG_BFS_FS is not set
-+# CONFIG_EFS_FS is not set
-+# CONFIG_JFFS2_FS is not set
-+# CONFIG_CRAMFS is not set
-+# CONFIG_VXFS_FS is not set
-+CONFIG_MINIX_FS=m
-+# CONFIG_HPFS_FS is not set
-+# CONFIG_QNX4FS_FS is not set
-+CONFIG_ROMFS_FS=m
-+# CONFIG_SYSV_FS is not set
-+# CONFIG_UFS_FS is not set
-+CONFIG_NETWORK_FILESYSTEMS=y
-+CONFIG_NFS_FS=y
-+CONFIG_NFS_V3=y
-+# CONFIG_NFS_V3_ACL is not set
-+CONFIG_NFS_V4=y
-+CONFIG_NFS_DIRECTIO=y
-+# CONFIG_NFSD is not set
-+CONFIG_ROOT_NFS=y
-+CONFIG_LOCKD=y
-+CONFIG_LOCKD_V4=y
-+CONFIG_NFS_COMMON=y
-+CONFIG_SUNRPC=y
-+CONFIG_SUNRPC_GSS=y
-+# CONFIG_SUNRPC_BIND34 is not set
-+CONFIG_RPCSEC_GSS_KRB5=y
-+# CONFIG_RPCSEC_GSS_SPKM3 is not set
-+CONFIG_SMB_FS=m
-+CONFIG_SMB_NLS_DEFAULT=y
-+CONFIG_SMB_NLS_REMOTE="cp437"
-+CONFIG_CIFS=m
-+# CONFIG_CIFS_STATS is not set
-+# CONFIG_CIFS_WEAK_PW_HASH is not set
-+CONFIG_CIFS_XATTR=y
-+CONFIG_CIFS_POSIX=y
-+# CONFIG_CIFS_DEBUG2 is not set
-+# CONFIG_CIFS_EXPERIMENTAL is not set
-+# CONFIG_NCP_FS is not set
-+# CONFIG_CODA_FS is not set
-+# CONFIG_AFS_FS is not set
-+
-+#
-+# Partition Types
-+#
-+# CONFIG_PARTITION_ADVANCED is not set
-+CONFIG_MSDOS_PARTITION=y
-+CONFIG_NLS=m
-+CONFIG_NLS_DEFAULT="iso8859-1"
-+CONFIG_NLS_CODEPAGE_437=m
-+CONFIG_NLS_CODEPAGE_737=m
-+CONFIG_NLS_CODEPAGE_775=m
-+CONFIG_NLS_CODEPAGE_850=m
-+CONFIG_NLS_CODEPAGE_852=m
-+CONFIG_NLS_CODEPAGE_855=m
-+CONFIG_NLS_CODEPAGE_857=m
-+CONFIG_NLS_CODEPAGE_860=m
-+CONFIG_NLS_CODEPAGE_861=m
-+CONFIG_NLS_CODEPAGE_862=m
-+CONFIG_NLS_CODEPAGE_863=m
-+CONFIG_NLS_CODEPAGE_864=m
-+CONFIG_NLS_CODEPAGE_865=m
-+CONFIG_NLS_CODEPAGE_866=m
-+CONFIG_NLS_CODEPAGE_869=m
-+CONFIG_NLS_CODEPAGE_936=m
-+CONFIG_NLS_CODEPAGE_950=m
-+CONFIG_NLS_CODEPAGE_932=m
-+CONFIG_NLS_CODEPAGE_949=m
-+CONFIG_NLS_CODEPAGE_874=m
-+CONFIG_NLS_ISO8859_8=m
-+CONFIG_NLS_CODEPAGE_1250=m
-+CONFIG_NLS_CODEPAGE_1251=m
-+CONFIG_NLS_ASCII=m
-+CONFIG_NLS_ISO8859_1=m
-+CONFIG_NLS_ISO8859_2=m
-+CONFIG_NLS_ISO8859_3=m
-+CONFIG_NLS_ISO8859_4=m
-+CONFIG_NLS_ISO8859_5=m
-+CONFIG_NLS_ISO8859_6=m
-+CONFIG_NLS_ISO8859_7=m
-+CONFIG_NLS_ISO8859_9=m
-+CONFIG_NLS_ISO8859_13=m
-+CONFIG_NLS_ISO8859_14=m
-+CONFIG_NLS_ISO8859_15=m
-+CONFIG_NLS_KOI8_R=m
-+CONFIG_NLS_KOI8_U=m
-+CONFIG_NLS_UTF8=m
-+# CONFIG_DLM is not set
-+
-+#
-+# Library routines
-+#
-+CONFIG_BITREVERSE=y
-+CONFIG_CRC_CCITT=m
-+# CONFIG_CRC16 is not set
-+# CONFIG_CRC_ITU_T is not set
-+CONFIG_CRC32=y
-+# CONFIG_CRC7 is not set
-+CONFIG_LIBCRC32C=m
-+CONFIG_ZLIB_INFLATE=m
-+CONFIG_ZLIB_DEFLATE=m
-+CONFIG_PLIST=y
-+CONFIG_HAS_IOMEM=y
-+CONFIG_HAS_IOPORT=y
-+CONFIG_HAS_DMA=y
-+CONFIG_HAVE_LMB=y
-+
-+#
-+# Kernel hacking
-+#
-+# CONFIG_PRINTK_TIME is not set
-+CONFIG_ENABLE_WARN_DEPRECATED=y
-+CONFIG_ENABLE_MUST_CHECK=y
-+CONFIG_MAGIC_SYSRQ=y
-+# CONFIG_UNUSED_SYMBOLS is not set
-+CONFIG_DEBUG_FS=y
-+# CONFIG_HEADERS_CHECK is not set
-+CONFIG_DEBUG_KERNEL=y
-+# CONFIG_DEBUG_SHIRQ is not set
-+CONFIG_DETECT_SOFTLOCKUP=y
-+CONFIG_SCHED_DEBUG=y
-+# CONFIG_SCHEDSTATS is not set
-+# CONFIG_TIMER_STATS is not set
-+# CONFIG_DEBUG_SLAB is not set
-+# 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_SPINLOCK_SLEEP is not set
-+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-+# CONFIG_DEBUG_KOBJECT is not set
-+# CONFIG_DEBUG_BUGVERBOSE is not set
-+CONFIG_DEBUG_INFO=y
-+# CONFIG_DEBUG_VM is not set
-+# CONFIG_DEBUG_LIST is not set
-+# CONFIG_DEBUG_SG is not set
-+# CONFIG_BOOT_PRINTK_DELAY is not set
-+# CONFIG_RCU_TORTURE_TEST is not set
-+# CONFIG_BACKTRACE_SELF_TEST is not set
-+# CONFIG_FAULT_INJECTION is not set
-+# CONFIG_SAMPLES is not set
-+# CONFIG_DEBUG_STACKOVERFLOW is not set
-+# CONFIG_DEBUG_STACK_USAGE is not set
-+# CONFIG_DEBUG_PAGEALLOC is not set
-+CONFIG_DEBUGGER=y
-+# CONFIG_XMON is not set
-+# CONFIG_VIRQ_DEBUG is not set
-+# CONFIG_BDI_SWITCH is not set
-+# CONFIG_PPC_EARLY_DEBUG is not set
-+
-+#
-+# Security options
-+#
-+# CONFIG_KEYS is not set
-+CONFIG_SECURITY=y
-+CONFIG_SECURITY_NETWORK=y
-+# CONFIG_SECURITY_NETWORK_XFRM is not set
-+CONFIG_SECURITY_CAPABILITIES=y
-+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-+CONFIG_SECURITY_DEFAULT_MMAP_MIN_ADDR=0
-+CONFIG_CRYPTO=y
-+CONFIG_CRYPTO_ALGAPI=y
-+CONFIG_CRYPTO_AEAD=m
-+CONFIG_CRYPTO_BLKCIPHER=y
-+# CONFIG_CRYPTO_SEQIV is not set
-+CONFIG_CRYPTO_HASH=y
-+CONFIG_CRYPTO_MANAGER=y
-+CONFIG_CRYPTO_HMAC=y
-+# CONFIG_CRYPTO_XCBC is not set
-+CONFIG_CRYPTO_NULL=m
-+CONFIG_CRYPTO_MD4=m
-+CONFIG_CRYPTO_MD5=y
-+CONFIG_CRYPTO_SHA1=m
-+CONFIG_CRYPTO_SHA256=m
-+CONFIG_CRYPTO_SHA512=m
-+CONFIG_CRYPTO_WP512=m
-+# CONFIG_CRYPTO_TGR192 is not set
-+# CONFIG_CRYPTO_GF128MUL is not set
-+CONFIG_CRYPTO_ECB=m
-+CONFIG_CRYPTO_CBC=y
-+CONFIG_CRYPTO_PCBC=m
-+# CONFIG_CRYPTO_LRW is not set
-+# CONFIG_CRYPTO_XTS is not set
-+# CONFIG_CRYPTO_CTR is not set
-+# CONFIG_CRYPTO_GCM is not set
-+# CONFIG_CRYPTO_CCM is not set
-+# CONFIG_CRYPTO_CRYPTD is not set
-+CONFIG_CRYPTO_DES=y
-+# CONFIG_CRYPTO_FCRYPT is not set
-+CONFIG_CRYPTO_BLOWFISH=m
-+CONFIG_CRYPTO_TWOFISH=m
-+CONFIG_CRYPTO_TWOFISH_COMMON=m
-+CONFIG_CRYPTO_SERPENT=m
-+CONFIG_CRYPTO_AES=m
-+CONFIG_CRYPTO_CAST5=m
-+CONFIG_CRYPTO_CAST6=m
-+CONFIG_CRYPTO_TEA=m
-+CONFIG_CRYPTO_ARC4=m
-+CONFIG_CRYPTO_KHAZAD=m
-+CONFIG_CRYPTO_ANUBIS=m
-+# CONFIG_CRYPTO_SEED is not set
-+# CONFIG_CRYPTO_SALSA20 is not set
-+CONFIG_CRYPTO_DEFLATE=m
-+CONFIG_CRYPTO_MICHAEL_MIC=m
-+CONFIG_CRYPTO_CRC32C=m
-+# CONFIG_CRYPTO_CAMELLIA is not set
-+CONFIG_CRYPTO_TEST=m
-+CONFIG_CRYPTO_AUTHENC=m
-+# CONFIG_CRYPTO_LZO is not set
-+CONFIG_CRYPTO_HW=y
-+# CONFIG_CRYPTO_DEV_HIFN_795X is not set
-+# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/sequoia_defconfig
-+++ /dev/null
-@@ -1,916 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:53:46 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--# CONFIG_FAIR_GROUP_SCHED is not set
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_BAMBOO is not set
--# CONFIG_EBONY is not set
--CONFIG_SEQUOIA=y
--# CONFIG_TAISHAN is not set
--# CONFIG_KATMAI is not set
--# CONFIG_RAINIER is not set
--# CONFIG_WARP is not set
--CONFIG_440EPX=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--CONFIG_TICK_ONESHOT=y
--CONFIG_NO_HZ=y
--CONFIG_HIGH_RES_TIMERS=y
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--CONFIG_CMDLINE_BOOL=y
--CONFIG_CMDLINE=""
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--# CONFIG_MTD_BLKDEVS is not set
--# CONFIG_MTD_BLOCK is not set
--# 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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT=y
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--CONFIG_IBM_NEW_EMAC_RGMII=y
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--CONFIG_IBM_NEW_EMAC_EMAC4=y
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--CONFIG_DEBUGGER=y
--# CONFIG_KGDB is not set
--# CONFIG_XMON is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--CONFIG_PPC_EARLY_DEBUG=y
--# CONFIG_PPC_EARLY_DEBUG_LPAR is not set
--# CONFIG_PPC_EARLY_DEBUG_G5 is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_PANEL is not set
--# CONFIG_PPC_EARLY_DEBUG_RTAS_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG_MAPLE is not set
--# CONFIG_PPC_EARLY_DEBUG_ISERIES is not set
--# CONFIG_PPC_EARLY_DEBUG_PAS_REALMODE is not set
--# CONFIG_PPC_EARLY_DEBUG_BEAT is not set
--CONFIG_PPC_EARLY_DEBUG_44x=y
--# CONFIG_PPC_EARLY_DEBUG_40x is not set
--# CONFIG_PPC_EARLY_DEBUG_CPM is not set
--CONFIG_PPC_EARLY_DEBUG_44x_PHYSLOW=0xef600300
--CONFIG_PPC_EARLY_DEBUG_44x_PHYSHIGH=0x1
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/stx_gp3_defconfig
-+++ /dev/null
-@@ -1,1253 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:42 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--# CONFIG_MODULE_UNLOAD is not set
--CONFIG_MODVERSIONS=y
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--# CONFIG_DEFAULT_AS is not set
--# CONFIG_DEFAULT_DEADLINE is not set
--CONFIG_DEFAULT_CFQ=y
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="cfq"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--CONFIG_STX_GP3=y
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_CPM2=y
--CONFIG_PPC_CPM_NEW_BINDING=y
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_CPM=y
--
--#
--# Kernel options
--#
--CONFIG_HIGHMEM=y
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--CONFIG_BINFMT_MISC=m
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--# CONFIG_IP_PNP_DHCP is not set
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IP_VS is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_NETFILTER_ADVANCED=y
--
--#
--# Core Netfilter Configuration
--#
--# CONFIG_NETFILTER_NETLINK_QUEUE is not set
--# CONFIG_NETFILTER_NETLINK_LOG is not set
--# CONFIG_NF_CONNTRACK is not set
--CONFIG_NETFILTER_XTABLES=m
--# CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set
--# CONFIG_NETFILTER_XT_TARGET_MARK is not set
--# CONFIG_NETFILTER_XT_TARGET_NFQUEUE is not set
--# CONFIG_NETFILTER_XT_TARGET_NFLOG is not set
--# CONFIG_NETFILTER_XT_TARGET_RATEEST is not set
--# CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set
--# CONFIG_NETFILTER_XT_MATCH_COMMENT is not set
--# CONFIG_NETFILTER_XT_MATCH_DCCP is not set
--# CONFIG_NETFILTER_XT_MATCH_DSCP is not set
--# CONFIG_NETFILTER_XT_MATCH_ESP is not set
--# CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set
--# CONFIG_NETFILTER_XT_MATCH_LENGTH is not set
--# CONFIG_NETFILTER_XT_MATCH_LIMIT is not set
--# CONFIG_NETFILTER_XT_MATCH_MAC is not set
--# CONFIG_NETFILTER_XT_MATCH_MARK is not set
--# CONFIG_NETFILTER_XT_MATCH_OWNER is not set
--# CONFIG_NETFILTER_XT_MATCH_POLICY is not set
--# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
--# CONFIG_NETFILTER_XT_MATCH_PKTTYPE is not set
--# CONFIG_NETFILTER_XT_MATCH_QUOTA is not set
--# CONFIG_NETFILTER_XT_MATCH_RATEEST is not set
--# CONFIG_NETFILTER_XT_MATCH_REALM is not set
--# CONFIG_NETFILTER_XT_MATCH_SCTP is not set
--# CONFIG_NETFILTER_XT_MATCH_STATISTIC is not set
--# CONFIG_NETFILTER_XT_MATCH_STRING is not set
--# CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set
--# CONFIG_NETFILTER_XT_MATCH_TIME is not set
--# CONFIG_NETFILTER_XT_MATCH_U32 is not set
--# CONFIG_NETFILTER_XT_MATCH_HASHLIMIT is not set
--
--#
--# IP: Netfilter Configuration
--#
--# CONFIG_IP_NF_QUEUE is not set
--CONFIG_IP_NF_IPTABLES=m
--# CONFIG_IP_NF_MATCH_RECENT is not set
--# CONFIG_IP_NF_MATCH_ECN is not set
--# CONFIG_IP_NF_MATCH_AH is not set
--# CONFIG_IP_NF_MATCH_TTL is not set
--# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
--CONFIG_IP_NF_FILTER=m
--# CONFIG_IP_NF_TARGET_REJECT is not set
--# CONFIG_IP_NF_TARGET_LOG is not set
--# CONFIG_IP_NF_TARGET_ULOG is not set
--# CONFIG_IP_NF_MANGLE is not set
--# CONFIG_IP_NF_RAW is not set
--# CONFIG_IP_NF_ARPTABLES is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--CONFIG_NET_PKTGEN=y
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_FW_LOADER is not set
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--CONFIG_PARPORT=m
--CONFIG_PARPORT_PC=m
--# CONFIG_PARPORT_PC_FIFO is not set
--# CONFIG_PARPORT_PC_SUPERIO is not set
--# CONFIG_PARPORT_GSC is not set
--# CONFIG_PARPORT_AX88796 is not set
--# CONFIG_PARPORT_1284 is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_PARIDE is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=m
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--CONFIG_BLK_DEV_NBD=m
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=y
--# CONFIG_IDEDISK_MULTI_MODE is not set
--CONFIG_BLK_DEV_IDECD=m
--CONFIG_BLK_DEV_IDECD_VERBOSE_ERRORS=y
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--# CONFIG_BLK_DEV_IDESCSI is not set
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--# CONFIG_BLK_DEV_PLATFORM is not set
--
--#
--# PCI IDE chipsets support
--#
--# CONFIG_BLK_DEV_GENERIC is not set
--# CONFIG_BLK_DEV_OPTI621 is not set
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--# CONFIG_BLK_DEV_AMD74XX is not set
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_JMICRON is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT8213 is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--# CONFIG_BLK_DEV_SIIMAGE is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--# CONFIG_BLK_DEV_VIA82CXXX is not set
--# CONFIG_BLK_DEV_TC86C001 is not set
--# CONFIG_BLK_DEV_IDEDMA is not set
--CONFIG_IDE_ARCH_OBSOLETE_INIT=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=m
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=m
--CONFIG_CHR_DEV_ST=m
--# CONFIG_CHR_DEV_OSST is not set
--CONFIG_BLK_DEV_SR=m
--# CONFIG_BLK_DEV_SR_VENDOR is not set
--CONFIG_CHR_DEV_SG=m
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--CONFIG_SCSI_MULTI_LUN=y
--CONFIG_SCSI_CONSTANTS=y
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--# CONFIG_SCSI_SPI_ATTRS is not set
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_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 is not set
--# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
--# CONFIG_SCSI_3W_9XXX is not set
--# CONFIG_SCSI_ACARD is not set
--# CONFIG_SCSI_AACRAID is not set
--# CONFIG_SCSI_AIC7XXX is not set
--# CONFIG_SCSI_AIC7XXX_OLD is not set
--# CONFIG_SCSI_AIC79XX is not set
--# CONFIG_SCSI_AIC94XX is not set
--# CONFIG_SCSI_DPT_I2O is not set
--# CONFIG_SCSI_ADVANSYS is not set
--# CONFIG_SCSI_ARCMSR is not set
--# CONFIG_MEGARAID_NEWGEN is not set
--# CONFIG_MEGARAID_LEGACY is not set
--# CONFIG_MEGARAID_SAS is not set
--# CONFIG_SCSI_HPTIOP is not set
--# CONFIG_SCSI_BUSLOGIC is not set
--# CONFIG_SCSI_DMX3191D is not set
--# CONFIG_SCSI_EATA is not set
--# CONFIG_SCSI_FUTURE_DOMAIN is not set
--# CONFIG_SCSI_GDTH is not set
--# CONFIG_SCSI_IPS is not set
--# CONFIG_SCSI_INITIO is not set
--# CONFIG_SCSI_INIA100 is not set
--# CONFIG_SCSI_PPA is not set
--# CONFIG_SCSI_IMM is not set
--# CONFIG_SCSI_MVSAS is not set
--# CONFIG_SCSI_STEX is not set
--# CONFIG_SCSI_SYM53C8XX_2 is not set
--# CONFIG_SCSI_QLOGIC_1280 is not set
--# CONFIG_SCSI_QLA_FC is not set
--# CONFIG_SCSI_QLA_ISCSI is not set
--# CONFIG_SCSI_LPFC is not set
--# CONFIG_SCSI_DC395x is not set
--# CONFIG_SCSI_DC390T is not set
--# CONFIG_SCSI_NSP32 is not set
--# CONFIG_SCSI_DEBUG is not set
--# CONFIG_SCSI_SRP is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--CONFIG_MARVELL_PHY=y
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--# CONFIG_NET_POCKET is not set
--# CONFIG_FS_ENET is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PLIP is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NET_FC is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--CONFIG_INPUT_MOUSEDEV=y
--CONFIG_INPUT_MOUSEDEV_PSAUX=y
--CONFIG_INPUT_MOUSEDEV_SCREEN_X=1280
--CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1024
--CONFIG_INPUT_JOYDEV=m
--CONFIG_INPUT_EVDEV=m
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--CONFIG_INPUT_KEYBOARD=y
--CONFIG_KEYBOARD_ATKBD=y
--# CONFIG_KEYBOARD_SUNKBD is not set
--# CONFIG_KEYBOARD_LKKBD is not set
--# CONFIG_KEYBOARD_XTKBD is not set
--# CONFIG_KEYBOARD_NEWTON is not set
--# CONFIG_KEYBOARD_STOWAWAY is not set
--CONFIG_INPUT_MOUSE=y
--CONFIG_MOUSE_PS2=y
--CONFIG_MOUSE_PS2_ALPS=y
--CONFIG_MOUSE_PS2_LOGIPS2PP=y
--CONFIG_MOUSE_PS2_SYNAPTICS=y
--CONFIG_MOUSE_PS2_LIFEBOOK=y
--CONFIG_MOUSE_PS2_TRACKPOINT=y
--# CONFIG_MOUSE_PS2_TOUCHKIT is not set
--# CONFIG_MOUSE_SERIAL is not set
--# CONFIG_MOUSE_APPLETOUCH is not set
--# CONFIG_MOUSE_VSXXXAA is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--CONFIG_SERIO=y
--CONFIG_SERIO_I8042=y
--CONFIG_SERIO_SERPORT=y
--# CONFIG_SERIO_PARKBD is not set
--# CONFIG_SERIO_PCIPS2 is not set
--CONFIG_SERIO_LIBPS2=y
--# CONFIG_SERIO_RAW is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--# CONFIG_SERIAL_8250 is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_CPM=y
--CONFIG_SERIAL_CPM_CONSOLE=y
--# CONFIG_SERIAL_CPM_SCC1 is not set
--CONFIG_SERIAL_CPM_SCC2=y
--# CONFIG_SERIAL_CPM_SCC3 is not set
--# CONFIG_SERIAL_CPM_SCC4 is not set
--# CONFIG_SERIAL_CPM_SMC1 is not set
--# CONFIG_SERIAL_CPM_SMC2 is not set
--# CONFIG_SERIAL_JSM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--CONFIG_PRINTER=m
--# CONFIG_LP_CONSOLE is not set
--# CONFIG_PPDEV is not set
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=m
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=m
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=m
--
--#
--# I2C Algorithms
--#
--CONFIG_I2C_ALGOBIT=m
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--# CONFIG_I2C_MPC is not set
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--CONFIG_AGP=m
--CONFIG_DRM=m
--# CONFIG_DRM_TDFX is not set
--# CONFIG_DRM_R128 is not set
--# CONFIG_DRM_RADEON is not set
--# CONFIG_DRM_MGA is not set
--# CONFIG_DRM_SIS is not set
--# CONFIG_DRM_VIA is not set
--# CONFIG_DRM_SAVAGE is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--CONFIG_SOUND=m
--
--#
--# Advanced Linux Sound Architecture
--#
--# CONFIG_SND is not set
--
--#
--# Open Sound System
--#
--# CONFIG_SOUND_PRIME is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--# CONFIG_AUXDISPLAY is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--CONFIG_AUTOFS_FS=m
--CONFIG_AUTOFS4_FS=y
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--CONFIG_ISO9660_FS=m
--# CONFIG_JOLIET is not set
--# CONFIG_ZISOFS is not set
--CONFIG_UDF_FS=m
--CONFIG_UDF_NLS=y
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=m
--CONFIG_MSDOS_FS=m
--CONFIG_VFAT_FS=m
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--# CONFIG_PROC_KCORE is not set
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_CRAMFS=m
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--CONFIG_SMB_FS=m
--# CONFIG_SMB_NLS_DEFAULT is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--# CONFIG_NLS_CODEPAGE_437 is not set
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--# CONFIG_NLS_CODEPAGE_850 is not set
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--# CONFIG_NLS_CODEPAGE_932 is not set
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--# CONFIG_NLS_ISO8859_8 is not set
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--# CONFIG_NLS_ASCII is not set
--# CONFIG_NLS_ISO8859_1 is not set
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--# CONFIG_NLS_ISO8859_15 is not set
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--# CONFIG_NLS_UTF8 is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--CONFIG_CRC_CCITT=y
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=m
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_HIGHMEM is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_KGDB_CONSOLE is not set
--CONFIG_BDI_SWITCH=y
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/taishan_defconfig
-+++ /dev/null
-@@ -1,815 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:40:44 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_BAMBOO is not set
--# CONFIG_EBONY is not set
--# CONFIG_SEQUOIA is not set
--CONFIG_TAISHAN=y
--# CONFIG_KATMAI is not set
--# CONFIG_RAINIER is not set
--# CONFIG_WARP is not set
--CONFIG_440GX=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--CONFIG_CMDLINE_BOOL=y
--CONFIG_CMDLINE=""
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--# CONFIG_MTD is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--CONFIG_MACINTOSH_DRIVERS=y
--# CONFIG_MAC_EMUMOUSEBTN is not set
--# CONFIG_WINDFARM is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--CONFIG_IBM_NEW_EMAC_RGMII=y
--CONFIG_IBM_NEW_EMAC_TAH=y
--CONFIG_IBM_NEW_EMAC_EMAC4=y
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--# CONFIG_SERIAL_8250_PCI is not set
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_DEBUG_INFO is not set
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--CONFIG_DEBUGGER=y
--# CONFIG_KGDB is not set
--# CONFIG_XMON is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/tqm8540_defconfig
-+++ /dev/null
-@@ -1,1097 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:43 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--# CONFIG_HOTPLUG is not set
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--CONFIG_TQM8540=y
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--CONFIG_TQM85xx=y
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_CPM2 is not set
--CONFIG_PPC_CPM_NEW_BINDING=y
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--# CONFIG_PROC_DEVICETREE is not set
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=y
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--# CONFIG_MTD_OF_PARTS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--# CONFIG_MTD_PHYSMAP_OF is not set
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=y
--# CONFIG_IDEDISK_MULTI_MODE is not set
--# CONFIG_BLK_DEV_IDECD is not set
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--# CONFIG_BLK_DEV_PLATFORM is not set
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_IDEPCI_PCIBUS_ORDER=y
--# CONFIG_BLK_DEV_OFFBOARD is not set
--CONFIG_BLK_DEV_GENERIC=y
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--# CONFIG_BLK_DEV_AMD74XX is not set
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_JMICRON is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT8213 is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--# CONFIG_BLK_DEV_SIIMAGE is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=y
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--CONFIG_IDE_ARCH_OBSOLETE_INIT=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--CONFIG_SENSORS_LM75=y
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--CONFIG_HWMON_DEBUG_CHIP=y
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/tqm8541_defconfig
-+++ /dev/null
-@@ -1,1109 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:44 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--# CONFIG_HOTPLUG is not set
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--CONFIG_TQM8541=y
--# CONFIG_TQM8555 is not set
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--CONFIG_TQM85xx=y
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_CPM2=y
--CONFIG_PPC_CPM_NEW_BINDING=y
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_CPM=y
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--# CONFIG_PROC_DEVICETREE is not set
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=y
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--# CONFIG_MTD_OF_PARTS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--# CONFIG_MTD_PHYSMAP_OF is not set
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=y
--# CONFIG_IDEDISK_MULTI_MODE is not set
--# CONFIG_BLK_DEV_IDECD is not set
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--# CONFIG_BLK_DEV_PLATFORM is not set
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_IDEPCI_PCIBUS_ORDER=y
--# CONFIG_BLK_DEV_OFFBOARD is not set
--CONFIG_BLK_DEV_GENERIC=y
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--# CONFIG_BLK_DEV_AMD74XX is not set
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_JMICRON is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT8213 is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--# CONFIG_BLK_DEV_SIIMAGE is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=y
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--CONFIG_IDE_ARCH_OBSOLETE_INIT=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--# CONFIG_FS_ENET is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_CPM=y
--CONFIG_SERIAL_CPM_CONSOLE=y
--CONFIG_SERIAL_CPM_SCC1=y
--# CONFIG_SERIAL_CPM_SCC2 is not set
--# CONFIG_SERIAL_CPM_SCC3 is not set
--# CONFIG_SERIAL_CPM_SCC4 is not set
--# CONFIG_SERIAL_CPM_SMC1 is not set
--# CONFIG_SERIAL_CPM_SMC2 is not set
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--CONFIG_SENSORS_LM75=y
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--CONFIG_HWMON_DEBUG_CHIP=y
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_KGDB_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/tqm8555_defconfig
-+++ /dev/null
-@@ -1,1109 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:44 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--# CONFIG_HOTPLUG is not set
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--CONFIG_TQM8555=y
--# CONFIG_TQM8560 is not set
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--CONFIG_TQM85xx=y
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_CPM2=y
--CONFIG_PPC_CPM_NEW_BINDING=y
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_CPM=y
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--# CONFIG_PROC_DEVICETREE is not set
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=y
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--# CONFIG_MTD_OF_PARTS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--# CONFIG_MTD_PHYSMAP_OF is not set
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=y
--# CONFIG_IDEDISK_MULTI_MODE is not set
--# CONFIG_BLK_DEV_IDECD is not set
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--# CONFIG_BLK_DEV_PLATFORM is not set
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_IDEPCI_PCIBUS_ORDER=y
--# CONFIG_BLK_DEV_OFFBOARD is not set
--CONFIG_BLK_DEV_GENERIC=y
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--# CONFIG_BLK_DEV_AMD74XX is not set
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_JMICRON is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT8213 is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--# CONFIG_BLK_DEV_SIIMAGE is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=y
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--CONFIG_IDE_ARCH_OBSOLETE_INIT=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--# CONFIG_FS_ENET is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_CPM=y
--CONFIG_SERIAL_CPM_CONSOLE=y
--CONFIG_SERIAL_CPM_SCC1=y
--# CONFIG_SERIAL_CPM_SCC2 is not set
--# CONFIG_SERIAL_CPM_SCC3 is not set
--# CONFIG_SERIAL_CPM_SCC4 is not set
--# CONFIG_SERIAL_CPM_SMC1 is not set
--# CONFIG_SERIAL_CPM_SMC2 is not set
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--CONFIG_SENSORS_LM75=y
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--CONFIG_HWMON_DEBUG_CHIP=y
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_KGDB_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/tqm8560_defconfig
-+++ /dev/null
-@@ -1,1109 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc6
--# Mon Mar 24 08:48:45 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--CONFIG_PPC_85xx=y
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_E500=y
--CONFIG_BOOKE=y
--CONFIG_FSL_BOOKE=y
--CONFIG_FSL_EMB_PERFMON=y
--# CONFIG_PHYS_64BIT is not set
--CONFIG_SPE=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--CONFIG_DEFAULT_UIMAGE=y
--# CONFIG_PPC_DCR_NATIVE is not set
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--CONFIG_SYSFS_DEPRECATED_V2=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--# CONFIG_KALLSYMS is not set
--# CONFIG_HOTPLUG is not set
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--# CONFIG_EPOLL is not set
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--CONFIG_HAVE_KPROBES=y
--CONFIG_HAVE_KRETPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--# CONFIG_MODULES is not set
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--CONFIG_MPC85xx=y
--# CONFIG_MPC8540_ADS is not set
--# CONFIG_MPC8560_ADS is not set
--# CONFIG_MPC85xx_CDS is not set
--# CONFIG_MPC85xx_MDS is not set
--# CONFIG_MPC85xx_DS is not set
--# CONFIG_STX_GP3 is not set
--# CONFIG_TQM8540 is not set
--# CONFIG_TQM8541 is not set
--# CONFIG_TQM8555 is not set
--CONFIG_TQM8560=y
--# CONFIG_SBC8548 is not set
--# CONFIG_SBC8560 is not set
--CONFIG_TQM85xx=y
--# CONFIG_IPIC is not set
--CONFIG_MPIC=y
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--CONFIG_CPM2=y
--CONFIG_PPC_CPM_NEW_BINDING=y
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_CPM=y
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--CONFIG_MATH_EMULATION=y
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--# CONFIG_RESOURCES_64BIT is not set
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--# CONFIG_PROC_DEVICETREE is not set
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_FSL_SOC=y
--CONFIG_FSL_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--CONFIG_PCI_LEGACY=y
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_BOOT_LOAD=0x00800000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--CONFIG_IP_MULTICAST=y
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_IP_MROUTE is not set
--# CONFIG_ARPD is not set
--CONFIG_SYN_COOKIES=y
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--CONFIG_MTD_CONCAT=y
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--# CONFIG_MTD_OF_PARTS is not set
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--# CONFIG_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--# CONFIG_MTD_PHYSMAP_OF is not set
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--CONFIG_BLK_DEV_LOOP=y
--# CONFIG_BLK_DEV_CRYPTOLOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=32768
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--CONFIG_IDE=y
--CONFIG_IDE_MAX_HWIFS=4
--CONFIG_BLK_DEV_IDE=y
--
--#
--# Please see Documentation/ide/ide.txt for help/info on IDE drives
--#
--# CONFIG_BLK_DEV_IDE_SATA is not set
--CONFIG_BLK_DEV_IDEDISK=y
--# CONFIG_IDEDISK_MULTI_MODE is not set
--# CONFIG_BLK_DEV_IDECD is not set
--# CONFIG_BLK_DEV_IDETAPE is not set
--# CONFIG_BLK_DEV_IDEFLOPPY is not set
--# CONFIG_IDE_TASK_IOCTL is not set
--CONFIG_IDE_PROC_FS=y
--
--#
--# IDE chipset support/bugfixes
--#
--CONFIG_IDE_GENERIC=y
--# CONFIG_BLK_DEV_PLATFORM is not set
--CONFIG_BLK_DEV_IDEDMA_SFF=y
--
--#
--# PCI IDE chipsets support
--#
--CONFIG_BLK_DEV_IDEPCI=y
--CONFIG_IDEPCI_PCIBUS_ORDER=y
--# CONFIG_BLK_DEV_OFFBOARD is not set
--CONFIG_BLK_DEV_GENERIC=y
--# CONFIG_BLK_DEV_OPTI621 is not set
--CONFIG_BLK_DEV_IDEDMA_PCI=y
--# CONFIG_BLK_DEV_AEC62XX is not set
--# CONFIG_BLK_DEV_ALI15X3 is not set
--# CONFIG_BLK_DEV_AMD74XX is not set
--# CONFIG_BLK_DEV_CMD64X is not set
--# CONFIG_BLK_DEV_TRIFLEX is not set
--# CONFIG_BLK_DEV_CY82C693 is not set
--# CONFIG_BLK_DEV_CS5520 is not set
--# CONFIG_BLK_DEV_CS5530 is not set
--# CONFIG_BLK_DEV_HPT34X is not set
--# CONFIG_BLK_DEV_HPT366 is not set
--# CONFIG_BLK_DEV_JMICRON is not set
--# CONFIG_BLK_DEV_SC1200 is not set
--# CONFIG_BLK_DEV_PIIX is not set
--# CONFIG_BLK_DEV_IT8213 is not set
--# CONFIG_BLK_DEV_IT821X is not set
--# CONFIG_BLK_DEV_NS87415 is not set
--# CONFIG_BLK_DEV_PDC202XX_OLD is not set
--# CONFIG_BLK_DEV_PDC202XX_NEW is not set
--# CONFIG_BLK_DEV_SVWKS is not set
--# CONFIG_BLK_DEV_SIIMAGE is not set
--# CONFIG_BLK_DEV_SL82C105 is not set
--# CONFIG_BLK_DEV_SLC90E66 is not set
--# CONFIG_BLK_DEV_TRM290 is not set
--CONFIG_BLK_DEV_VIA82CXXX=y
--# CONFIG_BLK_DEV_TC86C001 is not set
--CONFIG_BLK_DEV_IDEDMA=y
--CONFIG_IDE_ARCH_OBSOLETE_INIT=y
--# CONFIG_BLK_DEV_HD is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--CONFIG_PHYLIB=y
--
--#
--# MII PHY device drivers
--#
--# 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_ICPLUS_PHY is not set
--# CONFIG_REALTEK_PHY is not set
--# CONFIG_FIXED_PHY is not set
--# CONFIG_MDIO_BITBANG is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--# CONFIG_IBM_NEW_EMAC_ZMII is not set
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--CONFIG_NET_PCI=y
--# CONFIG_PCNET32 is not set
--# CONFIG_AMD8111_ETH is not set
--# CONFIG_ADAPTEC_STARFIRE is not set
--# CONFIG_B44 is not set
--# CONFIG_FORCEDETH is not set
--# CONFIG_EEPRO100 is not set
--CONFIG_E100=y
--# CONFIG_FEALNX is not set
--# CONFIG_NATSEMI is not set
--# CONFIG_NE2K_PCI is not set
--# CONFIG_8139CP is not set
--# CONFIG_8139TOO is not set
--# CONFIG_R6040 is not set
--# CONFIG_SIS900 is not set
--# CONFIG_EPIC100 is not set
--# CONFIG_SUNDANCE is not set
--# CONFIG_TLAN is not set
--# CONFIG_VIA_RHINE is not set
--# CONFIG_SC92031 is not set
--# CONFIG_FS_ENET is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--CONFIG_GIANFAR=y
--CONFIG_GFAR_NAPI=y
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--CONFIG_INPUT=y
--# CONFIG_INPUT_FF_MEMLESS is not set
--# CONFIG_INPUT_POLLDEV is not set
--
--#
--# Userland interfaces
--#
--# CONFIG_INPUT_MOUSEDEV is not set
--# CONFIG_INPUT_JOYDEV is not set
--# CONFIG_INPUT_EVDEV is not set
--# CONFIG_INPUT_EVBUG is not set
--
--#
--# Input Device Drivers
--#
--# CONFIG_INPUT_KEYBOARD is not set
--# CONFIG_INPUT_MOUSE is not set
--# CONFIG_INPUT_JOYSTICK is not set
--# CONFIG_INPUT_TABLET is not set
--# CONFIG_INPUT_TOUCHSCREEN is not set
--# CONFIG_INPUT_MISC is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--# CONFIG_SERIAL_8250_EXTENDED is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--CONFIG_SERIAL_CPM=y
--CONFIG_SERIAL_CPM_CONSOLE=y
--CONFIG_SERIAL_CPM_SCC1=y
--# CONFIG_SERIAL_CPM_SCC2 is not set
--# CONFIG_SERIAL_CPM_SCC3 is not set
--# CONFIG_SERIAL_CPM_SCC4 is not set
--# CONFIG_SERIAL_CPM_SMC1 is not set
--# CONFIG_SERIAL_CPM_SMC2 is not set
--# CONFIG_SERIAL_JSM is not set
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--CONFIG_GEN_RTC=y
--# CONFIG_GEN_RTC_X is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--CONFIG_I2C_CHARDEV=y
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_ALI1535 is not set
--# CONFIG_I2C_ALI1563 is not set
--# CONFIG_I2C_ALI15X3 is not set
--# CONFIG_I2C_AMD756 is not set
--# CONFIG_I2C_AMD8111 is not set
--# CONFIG_I2C_I801 is not set
--# CONFIG_I2C_I810 is not set
--# CONFIG_I2C_PIIX4 is not set
--CONFIG_I2C_MPC=y
--# CONFIG_I2C_NFORCE2 is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_PROSAVAGE is not set
--# CONFIG_I2C_SAVAGE4 is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_SIS5595 is not set
--# CONFIG_I2C_SIS630 is not set
--# CONFIG_I2C_SIS96X is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_VIA is not set
--# CONFIG_I2C_VIAPRO is not set
--# CONFIG_I2C_VOODOO3 is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--# CONFIG_SENSORS_EEPROM is not set
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ADT7473 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_I5K_AMB is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--CONFIG_SENSORS_LM75=y
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_SIS5595 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VIA686A is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_VT8231 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--CONFIG_HWMON_DEBUG_CHIP=y
--# CONFIG_THERMAL is not set
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--CONFIG_DAB=y
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_HID_SUPPORT=y
--CONFIG_HID=y
--# CONFIG_HID_DEBUG is not set
--# CONFIG_HIDRAW is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--# CONFIG_DMADEVICES is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--CONFIG_EXT3_FS=y
--CONFIG_EXT3_FS_XATTR=y
--# CONFIG_EXT3_FS_POSIX_ACL is not set
--# CONFIG_EXT3_FS_SECURITY is not set
--# CONFIG_EXT4DEV_FS is not set
--CONFIG_JBD=y
--CONFIG_FS_MBCACHE=y
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--# CONFIG_NFS_V3 is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--CONFIG_PARTITION_ADVANCED=y
--# CONFIG_ACORN_PARTITION is not set
--# CONFIG_OSF_PARTITION is not set
--# CONFIG_AMIGA_PARTITION is not set
--# CONFIG_ATARI_PARTITION is not set
--# CONFIG_MAC_PARTITION is not set
--# CONFIG_MSDOS_PARTITION is not set
--# CONFIG_LDM_PARTITION is not set
--# CONFIG_SGI_PARTITION is not set
--# CONFIG_ULTRIX_PARTITION is not set
--# CONFIG_SUN_PARTITION is not set
--# CONFIG_KARMA_PARTITION is not set
--# CONFIG_EFI_PARTITION is not set
--# CONFIG_SYSV68_PARTITION is not set
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--# CONFIG_MAGIC_SYSRQ is not set
--# CONFIG_UNUSED_SYMBOLS is not set
--# CONFIG_DEBUG_FS is not set
--# CONFIG_HEADERS_CHECK is not set
--# CONFIG_DEBUG_KERNEL is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_KGDB_CONSOLE is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
--CONFIG_PPC_LIB_RHEAP=y
---- a/arch/powerpc/configs/walnut_defconfig
-+++ /dev/null
-@@ -1,887 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:54:12 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--CONFIG_40x=y
--# CONFIG_44x is not set
--# CONFIG_E200 is not set
--CONFIG_4xx=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION=""
--CONFIG_LOCALVERSION_AUTO=y
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--CONFIG_POSIX_MQUEUE=y
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--CONFIG_KALLSYMS_ALL=y
--CONFIG_KALLSYMS_EXTRA_PASS=y
--CONFIG_HOTPLUG=y
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLUB_DEBUG=y
--# CONFIG_SLAB is not set
--CONFIG_SLUB=y
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--CONFIG_LBD=y
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--# CONFIG_PPC4xx_PCI_EXPRESS is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_EP405 is not set
--# CONFIG_KILAUEA is not set
--# CONFIG_MAKALU is not set
--CONFIG_WALNUT=y
--# CONFIG_XILINX_VIRTEX_GENERIC_BOARD is not set
--CONFIG_405GP=y
--CONFIG_IBM405_ERR77=y
--CONFIG_IBM405_ERR51=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--CONFIG_OF_RTC=y
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--CONFIG_HZ_250=y
--# CONFIG_HZ_300 is not set
--# CONFIG_HZ_1000 is not set
--CONFIG_HZ=250
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--# CONFIG_CMDLINE_BOOL is not set
--# CONFIG_PM is not set
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--CONFIG_PPC_INDIRECT_PCI=y
--CONFIG_PCI=y
--CONFIG_PCI_DOMAINS=y
--CONFIG_PCI_SYSCALL=y
--# CONFIG_PCIEPORTBUS is not set
--CONFIG_ARCH_SUPPORTS_MSI=y
--# CONFIG_PCI_MSI is not set
--# CONFIG_PCI_LEGACY is not set
--# CONFIG_PCI_DEBUG is not set
--# CONFIG_PCCARD is not set
--# CONFIG_HOTPLUG_PCI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x00400000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--CONFIG_IP_PNP_BOOTP=y
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
--# CONFIG_INET_XFRM_MODE_TUNNEL is not set
--# CONFIG_INET_XFRM_MODE_BEET is not set
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--# CONFIG_NETFILTER is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--# CONFIG_VLAN_8021Q is not set
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
--CONFIG_STANDALONE=y
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--CONFIG_FW_LOADER=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--CONFIG_CONNECTOR=y
--CONFIG_PROC_EVENTS=y
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--CONFIG_MTD_CMDLINE_PARTS=y
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--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_MTD_OOPS is not set
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--CONFIG_MTD_JEDECPROBE=y
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_INTEL_VR_NOR is not set
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_PMC551 is not set
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--# CONFIG_MTD_NAND is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_CPQ_DA is not set
--# CONFIG_BLK_CPQ_CISS_DA is not set
--# CONFIG_BLK_DEV_DAC960 is not set
--# CONFIG_BLK_DEV_UMEM is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_SX8 is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=35000
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_PHANTOM is not set
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_SGI_IOC4 is not set
--# CONFIG_TIFM_CORE is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--# CONFIG_SCSI is not set
--# CONFIG_SCSI_DMA is not set
--# CONFIG_SCSI_NETLINK is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_FUSION is not set
--
--#
--# IEEE 1394 (FireWire) support
--#
--# CONFIG_FIREWIRE is not set
--# CONFIG_IEEE1394 is not set
--# CONFIG_I2O is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_ARCNET is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--# CONFIG_MII is not set
--# CONFIG_HAPPYMEAL is not set
--# CONFIG_SUNGEM is not set
--# CONFIG_CASSINI is not set
--# CONFIG_NET_VENDOR_3COM is not set
--# CONFIG_NET_TULIP is not set
--# CONFIG_HP100 is not set
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_NET_PCI is not set
--# CONFIG_B44 is not set
--CONFIG_NETDEV_1000=y
--# CONFIG_ACENIC is not set
--# CONFIG_DL2K is not set
--# CONFIG_E1000 is not set
--# CONFIG_E1000E is not set
--# CONFIG_E1000E_ENABLED is not set
--# CONFIG_IP1000 is not set
--# CONFIG_IGB is not set
--# CONFIG_NS83820 is not set
--# CONFIG_HAMACHI is not set
--# CONFIG_YELLOWFIN is not set
--# CONFIG_R8169 is not set
--# CONFIG_SIS190 is not set
--# CONFIG_SKGE is not set
--# CONFIG_SKY2 is not set
--# CONFIG_SK98LIN is not set
--# CONFIG_VIA_VELOCITY is not set
--# CONFIG_TIGON3 is not set
--# CONFIG_BNX2 is not set
--# CONFIG_QLA3XXX is not set
--# CONFIG_ATL1 is not set
--CONFIG_NETDEV_10000=y
--# CONFIG_CHELSIO_T1 is not set
--# CONFIG_CHELSIO_T3 is not set
--# CONFIG_IXGBE is not set
--# CONFIG_IXGB is not set
--# CONFIG_S2IO is not set
--# CONFIG_MYRI10GE is not set
--# CONFIG_NETXEN_NIC is not set
--# CONFIG_NIU is not set
--# CONFIG_MLX4_CORE is not set
--# CONFIG_TEHUTI is not set
--# CONFIG_BNX2X is not set
--# CONFIG_TR is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--# CONFIG_WAN is not set
--# CONFIG_FDDI is not set
--# CONFIG_HIPPI is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--# CONFIG_NOZOMI is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_PCI=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_JSM is not set
--CONFIG_SERIAL_OF_PLATFORM=y
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--# CONFIG_HW_RANDOM is not set
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_APPLICOM is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_DEVPORT=y
--# CONFIG_I2C is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--# CONFIG_HWMON is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_AGP is not set
--# CONFIG_DRM is not set
--# CONFIG_VGASTATE is not set
--CONFIG_VIDEO_OUTPUT_CONTROL=m
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--CONFIG_USB_ARCH_HAS_EHCI=y
--# CONFIG_USB is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--# CONFIG_USB_GADGET is not set
--# CONFIG_MMC is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_INFINIBAND is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--# CONFIG_MSDOS_FS is not set
--# CONFIG_VFAT_FS is not set
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--CONFIG_TMPFS=y
--# CONFIG_TMPFS_POSIX_ACL is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--# CONFIG_JFFS2_FS is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--# CONFIG_NLS is not set
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--# CONFIG_CRC_CCITT is not set
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--CONFIG_SCHED_DEBUG=y
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_SLUB_DEBUG_ON is not set
--# CONFIG_SLUB_STATS is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS 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_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_VIRQ_DEBUG is not set
--# CONFIG_BDI_SWITCH is not set
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--CONFIG_CRYPTO_ALGAPI=y
--CONFIG_CRYPTO_BLKCIPHER=y
--# CONFIG_CRYPTO_SEQIV is not set
--CONFIG_CRYPTO_MANAGER=y
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--CONFIG_CRYPTO_MD5=y
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--CONFIG_CRYPTO_ECB=y
--CONFIG_CRYPTO_CBC=y
--CONFIG_CRYPTO_PCBC=y
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--CONFIG_CRYPTO_DES=y
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_CRYPTO_DEV_HIFN_795X is not set
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/configs/warp_defconfig
-+++ /dev/null
-@@ -1,1110 +0,0 @@
--#
--# Automatically generated make config: don't edit
--# Linux kernel version: 2.6.25-rc2
--# Fri Feb 15 21:54:43 2008
--#
--# CONFIG_PPC64 is not set
--
--#
--# Processor support
--#
--# CONFIG_6xx is not set
--# CONFIG_PPC_85xx is not set
--# CONFIG_PPC_8xx is not set
--# CONFIG_40x is not set
--CONFIG_44x=y
--# CONFIG_E200 is not set
--CONFIG_PPC_FPU=y
--CONFIG_4xx=y
--CONFIG_BOOKE=y
--CONFIG_PTE_64BIT=y
--CONFIG_PHYS_64BIT=y
--# CONFIG_PPC_MM_SLICES is not set
--CONFIG_NOT_COHERENT_CACHE=y
--CONFIG_PPC32=y
--CONFIG_WORD_SIZE=32
--CONFIG_PPC_MERGE=y
--CONFIG_MMU=y
--CONFIG_GENERIC_CMOS_UPDATE=y
--CONFIG_GENERIC_TIME=y
--CONFIG_GENERIC_TIME_VSYSCALL=y
--CONFIG_GENERIC_CLOCKEVENTS=y
--CONFIG_GENERIC_HARDIRQS=y
--# CONFIG_HAVE_SETUP_PER_CPU_AREA is not set
--CONFIG_IRQ_PER_CPU=y
--CONFIG_RWSEM_XCHGADD_ALGORITHM=y
--CONFIG_ARCH_HAS_ILOG2_U32=y
--CONFIG_GENERIC_HWEIGHT=y
--CONFIG_GENERIC_CALIBRATE_DELAY=y
--CONFIG_GENERIC_FIND_NEXT_BIT=y
--# CONFIG_ARCH_NO_VIRT_TO_BUS is not set
--CONFIG_PPC=y
--CONFIG_EARLY_PRINTK=y
--CONFIG_GENERIC_NVRAM=y
--CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
--CONFIG_ARCH_MAY_HAVE_PC_FDC=y
--CONFIG_PPC_OF=y
--CONFIG_OF=y
--CONFIG_PPC_UDBG_16550=y
--# CONFIG_GENERIC_TBSYNC is not set
--CONFIG_AUDIT_ARCH=y
--CONFIG_GENERIC_BUG=y
--# CONFIG_DEFAULT_UIMAGE is not set
--CONFIG_PPC_DCR_NATIVE=y
--# CONFIG_PPC_DCR_MMIO is not set
--CONFIG_PPC_DCR=y
--CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
--
--#
--# General setup
--#
--CONFIG_EXPERIMENTAL=y
--CONFIG_BROKEN_ON_SMP=y
--CONFIG_INIT_ENV_ARG_LIMIT=32
--CONFIG_LOCALVERSION="-pika"
--# CONFIG_LOCALVERSION_AUTO is not set
--CONFIG_SWAP=y
--CONFIG_SYSVIPC=y
--CONFIG_SYSVIPC_SYSCTL=y
--# CONFIG_POSIX_MQUEUE is not set
--# CONFIG_BSD_PROCESS_ACCT is not set
--# CONFIG_TASKSTATS is not set
--# CONFIG_AUDIT is not set
--# CONFIG_IKCONFIG is not set
--CONFIG_LOG_BUF_SHIFT=14
--# CONFIG_CGROUPS is not set
--CONFIG_GROUP_SCHED=y
--CONFIG_FAIR_GROUP_SCHED=y
--# CONFIG_RT_GROUP_SCHED is not set
--CONFIG_USER_SCHED=y
--# CONFIG_CGROUP_SCHED is not set
--CONFIG_SYSFS_DEPRECATED=y
--# CONFIG_RELAY is not set
--# CONFIG_NAMESPACES is not set
--CONFIG_BLK_DEV_INITRD=y
--CONFIG_INITRAMFS_SOURCE=""
--# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
--CONFIG_SYSCTL=y
--CONFIG_EMBEDDED=y
--CONFIG_SYSCTL_SYSCALL=y
--CONFIG_KALLSYMS=y
--# CONFIG_KALLSYMS_ALL is not set
--# CONFIG_KALLSYMS_EXTRA_PASS is not set
--# CONFIG_HOTPLUG is not set
--CONFIG_PRINTK=y
--CONFIG_BUG=y
--CONFIG_ELF_CORE=y
--CONFIG_COMPAT_BRK=y
--CONFIG_BASE_FULL=y
--CONFIG_FUTEX=y
--CONFIG_ANON_INODES=y
--CONFIG_EPOLL=y
--CONFIG_SIGNALFD=y
--CONFIG_TIMERFD=y
--CONFIG_EVENTFD=y
--CONFIG_SHMEM=y
--CONFIG_VM_EVENT_COUNTERS=y
--CONFIG_SLAB=y
--# CONFIG_SLUB is not set
--# CONFIG_SLOB is not set
--# CONFIG_PROFILING is not set
--# CONFIG_MARKERS is not set
--CONFIG_HAVE_OPROFILE=y
--# CONFIG_KPROBES is not set
--CONFIG_HAVE_KPROBES=y
--CONFIG_PROC_PAGE_MONITOR=y
--CONFIG_SLABINFO=y
--CONFIG_RT_MUTEXES=y
--# CONFIG_TINY_SHMEM is not set
--CONFIG_BASE_SMALL=0
--CONFIG_MODULES=y
--CONFIG_MODULE_UNLOAD=y
--# CONFIG_MODULE_FORCE_UNLOAD is not set
--# CONFIG_MODVERSIONS is not set
--# CONFIG_MODULE_SRCVERSION_ALL is not set
--CONFIG_KMOD=y
--CONFIG_BLOCK=y
--# CONFIG_LBD is not set
--# CONFIG_BLK_DEV_IO_TRACE is not set
--# CONFIG_LSF is not set
--# CONFIG_BLK_DEV_BSG is not set
--
--#
--# IO Schedulers
--#
--CONFIG_IOSCHED_NOOP=y
--CONFIG_IOSCHED_AS=y
--CONFIG_IOSCHED_DEADLINE=y
--CONFIG_IOSCHED_CFQ=y
--CONFIG_DEFAULT_AS=y
--# CONFIG_DEFAULT_DEADLINE is not set
--# CONFIG_DEFAULT_CFQ is not set
--# CONFIG_DEFAULT_NOOP is not set
--CONFIG_DEFAULT_IOSCHED="anticipatory"
--CONFIG_CLASSIC_RCU=y
--# CONFIG_PREEMPT_RCU is not set
--
--#
--# Platform support
--#
--# CONFIG_PPC_MPC512x is not set
--# CONFIG_PPC_MPC5121 is not set
--# CONFIG_PPC_CELL is not set
--# CONFIG_PPC_CELL_NATIVE is not set
--# CONFIG_PQ2ADS is not set
--# CONFIG_BAMBOO is not set
--# CONFIG_EBONY is not set
--# CONFIG_SEQUOIA is not set
--# CONFIG_TAISHAN is not set
--# CONFIG_KATMAI is not set
--# CONFIG_RAINIER is not set
--CONFIG_WARP=y
--CONFIG_440EP=y
--CONFIG_IBM440EP_ERR42=y
--# CONFIG_IPIC is not set
--# CONFIG_MPIC is not set
--# CONFIG_MPIC_WEIRD is not set
--# CONFIG_PPC_I8259 is not set
--# CONFIG_PPC_RTAS is not set
--# CONFIG_MMIO_NVRAM is not set
--# CONFIG_PPC_MPC106 is not set
--# CONFIG_PPC_970_NAP is not set
--# CONFIG_PPC_INDIRECT_IO is not set
--# CONFIG_GENERIC_IOMAP is not set
--# CONFIG_CPU_FREQ is not set
--# CONFIG_FSL_ULI1575 is not set
--
--#
--# Kernel options
--#
--# CONFIG_HIGHMEM is not set
--# CONFIG_TICK_ONESHOT is not set
--# CONFIG_NO_HZ is not set
--# CONFIG_HIGH_RES_TIMERS is not set
--CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
--# CONFIG_HZ_100 is not set
--# CONFIG_HZ_250 is not set
--# CONFIG_HZ_300 is not set
--CONFIG_HZ_1000=y
--CONFIG_HZ=1000
--# CONFIG_SCHED_HRTICK is not set
--CONFIG_PREEMPT_NONE=y
--# CONFIG_PREEMPT_VOLUNTARY is not set
--# CONFIG_PREEMPT is not set
--CONFIG_RCU_TRACE=y
--CONFIG_BINFMT_ELF=y
--# CONFIG_BINFMT_MISC is not set
--# CONFIG_MATH_EMULATION is not set
--# CONFIG_IOMMU_HELPER is not set
--CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
--CONFIG_ARCH_HAS_WALK_MEMORY=y
--CONFIG_ARCH_ENABLE_MEMORY_HOTREMOVE=y
--CONFIG_ARCH_FLATMEM_ENABLE=y
--CONFIG_ARCH_POPULATES_NODE_MAP=y
--CONFIG_SELECT_MEMORY_MODEL=y
--CONFIG_FLATMEM_MANUAL=y
--# CONFIG_DISCONTIGMEM_MANUAL is not set
--# CONFIG_SPARSEMEM_MANUAL is not set
--CONFIG_FLATMEM=y
--CONFIG_FLAT_NODE_MEM_MAP=y
--# CONFIG_SPARSEMEM_STATIC is not set
--# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
--CONFIG_SPLIT_PTLOCK_CPUS=4
--CONFIG_RESOURCES_64BIT=y
--CONFIG_ZONE_DMA_FLAG=1
--CONFIG_BOUNCE=y
--CONFIG_VIRT_TO_BUS=y
--CONFIG_PROC_DEVICETREE=y
--CONFIG_CMDLINE_BOOL=y
--CONFIG_CMDLINE="ip=on"
--CONFIG_SECCOMP=y
--CONFIG_ISA_DMA_API=y
--
--#
--# Bus options
--#
--CONFIG_ZONE_DMA=y
--# CONFIG_PCI is not set
--# CONFIG_PCI_DOMAINS is not set
--# CONFIG_PCI_SYSCALL is not set
--# CONFIG_ARCH_SUPPORTS_MSI is not set
--
--#
--# Advanced setup
--#
--# CONFIG_ADVANCED_OPTIONS is not set
--
--#
--# Default settings for advanced configuration options are used
--#
--CONFIG_HIGHMEM_START=0xfe000000
--CONFIG_LOWMEM_SIZE=0x30000000
--CONFIG_KERNEL_START=0xc0000000
--CONFIG_TASK_SIZE=0xc0000000
--CONFIG_CONSISTENT_START=0xff100000
--CONFIG_CONSISTENT_SIZE=0x00200000
--CONFIG_BOOT_LOAD=0x01000000
--
--#
--# Networking
--#
--CONFIG_NET=y
--
--#
--# Networking options
--#
--CONFIG_PACKET=y
--# CONFIG_PACKET_MMAP is not set
--CONFIG_UNIX=y
--CONFIG_XFRM=y
--# CONFIG_XFRM_USER is not set
--# CONFIG_XFRM_SUB_POLICY is not set
--# CONFIG_XFRM_MIGRATE is not set
--# CONFIG_XFRM_STATISTICS is not set
--# CONFIG_NET_KEY is not set
--CONFIG_INET=y
--# CONFIG_IP_MULTICAST is not set
--# CONFIG_IP_ADVANCED_ROUTER is not set
--CONFIG_IP_FIB_HASH=y
--CONFIG_IP_PNP=y
--CONFIG_IP_PNP_DHCP=y
--# CONFIG_IP_PNP_BOOTP is not set
--# CONFIG_IP_PNP_RARP is not set
--# CONFIG_NET_IPIP is not set
--# CONFIG_NET_IPGRE is not set
--# CONFIG_ARPD is not set
--# CONFIG_SYN_COOKIES is not set
--# CONFIG_INET_AH is not set
--# CONFIG_INET_ESP is not set
--# CONFIG_INET_IPCOMP is not set
--# CONFIG_INET_XFRM_TUNNEL is not set
--# CONFIG_INET_TUNNEL is not set
--CONFIG_INET_XFRM_MODE_TRANSPORT=y
--CONFIG_INET_XFRM_MODE_TUNNEL=y
--CONFIG_INET_XFRM_MODE_BEET=y
--# CONFIG_INET_LRO is not set
--CONFIG_INET_DIAG=y
--CONFIG_INET_TCP_DIAG=y
--# CONFIG_TCP_CONG_ADVANCED is not set
--CONFIG_TCP_CONG_CUBIC=y
--CONFIG_DEFAULT_TCP_CONG="cubic"
--# CONFIG_TCP_MD5SIG is not set
--# CONFIG_IP_VS is not set
--# CONFIG_IPV6 is not set
--# CONFIG_INET6_XFRM_TUNNEL is not set
--# CONFIG_INET6_TUNNEL is not set
--# CONFIG_NETWORK_SECMARK is not set
--CONFIG_NETFILTER=y
--# CONFIG_NETFILTER_DEBUG is not set
--CONFIG_NETFILTER_ADVANCED=y
--
--#
--# Core Netfilter Configuration
--#
--# CONFIG_NETFILTER_NETLINK_QUEUE is not set
--# CONFIG_NETFILTER_NETLINK_LOG is not set
--# CONFIG_NF_CONNTRACK is not set
--# CONFIG_NETFILTER_XTABLES is not set
--
--#
--# IP: Netfilter Configuration
--#
--# CONFIG_IP_NF_QUEUE is not set
--# CONFIG_IP_NF_IPTABLES is not set
--# CONFIG_IP_NF_ARPTABLES is not set
--# CONFIG_IP_DCCP is not set
--# CONFIG_IP_SCTP is not set
--# CONFIG_TIPC is not set
--# CONFIG_ATM is not set
--# CONFIG_BRIDGE is not set
--CONFIG_VLAN_8021Q=y
--# CONFIG_DECNET is not set
--# CONFIG_LLC2 is not set
--# CONFIG_IPX is not set
--# CONFIG_ATALK is not set
--# CONFIG_X25 is not set
--# CONFIG_LAPB is not set
--# CONFIG_ECONET is not set
--# CONFIG_WAN_ROUTER is not set
--# CONFIG_NET_SCHED is not set
--
--#
--# Network testing
--#
--# CONFIG_NET_PKTGEN is not set
--# CONFIG_HAMRADIO is not set
--# CONFIG_CAN is not set
--# CONFIG_IRDA is not set
--# CONFIG_BT is not set
--# CONFIG_AF_RXRPC is not set
--
--#
--# Wireless
--#
--# CONFIG_CFG80211 is not set
--# CONFIG_WIRELESS_EXT is not set
--# CONFIG_MAC80211 is not set
--# CONFIG_IEEE80211 is not set
--# CONFIG_RFKILL is not set
--# CONFIG_NET_9P is not set
--
--#
--# Device Drivers
--#
--
--#
--# Generic Driver Options
--#
--# CONFIG_STANDALONE is not set
--CONFIG_PREVENT_FIRMWARE_BUILD=y
--# CONFIG_DEBUG_DRIVER is not set
--# CONFIG_DEBUG_DEVRES is not set
--# CONFIG_SYS_HYPERVISOR is not set
--# CONFIG_CONNECTOR is not set
--CONFIG_MTD=y
--# CONFIG_MTD_DEBUG is not set
--# CONFIG_MTD_CONCAT is not set
--CONFIG_MTD_PARTITIONS=y
--# CONFIG_MTD_REDBOOT_PARTS is not set
--# CONFIG_MTD_CMDLINE_PARTS is not set
--CONFIG_MTD_OF_PARTS=y
--
--#
--# User Modules And Translation Layers
--#
--CONFIG_MTD_CHAR=y
--CONFIG_MTD_BLKDEVS=y
--CONFIG_MTD_BLOCK=y
--# CONFIG_FTL is not set
--# CONFIG_NFTL is not set
--# CONFIG_INFTL is not set
--# CONFIG_RFD_FTL is not set
--# CONFIG_SSFDC is not set
--CONFIG_MTD_OOPS=m
--
--#
--# RAM/ROM/Flash chip drivers
--#
--CONFIG_MTD_CFI=y
--# CONFIG_MTD_JEDECPROBE is not set
--CONFIG_MTD_GEN_PROBE=y
--# CONFIG_MTD_CFI_ADV_OPTIONS 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_CFI_INTELEXT is not set
--CONFIG_MTD_CFI_AMDSTD=y
--# CONFIG_MTD_CFI_STAA is not set
--CONFIG_MTD_CFI_UTIL=y
--# CONFIG_MTD_RAM is not set
--# CONFIG_MTD_ROM is not set
--# CONFIG_MTD_ABSENT is not set
--
--#
--# Mapping drivers for chip access
--#
--# CONFIG_MTD_COMPLEX_MAPPINGS is not set
--# CONFIG_MTD_PHYSMAP is not set
--CONFIG_MTD_PHYSMAP_OF=y
--# CONFIG_MTD_PLATRAM is not set
--
--#
--# Self-contained MTD device drivers
--#
--# CONFIG_MTD_SLRAM is not set
--# CONFIG_MTD_PHRAM is not set
--# CONFIG_MTD_MTDRAM is not set
--# CONFIG_MTD_BLOCK2MTD is not set
--
--#
--# Disk-On-Chip Device Drivers
--#
--# CONFIG_MTD_DOC2000 is not set
--# CONFIG_MTD_DOC2001 is not set
--# CONFIG_MTD_DOC2001PLUS is not set
--CONFIG_MTD_NAND=y
--# CONFIG_MTD_NAND_VERIFY_WRITE is not set
--CONFIG_MTD_NAND_ECC_SMC=y
--# CONFIG_MTD_NAND_MUSEUM_IDS is not set
--CONFIG_MTD_NAND_IDS=y
--# CONFIG_MTD_NAND_DISKONCHIP 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_FSL_ELBC is not set
--# CONFIG_MTD_ONENAND is not set
--
--#
--# UBI - Unsorted block images
--#
--# CONFIG_MTD_UBI is not set
--CONFIG_OF_DEVICE=y
--# CONFIG_PARPORT is not set
--CONFIG_BLK_DEV=y
--# CONFIG_BLK_DEV_FD is not set
--# CONFIG_BLK_DEV_COW_COMMON is not set
--# CONFIG_BLK_DEV_LOOP is not set
--# CONFIG_BLK_DEV_NBD is not set
--# CONFIG_BLK_DEV_UB is not set
--CONFIG_BLK_DEV_RAM=y
--CONFIG_BLK_DEV_RAM_COUNT=16
--CONFIG_BLK_DEV_RAM_SIZE=4096
--# CONFIG_BLK_DEV_XIP is not set
--# CONFIG_CDROM_PKTCDVD is not set
--# CONFIG_ATA_OVER_ETH is not set
--# CONFIG_XILINX_SYSACE is not set
--CONFIG_MISC_DEVICES=y
--# CONFIG_EEPROM_93CX6 is not set
--# CONFIG_ENCLOSURE_SERVICES is not set
--CONFIG_HAVE_IDE=y
--# CONFIG_IDE is not set
--
--#
--# SCSI device support
--#
--# CONFIG_RAID_ATTRS is not set
--CONFIG_SCSI=y
--CONFIG_SCSI_DMA=y
--# CONFIG_SCSI_TGT is not set
--# CONFIG_SCSI_NETLINK is not set
--CONFIG_SCSI_PROC_FS=y
--
--#
--# SCSI support type (disk, tape, CD-ROM)
--#
--CONFIG_BLK_DEV_SD=y
--# CONFIG_CHR_DEV_ST is not set
--# CONFIG_CHR_DEV_OSST is not set
--# CONFIG_BLK_DEV_SR is not set
--# CONFIG_CHR_DEV_SG is not set
--# CONFIG_CHR_DEV_SCH is not set
--
--#
--# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
--#
--# CONFIG_SCSI_MULTI_LUN is not set
--# CONFIG_SCSI_CONSTANTS is not set
--# CONFIG_SCSI_LOGGING is not set
--# CONFIG_SCSI_SCAN_ASYNC is not set
--CONFIG_SCSI_WAIT_SCAN=m
--
--#
--# SCSI Transports
--#
--CONFIG_SCSI_SPI_ATTRS=y
--# CONFIG_SCSI_FC_ATTRS is not set
--# CONFIG_SCSI_ISCSI_ATTRS is not set
--# CONFIG_SCSI_SAS_LIBSAS is not set
--# CONFIG_SCSI_SRP_ATTRS is not set
--# CONFIG_SCSI_LOWLEVEL is not set
--# CONFIG_ATA is not set
--# CONFIG_MD is not set
--# CONFIG_MACINTOSH_DRIVERS is not set
--CONFIG_NETDEVICES=y
--# CONFIG_NETDEVICES_MULTIQUEUE is not set
--# CONFIG_DUMMY is not set
--# CONFIG_BONDING is not set
--# CONFIG_MACVLAN is not set
--# CONFIG_EQUALIZER is not set
--# CONFIG_TUN is not set
--# CONFIG_VETH is not set
--# CONFIG_PHYLIB is not set
--CONFIG_NET_ETHERNET=y
--CONFIG_MII=y
--CONFIG_IBM_NEW_EMAC=y
--CONFIG_IBM_NEW_EMAC_RXB=128
--CONFIG_IBM_NEW_EMAC_TXB=64
--CONFIG_IBM_NEW_EMAC_POLL_WEIGHT=32
--CONFIG_IBM_NEW_EMAC_RX_COPY_THRESHOLD=256
--CONFIG_IBM_NEW_EMAC_RX_SKB_HEADROOM=0
--# CONFIG_IBM_NEW_EMAC_DEBUG is not set
--CONFIG_IBM_NEW_EMAC_ZMII=y
--# CONFIG_IBM_NEW_EMAC_RGMII is not set
--# CONFIG_IBM_NEW_EMAC_TAH is not set
--# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
--# CONFIG_B44 is not set
--# CONFIG_NETDEV_1000 is not set
--# CONFIG_NETDEV_10000 is not set
--
--#
--# Wireless LAN
--#
--# CONFIG_WLAN_PRE80211 is not set
--# CONFIG_WLAN_80211 is not set
--
--#
--# USB Network Adapters
--#
--# CONFIG_USB_CATC is not set
--# CONFIG_USB_KAWETH is not set
--# CONFIG_USB_PEGASUS is not set
--# CONFIG_USB_RTL8150 is not set
--# CONFIG_USB_USBNET is not set
--# CONFIG_WAN is not set
--# CONFIG_PPP is not set
--# CONFIG_SLIP is not set
--# CONFIG_NETCONSOLE is not set
--# CONFIG_NETPOLL is not set
--# CONFIG_NET_POLL_CONTROLLER is not set
--# CONFIG_ISDN is not set
--# CONFIG_PHONE is not set
--
--#
--# Input device support
--#
--# CONFIG_INPUT is not set
--
--#
--# Hardware I/O ports
--#
--# CONFIG_SERIO is not set
--# CONFIG_GAMEPORT is not set
--
--#
--# Character devices
--#
--# CONFIG_VT is not set
--# CONFIG_SERIAL_NONSTANDARD is not set
--
--#
--# Serial drivers
--#
--CONFIG_SERIAL_8250=y
--CONFIG_SERIAL_8250_CONSOLE=y
--CONFIG_SERIAL_8250_NR_UARTS=4
--CONFIG_SERIAL_8250_RUNTIME_UARTS=4
--CONFIG_SERIAL_8250_EXTENDED=y
--# CONFIG_SERIAL_8250_MANY_PORTS is not set
--CONFIG_SERIAL_8250_SHARE_IRQ=y
--# CONFIG_SERIAL_8250_DETECT_IRQ is not set
--# CONFIG_SERIAL_8250_RSA is not set
--
--#
--# Non-8250 serial port support
--#
--# CONFIG_SERIAL_UARTLITE is not set
--CONFIG_SERIAL_CORE=y
--CONFIG_SERIAL_CORE_CONSOLE=y
--# CONFIG_SERIAL_OF_PLATFORM is not set
--CONFIG_UNIX98_PTYS=y
--CONFIG_LEGACY_PTYS=y
--CONFIG_LEGACY_PTY_COUNT=256
--# CONFIG_IPMI_HANDLER is not set
--CONFIG_HW_RANDOM=y
--# CONFIG_NVRAM is not set
--# CONFIG_GEN_RTC is not set
--# CONFIG_R3964 is not set
--# CONFIG_RAW_DRIVER is not set
--# CONFIG_TCG_TPM is not set
--CONFIG_I2C=y
--CONFIG_I2C_BOARDINFO=y
--# CONFIG_I2C_CHARDEV is not set
--
--#
--# I2C Algorithms
--#
--# CONFIG_I2C_ALGOBIT is not set
--# CONFIG_I2C_ALGOPCF is not set
--# CONFIG_I2C_ALGOPCA is not set
--
--#
--# I2C Hardware Bus support
--#
--# CONFIG_I2C_MPC is not set
--# CONFIG_I2C_OCORES is not set
--# CONFIG_I2C_PARPORT_LIGHT is not set
--# CONFIG_I2C_SIMTEC is not set
--# CONFIG_I2C_TAOS_EVM is not set
--# CONFIG_I2C_STUB is not set
--# CONFIG_I2C_TINY_USB is not set
--
--#
--# Miscellaneous I2C Chip support
--#
--# CONFIG_DS1682 is not set
--CONFIG_SENSORS_EEPROM=y
--# CONFIG_SENSORS_PCF8574 is not set
--# CONFIG_PCF8575 is not set
--# CONFIG_SENSORS_PCF8591 is not set
--# CONFIG_TPS65010 is not set
--# CONFIG_SENSORS_MAX6875 is not set
--# CONFIG_SENSORS_TSL2550 is not set
--# CONFIG_I2C_DEBUG_CORE is not set
--# CONFIG_I2C_DEBUG_ALGO is not set
--# CONFIG_I2C_DEBUG_BUS is not set
--# CONFIG_I2C_DEBUG_CHIP is not set
--
--#
--# SPI support
--#
--# CONFIG_SPI is not set
--# CONFIG_SPI_MASTER is not set
--# CONFIG_W1 is not set
--# CONFIG_POWER_SUPPLY is not set
--CONFIG_HWMON=y
--# CONFIG_HWMON_VID is not set
--# CONFIG_SENSORS_AD7418 is not set
--# CONFIG_SENSORS_ADM1021 is not set
--# CONFIG_SENSORS_ADM1025 is not set
--# CONFIG_SENSORS_ADM1026 is not set
--# CONFIG_SENSORS_ADM1029 is not set
--# CONFIG_SENSORS_ADM1031 is not set
--# CONFIG_SENSORS_ADM9240 is not set
--# CONFIG_SENSORS_ADT7470 is not set
--# CONFIG_SENSORS_ATXP1 is not set
--# CONFIG_SENSORS_DS1621 is not set
--# CONFIG_SENSORS_F71805F is not set
--# CONFIG_SENSORS_F71882FG is not set
--# CONFIG_SENSORS_F75375S is not set
--# CONFIG_SENSORS_GL518SM is not set
--# CONFIG_SENSORS_GL520SM is not set
--# CONFIG_SENSORS_IT87 is not set
--# CONFIG_SENSORS_LM63 is not set
--# CONFIG_SENSORS_LM75 is not set
--# CONFIG_SENSORS_LM77 is not set
--# CONFIG_SENSORS_LM78 is not set
--# CONFIG_SENSORS_LM80 is not set
--# CONFIG_SENSORS_LM83 is not set
--# CONFIG_SENSORS_LM85 is not set
--# CONFIG_SENSORS_LM87 is not set
--# CONFIG_SENSORS_LM90 is not set
--# CONFIG_SENSORS_LM92 is not set
--# CONFIG_SENSORS_LM93 is not set
--# CONFIG_SENSORS_MAX1619 is not set
--# CONFIG_SENSORS_MAX6650 is not set
--# CONFIG_SENSORS_PC87360 is not set
--# CONFIG_SENSORS_PC87427 is not set
--# CONFIG_SENSORS_DME1737 is not set
--# CONFIG_SENSORS_SMSC47M1 is not set
--# CONFIG_SENSORS_SMSC47M192 is not set
--# CONFIG_SENSORS_SMSC47B397 is not set
--# CONFIG_SENSORS_ADS7828 is not set
--# CONFIG_SENSORS_THMC50 is not set
--# CONFIG_SENSORS_VT1211 is not set
--# CONFIG_SENSORS_W83781D is not set
--# CONFIG_SENSORS_W83791D is not set
--# CONFIG_SENSORS_W83792D is not set
--# CONFIG_SENSORS_W83793 is not set
--# CONFIG_SENSORS_W83L785TS is not set
--# CONFIG_SENSORS_W83L786NG is not set
--# CONFIG_SENSORS_W83627HF is not set
--# CONFIG_SENSORS_W83627EHF is not set
--# CONFIG_HWMON_DEBUG_CHIP is not set
--CONFIG_THERMAL=y
--# CONFIG_WATCHDOG is not set
--
--#
--# Sonics Silicon Backplane
--#
--CONFIG_SSB_POSSIBLE=y
--# CONFIG_SSB is not set
--
--#
--# Multifunction device drivers
--#
--# CONFIG_MFD_SM501 is not set
--
--#
--# Multimedia devices
--#
--# CONFIG_VIDEO_DEV is not set
--# CONFIG_DVB_CORE is not set
--# CONFIG_DAB is not set
--
--#
--# Graphics support
--#
--# CONFIG_VGASTATE is not set
--# CONFIG_VIDEO_OUTPUT_CONTROL is not set
--# CONFIG_FB is not set
--# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
--
--#
--# Display device support
--#
--# CONFIG_DISPLAY_SUPPORT is not set
--
--#
--# Sound
--#
--# CONFIG_SOUND is not set
--CONFIG_USB_SUPPORT=y
--CONFIG_USB_ARCH_HAS_HCD=y
--CONFIG_USB_ARCH_HAS_OHCI=y
--# CONFIG_USB_ARCH_HAS_EHCI is not set
--CONFIG_USB=y
--# CONFIG_USB_DEBUG is not set
--# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set
--
--#
--# Miscellaneous USB options
--#
--# CONFIG_USB_DEVICEFS is not set
--CONFIG_USB_DEVICE_CLASS=y
--# CONFIG_USB_DYNAMIC_MINORS is not set
--# CONFIG_USB_OTG is not set
--
--#
--# USB Host Controller Drivers
--#
--# CONFIG_USB_ISP116X_HCD is not set
--CONFIG_USB_OHCI_HCD=y
--CONFIG_USB_OHCI_HCD_PPC_OF=y
--CONFIG_USB_OHCI_HCD_PPC_OF_BE=y
--# CONFIG_USB_OHCI_HCD_PPC_OF_LE is not set
--CONFIG_USB_OHCI_BIG_ENDIAN_DESC=y
--CONFIG_USB_OHCI_BIG_ENDIAN_MMIO=y
--CONFIG_USB_OHCI_LITTLE_ENDIAN=y
--# CONFIG_USB_SL811_HCD is not set
--# CONFIG_USB_R8A66597_HCD is not set
--
--#
--# USB Device Class drivers
--#
--# CONFIG_USB_ACM is not set
--# CONFIG_USB_PRINTER is not set
--
--#
--# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
--#
--
--#
--# may also be needed; see USB_STORAGE Help for more information
--#
--CONFIG_USB_STORAGE=y
--# CONFIG_USB_STORAGE_DEBUG is not set
--# CONFIG_USB_STORAGE_DATAFAB is not set
--# CONFIG_USB_STORAGE_FREECOM is not set
--# CONFIG_USB_STORAGE_ISD200 is not set
--# CONFIG_USB_STORAGE_DPCM is not set
--# CONFIG_USB_STORAGE_USBAT is not set
--# CONFIG_USB_STORAGE_SDDR09 is not set
--# CONFIG_USB_STORAGE_SDDR55 is not set
--# CONFIG_USB_STORAGE_JUMPSHOT is not set
--# CONFIG_USB_STORAGE_ALAUDA is not set
--# CONFIG_USB_STORAGE_KARMA is not set
--# CONFIG_USB_LIBUSUAL is not set
--
--#
--# USB Imaging devices
--#
--# CONFIG_USB_MDC800 is not set
--# CONFIG_USB_MICROTEK is not set
--CONFIG_USB_MON=y
--
--#
--# USB port drivers
--#
--# CONFIG_USB_SERIAL is not set
--
--#
--# USB Miscellaneous drivers
--#
--# CONFIG_USB_EMI62 is not set
--# CONFIG_USB_EMI26 is not set
--# CONFIG_USB_ADUTUX is not set
--# CONFIG_USB_AUERSWALD is not set
--# CONFIG_USB_RIO500 is not set
--# CONFIG_USB_LEGOTOWER is not set
--# CONFIG_USB_LCD is not set
--# CONFIG_USB_BERRY_CHARGE is not set
--# CONFIG_USB_LED is not set
--# CONFIG_USB_CYPRESS_CY7C63 is not set
--# CONFIG_USB_CYTHERM is not set
--# CONFIG_USB_PHIDGET is not set
--# CONFIG_USB_IDMOUSE is not set
--# CONFIG_USB_FTDI_ELAN is not set
--# CONFIG_USB_APPLEDISPLAY is not set
--# CONFIG_USB_LD is not set
--# CONFIG_USB_TRANCEVIBRATOR is not set
--# CONFIG_USB_IOWARRIOR is not set
--# CONFIG_USB_GADGET is not set
--CONFIG_MMC=m
--# CONFIG_MMC_DEBUG is not set
--# CONFIG_MMC_UNSAFE_RESUME is not set
--
--#
--# MMC/SD Card Drivers
--#
--CONFIG_MMC_BLOCK=m
--CONFIG_MMC_BLOCK_BOUNCE=y
--# CONFIG_SDIO_UART is not set
--
--#
--# MMC/SD Host Controller Drivers
--#
--# CONFIG_MMC_WBSD is not set
--# CONFIG_MEMSTICK is not set
--# CONFIG_NEW_LEDS is not set
--# CONFIG_EDAC is not set
--# CONFIG_RTC_CLASS is not set
--
--#
--# Userspace I/O
--#
--# CONFIG_UIO is not set
--
--#
--# File systems
--#
--CONFIG_EXT2_FS=y
--# CONFIG_EXT2_FS_XATTR is not set
--# CONFIG_EXT2_FS_XIP is not set
--# CONFIG_EXT3_FS is not set
--# CONFIG_EXT4DEV_FS is not set
--# CONFIG_REISERFS_FS is not set
--# CONFIG_JFS_FS is not set
--# CONFIG_FS_POSIX_ACL is not set
--# CONFIG_XFS_FS is not set
--# CONFIG_GFS2_FS is not set
--# CONFIG_OCFS2_FS is not set
--CONFIG_DNOTIFY=y
--CONFIG_INOTIFY=y
--CONFIG_INOTIFY_USER=y
--# CONFIG_QUOTA is not set
--# CONFIG_AUTOFS_FS is not set
--# CONFIG_AUTOFS4_FS is not set
--# CONFIG_FUSE_FS is not set
--
--#
--# CD-ROM/DVD Filesystems
--#
--# CONFIG_ISO9660_FS is not set
--# CONFIG_UDF_FS is not set
--
--#
--# DOS/FAT/NT Filesystems
--#
--CONFIG_FAT_FS=y
--CONFIG_MSDOS_FS=y
--CONFIG_VFAT_FS=y
--CONFIG_FAT_DEFAULT_CODEPAGE=437
--CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
--# CONFIG_NTFS_FS is not set
--
--#
--# Pseudo filesystems
--#
--CONFIG_PROC_FS=y
--CONFIG_PROC_KCORE=y
--CONFIG_PROC_SYSCTL=y
--CONFIG_SYSFS=y
--# CONFIG_TMPFS is not set
--# CONFIG_HUGETLB_PAGE is not set
--# CONFIG_CONFIGFS_FS is not set
--
--#
--# Miscellaneous filesystems
--#
--# CONFIG_ADFS_FS is not set
--# CONFIG_AFFS_FS is not set
--# CONFIG_HFS_FS is not set
--# CONFIG_HFSPLUS_FS is not set
--# CONFIG_BEFS_FS is not set
--# CONFIG_BFS_FS is not set
--# CONFIG_EFS_FS is not set
--CONFIG_JFFS2_FS=y
--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 is not set
--CONFIG_JFFS2_ZLIB=y
--# CONFIG_JFFS2_LZO is not set
--CONFIG_JFFS2_RTIME=y
--# CONFIG_JFFS2_RUBIN is not set
--CONFIG_CRAMFS=y
--# CONFIG_VXFS_FS is not set
--# CONFIG_MINIX_FS is not set
--# CONFIG_HPFS_FS is not set
--# CONFIG_QNX4FS_FS is not set
--# CONFIG_ROMFS_FS is not set
--# CONFIG_SYSV_FS is not set
--# CONFIG_UFS_FS is not set
--CONFIG_NETWORK_FILESYSTEMS=y
--CONFIG_NFS_FS=y
--CONFIG_NFS_V3=y
--# CONFIG_NFS_V3_ACL is not set
--# CONFIG_NFS_V4 is not set
--# CONFIG_NFS_DIRECTIO is not set
--# CONFIG_NFSD is not set
--CONFIG_ROOT_NFS=y
--CONFIG_LOCKD=y
--CONFIG_LOCKD_V4=y
--CONFIG_NFS_COMMON=y
--CONFIG_SUNRPC=y
--# CONFIG_SUNRPC_BIND34 is not set
--# CONFIG_RPCSEC_GSS_KRB5 is not set
--# CONFIG_RPCSEC_GSS_SPKM3 is not set
--# CONFIG_SMB_FS is not set
--# CONFIG_CIFS is not set
--# CONFIG_NCP_FS is not set
--# CONFIG_CODA_FS is not set
--# CONFIG_AFS_FS is not set
--
--#
--# Partition Types
--#
--# CONFIG_PARTITION_ADVANCED is not set
--CONFIG_MSDOS_PARTITION=y
--CONFIG_NLS=y
--CONFIG_NLS_DEFAULT="iso8859-1"
--CONFIG_NLS_CODEPAGE_437=y
--# CONFIG_NLS_CODEPAGE_737 is not set
--# CONFIG_NLS_CODEPAGE_775 is not set
--CONFIG_NLS_CODEPAGE_850=y
--# CONFIG_NLS_CODEPAGE_852 is not set
--# CONFIG_NLS_CODEPAGE_855 is not set
--# CONFIG_NLS_CODEPAGE_857 is not set
--# CONFIG_NLS_CODEPAGE_860 is not set
--# CONFIG_NLS_CODEPAGE_861 is not set
--# CONFIG_NLS_CODEPAGE_862 is not set
--# CONFIG_NLS_CODEPAGE_863 is not set
--# CONFIG_NLS_CODEPAGE_864 is not set
--# CONFIG_NLS_CODEPAGE_865 is not set
--# CONFIG_NLS_CODEPAGE_866 is not set
--# CONFIG_NLS_CODEPAGE_869 is not set
--# CONFIG_NLS_CODEPAGE_936 is not set
--# CONFIG_NLS_CODEPAGE_950 is not set
--# CONFIG_NLS_CODEPAGE_932 is not set
--# CONFIG_NLS_CODEPAGE_949 is not set
--# CONFIG_NLS_CODEPAGE_874 is not set
--# CONFIG_NLS_ISO8859_8 is not set
--# CONFIG_NLS_CODEPAGE_1250 is not set
--# CONFIG_NLS_CODEPAGE_1251 is not set
--CONFIG_NLS_ASCII=y
--CONFIG_NLS_ISO8859_1=y
--# CONFIG_NLS_ISO8859_2 is not set
--# CONFIG_NLS_ISO8859_3 is not set
--# CONFIG_NLS_ISO8859_4 is not set
--# CONFIG_NLS_ISO8859_5 is not set
--# CONFIG_NLS_ISO8859_6 is not set
--# CONFIG_NLS_ISO8859_7 is not set
--# CONFIG_NLS_ISO8859_9 is not set
--# CONFIG_NLS_ISO8859_13 is not set
--# CONFIG_NLS_ISO8859_14 is not set
--CONFIG_NLS_ISO8859_15=y
--# CONFIG_NLS_KOI8_R is not set
--# CONFIG_NLS_KOI8_U is not set
--CONFIG_NLS_UTF8=y
--# CONFIG_DLM is not set
--
--#
--# Library routines
--#
--CONFIG_BITREVERSE=y
--CONFIG_CRC_CCITT=y
--# CONFIG_CRC16 is not set
--# CONFIG_CRC_ITU_T is not set
--CONFIG_CRC32=y
--# CONFIG_CRC7 is not set
--# CONFIG_LIBCRC32C is not set
--CONFIG_ZLIB_INFLATE=y
--CONFIG_ZLIB_DEFLATE=y
--CONFIG_PLIST=y
--CONFIG_HAS_IOMEM=y
--CONFIG_HAS_IOPORT=y
--CONFIG_HAS_DMA=y
--
--#
--# Kernel hacking
--#
--# CONFIG_PRINTK_TIME is not set
--CONFIG_ENABLE_WARN_DEPRECATED=y
--CONFIG_ENABLE_MUST_CHECK=y
--CONFIG_MAGIC_SYSRQ=y
--# CONFIG_UNUSED_SYMBOLS is not set
--CONFIG_DEBUG_FS=y
--# CONFIG_HEADERS_CHECK is not set
--CONFIG_DEBUG_KERNEL=y
--# CONFIG_DEBUG_SHIRQ is not set
--CONFIG_DETECT_SOFTLOCKUP=y
--# CONFIG_SCHED_DEBUG is not set
--# CONFIG_SCHEDSTATS is not set
--# CONFIG_TIMER_STATS is not set
--# CONFIG_DEBUG_SLAB is not set
--# 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_SPINLOCK_SLEEP is not set
--# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
--# CONFIG_DEBUG_KOBJECT is not set
--# CONFIG_DEBUG_BUGVERBOSE is not set
--CONFIG_DEBUG_INFO=y
--# CONFIG_DEBUG_VM is not set
--# CONFIG_DEBUG_LIST is not set
--# CONFIG_DEBUG_SG is not set
--# CONFIG_BOOT_PRINTK_DELAY is not set
--# CONFIG_RCU_TORTURE_TEST is not set
--# CONFIG_BACKTRACE_SELF_TEST is not set
--# CONFIG_FAULT_INJECTION is not set
--# CONFIG_SAMPLES is not set
--# CONFIG_DEBUG_STACKOVERFLOW is not set
--# CONFIG_DEBUG_STACK_USAGE is not set
--# CONFIG_DEBUG_PAGEALLOC is not set
--# CONFIG_DEBUGGER is not set
--# CONFIG_VIRQ_DEBUG is not set
--CONFIG_BDI_SWITCH=y
--# CONFIG_PPC_EARLY_DEBUG is not set
--
--#
--# Security options
--#
--# CONFIG_KEYS is not set
--# CONFIG_SECURITY is not set
--# CONFIG_SECURITY_FILE_CAPABILITIES is not set
--CONFIG_CRYPTO=y
--# CONFIG_CRYPTO_SEQIV is not set
--# CONFIG_CRYPTO_MANAGER is not set
--# CONFIG_CRYPTO_HMAC is not set
--# CONFIG_CRYPTO_XCBC is not set
--# CONFIG_CRYPTO_NULL is not set
--# CONFIG_CRYPTO_MD4 is not set
--# CONFIG_CRYPTO_MD5 is not set
--# CONFIG_CRYPTO_SHA1 is not set
--# CONFIG_CRYPTO_SHA256 is not set
--# CONFIG_CRYPTO_SHA512 is not set
--# CONFIG_CRYPTO_WP512 is not set
--# CONFIG_CRYPTO_TGR192 is not set
--# CONFIG_CRYPTO_GF128MUL is not set
--# CONFIG_CRYPTO_ECB is not set
--# CONFIG_CRYPTO_CBC is not set
--# CONFIG_CRYPTO_PCBC is not set
--# CONFIG_CRYPTO_LRW is not set
--# CONFIG_CRYPTO_XTS is not set
--# CONFIG_CRYPTO_CTR is not set
--# CONFIG_CRYPTO_GCM is not set
--# CONFIG_CRYPTO_CCM is not set
--# CONFIG_CRYPTO_CRYPTD is not set
--# CONFIG_CRYPTO_DES is not set
--# CONFIG_CRYPTO_FCRYPT is not set
--# CONFIG_CRYPTO_BLOWFISH is not set
--# CONFIG_CRYPTO_TWOFISH is not set
--# CONFIG_CRYPTO_SERPENT is not set
--# CONFIG_CRYPTO_AES is not set
--# CONFIG_CRYPTO_CAST5 is not set
--# CONFIG_CRYPTO_CAST6 is not set
--# CONFIG_CRYPTO_TEA is not set
--# CONFIG_CRYPTO_ARC4 is not set
--# CONFIG_CRYPTO_KHAZAD is not set
--# CONFIG_CRYPTO_ANUBIS is not set
--# CONFIG_CRYPTO_SEED is not set
--# CONFIG_CRYPTO_SALSA20 is not set
--# CONFIG_CRYPTO_DEFLATE is not set
--# CONFIG_CRYPTO_MICHAEL_MIC is not set
--# CONFIG_CRYPTO_CRC32C is not set
--# CONFIG_CRYPTO_CAMELLIA is not set
--# CONFIG_CRYPTO_TEST is not set
--# CONFIG_CRYPTO_AUTHENC is not set
--# CONFIG_CRYPTO_LZO is not set
--CONFIG_CRYPTO_HW=y
--# CONFIG_PPC_CLOCK is not set
---- a/arch/powerpc/kernel/Makefile
-+++ b/arch/powerpc/kernel/Makefile
-@@ -67,6 +67,7 @@ obj-$(CONFIG_BOOTX_TEXT)     += btext.o
- obj-$(CONFIG_SMP)             += smp.o
- obj-$(CONFIG_KPROBES)         += kprobes.o
- obj-$(CONFIG_PPC_UDBG_16550)  += legacy_serial.o udbg_16550.o
-+obj-$(CONFIG_STACKTRACE)      += stacktrace.o
- pci64-$(CONFIG_PPC64)         += pci_dn.o isa-bridge.o
- obj-$(CONFIG_PCI)             += pci_$(CONFIG_WORD_SIZE).o $(pci64-y) \
---- a/arch/powerpc/kernel/asm-offsets.c
-+++ b/arch/powerpc/kernel/asm-offsets.c
-@@ -26,8 +26,6 @@
- #ifdef CONFIG_PPC64
- #include <linux/time.h>
- #include <linux/hardirq.h>
--#else
--#include <linux/ptrace.h>
- #endif
- #include <asm/io.h>
-@@ -46,6 +44,9 @@
- #include <asm/mmu.h>
- #include <asm/hvcall.h>
- #endif
-+#ifdef CONFIG_PPC_ISERIES
-+#include <asm/iseries/alpaca.h>
-+#endif
- #define DEFINE(sym, val) \
-       asm volatile("\n->" #sym " %0 " #val : : "i" (val))
-@@ -60,7 +61,6 @@ int main(void)
-       DEFINE(AUDITCONTEXT, offsetof(struct task_struct, audit_context));
- #else
-       DEFINE(THREAD_INFO, offsetof(struct task_struct, stack));
--      DEFINE(PTRACE, offsetof(struct task_struct, ptrace));
- #endif /* CONFIG_PPC64 */
-       DEFINE(KSP, offsetof(struct thread_struct, ksp));
-@@ -80,7 +80,6 @@ int main(void)
-       DEFINE(PGDIR, offsetof(struct thread_struct, pgdir));
- #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
-       DEFINE(THREAD_DBCR0, offsetof(struct thread_struct, dbcr0));
--      DEFINE(PT_PTRACED, PT_PTRACED);
- #endif
- #ifdef CONFIG_SPE
-       DEFINE(THREAD_EVR0, offsetof(struct thread_struct, evr[0]));
-@@ -325,6 +324,9 @@ int main(void)
-       DEFINE(PAGE_OFFSET_VSID, KERNEL_VSID(PAGE_OFFSET));
-       DEFINE(VMALLOC_START_ESID, GET_ESID(VMALLOC_START));
-       DEFINE(VMALLOC_START_VSID, KERNEL_VSID(VMALLOC_START));
-+
-+      /* alpaca */
-+      DEFINE(ALPACA_SIZE, sizeof(struct alpaca));
- #endif
-       DEFINE(PGD_TABLE_SIZE, PGD_TABLE_SIZE);
---- a/arch/powerpc/kernel/btext.c
-+++ b/arch/powerpc/kernel/btext.c
-@@ -7,6 +7,7 @@
- #include <linux/string.h>
- #include <linux/init.h>
- #include <linux/module.h>
-+#include <linux/lmb.h>
- #include <asm/sections.h>
- #include <asm/prom.h>
-@@ -15,7 +16,7 @@
- #include <asm/mmu.h>
- #include <asm/pgtable.h>
- #include <asm/io.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/processor.h>
- #include <asm/udbg.h>
---- a/arch/powerpc/kernel/cpu_setup_44x.S
-+++ b/arch/powerpc/kernel/cpu_setup_44x.S
-@@ -3,7 +3,7 @@
-  * Valentine Barshak <vbarshak@ru.mvista.com>
-  * MontaVista Software, Inc (c) 2007
-  *
-- * Based on cpu_setup_6xx code by 
-+ * Based on cpu_setup_6xx code by
-  * Benjamin Herrenschmidt <benh@kernel.crashing.org>
-  *
-  * This program is free software; you can redistribute it and/or
-@@ -32,6 +32,9 @@ _GLOBAL(__setup_cpu_440grx)
-       bl      __fixup_440A_mcheck
-       mtlr    r4
-       blr
-+_GLOBAL(__setup_cpu_460ex)
-+_GLOBAL(__setup_cpu_460gt)
-+      b       __init_fpu_44x
- _GLOBAL(__setup_cpu_440gx)
- _GLOBAL(__setup_cpu_440spe)
-       b       __fixup_440A_mcheck
---- a/arch/powerpc/kernel/cputable.c
-+++ b/arch/powerpc/kernel/cputable.c
-@@ -36,6 +36,8 @@ extern void __setup_cpu_440epx(unsigned 
- extern void __setup_cpu_440gx(unsigned long offset, struct cpu_spec* spec);
- extern void __setup_cpu_440grx(unsigned long offset, struct cpu_spec* spec);
- extern void __setup_cpu_440spe(unsigned long offset, struct cpu_spec* spec);
-+extern void __setup_cpu_460ex(unsigned long offset, struct cpu_spec* spec);
-+extern void __setup_cpu_460gt(unsigned long offset, struct cpu_spec* spec);
- extern void __setup_cpu_603(unsigned long offset, struct cpu_spec* spec);
- extern void __setup_cpu_604(unsigned long offset, struct cpu_spec* spec);
- extern void __setup_cpu_750(unsigned long offset, struct cpu_spec* spec);
-@@ -1397,6 +1399,30 @@ static struct cpu_spec __initdata cpu_sp
-               .machine_check          = machine_check_440A,
-               .platform               = "ppc440",
-       },
-+      { /* 460EX */
-+              .pvr_mask               = 0xffff0002,
-+              .pvr_value              = 0x13020002,
-+              .cpu_name               = "460EX",
-+              .cpu_features           = CPU_FTRS_44X,
-+              .cpu_user_features      = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
-+              .icache_bsize           = 32,
-+              .dcache_bsize           = 32,
-+              .cpu_setup              = __setup_cpu_460ex,
-+              .machine_check          = machine_check_440A,
-+              .platform               = "ppc440",
-+      },
-+      { /* 460GT */
-+              .pvr_mask               = 0xffff0002,
-+              .pvr_value              = 0x13020000,
-+              .cpu_name               = "460GT",
-+              .cpu_features           = CPU_FTRS_44X,
-+              .cpu_user_features      = COMMON_USER_BOOKE | PPC_FEATURE_HAS_FPU,
-+              .icache_bsize           = 32,
-+              .dcache_bsize           = 32,
-+              .cpu_setup              = __setup_cpu_460gt,
-+              .machine_check          = machine_check_440A,
-+              .platform               = "ppc440",
-+      },
- #endif /* CONFIG_44x */
- #ifdef CONFIG_FSL_BOOKE
- #ifdef CONFIG_E200
-@@ -1512,7 +1538,7 @@ struct cpu_spec * __init identify_cpu(un
-                               *t = *s;
-                       *PTRRELOC(&cur_cpu_spec) = &the_cpu_spec;
- #if defined(CONFIG_PPC64) || defined(CONFIG_BOOKE)
--                      /* ppc64 and booke expect identify_cpu to also call 
-+                      /* ppc64 and booke expect identify_cpu to also call
-                        * setup_cpu for that processor. I will consolidate
-                        * that at a later time, for now, just use #ifdef.
-                        * we also don't need to PTRRELOC the function pointer
---- a/arch/powerpc/kernel/crash.c
-+++ b/arch/powerpc/kernel/crash.c
-@@ -24,12 +24,13 @@
- #include <linux/init.h>
- #include <linux/irq.h>
- #include <linux/types.h>
-+#include <linux/lmb.h>
- #include <asm/processor.h>
- #include <asm/machdep.h>
- #include <asm/kexec.h>
- #include <asm/kdump.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/firmware.h>
- #include <asm/smp.h>
- #include <asm/system.h>
---- a/arch/powerpc/kernel/crash_dump.c
-+++ b/arch/powerpc/kernel/crash_dump.c
-@@ -13,8 +13,9 @@
- #include <linux/crash_dump.h>
- #include <linux/bootmem.h>
-+#include <linux/lmb.h>
- #include <asm/kdump.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/firmware.h>
- #include <asm/uaccess.h>
---- a/arch/powerpc/kernel/entry_32.S
-+++ b/arch/powerpc/kernel/entry_32.S
-@@ -110,9 +110,9 @@ transfer_to_handler:
-       stw     r11,PT_REGS(r12)
- #if defined(CONFIG_40x) || defined(CONFIG_BOOKE)
-       /* Check to see if the dbcr0 register is set up to debug.  Use the
--         single-step bit to do this. */
-+         internal debug mode bit to do this. */
-       lwz     r12,THREAD_DBCR0(r12)
--      andis.  r12,r12,DBCR0_IC@h
-+      andis.  r12,r12,DBCR0_IDM@h
-       beq+    3f
-       /* From user and task is ptraced - load up global dbcr0 */
-       li      r12,-1                  /* clear all pending debug events */
-@@ -120,6 +120,12 @@ transfer_to_handler:
-       lis     r11,global_dbcr0@ha
-       tophys(r11,r11)
-       addi    r11,r11,global_dbcr0@l
-+#ifdef CONFIG_SMP
-+      rlwinm  r9,r1,0,0,(31-THREAD_SHIFT)
-+      lwz     r9,TI_CPU(r9)
-+      slwi    r9,r9,3
-+      add     r11,r11,r9
-+#endif
-       lwz     r12,0(r11)
-       mtspr   SPRN_DBCR0,r12
-       lwz     r12,4(r11)
-@@ -238,10 +244,10 @@ ret_from_syscall:
-       stw     r11,_CCR(r1)
- syscall_exit_cont:
- #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
--      /* If the process has its own DBCR0 value, load it up.  The single
--         step bit tells us that dbcr0 should be loaded. */
-+      /* If the process has its own DBCR0 value, load it up.  The internal
-+         debug mode bit tells us that dbcr0 should be loaded. */
-       lwz     r0,THREAD+THREAD_DBCR0(r2)
--      andis.  r10,r0,DBCR0_IC@h
-+      andis.  r10,r0,DBCR0_IDM@h
-       bnel-   load_dbcr0
- #endif
- #ifdef CONFIG_44x
-@@ -666,10 +672,10 @@ user_exc_return:         /* r10 contains MSR_KE
- restore_user:
- #if defined(CONFIG_4xx) || defined(CONFIG_BOOKE)
--      /* Check whether this process has its own DBCR0 value.  The single
--         step bit tells us that dbcr0 should be loaded. */
-+      /* Check whether this process has its own DBCR0 value.  The internal
-+         debug mode bit tells us that dbcr0 should be loaded. */
-       lwz     r0,THREAD+THREAD_DBCR0(r2)
--      andis.  r10,r0,DBCR0_IC@h
-+      andis.  r10,r0,DBCR0_IDM@h
-       bnel-   load_dbcr0
- #endif
-@@ -879,6 +885,12 @@ load_dbcr0:
-       mfspr   r10,SPRN_DBCR0
-       lis     r11,global_dbcr0@ha
-       addi    r11,r11,global_dbcr0@l
-+#ifdef CONFIG_SMP
-+      rlwinm  r9,r1,0,0,(31-THREAD_SHIFT)
-+      lwz     r9,TI_CPU(r9)
-+      slwi    r9,r9,3
-+      add     r11,r11,r9
-+#endif
-       stw     r10,0(r11)
-       mtspr   SPRN_DBCR0,r0
-       lwz     r10,4(r11)
-@@ -891,7 +903,7 @@ load_dbcr0:
-       .section .bss
-       .align  4
- global_dbcr0:
--      .space  8
-+      .space  8*NR_CPUS
-       .previous
- #endif /* !(CONFIG_4xx || CONFIG_BOOKE) */
---- a/arch/powerpc/kernel/entry_64.S
-+++ b/arch/powerpc/kernel/entry_64.S
-@@ -29,6 +29,8 @@
- #include <asm/cputable.h>
- #include <asm/firmware.h>
- #include <asm/bug.h>
-+#include <asm/ptrace.h>
-+#include <asm/irqflags.h>
- /*
-  * System calls.
-@@ -39,7 +41,7 @@
- /* This value is used to mark exception frames on the stack. */
- exception_marker:
--      .tc     ID_72656773_68657265[TC],0x7265677368657265
-+      .tc     ID_EXC_MARKER[TC],STACK_FRAME_REGS_MARKER
-       .section        ".text"
-       .align 7
-@@ -88,6 +90,14 @@ system_call_common:
-       addi    r9,r1,STACK_FRAME_OVERHEAD
-       ld      r11,exception_marker@toc(r2)
-       std     r11,-16(r9)             /* "regshere" marker */
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+      bl      .trace_hardirqs_on
-+      REST_GPR(0,r1)
-+      REST_4GPRS(3,r1)
-+      REST_2GPRS(7,r1)
-+      addi    r9,r1,STACK_FRAME_OVERHEAD
-+      ld      r12,_MSR(r1)
-+#endif /* CONFIG_TRACE_IRQFLAGS */
-       li      r10,1
-       stb     r10,PACASOFTIRQEN(r13)
-       stb     r10,PACAHARDIRQEN(r13)
-@@ -102,7 +112,7 @@ BEGIN_FW_FTR_SECTION
-       b       hardware_interrupt_entry
- 2:
- END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
--#endif
-+#endif /* CONFIG_PPC_ISERIES */
-       mfmsr   r11
-       ori     r11,r11,MSR_EE
-       mtmsrd  r11,1
-@@ -504,6 +514,10 @@ BEGIN_FW_FTR_SECTION
-       li      r3,0
-       stb     r3,PACASOFTIRQEN(r13)   /* ensure we are soft-disabled */
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+      bl      .trace_hardirqs_off
-+      mfmsr   r10
-+#endif
-       ori     r10,r10,MSR_EE
-       mtmsrd  r10                     /* hard-enable again */
-       addi    r3,r1,STACK_FRAME_OVERHEAD
-@@ -512,7 +526,7 @@ BEGIN_FW_FTR_SECTION
- 4:
- END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
- #endif
--      stb     r5,PACASOFTIRQEN(r13)
-+      TRACE_AND_RESTORE_IRQ(r5);
-       /* extract EE bit and use it to restore paca->hard_enabled */
-       ld      r3,_MSR(r1)
-@@ -580,6 +594,16 @@ do_work:
-       bne     restore
-       /* here we are preempting the current task */
- 1:
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+      bl      .trace_hardirqs_on
-+      /* Note: we just clobbered r10 which used to contain the previous
-+       * MSR before the hard-disabling done by the caller of do_work.
-+       * We don't have that value anymore, but it doesn't matter as
-+       * we will hard-enable unconditionally, we can just reload the
-+       * current MSR into r10
-+       */
-+      mfmsr   r10
-+#endif /* CONFIG_TRACE_IRQFLAGS */
-       li      r0,1
-       stb     r0,PACASOFTIRQEN(r13)
-       stb     r0,PACAHARDIRQEN(r13)
---- a/arch/powerpc/kernel/head_32.S
-+++ b/arch/powerpc/kernel/head_32.S
-@@ -30,6 +30,7 @@
- #include <asm/thread_info.h>
- #include <asm/ppc_asm.h>
- #include <asm/asm-offsets.h>
-+#include <asm/ptrace.h>
- /* 601 only have IBAT; cr0.eq is set on 601 when using this macro */
- #define LOAD_BAT(n, reg, RA, RB)      \
-@@ -268,8 +269,8 @@ __secondary_hold_acknowledge:
-       li      r10,MSR_KERNEL & ~(MSR_IR|MSR_DR); /* can take exceptions */ \
-       MTMSRD(r10);                    /* (except for mach check in rtas) */ \
-       stw     r0,GPR0(r11);   \
--      lis     r10,0x7265;             /* put exception frame marker */ \
--      addi    r10,r10,0x6773; \
-+      lis     r10,STACK_FRAME_REGS_MARKER@ha; /* exception frame marker */ \
-+      addi    r10,r10,STACK_FRAME_REGS_MARKER@l; \
-       stw     r10,8(r11);     \
-       SAVE_4GPRS(3, r11);     \
-       SAVE_2GPRS(7, r11)
-@@ -763,23 +764,6 @@ load_up_altivec:
-       b       fast_exception_return
- /*
-- * AltiVec unavailable trap from kernel - print a message, but let
-- * the task use AltiVec in the kernel until it returns to user mode.
-- */
--KernelAltiVec:
--      lwz     r3,_MSR(r1)
--      oris    r3,r3,MSR_VEC@h
--      stw     r3,_MSR(r1)     /* enable use of AltiVec after return */
--      lis     r3,87f@h
--      ori     r3,r3,87f@l
--      mr      r4,r2           /* current */
--      lwz     r5,_NIP(r1)
--      bl      printk
--      b       ret_from_except
--87:   .string "AltiVec used in kernel  (task=%p, pc=%x)  \n"
--      .align  4,0
--
--/*
-  * giveup_altivec(tsk)
-  * Disable AltiVec for the task given as the argument,
-  * and save the AltiVec registers in its thread_struct.
---- a/arch/powerpc/kernel/head_44x.S
-+++ b/arch/powerpc/kernel/head_44x.S
-@@ -211,7 +211,7 @@ skpinv:    addi    r4,r4,1                         /* Increment */
-       SET_IVOR(12, WatchdogTimer);
-       SET_IVOR(13, DataTLBError);
-       SET_IVOR(14, InstructionTLBError);
--      SET_IVOR(15, Debug);
-+      SET_IVOR(15, DebugCrit);
-       /* Establish the interrupt vector base */
-       lis     r4,interrupt_base@h     /* IVPR only uses the high 16-bits */
-@@ -578,7 +578,7 @@ interrupt_base:
-       b       InstructionStorage
-       /* Debug Interrupt */
--      DEBUG_EXCEPTION
-+      DEBUG_CRIT_EXCEPTION
- /*
-  * Local functions
---- a/arch/powerpc/kernel/head_64.S
-+++ b/arch/powerpc/kernel/head_64.S
-@@ -36,8 +36,7 @@
- #include <asm/firmware.h>
- #include <asm/page_64.h>
- #include <asm/exception.h>
--
--#define DO_SOFT_DISABLE
-+#include <asm/irqflags.h>
- /*
-  * We layout physical memory as follows:
-@@ -450,8 +449,8 @@ bad_stack:
-  */
- fast_exc_return_irq:                  /* restores irq state too */
-       ld      r3,SOFTE(r1)
-+      TRACE_AND_RESTORE_IRQ(r3);
-       ld      r12,_MSR(r1)
--      stb     r3,PACASOFTIRQEN(r13)   /* restore paca->soft_enabled */
-       rldicl  r4,r12,49,63            /* get MSR_EE to LSB */
-       stb     r4,PACAHARDIRQEN(r13)   /* restore paca->hard_enabled */
-       b       1f
-@@ -621,7 +620,7 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISER
-       mtlr    r10
-       andi.   r10,r12,MSR_RI  /* check for unrecoverable exception */
--      beq-    unrecov_slb
-+      beq-    2f
- .machine      push
- .machine      "power4"
-@@ -643,6 +642,22 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISER
-       rfid
-       b       .       /* prevent speculative execution */
-+2:
-+#ifdef CONFIG_PPC_ISERIES
-+BEGIN_FW_FTR_SECTION
-+      b       unrecov_slb
-+END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
-+#endif /* CONFIG_PPC_ISERIES */
-+      mfspr   r11,SPRN_SRR0
-+      clrrdi  r10,r13,32
-+      LOAD_HANDLER(r10,unrecov_slb)
-+      mtspr   SPRN_SRR0,r10
-+      mfmsr   r10
-+      ori     r10,r10,MSR_IR|MSR_DR|MSR_RI
-+      mtspr   SPRN_SRR1,r10
-+      rfid
-+      b       .
-+
- unrecov_slb:
-       EXCEPTION_PROLOG_COMMON(0x4100, PACA_EXSLB)
-       DISABLE_INTS
-@@ -808,7 +823,7 @@ _STATIC(load_up_altivec)
-  * Hash table stuff
-  */
-       .align  7
--_GLOBAL(do_hash_page)
-+_STATIC(do_hash_page)
-       std     r3,_DAR(r1)
-       std     r4,_DSISR(r1)
-@@ -820,6 +835,27 @@ BEGIN_FTR_SECTION
- END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
-       /*
-+       * On iSeries, we soft-disable interrupts here, then
-+       * hard-enable interrupts so that the hash_page code can spin on
-+       * the hash_table_lock without problems on a shared processor.
-+       */
-+      DISABLE_INTS
-+
-+      /*
-+       * Currently, trace_hardirqs_off() will be called by DISABLE_INTS
-+       * and will clobber volatile registers when irq tracing is enabled
-+       * so we need to reload them. It may be possible to be smarter here
-+       * and move the irq tracing elsewhere but let's keep it simple for
-+       * now
-+       */
-+#ifdef CONFIG_TRACE_IRQFLAGS
-+      ld      r3,_DAR(r1)
-+      ld      r4,_DSISR(r1)
-+      ld      r5,_TRAP(r1)
-+      ld      r12,_MSR(r1)
-+      clrrdi  r5,r5,4
-+#endif /* CONFIG_TRACE_IRQFLAGS */
-+      /*
-        * We need to set the _PAGE_USER bit if MSR_PR is set or if we are
-        * accessing a userspace segment (even from the kernel). We assume
-        * kernel addresses always have the high bit set.
-@@ -832,13 +868,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
-       rlwimi  r4,r5,22+2,31-2,31-2    /* Set _PAGE_EXEC if trap is 0x400 */
-       /*
--       * On iSeries, we soft-disable interrupts here, then
--       * hard-enable interrupts so that the hash_page code can spin on
--       * the hash_table_lock without problems on a shared processor.
--       */
--      DISABLE_INTS
--
--      /*
-        * r3 contains the faulting address
-        * r4 contains the required access permissions
-        * r5 contains the trap number
-@@ -848,7 +877,6 @@ END_FTR_SECTION_IFCLR(CPU_FTR_SLB)
-       bl      .hash_page              /* build HPTE if possible */
-       cmpdi   r3,0                    /* see if hash_page succeeded */
--#ifdef DO_SOFT_DISABLE
- BEGIN_FW_FTR_SECTION
-       /*
-        * If we had interrupts soft-enabled at the point where the
-@@ -860,7 +888,7 @@ BEGIN_FW_FTR_SECTION
-        */
-       beq     13f
- END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
--#endif
-+
- BEGIN_FW_FTR_SECTION
-       /*
-        * Here we have interrupts hard-disabled, so it is sufficient
-@@ -874,11 +902,12 @@ END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISER
-       /*
-        * hash_page couldn't handle it, set soft interrupt enable back
--       * to what it was before the trap.  Note that .local_irq_restore
-+       * to what it was before the trap.  Note that .raw_local_irq_restore
-        * handles any interrupts pending at this point.
-        */
-       ld      r3,SOFTE(r1)
--      bl      .local_irq_restore
-+      TRACE_AND_RESTORE_IRQ_PARTIAL(r3, 11f)
-+      bl      .raw_local_irq_restore
-       b       11f
- /* Here we have a page fault that hash_page can't handle. */
-@@ -1477,6 +1506,10 @@ _INIT_STATIC(start_here_multiplatform)
-       addi    r2,r2,0x4000
-       add     r2,r2,r26
-+      /* Set initial ptr to current */
-+      LOAD_REG_IMMEDIATE(r4, init_task)
-+      std     r4,PACACURRENT(r13)
-+
-       /* Do very early kernel initializations, including initial hash table,
-        * stab and slb setup before we turn on relocation.     */
-@@ -1505,10 +1538,6 @@ _INIT_GLOBAL(start_here_common)
-       li      r0,0
-       stdu    r0,-STACK_FRAME_OVERHEAD(r1)
--      /* ptr to current */
--      LOAD_REG_IMMEDIATE(r4, init_task)
--      std     r4,PACACURRENT(r13)
--
-       /* Load the TOC */
-       ld      r2,PACATOC(r13)
-       std     r1,PACAKSAVE(r13)
---- a/arch/powerpc/kernel/head_booke.h
-+++ b/arch/powerpc/kernel/head_booke.h
-@@ -56,8 +56,17 @@
-  * is necessary since the MMU is always on, for Book-E parts, and the stacks
-  * are offset from KERNELBASE.
-  *
-+ * There is some space optimization to be had here if desired.  However
-+ * to allow for a common kernel with support for debug exceptions either
-+ * going to critical or their own debug level we aren't currently
-+ * providing configurations that micro-optimize space usage.
-  */
--#define BOOKE_EXCEPTION_STACK_SIZE    (8192)
-+#ifdef CONFIG_44x
-+#define NUM_EXCEPTION_LVLS    2
-+#else
-+#define NUM_EXCEPTION_LVLS    3
-+#endif
-+#define BOOKE_EXCEPTION_STACK_SIZE    (4096 * NUM_EXCEPTION_LVLS)
- /* CRIT_SPRG only used in critical exception handling */
- #define CRIT_SPRG     SPRN_SPRG2
-@@ -68,7 +77,7 @@
- #define CRIT_STACK_TOP                (exception_stack_top)
- /* only on e200 for now */
--#define DEBUG_STACK_TOP               (exception_stack_top - 4096)
-+#define DEBUG_STACK_TOP               (exception_stack_top - 8192)
- #define DEBUG_SPRG            SPRN_SPRG6W
- #ifdef CONFIG_SMP
-@@ -212,9 +221,8 @@ label:
-  * save (and later restore) the MSR via SPRN_CSRR1, which will still have
-  * the MSR_DE bit set.
-  */
--#ifdef CONFIG_E200
--#define DEBUG_EXCEPTION                                                             \
--      START_EXCEPTION(Debug);                                               \
-+#define DEBUG_DEBUG_EXCEPTION                                               \
-+      START_EXCEPTION(DebugDebug);                                          \
-       DEBUG_EXCEPTION_PROLOG;                                               \
-                                                                             \
-       /*                                                                    \
-@@ -234,8 +242,8 @@ label:
-       cmplw   r12,r10;                                                      \
-       blt+    2f;                     /* addr below exception vectors */    \
-                                                                             \
--      lis     r10,Debug@h;                                                  \
--      ori     r10,r10,Debug@l;                                              \
-+      lis     r10,DebugDebug@h;                                             \
-+      ori     r10,r10,DebugDebug@l;                                         \
-       cmplw   r12,r10;                                                      \
-       bgt+    2f;                     /* addr above exception vectors */    \
-                                                                             \
-@@ -265,9 +273,9 @@ label:
- 2:    mfspr   r4,SPRN_DBSR;                                                 \
-       addi    r3,r1,STACK_FRAME_OVERHEAD;                                   \
-       EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, debug_transfer_to_handler, ret_from_debug_exc)
--#else
--#define DEBUG_EXCEPTION                                                             \
--      START_EXCEPTION(Debug);                                               \
-+
-+#define DEBUG_CRIT_EXCEPTION                                                \
-+      START_EXCEPTION(DebugCrit);                                           \
-       CRITICAL_EXCEPTION_PROLOG;                                            \
-                                                                             \
-       /*                                                                    \
-@@ -287,8 +295,8 @@ label:
-       cmplw   r12,r10;                                                      \
-       blt+    2f;                     /* addr below exception vectors */    \
-                                                                             \
--      lis     r10,Debug@h;                                                  \
--      ori     r10,r10,Debug@l;                                              \
-+      lis     r10,DebugCrit@h;                                                      \
-+      ori     r10,r10,DebugCrit@l;                                          \
-       cmplw   r12,r10;                                                      \
-       bgt+    2f;                     /* addr above exception vectors */    \
-                                                                             \
-@@ -318,7 +326,6 @@ label:
- 2:    mfspr   r4,SPRN_DBSR;                                                 \
-       addi    r3,r1,STACK_FRAME_OVERHEAD;                                   \
-       EXC_XFER_TEMPLATE(DebugException, 0x2002, (MSR_KERNEL & ~(MSR_ME|MSR_DE|MSR_CE)), NOCOPY, crit_transfer_to_handler, ret_from_crit_exc)
--#endif
- #define INSTRUCTION_STORAGE_EXCEPTION                                       \
-       START_EXCEPTION(InstructionStorage)                                   \
---- a/arch/powerpc/kernel/head_fsl_booke.S
-+++ b/arch/powerpc/kernel/head_fsl_booke.S
-@@ -68,7 +68,9 @@ _ENTRY(_start);
-       mr      r29,r5
-       mr      r28,r6
-       mr      r27,r7
-+      li      r25,0           /* phys kernel start (low) */
-       li      r24,0           /* CPU number */
-+      li      r23,0           /* phys kernel start (high) */
- /* We try to not make any assumptions about how the boot loader
-  * setup or used the TLBs.  We invalidate all mappings from the
-@@ -167,7 +169,28 @@ skpinv:   addi    r6,r6,1                         /* Increment */
-       mtspr   SPRN_MAS0,r7
-       tlbre
--      /* Just modify the entry ID, EPN and RPN for the temp mapping */
-+      /* grab and fixup the RPN */
-+      mfspr   r6,SPRN_MAS1    /* extract MAS1[SIZE] */
-+      rlwinm  r6,r6,25,27,30
-+      li      r8,-1
-+      addi    r6,r6,10
-+      slw     r6,r8,r6        /* convert to mask */
-+
-+      bl      1f              /* Find our address */
-+1:    mflr    r7
-+
-+      mfspr   r8,SPRN_MAS3
-+#ifdef CONFIG_PHYS_64BIT
-+      mfspr   r23,SPRN_MAS7
-+#endif
-+      and     r8,r6,r8
-+      subfic  r9,r6,-4096
-+      and     r9,r9,r7
-+
-+      or      r25,r8,r9
-+      ori     r8,r25,(MAS3_SX|MAS3_SW|MAS3_SR)
-+
-+      /* Just modify the entry ID and EPN for the temp mapping */
-       lis     r7,0x1000       /* Set MAS0(TLBSEL) = 1 */
-       rlwimi  r7,r5,16,4,15   /* Setup MAS0 = TLBSEL | ESEL(r5) */
-       mtspr   SPRN_MAS0,r7
-@@ -177,12 +200,10 @@ skpinv:  addi    r6,r6,1                         /* Increment */
-       ori     r6,r6,(MAS1_TSIZE(BOOKE_PAGESZ_4K))@l
-       mtspr   SPRN_MAS1,r6
-       mfspr   r6,SPRN_MAS2
--      lis     r7,PHYSICAL_START@h
-+      li      r7,0            /* temp EPN = 0 */
-       rlwimi  r7,r6,0,20,31
-       mtspr   SPRN_MAS2,r7
--      mfspr   r6,SPRN_MAS3
--      rlwimi  r7,r6,0,20,31
--      mtspr   SPRN_MAS3,r7
-+      mtspr   SPRN_MAS3,r8
-       tlbwe
-       xori    r6,r4,1
-@@ -232,8 +253,7 @@ skpinv:    addi    r6,r6,1                         /* Increment */
-       ori     r6,r6,PAGE_OFFSET@l
-       rlwimi  r6,r7,0,20,31
-       mtspr   SPRN_MAS2,r6
--      li      r7,(MAS3_SX|MAS3_SW|MAS3_SR)
--      mtspr   SPRN_MAS3,r7
-+      mtspr   SPRN_MAS3,r8
-       tlbwe
- /* 7. Jump to KERNELBASE mapping */
-@@ -283,7 +303,10 @@ skpinv:   addi    r6,r6,1                         /* Increment */
-       SET_IVOR(12, WatchdogTimer);
-       SET_IVOR(13, DataTLBError);
-       SET_IVOR(14, InstructionTLBError);
--      SET_IVOR(15, Debug);
-+      SET_IVOR(15, DebugDebug);
-+#if defined(CONFIG_E500)
-+      SET_IVOR(15, DebugCrit);
-+#endif
-       SET_IVOR(32, SPEUnavailable);
-       SET_IVOR(33, SPEFloatingPointData);
-       SET_IVOR(34, SPEFloatingPointRound);
-@@ -718,7 +741,10 @@ interrupt_base:
-       /* Debug Interrupt */
--      DEBUG_EXCEPTION
-+      DEBUG_DEBUG_EXCEPTION
-+#if defined(CONFIG_E500)
-+      DEBUG_CRIT_EXCEPTION
-+#endif
- /*
-  * Local functions
---- a/arch/powerpc/kernel/ibmebus.c
-+++ b/arch/powerpc/kernel/ibmebus.c
-@@ -183,7 +183,7 @@ static int ibmebus_create_devices(const 
-               ret = ibmebus_create_device(child);
-               if (ret) {
-                       printk(KERN_ERR "%s: failed to create device (%i)",
--                             __FUNCTION__, ret);
-+                             __func__, ret);
-                       of_node_put(child);
-                       break;
-               }
-@@ -269,7 +269,7 @@ static ssize_t ibmebus_store_probe(struc
-       if (bus_find_device(&ibmebus_bus_type, NULL, path,
-                           ibmebus_match_path)) {
-               printk(KERN_WARNING "%s: %s has already been probed\n",
--                     __FUNCTION__, path);
-+                     __func__, path);
-               rc = -EEXIST;
-               goto out;
-       }
-@@ -279,7 +279,7 @@ static ssize_t ibmebus_store_probe(struc
-               of_node_put(dn);
-       } else {
-               printk(KERN_WARNING "%s: no such device node: %s\n",
--                     __FUNCTION__, path);
-+                     __func__, path);
-               rc = -ENODEV;
-       }
-@@ -308,7 +308,7 @@ static ssize_t ibmebus_store_remove(stru
-               return count;
-       } else {
-               printk(KERN_WARNING "%s: %s not on the bus\n",
--                     __FUNCTION__, path);
-+                     __func__, path);
-               kfree(path);
-               return -ENODEV;
-@@ -337,14 +337,14 @@ static int __init ibmebus_bus_init(void)
-       err = of_bus_type_init(&ibmebus_bus_type, "ibmebus");
-       if (err) {
-               printk(KERN_ERR "%s: failed to register IBM eBus.\n",
--                     __FUNCTION__);
-+                     __func__);
-               return err;
-       }
-       err = device_register(&ibmebus_bus_device);
-       if (err) {
-               printk(KERN_WARNING "%s: device_register returned %i\n",
--                     __FUNCTION__, err);
-+                     __func__, err);
-               bus_unregister(&ibmebus_bus_type);
-               return err;
---- a/arch/powerpc/kernel/iommu.c
-+++ b/arch/powerpc/kernel/iommu.c
-@@ -520,7 +520,7 @@ void iommu_free_table(struct iommu_table
-       unsigned int order;
-       if (!tbl || !tbl->it_map) {
--              printk(KERN_ERR "%s: expected TCE map for %s\n", __FUNCTION__,
-+              printk(KERN_ERR "%s: expected TCE map for %s\n", __func__,
-                               node_name);
-               return;
-       }
-@@ -530,7 +530,7 @@ void iommu_free_table(struct iommu_table
-       for (i = 0; i < (tbl->it_size/64); i++) {
-               if (tbl->it_map[i] != 0) {
-                       printk(KERN_WARNING "%s: Unexpected TCEs for %s\n",
--                              __FUNCTION__, node_name);
-+                              __func__, node_name);
-                       break;
-               }
-       }
---- a/arch/powerpc/kernel/irq.c
-+++ b/arch/powerpc/kernel/irq.c
-@@ -114,7 +114,7 @@ static inline void set_soft_enabled(unsi
-       : : "r" (enable), "i" (offsetof(struct paca_struct, soft_enabled)));
- }
--void local_irq_restore(unsigned long en)
-+void raw_local_irq_restore(unsigned long en)
- {
-       /*
-        * get_paca()->soft_enabled = en;
-@@ -174,6 +174,7 @@ void local_irq_restore(unsigned long en)
-       __hard_irq_enable();
- }
-+EXPORT_SYMBOL(raw_local_irq_restore);
- #endif /* CONFIG_PPC64 */
- int show_interrupts(struct seq_file *p, void *v)
-@@ -310,8 +311,21 @@ void do_IRQ(struct pt_regs *regs)
-                               handler = &__do_IRQ;
-                       irqtp->task = curtp->task;
-                       irqtp->flags = 0;
-+
-+                      /* Copy the softirq bits in preempt_count so that the
-+                       * softirq checks work in the hardirq context.
-+                       */
-+                      irqtp->preempt_count =
-+                              (irqtp->preempt_count & ~SOFTIRQ_MASK) |
-+                              (curtp->preempt_count & SOFTIRQ_MASK);
-+
-                       call_handle_irq(irq, desc, irqtp, handler);
-                       irqtp->task = NULL;
-+
-+
-+                      /* Set any flag that may have been set on the
-+                       * alternate stack
-+                       */
-                       if (irqtp->flags)
-                               set_bits(irqtp->flags, &curtp->flags);
-               } else
-@@ -357,7 +371,7 @@ void irq_ctx_init(void)
-               memset((void *)softirq_ctx[i], 0, THREAD_SIZE);
-               tp = softirq_ctx[i];
-               tp->cpu = i;
--              tp->preempt_count = SOFTIRQ_OFFSET;
-+              tp->preempt_count = 0;
-               memset((void *)hardirq_ctx[i], 0, THREAD_SIZE);
-               tp = hardirq_ctx[i];
---- a/arch/powerpc/kernel/isa-bridge.c
-+++ b/arch/powerpc/kernel/isa-bridge.c
-@@ -80,13 +80,13 @@ static void __devinit pci_process_ISA_OF
-        *                      (size depending on dev->n_addr_cells)
-        *   cell 5:            the size of the range
-        */
--      if ((range->isa_addr.a_hi && ISA_SPACE_MASK) != ISA_SPACE_IO) {
-+      if ((range->isa_addr.a_hi & ISA_SPACE_MASK) != ISA_SPACE_IO) {
-               range++;
-               rlen -= sizeof(struct isa_range);
-               if (rlen < sizeof(struct isa_range))
-                       goto inval_range;
-       }
--      if ((range->isa_addr.a_hi && ISA_SPACE_MASK) != ISA_SPACE_IO)
-+      if ((range->isa_addr.a_hi & ISA_SPACE_MASK) != ISA_SPACE_IO)
-               goto inval_range;
-       isa_addr = range->isa_addr.a_lo;
-@@ -99,7 +99,7 @@ static void __devinit pci_process_ISA_OF
-        */
-       if ((pci_addr != 0) || (isa_addr != 0)) {
-               printk(KERN_ERR "unexpected isa to pci mapping: %s\n",
--                     __FUNCTION__);
-+                     __func__);
-               return;
-       }
---- a/arch/powerpc/kernel/lparcfg.c
-+++ b/arch/powerpc/kernel/lparcfg.c
-@@ -226,7 +226,7 @@ static void parse_system_parameter_strin
-       unsigned char *local_buffer = kmalloc(SPLPAR_MAXLENGTH, GFP_KERNEL);
-       if (!local_buffer) {
-               printk(KERN_ERR "%s %s kmalloc failure at line %d \n",
--                     __FILE__, __FUNCTION__, __LINE__);
-+                     __FILE__, __func__, __LINE__);
-               return;
-       }
-@@ -243,14 +243,14 @@ static void parse_system_parameter_strin
-       if (call_status != 0) {
-               printk(KERN_INFO
-                      "%s %s Error calling get-system-parameter (0x%x)\n",
--                     __FILE__, __FUNCTION__, call_status);
-+                     __FILE__, __func__, call_status);
-       } else {
-               int splpar_strlen;
-               int idx, w_idx;
-               char *workbuffer = kzalloc(SPLPAR_MAXLENGTH, GFP_KERNEL);
-               if (!workbuffer) {
-                       printk(KERN_ERR "%s %s kmalloc failure at line %d \n",
--                             __FILE__, __FUNCTION__, __LINE__);
-+                             __FILE__, __func__, __LINE__);
-                       kfree(local_buffer);
-                       return;
-               }
-@@ -484,10 +484,10 @@ static ssize_t lparcfg_write(struct file
-       current_weight = (resource >> 5 * 8) & 0xFF;
-       pr_debug("%s: current_entitled = %lu, current_weight = %u\n",
--               __FUNCTION__, current_entitled, current_weight);
-+               __func__, current_entitled, current_weight);
-       pr_debug("%s: new_entitled = %lu, new_weight = %u\n",
--               __FUNCTION__, *new_entitled_ptr, *new_weight_ptr);
-+               __func__, *new_entitled_ptr, *new_weight_ptr);
-       retval = plpar_hcall_norets(H_SET_PPP, *new_entitled_ptr,
-                                   *new_weight_ptr);
-@@ -502,7 +502,7 @@ static ssize_t lparcfg_write(struct file
-               retval = -EINVAL;
-       } else {
-               printk(KERN_WARNING "%s: received unknown hv return code %ld",
--                     __FUNCTION__, retval);
-+                     __func__, retval);
-               retval = -EIO;
-       }
---- a/arch/powerpc/kernel/machine_kexec.c
-+++ b/arch/powerpc/kernel/machine_kexec.c
-@@ -12,8 +12,9 @@
- #include <linux/kexec.h>
- #include <linux/reboot.h>
- #include <linux/threads.h>
-+#include <linux/lmb.h>
- #include <asm/machdep.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- void machine_crash_shutdown(struct pt_regs *regs)
- {
---- a/arch/powerpc/kernel/paca.c
-+++ b/arch/powerpc/kernel/paca.c
-@@ -15,7 +15,6 @@
- #include <asm/ptrace.h>
- #include <asm/page.h>
- #include <asm/lppaca.h>
--#include <asm/iseries/it_lp_reg_save.h>
- #include <asm/paca.h>
- #include <asm/mmu.h>
-@@ -25,13 +24,13 @@
- extern unsigned long __toc_start;
- /*
-- * iSeries structure which the hypervisor knows about - this structure
-+ * The structure which the hypervisor knows about - this structure
-  * should not cross a page boundary.  The vpa_init/register_vpa call
-  * is now known to fail if the lppaca structure crosses a page
-- * boundary.  The lppaca is also used on POWER5 pSeries boxes.  The
-- * lppaca is 640 bytes long, and cannot readily change since the
-- * hypervisor knows its layout, so a 1kB alignment will suffice to
-- * ensure that it doesn't cross a page boundary.
-+ * boundary.  The lppaca is also used on legacy iSeries and POWER5
-+ * pSeries boxes.  The lppaca is 640 bytes long, and cannot readily
-+ * change since the hypervisor knows its layout, so a 1kB alignment
-+ * will suffice to ensure that it doesn't cross a page boundary.
-  */
- struct lppaca lppaca[] = {
-       [0 ... (NR_CPUS-1)] = {
-@@ -66,32 +65,17 @@ struct slb_shadow slb_shadow[] __cacheli
-  * processors.  The processor VPD array needs one entry per physical
-  * processor (not thread).
-  */
--#define PACA_INIT_COMMON(number)                                          \
-+#define PACA_INIT(number)                                                 \
-+{                                                                         \
-       .lppaca_ptr = &lppaca[number],                                      \
-       .lock_token = 0x8000,                                               \
-       .paca_index = (number),         /* Paca Index */                    \
-       .kernel_toc = (unsigned long)(&__toc_start) + 0x8000UL,             \
-       .hw_cpu_id = 0xffff,                                                \
--      .slb_shadow_ptr = &slb_shadow[number],
--
--#ifdef CONFIG_PPC_ISERIES
--#define PACA_INIT_ISERIES(number)                                         \
--      .reg_save_ptr = &iseries_reg_save[number],
--
--#define PACA_INIT(number)                                                 \
--{                                                                         \
--      PACA_INIT_COMMON(number)                                            \
--      PACA_INIT_ISERIES(number)                                           \
-+      .slb_shadow_ptr = &slb_shadow[number],                              \
-+      .__current = &init_task,                                            \
- }
--#else
--#define PACA_INIT(number)                                                 \
--{                                                                         \
--      PACA_INIT_COMMON(number)                                            \
--}
--
--#endif
--
- struct paca_struct paca[] = {
-       PACA_INIT(0),
- #if NR_CPUS > 1
---- a/arch/powerpc/kernel/ppc_ksyms.c
-+++ b/arch/powerpc/kernel/ppc_ksyms.c
-@@ -45,10 +45,6 @@
- #include <asm/signal.h>
- #include <asm/dcr.h>
--#ifdef CONFIG_PPC64
--EXPORT_SYMBOL(local_irq_restore);
--#endif
--
- #ifdef CONFIG_PPC32
- extern void transfer_to_handler(void);
- extern void do_IRQ(struct pt_regs *regs);
-@@ -58,7 +54,6 @@ extern void program_check_exception(stru
- extern void single_step_exception(struct pt_regs *regs);
- extern int sys_sigreturn(struct pt_regs *regs);
--EXPORT_SYMBOL(empty_zero_page);
- EXPORT_SYMBOL(clear_pages);
- EXPORT_SYMBOL(copy_page);
- EXPORT_SYMBOL(ISA_DMA_THRESHOLD);
-@@ -79,6 +74,7 @@ EXPORT_SYMBOL(strncpy);
- EXPORT_SYMBOL(strcat);
- EXPORT_SYMBOL(strlen);
- EXPORT_SYMBOL(strcmp);
-+EXPORT_SYMBOL(strncmp);
- EXPORT_SYMBOL(csum_partial);
- EXPORT_SYMBOL(csum_partial_copy_generic);
-@@ -192,3 +188,4 @@ EXPORT_SYMBOL(intercept_table);
- EXPORT_SYMBOL(__mtdcr);
- EXPORT_SYMBOL(__mfdcr);
- #endif
-+EXPORT_SYMBOL(empty_zero_page);
---- a/arch/powerpc/kernel/process.c
-+++ b/arch/powerpc/kernel/process.c
-@@ -868,11 +868,6 @@ int sys_execve(unsigned long a0, unsigne
-       flush_spe_to_thread(current);
-       error = do_execve(filename, (char __user * __user *) a1,
-                         (char __user * __user *) a2, regs);
--      if (error == 0) {
--              task_lock(current);
--              current->ptrace &= ~PT_DTRACE;
--              task_unlock(current);
--      }
-       putname(filename);
- out:
-       return error;
-@@ -919,20 +914,6 @@ int validate_sp(unsigned long sp, struct
-       return valid_irq_stack(sp, p, nbytes);
- }
--#ifdef CONFIG_PPC64
--#define MIN_STACK_FRAME       112     /* same as STACK_FRAME_OVERHEAD, in fact */
--#define FRAME_LR_SAVE 2
--#define INT_FRAME_SIZE        (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD + 288)
--#define REGS_MARKER   0x7265677368657265ul
--#define FRAME_MARKER  12
--#else
--#define MIN_STACK_FRAME       16
--#define FRAME_LR_SAVE 1
--#define INT_FRAME_SIZE        (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
--#define REGS_MARKER   0x72656773ul
--#define FRAME_MARKER  2
--#endif
--
- EXPORT_SYMBOL(validate_sp);
- unsigned long get_wchan(struct task_struct *p)
-@@ -944,15 +925,15 @@ unsigned long get_wchan(struct task_stru
-               return 0;
-       sp = p->thread.ksp;
--      if (!validate_sp(sp, p, MIN_STACK_FRAME))
-+      if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
-               return 0;
-       do {
-               sp = *(unsigned long *)sp;
--              if (!validate_sp(sp, p, MIN_STACK_FRAME))
-+              if (!validate_sp(sp, p, STACK_FRAME_OVERHEAD))
-                       return 0;
-               if (count > 0) {
--                      ip = ((unsigned long *)sp)[FRAME_LR_SAVE];
-+                      ip = ((unsigned long *)sp)[STACK_FRAME_LR_SAVE];
-                       if (!in_sched_functions(ip))
-                               return ip;
-               }
-@@ -981,12 +962,12 @@ void show_stack(struct task_struct *tsk,
-       lr = 0;
-       printk("Call Trace:\n");
-       do {
--              if (!validate_sp(sp, tsk, MIN_STACK_FRAME))
-+              if (!validate_sp(sp, tsk, STACK_FRAME_OVERHEAD))
-                       return;
-               stack = (unsigned long *) sp;
-               newsp = stack[0];
--              ip = stack[FRAME_LR_SAVE];
-+              ip = stack[STACK_FRAME_LR_SAVE];
-               if (!firstframe || ip != lr) {
-                       printk("["REG"] ["REG"] ", sp, ip);
-                       print_symbol("%s", ip);
-@@ -1000,8 +981,8 @@ void show_stack(struct task_struct *tsk,
-                * See if this is an exception frame.
-                * We look for the "regshere" marker in the current frame.
-                */
--              if (validate_sp(sp, tsk, INT_FRAME_SIZE)
--                  && stack[FRAME_MARKER] == REGS_MARKER) {
-+              if (validate_sp(sp, tsk, STACK_INT_FRAME_SIZE)
-+                  && stack[STACK_FRAME_MARKER] == STACK_FRAME_REGS_MARKER) {
-                       struct pt_regs *regs = (struct pt_regs *)
-                               (sp + STACK_FRAME_OVERHEAD);
-                       printk("--- Exception: %lx", regs->trap);
---- a/arch/powerpc/kernel/prom.c
-+++ b/arch/powerpc/kernel/prom.c
-@@ -31,10 +31,10 @@
- #include <linux/kexec.h>
- #include <linux/debugfs.h>
- #include <linux/irq.h>
-+#include <linux/lmb.h>
- #include <asm/prom.h>
- #include <asm/rtas.h>
--#include <asm/lmb.h>
- #include <asm/page.h>
- #include <asm/processor.h>
- #include <asm/irq.h>
-@@ -51,6 +51,7 @@
- #include <asm/machdep.h>
- #include <asm/pSeries_reconfig.h>
- #include <asm/pci-bridge.h>
-+#include <asm/phyp_dump.h>
- #include <asm/kexec.h>
- #ifdef DEBUG
-@@ -436,7 +437,7 @@ early_param("mem", early_parse_mem);
-  * The device tree may be allocated beyond our memory limit, or inside the
-  * crash kernel region for kdump. If so, move it out of the way.
-  */
--static void move_device_tree(void)
-+static void __init move_device_tree(void)
- {
-       unsigned long start, size;
-       void *p;
-@@ -1040,6 +1041,87 @@ static void __init early_reserve_mem(voi
- #endif
- }
-+#ifdef CONFIG_PHYP_DUMP
-+/**
-+ * phyp_dump_calculate_reserve_size() - reserve variable boot area 5% or arg
-+ *
-+ * Function to find the largest size we need to reserve
-+ * during early boot process.
-+ *
-+ * It either looks for boot param and returns that OR
-+ * returns larger of 256 or 5% rounded down to multiples of 256MB.
-+ *
-+ */
-+static inline unsigned long phyp_dump_calculate_reserve_size(void)
-+{
-+      unsigned long tmp;
-+
-+      if (phyp_dump_info->reserve_bootvar)
-+              return phyp_dump_info->reserve_bootvar;
-+
-+      /* divide by 20 to get 5% of value */
-+      tmp = lmb_end_of_DRAM();
-+      do_div(tmp, 20);
-+
-+      /* round it down in multiples of 256 */
-+      tmp = tmp & ~0x0FFFFFFFUL;
-+
-+      return (tmp > PHYP_DUMP_RMR_END ? tmp : PHYP_DUMP_RMR_END);
-+}
-+
-+/**
-+ * phyp_dump_reserve_mem() - reserve all not-yet-dumped mmemory
-+ *
-+ * This routine may reserve memory regions in the kernel only
-+ * if the system is supported and a dump was taken in last
-+ * boot instance or if the hardware is supported and the
-+ * scratch area needs to be setup. In other instances it returns
-+ * without reserving anything. The memory in case of dump being
-+ * active is freed when the dump is collected (by userland tools).
-+ */
-+static void __init phyp_dump_reserve_mem(void)
-+{
-+      unsigned long base, size;
-+      unsigned long variable_reserve_size;
-+
-+      if (!phyp_dump_info->phyp_dump_configured) {
-+              printk(KERN_ERR "Phyp-dump not supported on this hardware\n");
-+              return;
-+      }
-+
-+      if (!phyp_dump_info->phyp_dump_at_boot) {
-+              printk(KERN_INFO "Phyp-dump disabled at boot time\n");
-+              return;
-+      }
-+
-+      variable_reserve_size = phyp_dump_calculate_reserve_size();
-+
-+      if (phyp_dump_info->phyp_dump_is_active) {
-+              /* Reserve *everything* above RMR.Area freed by userland tools*/
-+              base = variable_reserve_size;
-+              size = lmb_end_of_DRAM() - base;
-+
-+              /* XXX crashed_ram_end is wrong, since it may be beyond
-+               * the memory_limit, it will need to be adjusted. */
-+              lmb_reserve(base, size);
-+
-+              phyp_dump_info->init_reserve_start = base;
-+              phyp_dump_info->init_reserve_size = size;
-+      } else {
-+              size = phyp_dump_info->cpu_state_size +
-+                      phyp_dump_info->hpte_region_size +
-+                      variable_reserve_size;
-+              base = lmb_end_of_DRAM() - size;
-+              lmb_reserve(base, size);
-+              phyp_dump_info->init_reserve_start = base;
-+              phyp_dump_info->init_reserve_size = size;
-+      }
-+}
-+#else
-+static inline void __init phyp_dump_reserve_mem(void) {}
-+#endif /* CONFIG_PHYP_DUMP  && CONFIG_PPC_RTAS */
-+
-+
- void __init early_init_devtree(void *params)
- {
-       DBG(" -> early_init_devtree(%p)\n", params);
-@@ -1052,6 +1134,11 @@ void __init early_init_devtree(void *par
-       of_scan_flat_dt(early_init_dt_scan_rtas, NULL);
- #endif
-+#ifdef CONFIG_PHYP_DUMP
-+      /* scan tree to see if dump occured during last boot */
-+      of_scan_flat_dt(early_init_dt_scan_phyp_dump, NULL);
-+#endif
-+
-       /* Retrieve various informations from the /chosen node of the
-        * device-tree, including the platform type, initrd location and
-        * size, TCE reserve, and more ...
-@@ -1072,6 +1159,7 @@ void __init early_init_devtree(void *par
-       reserve_kdump_trampoline();
-       reserve_crashkernel();
-       early_reserve_mem();
-+      phyp_dump_reserve_mem();
-       lmb_enforce_memory_limit(memory_limit);
-       lmb_analyze();
-@@ -1244,12 +1332,14 @@ EXPORT_SYMBOL(of_node_put);
-  */
- void of_attach_node(struct device_node *np)
- {
--      write_lock(&devtree_lock);
-+      unsigned long flags;
-+
-+      write_lock_irqsave(&devtree_lock, flags);
-       np->sibling = np->parent->child;
-       np->allnext = allnodes;
-       np->parent->child = np;
-       allnodes = np;
--      write_unlock(&devtree_lock);
-+      write_unlock_irqrestore(&devtree_lock, flags);
- }
- /*
-@@ -1260,8 +1350,9 @@ void of_attach_node(struct device_node *
- void of_detach_node(struct device_node *np)
- {
-       struct device_node *parent;
-+      unsigned long flags;
--      write_lock(&devtree_lock);
-+      write_lock_irqsave(&devtree_lock, flags);
-       parent = np->parent;
-       if (!parent)
-@@ -1292,7 +1383,7 @@ void of_detach_node(struct device_node *
-       of_node_set_flag(np, OF_DETACHED);
- out_unlock:
--      write_unlock(&devtree_lock);
-+      write_unlock_irqrestore(&devtree_lock, flags);
- }
- #ifdef CONFIG_PPC_PSERIES
-@@ -1373,20 +1464,21 @@ __initcall(prom_reconfig_setup);
- int prom_add_property(struct device_node* np, struct property* prop)
- {
-       struct property **next;
-+      unsigned long flags;
-       prop->next = NULL;      
--      write_lock(&devtree_lock);
-+      write_lock_irqsave(&devtree_lock, flags);
-       next = &np->properties;
-       while (*next) {
-               if (strcmp(prop->name, (*next)->name) == 0) {
-                       /* duplicate ! don't insert it */
--                      write_unlock(&devtree_lock);
-+                      write_unlock_irqrestore(&devtree_lock, flags);
-                       return -1;
-               }
-               next = &(*next)->next;
-       }
-       *next = prop;
--      write_unlock(&devtree_lock);
-+      write_unlock_irqrestore(&devtree_lock, flags);
- #ifdef CONFIG_PROC_DEVICETREE
-       /* try to add to proc as well if it was initialized */
-@@ -1406,9 +1498,10 @@ int prom_add_property(struct device_node
- int prom_remove_property(struct device_node *np, struct property *prop)
- {
-       struct property **next;
-+      unsigned long flags;
-       int found = 0;
--      write_lock(&devtree_lock);
-+      write_lock_irqsave(&devtree_lock, flags);
-       next = &np->properties;
-       while (*next) {
-               if (*next == prop) {
-@@ -1421,7 +1514,7 @@ int prom_remove_property(struct device_n
-               }
-               next = &(*next)->next;
-       }
--      write_unlock(&devtree_lock);
-+      write_unlock_irqrestore(&devtree_lock, flags);
-       if (!found)
-               return -ENODEV;
-@@ -1447,9 +1540,10 @@ int prom_update_property(struct device_n
-                        struct property *oldprop)
- {
-       struct property **next;
-+      unsigned long flags;
-       int found = 0;
--      write_lock(&devtree_lock);
-+      write_lock_irqsave(&devtree_lock, flags);
-       next = &np->properties;
-       while (*next) {
-               if (*next == oldprop) {
-@@ -1463,7 +1557,7 @@ int prom_update_property(struct device_n
-               }
-               next = &(*next)->next;
-       }
--      write_unlock(&devtree_lock);
-+      write_unlock_irqrestore(&devtree_lock, flags);
-       if (!found)
-               return -ENODEV;
---- a/arch/powerpc/kernel/prom_init.c
-+++ b/arch/powerpc/kernel/prom_init.c
-@@ -2240,6 +2240,14 @@ static void __init fixup_device_tree_efi
-       if (rv != PROM_ERROR && (strcmp(prop, "chrp") == 0))
-               prom_setprop(node, "/", "device_type", "efika", sizeof("efika"));
-+      /* CODEGEN,description is exposed in /proc/cpuinfo so
-+         fix that too */
-+      rv = prom_getprop(node, "CODEGEN,description", prop, sizeof(prop));
-+      if (rv != PROM_ERROR && (strstr(prop, "CHRP")))
-+              prom_setprop(node, "/", "CODEGEN,description",
-+                           "Efika 5200B PowerPC System",
-+                           sizeof("Efika 5200B PowerPC System"));
-+
-       /* Fixup bestcomm interrupts property */
-       node = call_prom("finddevice", 1, 1, ADDR("/builtin/bestcomm"));
-       if (PHANDLE_VALID(node)) {
---- a/arch/powerpc/kernel/rtas.c
-+++ b/arch/powerpc/kernel/rtas.c
-@@ -22,6 +22,7 @@
- #include <linux/smp.h>
- #include <linux/completion.h>
- #include <linux/cpumask.h>
-+#include <linux/lmb.h>
- #include <asm/prom.h>
- #include <asm/rtas.h>
-@@ -34,7 +35,6 @@
- #include <asm/system.h>
- #include <asm/delay.h>
- #include <asm/uaccess.h>
--#include <asm/lmb.h>
- #include <asm/udbg.h>
- #include <asm/syscalls.h>
- #include <asm/smp.h>
-@@ -507,7 +507,7 @@ int rtas_error_rc(int rtas_rc)
-                       break;
-               default:
-                       printk(KERN_ERR "%s: unexpected RTAS error %d\n",
--                                      __FUNCTION__, rtas_rc);
-+                                      __func__, rtas_rc);
-                       rc = -ERANGE;
-                       break;
-       }
---- a/arch/powerpc/kernel/rtas_flash.c
-+++ b/arch/powerpc/kernel/rtas_flash.c
-@@ -807,7 +807,7 @@ int __init rtas_flash_init(void)
-                               rtas_block_ctor);
-       if (!flash_block_cache) {
-               printk(KERN_ERR "%s: failed to create block cache\n",
--                              __FUNCTION__);
-+                              __func__);
-               rc = -ENOMEM;
-               goto cleanup;
-       }
---- a/arch/powerpc/kernel/rtas_pci.c
-+++ b/arch/powerpc/kernel/rtas_pci.c
-@@ -56,21 +56,6 @@ static inline int config_access_valid(st
-       return 0;
- }
--static int of_device_available(struct device_node * dn)
--{
--        const char *status;
--
--        status = of_get_property(dn, "status", NULL);
--
--        if (!status)
--                return 1;
--
--        if (!strcmp(status, "okay"))
--                return 1;
--
--        return 0;
--}
--
- int rtas_read_config(struct pci_dn *pdn, int where, int size, u32 *val)
- {
-       int returnval = -1;
-@@ -117,7 +102,7 @@ static int rtas_pci_read_config(struct p
-       for (dn = busdn->child; dn; dn = dn->sibling) {
-               struct pci_dn *pdn = PCI_DN(dn);
-               if (pdn && pdn->devfn == devfn
--                  && of_device_available(dn))
-+                  && of_device_is_available(dn))
-                       return rtas_read_config(pdn, where, size, val);
-       }
-@@ -164,7 +149,7 @@ static int rtas_pci_write_config(struct 
-       for (dn = busdn->child; dn; dn = dn->sibling) {
-               struct pci_dn *pdn = PCI_DN(dn);
-               if (pdn && pdn->devfn == devfn
--                  && of_device_available(dn))
-+                  && of_device_is_available(dn))
-                       return rtas_write_config(pdn, where, size, val);
-       }
-       return PCIBIOS_DEVICE_NOT_FOUND;
-@@ -326,7 +311,7 @@ int pcibios_remove_root_bus(struct pci_c
-       res = b->resource[0];
-       if (!res->flags) {
--              printk(KERN_ERR "%s: no IO resource for PHB %s\n", __FUNCTION__,
-+              printk(KERN_ERR "%s: no IO resource for PHB %s\n", __func__,
-                               b->name);
-               return 1;
-       }
-@@ -334,13 +319,13 @@ int pcibios_remove_root_bus(struct pci_c
-       rc = pcibios_unmap_io_space(b);
-       if (rc) {
-               printk(KERN_ERR "%s: failed to unmap IO on bus %s\n",
--                      __FUNCTION__, b->name);
-+                      __func__, b->name);
-               return 1;
-       }
-       if (release_resource(res)) {
-               printk(KERN_ERR "%s: failed to release IO on bus %s\n",
--                              __FUNCTION__, b->name);
-+                              __func__, b->name);
-               return 1;
-       }
-@@ -348,13 +333,13 @@ int pcibios_remove_root_bus(struct pci_c
-               res = b->resource[i];
-               if (!res->flags && i == 0) {
-                       printk(KERN_ERR "%s: no MEM resource for PHB %s\n",
--                              __FUNCTION__, b->name);
-+                              __func__, b->name);
-                       return 1;
-               }
-               if (res->flags && release_resource(res)) {
-                       printk(KERN_ERR
-                              "%s: failed to release IO %d on bus %s\n",
--                              __FUNCTION__, i, b->name);
-+                              __func__, i, b->name);
-                       return 1;
-               }
-       }
---- a/arch/powerpc/kernel/setup-common.c
-+++ b/arch/powerpc/kernel/setup-common.c
-@@ -34,6 +34,7 @@
- #include <linux/serial_8250.h>
- #include <linux/debugfs.h>
- #include <linux/percpu.h>
-+#include <linux/lmb.h>
- #include <asm/io.h>
- #include <asm/prom.h>
- #include <asm/processor.h>
-@@ -56,7 +57,6 @@
- #include <asm/cache.h>
- #include <asm/page.h>
- #include <asm/mmu.h>
--#include <asm/lmb.h>
- #include <asm/xmon.h>
- #include <asm/cputhreads.h>
-@@ -167,6 +167,8 @@ static int show_cpuinfo(struct seq_file 
-       unsigned short min;
-       if (cpu_id == NR_CPUS) {
-+              struct device_node *root;
-+              const char *model = NULL;
- #if defined(CONFIG_SMP) && defined(CONFIG_PPC32)
-               unsigned long bogosum = 0;
-               int i;
-@@ -178,6 +180,13 @@ static int show_cpuinfo(struct seq_file 
-               seq_printf(m, "timebase\t: %lu\n", ppc_tb_freq);
-               if (ppc_md.name)
-                       seq_printf(m, "platform\t: %s\n", ppc_md.name);
-+              root = of_find_node_by_path("/");
-+              if (root)
-+                      model = of_get_property(root, "model", NULL);
-+              if (model)
-+                      seq_printf(m, "model\t\t: %s\n", model);
-+              of_node_put(root);
-+
-               if (ppc_md.show_cpuinfo != NULL)
-                       ppc_md.show_cpuinfo(m);
---- a/arch/powerpc/kernel/setup_32.c
-+++ b/arch/powerpc/kernel/setup_32.c
-@@ -172,6 +172,18 @@ int __init ppc_setup_l2cr(char *str)
- }
- __setup("l2cr=", ppc_setup_l2cr);
-+/* Checks "l3cr=xxxx" command-line option */
-+int __init ppc_setup_l3cr(char *str)
-+{
-+      if (cpu_has_feature(CPU_FTR_L3CR)) {
-+              unsigned long val = simple_strtoul(str, NULL, 0);
-+              printk(KERN_INFO "l3cr set to %lx\n", val);
-+              _set_L3CR(val);         /* and enable it */
-+      }
-+      return 1;
-+}
-+__setup("l3cr=", ppc_setup_l3cr);
-+
- #ifdef CONFIG_GENERIC_NVRAM
- /* Generic nvram hooks used by drivers/char/gen_nvram.c */
-@@ -277,7 +289,7 @@ void __init setup_arch(char **cmdline_p)
-       if (ppc_md.panic)
-               setup_panic();
--      init_mm.start_code = PAGE_OFFSET;
-+      init_mm.start_code = (unsigned long)_stext;
-       init_mm.end_code = (unsigned long) _etext;
-       init_mm.end_data = (unsigned long) _edata;
-       init_mm.brk = klimit;
---- a/arch/powerpc/kernel/setup_64.c
-+++ b/arch/powerpc/kernel/setup_64.c
-@@ -33,6 +33,8 @@
- #include <linux/serial_8250.h>
- #include <linux/bootmem.h>
- #include <linux/pci.h>
-+#include <linux/lockdep.h>
-+#include <linux/lmb.h>
- #include <asm/io.h>
- #include <asm/kdump.h>
- #include <asm/prom.h>
-@@ -55,7 +57,6 @@
- #include <asm/cache.h>
- #include <asm/page.h>
- #include <asm/mmu.h>
--#include <asm/lmb.h>
- #include <asm/firmware.h>
- #include <asm/xmon.h>
- #include <asm/udbg.h>
-@@ -178,6 +179,9 @@ void __init early_setup(unsigned long dt
-       /* Enable early debugging if any specified (see udbg.h) */
-       udbg_early_init();
-+      /* Initialize lockdep early or else spinlocks will blow */
-+      lockdep_init();
-+
-       DBG(" -> early_setup(), dt_ptr: 0x%lx\n", dt_ptr);
-       /*
-@@ -510,7 +514,7 @@ void __init setup_arch(char **cmdline_p)
-       if (ppc_md.panic)
-               setup_panic();
--      init_mm.start_code = PAGE_OFFSET;
-+      init_mm.start_code = (unsigned long)_stext;
-       init_mm.end_code = (unsigned long) _etext;
-       init_mm.end_data = (unsigned long) _edata;
-       init_mm.brk = klimit;
---- /dev/null
-+++ b/arch/powerpc/kernel/stacktrace.c
-@@ -0,0 +1,47 @@
-+/*
-+ * Stack trace utility
-+ *
-+ * Copyright 2008 Christoph Hellwig, IBM Corp.
-+ *
-+ *
-+ *      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 <linux/sched.h>
-+#include <linux/stacktrace.h>
-+#include <asm/ptrace.h>
-+#include <asm/asm-offsets.h>
-+
-+/*
-+ * Save stack-backtrace addresses into a stack_trace buffer.
-+ */
-+void save_stack_trace(struct stack_trace *trace)
-+{
-+      unsigned long sp;
-+
-+      asm("mr %0,1" : "=r" (sp));
-+
-+      for (;;) {
-+              unsigned long *stack = (unsigned long *) sp;
-+              unsigned long newsp, ip;
-+
-+              if (!validate_sp(sp, current, STACK_FRAME_OVERHEAD))
-+                      return;
-+
-+              newsp = stack[0];
-+              ip = stack[STACK_FRAME_LR_SAVE];
-+
-+              if (!trace->skip)
-+                      trace->entries[trace->nr_entries++] = ip;
-+              else
-+                      trace->skip--;
-+
-+              if (trace->nr_entries >= trace->max_entries)
-+                      return;
-+
-+              sp = newsp;
-+      }
-+}
---- a/arch/powerpc/kernel/sys_ppc32.c
-+++ b/arch/powerpc/kernel/sys_ppc32.c
-@@ -368,11 +368,6 @@ long compat_sys_execve(unsigned long a0,
-       error = compat_do_execve(filename, compat_ptr(a1), compat_ptr(a2), regs);
--      if (error == 0) {
--              task_lock(current);
--              current->ptrace &= ~PT_DTRACE;
--              task_unlock(current);
--      }
-       putname(filename);
- out:
---- a/arch/powerpc/kernel/vdso.c
-+++ b/arch/powerpc/kernel/vdso.c
-@@ -21,13 +21,14 @@
- #include <linux/elf.h>
- #include <linux/security.h>
- #include <linux/bootmem.h>
-+#include <linux/lmb.h>
- #include <asm/pgtable.h>
- #include <asm/system.h>
- #include <asm/processor.h>
- #include <asm/mmu.h>
- #include <asm/mmu_context.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/machdep.h>
- #include <asm/cputable.h>
- #include <asm/sections.h>
---- a/arch/powerpc/kernel/vio.c
-+++ b/arch/powerpc/kernel/vio.c
-@@ -139,7 +139,7 @@ static int vio_bus_remove(struct device 
-  */
- int vio_register_driver(struct vio_driver *viodrv)
- {
--      printk(KERN_DEBUG "%s: driver %s registering\n", __FUNCTION__,
-+      printk(KERN_DEBUG "%s: driver %s registering\n", __func__,
-               viodrv->driver.name);
-       /* fill in 'struct driver' fields */
-@@ -184,7 +184,7 @@ struct vio_dev *vio_register_device_node
-       /* we need the 'device_type' property, in order to match with drivers */
-       if (of_node->type == NULL) {
-               printk(KERN_WARNING "%s: node %s missing 'device_type'\n",
--                              __FUNCTION__,
-+                              __func__,
-                               of_node->name ? of_node->name : "<unknown>");
-               return NULL;
-       }
-@@ -192,7 +192,7 @@ struct vio_dev *vio_register_device_node
-       unit_address = of_get_property(of_node, "reg", NULL);
-       if (unit_address == NULL) {
-               printk(KERN_WARNING "%s: node %s missing 'reg'\n",
--                              __FUNCTION__,
-+                              __func__,
-                               of_node->name ? of_node->name : "<unknown>");
-               return NULL;
-       }
-@@ -227,7 +227,7 @@ struct vio_dev *vio_register_device_node
-       /* register with generic device framework */
-       if (device_register(&viodev->dev)) {
-               printk(KERN_ERR "%s: failed to register device %s\n",
--                              __FUNCTION__, viodev->dev.bus_id);
-+                              __func__, viodev->dev.bus_id);
-               /* XXX free TCE table */
-               kfree(viodev);
-               return NULL;
-@@ -258,7 +258,7 @@ static int __init vio_bus_init(void)
-       err = device_register(&vio_bus_device.dev);
-       if (err) {
-               printk(KERN_WARNING "%s: device_register returned %i\n",
--                              __FUNCTION__, err);
-+                              __func__, err);
-               return err;
-       }
---- a/arch/powerpc/kernel/vmlinux.lds.S
-+++ b/arch/powerpc/kernel/vmlinux.lds.S
-@@ -1,11 +1,9 @@
- #ifdef CONFIG_PPC64
--#include <asm/page.h>
- #define PROVIDE32(x)  PROVIDE(__unused__##x)
- #else
--#define PAGE_SIZE     4096
--#define KERNELBASE    CONFIG_KERNEL_START
- #define PROVIDE32(x)  PROVIDE(x)
- #endif
-+#include <asm/page.h>
- #include <asm-generic/vmlinux.lds.h>
- #include <asm/cache.h>
-@@ -33,7 +31,7 @@ SECTIONS
-  */
-       /* Text and gots */
--      .text : {
-+      .text : AT(ADDR(.text) - LOAD_OFFSET) {
-               ALIGN_FUNCTION();
-               *(.text.head)
-               _text = .;
-@@ -58,7 +56,7 @@ SECTIONS
-       RODATA
-       /* Exception & bug tables */
--      __ex_table : {
-+      __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
-               __start___ex_table = .;
-               *(__ex_table)
-               __stop___ex_table = .;
-@@ -74,7 +72,7 @@ SECTIONS
-       . = ALIGN(PAGE_SIZE);
-       __init_begin = .;
--      .init.text : {
-+      .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
-               _sinittext = .;
-               INIT_TEXT
-               _einittext = .;
-@@ -83,11 +81,11 @@ SECTIONS
-       /* .exit.text is discarded at runtime, not link time,
-        * to deal with references from __bug_table
-        */
--      .exit.text : {
-+      .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) {
-               EXIT_TEXT
-       }
--      .init.data : {
-+      .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
-               INIT_DATA
-               __vtop_table_begin = .;
-               *(.vtop_fixup);
-@@ -103,19 +101,19 @@ SECTIONS
-       }
-       . = ALIGN(16);
--      .init.setup : {
-+      .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
-               __setup_start = .;
-               *(.init.setup)
-               __setup_end = .;
-       }
--      .initcall.init : {
-+      .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
-               __initcall_start = .;
-               INITCALLS
-               __initcall_end = .;
-               }
--      .con_initcall.init : {
-+      .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
-               __con_initcall_start = .;
-               *(.con_initcall.init)
-               __con_initcall_end = .;
-@@ -124,14 +122,14 @@ SECTIONS
-       SECURITY_INIT
-       . = ALIGN(8);
--      __ftr_fixup : {
-+      __ftr_fixup : AT(ADDR(__ftr_fixup) - LOAD_OFFSET) {
-               __start___ftr_fixup = .;
-               *(__ftr_fixup)
-               __stop___ftr_fixup = .;
-       }
- #ifdef CONFIG_PPC64
-       . = ALIGN(8);
--      __fw_ftr_fixup : {
-+      __fw_ftr_fixup : AT(ADDR(__fw_ftr_fixup) - LOAD_OFFSET) {
-               __start___fw_ftr_fixup = .;
-               *(__fw_ftr_fixup)
-               __stop___fw_ftr_fixup = .;
-@@ -139,14 +137,14 @@ SECTIONS
- #endif
- #ifdef CONFIG_BLK_DEV_INITRD
-       . = ALIGN(PAGE_SIZE);
--      .init.ramfs : {
-+      .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
-               __initramfs_start = .;
-               *(.init.ramfs)
-               __initramfs_end = .;
-       }
- #endif
-       . = ALIGN(PAGE_SIZE);
--      .data.percpu : {
-+      .data.percpu  : AT(ADDR(.data.percpu) - LOAD_OFFSET) {
-               __per_cpu_start = .;
-               *(.data.percpu)
-               *(.data.percpu.shared_aligned)
-@@ -154,7 +152,7 @@ SECTIONS
-       }
-       . = ALIGN(8);
--      .machine.desc : {
-+      .machine.desc : AT(ADDR(.machine.desc) - LOAD_OFFSET) {
-               __machine_desc_start = . ;
-               *(.machine.desc)
-               __machine_desc_end = . ;
-@@ -172,25 +170,24 @@ SECTIONS
-       _sdata = .;
- #ifdef CONFIG_PPC32
--      .data    :
--      {
-+      .data : AT(ADDR(.data) - LOAD_OFFSET) {
-               DATA_DATA
-               *(.sdata)
-               *(.got.plt) *(.got)
-       }
- #else
--      .data : {
-+      .data : AT(ADDR(.data) - LOAD_OFFSET) {
-               DATA_DATA
-               *(.data.rel*)
-               *(.toc1)
-               *(.branch_lt)
-       }
--      .opd : {
-+      .opd : AT(ADDR(.opd) - LOAD_OFFSET) {
-               *(.opd)
-       }
--      .got : {
-+      .got : AT(ADDR(.got) - LOAD_OFFSET) {
-               __toc_start = .;
-               *(.got)
-               *(.toc)
-@@ -207,26 +204,26 @@ SECTIONS
- #else
-       . = ALIGN(16384);
- #endif
--      .data.init_task : {
-+      .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
-               *(.data.init_task)
-       }
-       . = ALIGN(PAGE_SIZE);
--      .data.page_aligned : {
-+      .data.page_aligned : AT(ADDR(.data.page_aligned) - LOAD_OFFSET) {
-               *(.data.page_aligned)
-       }
--      .data.cacheline_aligned : {
-+      .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET) {
-               *(.data.cacheline_aligned)
-       }
-       . = ALIGN(L1_CACHE_BYTES);
--      .data.read_mostly : {
-+      .data.read_mostly : AT(ADDR(.data.read_mostly) - LOAD_OFFSET) {
-               *(.data.read_mostly)
-       }
-       . = ALIGN(PAGE_SIZE);
--      __data_nosave : {
-+      .data_nosave : AT(ADDR(.data_nosave) - LOAD_OFFSET) {
-               __nosave_begin = .;
-               *(.data.nosave)
-               . = ALIGN(PAGE_SIZE);
-@@ -237,7 +234,7 @@ SECTIONS
-  * And finally the bss
-  */
--      .bss : {
-+      .bss : AT(ADDR(.bss) - LOAD_OFFSET) {
-               __bss_start = .;
-               *(.sbss) *(.scommon)
-               *(.dynbss)
---- a/arch/powerpc/lib/rheap.c
-+++ b/arch/powerpc/lib/rheap.c
-@@ -54,7 +54,7 @@ static int grow(rh_info_t * info, int ma
-       new_blocks = max_blocks - info->max_blocks;
--      block = kmalloc(sizeof(rh_block_t) * max_blocks, GFP_KERNEL);
-+      block = kmalloc(sizeof(rh_block_t) * max_blocks, GFP_ATOMIC);
-       if (block == NULL)
-               return -ENOMEM;
-@@ -258,7 +258,7 @@ rh_info_t *rh_create(unsigned int alignm
-       if ((alignment & (alignment - 1)) != 0)
-               return ERR_PTR(-EINVAL);
--      info = kmalloc(sizeof(*info), GFP_KERNEL);
-+      info = kmalloc(sizeof(*info), GFP_ATOMIC);
-       if (info == NULL)
-               return ERR_PTR(-ENOMEM);
---- a/arch/powerpc/lib/string.S
-+++ b/arch/powerpc/lib/string.S
-@@ -75,6 +75,20 @@ _GLOBAL(strcmp)
-       beq     1b
-       blr
-+_GLOBAL(strncmp)
-+      PPC_LCMPI r5,0
-+      beqlr
-+      mtctr   r5
-+      addi    r5,r3,-1
-+      addi    r4,r4,-1
-+1:    lbzu    r3,1(r5)
-+      cmpwi   1,r3,0
-+      lbzu    r0,1(r4)
-+      subf.   r3,r0,r3
-+      beqlr   1
-+      bdnzt   eq,1b
-+      blr
-+
- _GLOBAL(strlen)
-       addi    r4,r3,-1
- 1:    lbzu    r0,1(r4)
---- a/arch/powerpc/math-emu/fabs.c
-+++ b/arch/powerpc/math-emu/fabs.c
-@@ -9,7 +9,7 @@ fabs(u32 *frD, u32 *frB)
-       frD[1] = frB[1];
- #ifdef DEBUG
--      printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p: ", __func__, frD, frB);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/fadd.c
-+++ b/arch/powerpc/math-emu/fadd.c
-@@ -14,7 +14,7 @@ fadd(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fadds.c
-+++ b/arch/powerpc/math-emu/fadds.c
-@@ -15,7 +15,7 @@ fadds(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fcmpo.c
-+++ b/arch/powerpc/math-emu/fcmpo.c
-@@ -15,7 +15,7 @@ fcmpo(u32 *ccr, int crfD, void *frA, voi
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p (%08x) %d %p %p\n", __FUNCTION__, ccr, *ccr, crfD, frA, frB);
-+      printk("%s: %p (%08x) %d %p %p\n", __func__, ccr, *ccr, crfD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fcmpu.c
-+++ b/arch/powerpc/math-emu/fcmpu.c
-@@ -14,7 +14,7 @@ fcmpu(u32 *ccr, int crfD, void *frA, voi
-       long cmp;
- #ifdef DEBUG
--      printk("%s: %p (%08x) %d %p %p\n", __FUNCTION__, ccr, *ccr, crfD, frA, frB);
-+      printk("%s: %p (%08x) %d %p %p\n", __func__, ccr, *ccr, crfD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fctiw.c
-+++ b/arch/powerpc/math-emu/fctiw.c
-@@ -16,7 +16,7 @@ fctiw(u32 *frD, void *frB)
-       frD[1] = r;
- #ifdef DEBUG
--      printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p: ", __func__, frD, frB);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/fctiwz.c
-+++ b/arch/powerpc/math-emu/fctiwz.c
-@@ -23,7 +23,7 @@ fctiwz(u32 *frD, void *frB)
-       __FPU_FPSCR = fpscr;
- #ifdef DEBUG
--      printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p: ", __func__, frD, frB);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/fdiv.c
-+++ b/arch/powerpc/math-emu/fdiv.c
-@@ -14,7 +14,7 @@ fdiv(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
-@@ -28,13 +28,13 @@ fdiv(void *frD, void *frA, void *frB)
-       if (A_c == FP_CLS_ZERO && B_c == FP_CLS_ZERO) {
-               ret |= EFLAG_VXZDZ;
- #ifdef DEBUG
--              printk("%s: FPSCR_VXZDZ raised\n", __FUNCTION__);
-+              printk("%s: FPSCR_VXZDZ raised\n", __func__);
- #endif
-       }
-       if (A_c == FP_CLS_INF && B_c == FP_CLS_INF) {
-               ret |= EFLAG_VXIDI;
- #ifdef DEBUG
--              printk("%s: FPSCR_VXIDI raised\n", __FUNCTION__);
-+              printk("%s: FPSCR_VXIDI raised\n", __func__);
- #endif
-       }
---- a/arch/powerpc/math-emu/fdivs.c
-+++ b/arch/powerpc/math-emu/fdivs.c
-@@ -15,7 +15,7 @@ fdivs(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
-@@ -29,13 +29,13 @@ fdivs(void *frD, void *frA, void *frB)
-       if (A_c == FP_CLS_ZERO && B_c == FP_CLS_ZERO) {
-               ret |= EFLAG_VXZDZ;
- #ifdef DEBUG
--              printk("%s: FPSCR_VXZDZ raised\n", __FUNCTION__);
-+              printk("%s: FPSCR_VXZDZ raised\n", __func__);
- #endif
-       }
-       if (A_c == FP_CLS_INF && B_c == FP_CLS_INF) {
-               ret |= EFLAG_VXIDI;
- #ifdef DEBUG
--              printk("%s: FPSCR_VXIDI raised\n", __FUNCTION__);
-+              printk("%s: FPSCR_VXIDI raised\n", __func__);
- #endif
-       }
---- a/arch/powerpc/math-emu/fmadd.c
-+++ b/arch/powerpc/math-emu/fmadd.c
-@@ -16,7 +16,7 @@ fmadd(void *frD, void *frA, void *frB, v
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fmadds.c
-+++ b/arch/powerpc/math-emu/fmadds.c
-@@ -17,7 +17,7 @@ fmadds(void *frD, void *frA, void *frB, 
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fmr.c
-+++ b/arch/powerpc/math-emu/fmr.c
-@@ -9,7 +9,7 @@ fmr(u32 *frD, u32 *frB)
-       frD[1] = frB[1];
- #ifdef DEBUG
--      printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p: ", __func__, frD, frB);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/fmsub.c
-+++ b/arch/powerpc/math-emu/fmsub.c
-@@ -16,7 +16,7 @@ fmsub(void *frD, void *frA, void *frB, v
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fmsubs.c
-+++ b/arch/powerpc/math-emu/fmsubs.c
-@@ -17,7 +17,7 @@ fmsubs(void *frD, void *frA, void *frB, 
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fmul.c
-+++ b/arch/powerpc/math-emu/fmul.c
-@@ -14,7 +14,7 @@ fmul(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fmuls.c
-+++ b/arch/powerpc/math-emu/fmuls.c
-@@ -15,7 +15,7 @@ fmuls(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fnabs.c
-+++ b/arch/powerpc/math-emu/fnabs.c
-@@ -9,7 +9,7 @@ fnabs(u32 *frD, u32 *frB)
-       frD[1] = frB[1];
- #ifdef DEBUG
--      printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p: ", __func__, frD, frB);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/fneg.c
-+++ b/arch/powerpc/math-emu/fneg.c
-@@ -9,7 +9,7 @@ fneg(u32 *frD, u32 *frB)
-       frD[1] = frB[1];
- #ifdef DEBUG
--      printk("%s: D %p, B %p: ", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p: ", __func__, frD, frB);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/fnmadd.c
-+++ b/arch/powerpc/math-emu/fnmadd.c
-@@ -16,7 +16,7 @@ fnmadd(void *frD, void *frA, void *frB, 
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fnmadds.c
-+++ b/arch/powerpc/math-emu/fnmadds.c
-@@ -17,7 +17,7 @@ fnmadds(void *frD, void *frA, void *frB,
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fnmsub.c
-+++ b/arch/powerpc/math-emu/fnmsub.c
-@@ -16,7 +16,7 @@ fnmsub(void *frD, void *frA, void *frB, 
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fnmsubs.c
-+++ b/arch/powerpc/math-emu/fnmsubs.c
-@@ -17,7 +17,7 @@ fnmsubs(void *frD, void *frA, void *frB,
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fres.c
-+++ b/arch/powerpc/math-emu/fres.c
-@@ -6,7 +6,7 @@ int
- fres(void *frD, void *frB)
- {
- #ifdef DEBUG
--      printk("%s: %p %p\n", __FUNCTION__, frD, frB);
-+      printk("%s: %p %p\n", __func__, frD, frB);
- #endif
-       return -ENOSYS;
- }
---- a/arch/powerpc/math-emu/frsp.c
-+++ b/arch/powerpc/math-emu/frsp.c
-@@ -12,7 +12,7 @@ frsp(void *frD, void *frB)
-       FP_DECL_D(B);
- #ifdef DEBUG
--      printk("%s: D %p, B %p\n", __FUNCTION__, frD, frB);
-+      printk("%s: D %p, B %p\n", __func__, frD, frB);
- #endif
-       __FP_UNPACK_D(B, frB);
---- a/arch/powerpc/math-emu/frsqrte.c
-+++ b/arch/powerpc/math-emu/frsqrte.c
-@@ -6,7 +6,7 @@ int
- frsqrte(void *frD, void *frB)
- {
- #ifdef DEBUG
--      printk("%s: %p %p\n", __FUNCTION__, frD, frB);
-+      printk("%s: %p %p\n", __func__, frD, frB);
- #endif
-       return 0;
- }
---- a/arch/powerpc/math-emu/fsel.c
-+++ b/arch/powerpc/math-emu/fsel.c
-@@ -11,7 +11,7 @@ fsel(u32 *frD, void *frA, u32 *frB, u32 
-       FP_DECL_D(A);
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frA, frB, frC);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frA, frB, frC);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fsqrt.c
-+++ b/arch/powerpc/math-emu/fsqrt.c
-@@ -13,7 +13,7 @@ fsqrt(void *frD, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frB);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frB);
- #endif
-       __FP_UNPACK_D(B, frB);
---- a/arch/powerpc/math-emu/fsqrts.c
-+++ b/arch/powerpc/math-emu/fsqrts.c
-@@ -14,7 +14,7 @@ fsqrts(void *frD, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p %p\n", __FUNCTION__, frD, frB);
-+      printk("%s: %p %p %p %p\n", __func__, frD, frB);
- #endif
-       __FP_UNPACK_D(B, frB);
---- a/arch/powerpc/math-emu/fsub.c
-+++ b/arch/powerpc/math-emu/fsub.c
-@@ -14,7 +14,7 @@ fsub(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/fsubs.c
-+++ b/arch/powerpc/math-emu/fsubs.c
-@@ -15,7 +15,7 @@ fsubs(void *frD, void *frA, void *frB)
-       int ret = 0;
- #ifdef DEBUG
--      printk("%s: %p %p %p\n", __FUNCTION__, frD, frA, frB);
-+      printk("%s: %p %p %p\n", __func__, frD, frA, frB);
- #endif
-       __FP_UNPACK_D(A, frA);
---- a/arch/powerpc/math-emu/lfd.c
-+++ b/arch/powerpc/math-emu/lfd.c
-@@ -11,7 +11,7 @@ lfd(void *frD, void *ea)
-       if (copy_from_user(frD, ea, sizeof(double)))
-               return -EFAULT;
- #ifdef DEBUG
--      printk("%s: D %p, ea %p: ", __FUNCTION__, frD, ea);
-+      printk("%s: D %p, ea %p: ", __func__, frD, ea);
-       dump_double(frD);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/lfs.c
-+++ b/arch/powerpc/math-emu/lfs.c
-@@ -14,7 +14,7 @@ lfs(void *frD, void *ea)
-       float f;
- #ifdef DEBUG
--      printk("%s: D %p, ea %p\n", __FUNCTION__, frD, ea);
-+      printk("%s: D %p, ea %p\n", __func__, frD, ea);
- #endif
-       if (copy_from_user(&f, ea, sizeof(float)))
---- a/arch/powerpc/math-emu/mcrfs.c
-+++ b/arch/powerpc/math-emu/mcrfs.c
-@@ -10,7 +10,7 @@ mcrfs(u32 *ccr, u32 crfD, u32 crfS)
-       u32 value, clear;
- #ifdef DEBUG
--      printk("%s: %p (%08x) %d %d\n", __FUNCTION__, ccr, *ccr, crfD, crfS);
-+      printk("%s: %p (%08x) %d %d\n", __func__, ccr, *ccr, crfD, crfS);
- #endif
-       clear = 15 << ((7 - crfS) << 2);
-@@ -24,7 +24,7 @@ mcrfs(u32 *ccr, u32 crfD, u32 crfS)
-       *ccr |= (value << ((7 - crfD) << 2));
- #ifdef DEBUG
--      printk("CR: %08x\n", __FUNCTION__, *ccr);
-+      printk("CR: %08x\n", __func__, *ccr);
- #endif
-       return 0;
---- a/arch/powerpc/math-emu/mffs.c
-+++ b/arch/powerpc/math-emu/mffs.c
-@@ -10,7 +10,7 @@ mffs(u32 *frD)
-       frD[1] = __FPU_FPSCR;
- #ifdef DEBUG
--      printk("%s: frD %p: %08x.%08x\n", __FUNCTION__, frD, frD[0], frD[1]);
-+      printk("%s: frD %p: %08x.%08x\n", __func__, frD, frD[0], frD[1]);
- #endif
-       return 0;
---- a/arch/powerpc/math-emu/mtfsb0.c
-+++ b/arch/powerpc/math-emu/mtfsb0.c
-@@ -11,7 +11,7 @@ mtfsb0(int crbD)
-               __FPU_FPSCR &= ~(1 << (31 - crbD));
- #ifdef DEBUG
--      printk("%s: %d %08lx\n", __FUNCTION__, crbD, __FPU_FPSCR);
-+      printk("%s: %d %08lx\n", __func__, crbD, __FPU_FPSCR);
- #endif
-       return 0;
---- a/arch/powerpc/math-emu/mtfsb1.c
-+++ b/arch/powerpc/math-emu/mtfsb1.c
-@@ -11,7 +11,7 @@ mtfsb1(int crbD)
-               __FPU_FPSCR |= (1 << (31 - crbD));
- #ifdef DEBUG
--      printk("%s: %d %08lx\n", __FUNCTION__, crbD, __FPU_FPSCR);
-+      printk("%s: %d %08lx\n", __func__, crbD, __FPU_FPSCR);
- #endif
-       return 0;
---- a/arch/powerpc/math-emu/mtfsf.c
-+++ b/arch/powerpc/math-emu/mtfsf.c
-@@ -38,7 +38,7 @@ mtfsf(unsigned int FM, u32 *frB)
-       __FPU_FPSCR |= (frB[1] & mask);
- #ifdef DEBUG
--      printk("%s: %02x %p: %08lx\n", __FUNCTION__, FM, frB, __FPU_FPSCR);
-+      printk("%s: %02x %p: %08lx\n", __func__, FM, frB, __FPU_FPSCR);
- #endif
-       return 0;
---- a/arch/powerpc/math-emu/mtfsfi.c
-+++ b/arch/powerpc/math-emu/mtfsfi.c
-@@ -16,7 +16,7 @@ mtfsfi(unsigned int crfD, unsigned int I
-       __FPU_FPSCR |= (IMM & 0xf) << ((7 - crfD) << 2);
- #ifdef DEBUG
--      printk("%s: %d %x: %08lx\n", __FUNCTION__, crfD, IMM, __FPU_FPSCR);
-+      printk("%s: %d %x: %08lx\n", __func__, crfD, IMM, __FPU_FPSCR);
- #endif
-       return 0;
---- a/arch/powerpc/math-emu/stfd.c
-+++ b/arch/powerpc/math-emu/stfd.c
-@@ -7,7 +7,7 @@ stfd(void *frS, void *ea)
- {
- #if 0
- #ifdef DEBUG
--      printk("%s: S %p, ea %p: ", __FUNCTION__, frS, ea);
-+      printk("%s: S %p, ea %p: ", __func__, frS, ea);
-       dump_double(frS);
-       printk("\n");
- #endif
---- a/arch/powerpc/math-emu/stfiwx.c
-+++ b/arch/powerpc/math-emu/stfiwx.c
-@@ -6,7 +6,7 @@ int
- stfiwx(u32 *frS, void *ea)
- {
- #ifdef DEBUG
--      printk("%s: %p %p\n", __FUNCTION__, frS, ea);
-+      printk("%s: %p %p\n", __func__, frS, ea);
- #endif
-       if (copy_to_user(ea, &frS[1], sizeof(frS[1])))
---- a/arch/powerpc/math-emu/stfs.c
-+++ b/arch/powerpc/math-emu/stfs.c
-@@ -15,7 +15,7 @@ stfs(void *frS, void *ea)
-       int err;
- #ifdef DEBUG
--      printk("%s: S %p, ea %p\n", __FUNCTION__, frS, ea);
-+      printk("%s: S %p, ea %p\n", __func__, frS, ea);
- #endif
-       __FP_UNPACK_D(A, frS);
---- a/arch/powerpc/mm/40x_mmu.c
-+++ b/arch/powerpc/mm/40x_mmu.c
-@@ -97,7 +97,7 @@ unsigned long __init mmu_mapin_ram(void)
-       phys_addr_t p;
-       v = KERNELBASE;
--      p = PPC_MEMSTART;
-+      p = 0;
-       s = total_lowmem;
-       if (__map_without_ltlbs)
---- a/arch/powerpc/mm/44x_mmu.c
-+++ b/arch/powerpc/mm/44x_mmu.c
-@@ -67,7 +67,7 @@ unsigned long __init mmu_mapin_ram(void)
-       /* Pin in enough TLBs to cover any lowmem not covered by the
-        * initial 256M mapping established in head_44x.S */
--      for (addr = PPC_PIN_SIZE; addr < total_lowmem;
-+      for (addr = PPC_PIN_SIZE; addr < lowmem_end_addr;
-            addr += PPC_PIN_SIZE)
-               ppc44x_pin_tlb(addr + PAGE_OFFSET, addr);
---- a/arch/powerpc/mm/Makefile
-+++ b/arch/powerpc/mm/Makefile
-@@ -6,7 +6,7 @@ ifeq ($(CONFIG_PPC64),y)
- EXTRA_CFLAGS  += -mno-minimal-toc
- endif
--obj-y                         := fault.o mem.o lmb.o \
-+obj-y                         := fault.o mem.o \
-                                  init_$(CONFIG_WORD_SIZE).o \
-                                  pgtable_$(CONFIG_WORD_SIZE).o \
-                                  mmu_context_$(CONFIG_WORD_SIZE).o
---- a/arch/powerpc/mm/fsl_booke_mmu.c
-+++ b/arch/powerpc/mm/fsl_booke_mmu.c
-@@ -49,18 +49,15 @@
- #include <asm/mmu.h>
- #include <asm/uaccess.h>
- #include <asm/smp.h>
--#include <asm/bootx.h>
- #include <asm/machdep.h>
- #include <asm/setup.h>
-+#include "mmu_decl.h"
-+
- extern void loadcam_entry(unsigned int index);
- unsigned int tlbcam_index;
- unsigned int num_tlbcam_entries;
- static unsigned long __cam0, __cam1, __cam2;
--extern unsigned long total_lowmem;
--extern unsigned long __max_low_memory;
--extern unsigned long __initial_memory_limit;
--#define MAX_LOW_MEM   CONFIG_LOWMEM_SIZE
- #define NUM_TLBCAMS   (16)
-@@ -165,15 +162,15 @@ void invalidate_tlbcam_entry(int index)
- void __init cam_mapin_ram(unsigned long cam0, unsigned long cam1,
-               unsigned long cam2)
- {
--      settlbcam(0, PAGE_OFFSET, PPC_MEMSTART, cam0, _PAGE_KERNEL, 0);
-+      settlbcam(0, PAGE_OFFSET, memstart_addr, cam0, _PAGE_KERNEL, 0);
-       tlbcam_index++;
-       if (cam1) {
-               tlbcam_index++;
--              settlbcam(1, PAGE_OFFSET+cam0, PPC_MEMSTART+cam0, cam1, _PAGE_KERNEL, 0);
-+              settlbcam(1, PAGE_OFFSET+cam0, memstart_addr+cam0, cam1, _PAGE_KERNEL, 0);
-       }
-       if (cam2) {
-               tlbcam_index++;
--              settlbcam(2, PAGE_OFFSET+cam0+cam1, PPC_MEMSTART+cam0+cam1, cam2, _PAGE_KERNEL, 0);
-+              settlbcam(2, PAGE_OFFSET+cam0+cam1, memstart_addr+cam0+cam1, cam2, _PAGE_KERNEL, 0);
-       }
- }
-@@ -196,35 +193,32 @@ unsigned long __init mmu_mapin_ram(void)
- void __init
- adjust_total_lowmem(void)
- {
--      unsigned long max_low_mem = MAX_LOW_MEM;
--      unsigned long cam_max = 0x10000000;
--      unsigned long ram;
--
--      /* adjust CAM size to max_low_mem */
--      if (max_low_mem < cam_max)
--              cam_max = max_low_mem;
--
--      /* adjust lowmem size to max_low_mem */
--      if (max_low_mem < total_lowmem)
--              ram = max_low_mem;
--      else
--              ram = total_lowmem;
-+      phys_addr_t max_lowmem_size = __max_low_memory;
-+      phys_addr_t cam_max_size = 0x10000000;
-+      phys_addr_t ram;
-+
-+      /* adjust CAM size to max_lowmem_size */
-+      if (max_lowmem_size < cam_max_size)
-+              cam_max_size = max_lowmem_size;
-+
-+      /* adjust lowmem size to max_lowmem_size */
-+      ram = min(max_lowmem_size, total_lowmem);
-       /* Calculate CAM values */
-       __cam0 = 1UL << 2 * (__ilog2(ram) / 2);
--      if (__cam0 > cam_max)
--              __cam0 = cam_max;
-+      if (__cam0 > cam_max_size)
-+              __cam0 = cam_max_size;
-       ram -= __cam0;
-       if (ram) {
-               __cam1 = 1UL << 2 * (__ilog2(ram) / 2);
--              if (__cam1 > cam_max)
--                      __cam1 = cam_max;
-+              if (__cam1 > cam_max_size)
-+                      __cam1 = cam_max_size;
-               ram -= __cam1;
-       }
-       if (ram) {
-               __cam2 = 1UL << 2 * (__ilog2(ram) / 2);
--              if (__cam2 > cam_max)
--                      __cam2 = cam_max;
-+              if (__cam2 > cam_max_size)
-+                      __cam2 = cam_max_size;
-               ram -= __cam2;
-       }
-@@ -232,6 +226,6 @@ adjust_total_lowmem(void)
-                       " CAM2=%ldMb residual: %ldMb\n",
-                       __cam0 >> 20, __cam1 >> 20, __cam2 >> 20,
-                       (total_lowmem - __cam0 - __cam1 - __cam2) >> 20);
--      __max_low_memory = max_low_mem = __cam0 + __cam1 + __cam2;
--      __initial_memory_limit = __max_low_memory;
-+      __max_low_memory = __cam0 + __cam1 + __cam2;
-+      __initial_memory_limit_addr = memstart_addr + __max_low_memory;
- }
---- a/arch/powerpc/mm/hash_utils_64.c
-+++ b/arch/powerpc/mm/hash_utils_64.c
-@@ -31,6 +31,7 @@
- #include <linux/cache.h>
- #include <linux/init.h>
- #include <linux/signal.h>
-+#include <linux/lmb.h>
- #include <asm/processor.h>
- #include <asm/pgtable.h>
-@@ -41,7 +42,7 @@
- #include <asm/system.h>
- #include <asm/uaccess.h>
- #include <asm/machdep.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/abs_addr.h>
- #include <asm/tlbflush.h>
- #include <asm/io.h>
-@@ -191,6 +192,29 @@ int htab_bolt_mapping(unsigned long vsta
-       return ret < 0 ? ret : 0;
- }
-+#ifdef CONFIG_MEMORY_HOTPLUG
-+static int htab_remove_mapping(unsigned long vstart, unsigned long vend,
-+                    int psize, int ssize)
-+{
-+      unsigned long vaddr;
-+      unsigned int step, shift;
-+
-+      shift = mmu_psize_defs[psize].shift;
-+      step = 1 << shift;
-+
-+      if (!ppc_md.hpte_removebolted) {
-+              printk(KERN_WARNING "Platform doesn't implement "
-+                              "hpte_removebolted\n");
-+              return -EINVAL;
-+      }
-+
-+      for (vaddr = vstart; vaddr < vend; vaddr += step)
-+              ppc_md.hpte_removebolted(vaddr, psize, ssize);
-+
-+      return 0;
-+}
-+#endif /* CONFIG_MEMORY_HOTPLUG */
-+
- static int __init htab_dt_scan_seg_sizes(unsigned long node,
-                                        const char *uname, int depth,
-                                        void *data)
-@@ -434,6 +458,12 @@ void create_section_mapping(unsigned lon
-                       _PAGE_ACCESSED | _PAGE_DIRTY | _PAGE_COHERENT | PP_RWXX,
-                       mmu_linear_psize, mmu_kernel_ssize));
- }
-+
-+int remove_section_mapping(unsigned long start, unsigned long end)
-+{
-+      return htab_remove_mapping(start, end, mmu_linear_psize,
-+                      mmu_kernel_ssize);
-+}
- #endif /* CONFIG_MEMORY_HOTPLUG */
- static inline void make_bl(unsigned int *insn_addr, void *func)
---- a/arch/powerpc/mm/init_32.c
-+++ b/arch/powerpc/mm/init_32.c
-@@ -30,6 +30,7 @@
- #include <linux/highmem.h>
- #include <linux/initrd.h>
- #include <linux/pagemap.h>
-+#include <linux/lmb.h>
- #include <asm/pgalloc.h>
- #include <asm/prom.h>
-@@ -41,7 +42,6 @@
- #include <asm/machdep.h>
- #include <asm/btext.h>
- #include <asm/tlb.h>
--#include <asm/lmb.h>
- #include <asm/sections.h>
- #include "mmu_decl.h"
-@@ -59,8 +59,8 @@ DEFINE_PER_CPU(struct mmu_gather, mmu_ga
- unsigned long total_memory;
- unsigned long total_lowmem;
--unsigned long ppc_memstart;
--unsigned long ppc_memoffset = PAGE_OFFSET;
-+phys_addr_t memstart_addr;
-+phys_addr_t lowmem_end_addr;
- int boot_mapsize;
- #ifdef CONFIG_PPC_PMAC
-@@ -95,10 +95,10 @@ int __map_without_ltlbs;
- unsigned long __max_low_memory = MAX_LOW_MEM;
- /*
-- * limit of what is accessible with initial MMU setup -
-+ * address of the limit of what is accessible with initial MMU setup -
-  * 256MB usually, but only 16MB on 601.
-  */
--unsigned long __initial_memory_limit = 0x10000000;
-+phys_addr_t __initial_memory_limit_addr = (phys_addr_t)0x10000000;
- /*
-  * Check for command-line options that affect what MMU_init will do.
-@@ -131,10 +131,10 @@ void __init MMU_init(void)
-       /* 601 can only access 16MB at the moment */
-       if (PVR_VER(mfspr(SPRN_PVR)) == 1)
--              __initial_memory_limit = 0x01000000;
-+              __initial_memory_limit_addr = 0x01000000;
-       /* 8xx can only access 8MB at the moment */
-       if (PVR_VER(mfspr(SPRN_PVR)) == 0x50)
--              __initial_memory_limit = 0x00800000;
-+              __initial_memory_limit_addr = 0x00800000;
-       /* parse args from command line */
-       MMU_setup();
-@@ -145,8 +145,8 @@ void __init MMU_init(void)
-               printk(KERN_WARNING "Only using first contiguous memory region");
-       }
--      total_memory = lmb_end_of_DRAM();
--      total_lowmem = total_memory;
-+      total_lowmem = total_memory = lmb_end_of_DRAM() - memstart_addr;
-+      lowmem_end_addr = memstart_addr + total_lowmem;
- #ifdef CONFIG_FSL_BOOKE
-       /* Freescale Book-E parts expect lowmem to be mapped by fixed TLB
-@@ -157,9 +157,10 @@ void __init MMU_init(void)
-       if (total_lowmem > __max_low_memory) {
-               total_lowmem = __max_low_memory;
-+              lowmem_end_addr = memstart_addr + total_lowmem;
- #ifndef CONFIG_HIGHMEM
-               total_memory = total_lowmem;
--              lmb_enforce_memory_limit(total_lowmem);
-+              lmb_enforce_memory_limit(lowmem_end_addr);
-               lmb_analyze();
- #endif /* CONFIG_HIGHMEM */
-       }
-@@ -184,8 +185,6 @@ void __init MMU_init(void)
-       /* Map in I/O resources */
-       if (ppc_md.progress)
-               ppc_md.progress("MMU:setio", 0x302);
--      if (ppc_md.setup_io_mappings)
--              ppc_md.setup_io_mappings();
-       /* Initialize the context management stuff */
-       mmu_context_init();
-@@ -208,7 +207,7 @@ void __init *early_get_page(void)
-               p = alloc_bootmem_pages(PAGE_SIZE);
-       } else {
-               p = __va(lmb_alloc_base(PAGE_SIZE, PAGE_SIZE,
--                                      __initial_memory_limit));
-+                                      __initial_memory_limit_addr));
-       }
-       return p;
- }
-@@ -276,7 +275,7 @@ static int __init setup_kcore(void)
-               kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
-               if (!kcore_mem)
--                      panic("%s: kmalloc failed\n", __FUNCTION__);
-+                      panic("%s: kmalloc failed\n", __func__);
-               /* must stay under 32 bits */
-               if ( 0xfffffffful - (unsigned long)__va(base) < size) {
---- a/arch/powerpc/mm/init_64.c
-+++ b/arch/powerpc/mm/init_64.c
-@@ -38,11 +38,11 @@
- #include <linux/nodemask.h>
- #include <linux/module.h>
- #include <linux/poison.h>
-+#include <linux/lmb.h>
- #include <asm/pgalloc.h>
- #include <asm/page.h>
- #include <asm/prom.h>
--#include <asm/lmb.h>
- #include <asm/rtas.h>
- #include <asm/io.h>
- #include <asm/mmu_context.h>
-@@ -72,8 +72,7 @@
- #warning TASK_SIZE is smaller than it needs to be.
- #endif
--/* max amount of RAM to use */
--unsigned long __max_memory;
-+phys_addr_t memstart_addr;
- void free_initmem(void)
- {
-@@ -122,7 +121,7 @@ static int __init setup_kcore(void)
-               /* GFP_ATOMIC to avoid might_sleep warnings during boot */
-               kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
-               if (!kcore_mem)
--                      panic("%s: kmalloc failed\n", __FUNCTION__);
-+                      panic("%s: kmalloc failed\n", __func__);
-               kclist_add(kcore_mem, __va(base), size);
-       }
---- a/arch/powerpc/mm/lmb.c
-+++ /dev/null
-@@ -1,357 +0,0 @@
--/*
-- * Procedures for maintaining information about logical memory blocks.
-- *
-- * Peter Bergner, IBM Corp.   June 2001.
-- * Copyright (C) 2001 Peter Bergner.
-- * 
-- *      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 <linux/kernel.h>
--#include <linux/init.h>
--#include <linux/bitops.h>
--#include <asm/types.h>
--#include <asm/page.h>
--#include <asm/prom.h>
--#include <asm/lmb.h>
--#ifdef CONFIG_PPC32
--#include "mmu_decl.h"         /* for __max_low_memory */
--#endif
--
--#undef DEBUG
--
--#ifdef DEBUG
--#include <asm/udbg.h>
--#define DBG(fmt...) udbg_printf(fmt)
--#else
--#define DBG(fmt...)
--#endif
--
--#define LMB_ALLOC_ANYWHERE    0
--
--struct lmb lmb;
--
--void lmb_dump_all(void)
--{
--#ifdef DEBUG
--      unsigned long i;
--
--      DBG("lmb_dump_all:\n");
--      DBG("    memory.cnt               = 0x%lx\n", lmb.memory.cnt);
--      DBG("    memory.size              = 0x%lx\n", lmb.memory.size);
--      for (i=0; i < lmb.memory.cnt ;i++) {
--              DBG("    memory.region[0x%x].base       = 0x%lx\n",
--                          i, lmb.memory.region[i].base);
--              DBG("                 .size     = 0x%lx\n",
--                          lmb.memory.region[i].size);
--      }
--
--      DBG("\n    reserved.cnt   = 0x%lx\n", lmb.reserved.cnt);
--      DBG("    reserved.size    = 0x%lx\n", lmb.reserved.size);
--      for (i=0; i < lmb.reserved.cnt ;i++) {
--              DBG("    reserved.region[0x%x].base       = 0x%lx\n",
--                          i, lmb.reserved.region[i].base);
--              DBG("                 .size     = 0x%lx\n",
--                          lmb.reserved.region[i].size);
--      }
--#endif /* DEBUG */
--}
--
--static unsigned long __init lmb_addrs_overlap(unsigned long base1,
--              unsigned long size1, unsigned long base2, unsigned long size2)
--{
--      return ((base1 < (base2+size2)) && (base2 < (base1+size1)));
--}
--
--static long __init lmb_addrs_adjacent(unsigned long base1, unsigned long size1,
--              unsigned long base2, unsigned long size2)
--{
--      if (base2 == base1 + size1)
--              return 1;
--      else if (base1 == base2 + size2)
--              return -1;
--
--      return 0;
--}
--
--static long __init lmb_regions_adjacent(struct lmb_region *rgn,
--              unsigned long r1, unsigned long r2)
--{
--      unsigned long base1 = rgn->region[r1].base;
--      unsigned long size1 = rgn->region[r1].size;
--      unsigned long base2 = rgn->region[r2].base;
--      unsigned long size2 = rgn->region[r2].size;
--
--      return lmb_addrs_adjacent(base1, size1, base2, size2);
--}
--
--static void __init lmb_remove_region(struct lmb_region *rgn, unsigned long r)
--{
--      unsigned long i;
--
--      for (i = r; i < rgn->cnt - 1; i++) {
--              rgn->region[i].base = rgn->region[i + 1].base;
--              rgn->region[i].size = rgn->region[i + 1].size;
--      }
--      rgn->cnt--;
--}
--
--/* Assumption: base addr of region 1 < base addr of region 2 */
--static void __init lmb_coalesce_regions(struct lmb_region *rgn,
--              unsigned long r1, unsigned long r2)
--{
--      rgn->region[r1].size += rgn->region[r2].size;
--      lmb_remove_region(rgn, r2);
--}
--
--/* This routine called with relocation disabled. */
--void __init lmb_init(void)
--{
--      /* Create a dummy zero size LMB which will get coalesced away later.
--       * This simplifies the lmb_add() code below...
--       */
--      lmb.memory.region[0].base = 0;
--      lmb.memory.region[0].size = 0;
--      lmb.memory.cnt = 1;
--
--      /* Ditto. */
--      lmb.reserved.region[0].base = 0;
--      lmb.reserved.region[0].size = 0;
--      lmb.reserved.cnt = 1;
--}
--
--/* This routine may be called with relocation disabled. */
--void __init lmb_analyze(void)
--{
--      int i;
--
--      lmb.memory.size = 0;
--
--      for (i = 0; i < lmb.memory.cnt; i++)
--              lmb.memory.size += lmb.memory.region[i].size;
--}
--
--/* This routine called with relocation disabled. */
--static long __init lmb_add_region(struct lmb_region *rgn, unsigned long base,
--                                unsigned long size)
--{
--      unsigned long coalesced = 0;
--      long adjacent, i;
--
--      /* First try and coalesce this LMB with another. */
--      for (i=0; i < rgn->cnt; i++) {
--              unsigned long rgnbase = rgn->region[i].base;
--              unsigned long rgnsize = rgn->region[i].size;
--
--              if ((rgnbase == base) && (rgnsize == size))
--                      /* Already have this region, so we're done */
--                      return 0;
--
--              adjacent = lmb_addrs_adjacent(base,size,rgnbase,rgnsize);
--              if ( adjacent > 0 ) {
--                      rgn->region[i].base -= size;
--                      rgn->region[i].size += size;
--                      coalesced++;
--                      break;
--              }
--              else if ( adjacent < 0 ) {
--                      rgn->region[i].size += size;
--                      coalesced++;
--                      break;
--              }
--      }
--
--      if ((i < rgn->cnt-1) && lmb_regions_adjacent(rgn, i, i+1) ) {
--              lmb_coalesce_regions(rgn, i, i+1);
--              coalesced++;
--      }
--
--      if (coalesced)
--              return coalesced;
--      if (rgn->cnt >= MAX_LMB_REGIONS)
--              return -1;
--
--      /* Couldn't coalesce the LMB, so add it to the sorted table. */
--      for (i = rgn->cnt-1; i >= 0; i--) {
--              if (base < rgn->region[i].base) {
--                      rgn->region[i+1].base = rgn->region[i].base;
--                      rgn->region[i+1].size = rgn->region[i].size;
--              } else {
--                      rgn->region[i+1].base = base;
--                      rgn->region[i+1].size = size;
--                      break;
--              }
--      }
--      rgn->cnt++;
--
--      return 0;
--}
--
--/* This routine may be called with relocation disabled. */
--long __init lmb_add(unsigned long base, unsigned long size)
--{
--      struct lmb_region *_rgn = &(lmb.memory);
--
--      /* On pSeries LPAR systems, the first LMB is our RMO region. */
--      if (base == 0)
--              lmb.rmo_size = size;
--
--      return lmb_add_region(_rgn, base, size);
--
--}
--
--long __init lmb_reserve(unsigned long base, unsigned long size)
--{
--      struct lmb_region *_rgn = &(lmb.reserved);
--
--      BUG_ON(0 == size);
--
--      return lmb_add_region(_rgn, base, size);
--}
--
--long __init lmb_overlaps_region(struct lmb_region *rgn, unsigned long base,
--                              unsigned long size)
--{
--      unsigned long i;
--
--      for (i=0; i < rgn->cnt; i++) {
--              unsigned long rgnbase = rgn->region[i].base;
--              unsigned long rgnsize = rgn->region[i].size;
--              if ( lmb_addrs_overlap(base,size,rgnbase,rgnsize) ) {
--                      break;
--              }
--      }
--
--      return (i < rgn->cnt) ? i : -1;
--}
--
--unsigned long __init lmb_alloc(unsigned long size, unsigned long align)
--{
--      return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
--}
--
--unsigned long __init lmb_alloc_base(unsigned long size, unsigned long align,
--                                  unsigned long max_addr)
--{
--      unsigned long alloc;
--
--      alloc = __lmb_alloc_base(size, align, max_addr);
--
--      if (alloc == 0)
--              panic("ERROR: Failed to allocate 0x%lx bytes below 0x%lx.\n",
--                              size, max_addr);
--
--      return alloc;
--}
--
--unsigned long __init __lmb_alloc_base(unsigned long size, unsigned long align,
--                                  unsigned long max_addr)
--{
--      long i, j;
--      unsigned long base = 0;
--
--      BUG_ON(0 == size);
--
--#ifdef CONFIG_PPC32
--      /* On 32-bit, make sure we allocate lowmem */
--      if (max_addr == LMB_ALLOC_ANYWHERE)
--              max_addr = __max_low_memory;
--#endif
--      for (i = lmb.memory.cnt-1; i >= 0; i--) {
--              unsigned long lmbbase = lmb.memory.region[i].base;
--              unsigned long lmbsize = lmb.memory.region[i].size;
--
--              if (max_addr == LMB_ALLOC_ANYWHERE)
--                      base = _ALIGN_DOWN(lmbbase + lmbsize - size, align);
--              else if (lmbbase < max_addr) {
--                      base = min(lmbbase + lmbsize, max_addr);
--                      base = _ALIGN_DOWN(base - size, align);
--              } else
--                      continue;
--
--              while ((lmbbase <= base) &&
--                     ((j = lmb_overlaps_region(&lmb.reserved, base, size)) >= 0) )
--                      base = _ALIGN_DOWN(lmb.reserved.region[j].base - size,
--                                         align);
--
--              if ((base != 0) && (lmbbase <= base))
--                      break;
--      }
--
--      if (i < 0)
--              return 0;
--
--      lmb_add_region(&lmb.reserved, base, size);
--
--      return base;
--}
--
--/* You must call lmb_analyze() before this. */
--unsigned long __init lmb_phys_mem_size(void)
--{
--      return lmb.memory.size;
--}
--
--unsigned long __init lmb_end_of_DRAM(void)
--{
--      int idx = lmb.memory.cnt - 1;
--
--      return (lmb.memory.region[idx].base + lmb.memory.region[idx].size);
--}
--
--/* You must call lmb_analyze() after this. */
--void __init lmb_enforce_memory_limit(unsigned long memory_limit)
--{
--      unsigned long i, limit;
--      struct lmb_property *p;
--
--      if (! memory_limit)
--              return;
--
--      /* Truncate the lmb regions to satisfy the memory limit. */
--      limit = memory_limit;
--      for (i = 0; i < lmb.memory.cnt; i++) {
--              if (limit > lmb.memory.region[i].size) {
--                      limit -= lmb.memory.region[i].size;
--                      continue;
--              }
--
--              lmb.memory.region[i].size = limit;
--              lmb.memory.cnt = i + 1;
--              break;
--      }
--
--      if (lmb.memory.region[0].size < lmb.rmo_size)
--              lmb.rmo_size = lmb.memory.region[0].size;
--
--      /* And truncate any reserves above the limit also. */
--      for (i = 0; i < lmb.reserved.cnt; i++) {
--              p = &lmb.reserved.region[i];
--
--              if (p->base > memory_limit)
--                      p->size = 0;
--              else if ((p->base + p->size) > memory_limit)
--                      p->size = memory_limit - p->base;
--
--              if (p->size == 0) {
--                      lmb_remove_region(&lmb.reserved, i);
--                      i--;
--              }
--      }
--}
--
--int __init lmb_is_reserved(unsigned long addr)
--{
--      int i;
--
--      for (i = 0; i < lmb.reserved.cnt; i++) {
--              unsigned long upper = lmb.reserved.region[i].base +
--                                    lmb.reserved.region[i].size - 1;
--              if ((addr >= lmb.reserved.region[i].base) && (addr <= upper))
--                      return 1;
--      }
--      return 0;
--}
---- a/arch/powerpc/mm/mem.c
-+++ b/arch/powerpc/mm/mem.c
-@@ -31,6 +31,7 @@
- #include <linux/initrd.h>
- #include <linux/pagemap.h>
- #include <linux/suspend.h>
-+#include <linux/lmb.h>
- #include <asm/pgalloc.h>
- #include <asm/prom.h>
-@@ -42,7 +43,6 @@
- #include <asm/machdep.h>
- #include <asm/btext.h>
- #include <asm/tlb.h>
--#include <asm/lmb.h>
- #include <asm/sections.h>
- #include <asm/vdso.h>
-@@ -111,7 +111,7 @@ int memory_add_physaddr_to_nid(u64 start
- }
- #endif
--int __devinit arch_add_memory(int nid, u64 start, u64 size)
-+int arch_add_memory(int nid, u64 start, u64 size)
- {
-       struct pglist_data *pgdata;
-       struct zone *zone;
-@@ -175,7 +175,6 @@ void show_mem(void)
-       printk("Mem-info:\n");
-       show_free_areas();
--      printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
-       for_each_online_pgdat(pgdat) {
-               unsigned long flags;
-               pgdat_resize_lock(pgdat, &flags);
-@@ -217,9 +216,11 @@ void __init do_init_bootmem(void)
-       unsigned long total_pages;
-       int boot_mapsize;
--      max_pfn = total_pages = lmb_end_of_DRAM() >> PAGE_SHIFT;
-+      max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT;
-+      total_pages = (lmb_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT;
- #ifdef CONFIG_HIGHMEM
-       total_pages = total_lowmem >> PAGE_SHIFT;
-+      max_low_pfn = lowmem_end_addr >> PAGE_SHIFT;
- #endif
-       /*
-@@ -245,18 +246,18 @@ void __init do_init_bootmem(void)
-        * present.
-        */
- #ifdef CONFIG_HIGHMEM
--      free_bootmem_with_active_regions(0, total_lowmem >> PAGE_SHIFT);
-+      free_bootmem_with_active_regions(0, lowmem_end_addr >> PAGE_SHIFT);
-       /* reserve the sections we're already using */
-       for (i = 0; i < lmb.reserved.cnt; i++) {
-               unsigned long addr = lmb.reserved.region[i].base +
-                                    lmb_size_bytes(&lmb.reserved, i) - 1;
--              if (addr < total_lowmem)
-+              if (addr < lowmem_end_addr)
-                       reserve_bootmem(lmb.reserved.region[i].base,
-                                       lmb_size_bytes(&lmb.reserved, i),
-                                       BOOTMEM_DEFAULT);
--              else if (lmb.reserved.region[i].base < total_lowmem) {
--                      unsigned long adjusted_size = total_lowmem -
-+              else if (lmb.reserved.region[i].base < lowmem_end_addr) {
-+                      unsigned long adjusted_size = lowmem_end_addr -
-                                     lmb.reserved.region[i].base;
-                       reserve_bootmem(lmb.reserved.region[i].base,
-                                       adjusted_size, BOOTMEM_DEFAULT);
-@@ -326,7 +327,7 @@ void __init paging_init(void)
-              (top_of_ram - total_ram) >> 20);
-       memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
- #ifdef CONFIG_HIGHMEM
--      max_zone_pfns[ZONE_DMA] = total_lowmem >> PAGE_SHIFT;
-+      max_zone_pfns[ZONE_DMA] = lowmem_end_addr >> PAGE_SHIFT;
-       max_zone_pfns[ZONE_HIGHMEM] = top_of_ram >> PAGE_SHIFT;
- #else
-       max_zone_pfns[ZONE_DMA] = top_of_ram >> PAGE_SHIFT;
-@@ -381,7 +382,7 @@ void __init mem_init(void)
-       {
-               unsigned long pfn, highmem_mapnr;
--              highmem_mapnr = total_lowmem >> PAGE_SHIFT;
-+              highmem_mapnr = lowmem_end_addr >> PAGE_SHIFT;
-               for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) {
-                       struct page *page = pfn_to_page(pfn);
-                       if (lmb_is_reserved(pfn << PAGE_SHIFT))
---- a/arch/powerpc/mm/mmu_decl.h
-+++ b/arch/powerpc/mm/mmu_decl.h
-@@ -48,9 +48,11 @@ extern unsigned int num_tlbcam_entries;
- extern unsigned long ioremap_bot;
- extern unsigned long __max_low_memory;
--extern unsigned long __initial_memory_limit;
-+extern phys_addr_t __initial_memory_limit_addr;
- extern unsigned long total_memory;
- extern unsigned long total_lowmem;
-+extern phys_addr_t memstart_addr;
-+extern phys_addr_t lowmem_end_addr;
- /* ...and now those things that may be slightly different between processor
-  * architectures.  -- Dan
---- a/arch/powerpc/mm/numa.c
-+++ b/arch/powerpc/mm/numa.c
-@@ -17,8 +17,9 @@
- #include <linux/nodemask.h>
- #include <linux/cpu.h>
- #include <linux/notifier.h>
-+#include <linux/lmb.h>
- #include <asm/sparsemem.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/system.h>
- #include <asm/smp.h>
---- a/arch/powerpc/mm/pgtable_32.c
-+++ b/arch/powerpc/mm/pgtable_32.c
-@@ -281,12 +281,13 @@ int map_page(unsigned long va, phys_addr
-  */
- void __init mapin_ram(void)
- {
--      unsigned long v, p, s, f;
-+      unsigned long v, s, f;
-+      phys_addr_t p;
-       int ktext;
-       s = mmu_mapin_ram();
-       v = KERNELBASE + s;
--      p = PPC_MEMSTART + s;
-+      p = memstart_addr + s;
-       for (; s < total_lowmem; s += PAGE_SIZE) {
-               ktext = ((char *) v >= _stext && (char *) v < etext);
-               f = ktext ?_PAGE_RAM_TEXT : _PAGE_RAM;
---- a/arch/powerpc/mm/ppc_mmu_32.c
-+++ b/arch/powerpc/mm/ppc_mmu_32.c
-@@ -26,11 +26,11 @@
- #include <linux/mm.h>
- #include <linux/init.h>
- #include <linux/highmem.h>
-+#include <linux/lmb.h>
- #include <asm/prom.h>
- #include <asm/mmu.h>
- #include <asm/machdep.h>
--#include <asm/lmb.h>
- #include "mmu_decl.h"
-@@ -82,7 +82,6 @@ unsigned long __init mmu_mapin_ram(void)
- #else
-       unsigned long tot, bl, done;
-       unsigned long max_size = (256<<20);
--      unsigned long align;
-       if (__map_without_bats) {
-               printk(KERN_DEBUG "RAM mapped without BATs\n");
-@@ -93,19 +92,13 @@ unsigned long __init mmu_mapin_ram(void)
-       /* Make sure we don't map a block larger than the
-          smallest alignment of the physical address. */
--      /* alignment of PPC_MEMSTART */
--      align = ~(PPC_MEMSTART-1) & PPC_MEMSTART;
--      /* set BAT block size to MIN(max_size, align) */
--      if (align && align < max_size)
--              max_size = align;
--
-       tot = total_lowmem;
-       for (bl = 128<<10; bl < max_size; bl <<= 1) {
-               if (bl * 2 > tot)
-                       break;
-       }
--      setbat(2, KERNELBASE, PPC_MEMSTART, bl, _PAGE_RAM);
-+      setbat(2, KERNELBASE, 0, bl, _PAGE_RAM);
-       done = (unsigned long)bat_addrs[2].limit - KERNELBASE + 1;
-       if ((done < tot) && !bat_addrs[3].limit) {
-               /* use BAT3 to cover a bit more */
-@@ -113,7 +106,7 @@ unsigned long __init mmu_mapin_ram(void)
-               for (bl = 128<<10; bl < max_size; bl <<= 1)
-                       if (bl * 2 > tot)
-                               break;
--              setbat(3, KERNELBASE+done, PPC_MEMSTART+done, bl, _PAGE_RAM);
-+              setbat(3, KERNELBASE+done, done, bl, _PAGE_RAM);
-               done = (unsigned long)bat_addrs[3].limit - KERNELBASE + 1;
-       }
-@@ -240,7 +233,7 @@ void __init MMU_init_hw(void)
-        */
-       if ( ppc_md.progress ) ppc_md.progress("hash:find piece", 0x322);
-       Hash = __va(lmb_alloc_base(Hash_size, Hash_size,
--                                 __initial_memory_limit));
-+                                 __initial_memory_limit_addr));
-       cacheable_memzero(Hash, Hash_size);
-       _SDR1 = __pa(Hash) | SDR1_LOW_BITS;
---- a/arch/powerpc/mm/stab.c
-+++ b/arch/powerpc/mm/stab.c
-@@ -12,12 +12,14 @@
-  *      2 of the License, or (at your option) any later version.
-  */
-+#include <linux/lmb.h>
-+
- #include <asm/pgtable.h>
- #include <asm/mmu.h>
- #include <asm/mmu_context.h>
- #include <asm/paca.h>
- #include <asm/cputable.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/abs_addr.h>
- #include <asm/firmware.h>
- #include <asm/iseries/hv_call.h>
---- a/arch/powerpc/oprofile/cell/spu_task_sync.c
-+++ b/arch/powerpc/oprofile/cell/spu_task_sync.c
-@@ -68,7 +68,7 @@ static struct cached_info *get_cached_in
-       if (spu_num >= num_spu_nodes) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: Invalid index %d into spu info cache\n",
--                     __FUNCTION__, __LINE__, spu_num);
-+                     __func__, __LINE__, spu_num);
-               ret_info = NULL;
-               goto out;
-       }
-@@ -115,7 +115,7 @@ prepare_cached_spu_info(struct spu *spu,
-       if (!info) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: create vma_map failed\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               retval = -ENOMEM;
-               goto err_alloc;
-       }
-@@ -123,7 +123,7 @@ prepare_cached_spu_info(struct spu *spu,
-       if (!new_map) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: create vma_map failed\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               retval = -ENOMEM;
-               goto err_alloc;
-       }
-@@ -171,7 +171,7 @@ static int release_cached_info(int spu_i
-                       printk(KERN_ERR "SPU_PROF: "
-                               "%s, line %d: "
-                               "Invalid index %d into spu info cache\n",
--                              __FUNCTION__, __LINE__, spu_index);
-+                              __func__, __LINE__, spu_index);
-                       goto out;
-               }
-               end = spu_index + 1;
-@@ -273,7 +273,7 @@ fail_no_image_cookie:
-       printk(KERN_ERR "SPU_PROF: "
-               "%s, line %d: Cannot find dcookie for SPU binary\n",
--              __FUNCTION__, __LINE__);
-+              __func__, __LINE__);
-       goto out;
- }
-@@ -467,7 +467,7 @@ int spu_sync_stop(void)
-       if (ret) {
-               printk(KERN_ERR "SPU_PROF: "
-                       "%s, line %d: spu_switch_event_unregister returned %d\n",
--                      __FUNCTION__, __LINE__, ret);
-+                      __func__, __LINE__, ret);
-               goto out;
-       }
---- a/arch/powerpc/oprofile/cell/vma_map.c
-+++ b/arch/powerpc/oprofile/cell/vma_map.c
-@@ -72,7 +72,7 @@ vma_map_add(struct vma_to_fileoffset_map
-               kzalloc(sizeof(struct vma_to_fileoffset_map), GFP_KERNEL);
-       if (!new) {
-               printk(KERN_ERR "SPU_PROF: %s, line %d: malloc failed\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               vma_map_free(map);
-               return NULL;
-       }
-@@ -134,19 +134,19 @@ struct vma_to_fileoffset_map *create_vma
-       if (memcmp(ehdr.e_ident, expected, EI_PAD) != 0) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: Unexpected e_ident parsing SPU ELF\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               goto fail;
-       }
-       if (ehdr.e_machine != EM_SPU) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: Unexpected e_machine parsing SPU ELF\n",
--                     __FUNCTION__,  __LINE__);
-+                     __func__,  __LINE__);
-               goto fail;
-       }
-       if (ehdr.e_type != ET_EXEC) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: Unexpected e_type parsing SPU ELF\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               goto fail;
-       }
-       phdr_start = spu_elf_start + ehdr.e_phoff;
-@@ -232,7 +232,7 @@ struct vma_to_fileoffset_map *create_vma
-       if (overlay_tbl_offset < 0) {
-               printk(KERN_ERR "SPU_PROF: "
-                      "%s, line %d: Error finding SPU overlay table\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               goto fail;
-       }
-       ovly_table = spu_elf_start + overlay_tbl_offset;
---- a/arch/powerpc/oprofile/op_model_cell.c
-+++ b/arch/powerpc/oprofile/op_model_cell.c
-@@ -216,7 +216,7 @@ static void pm_rtas_reset_signals(u32 no
-                * failure to stop OProfile.
-                */
-               printk(KERN_WARNING "%s: rtas returned: %d\n",
--                     __FUNCTION__, ret);
-+                     __func__, ret);
- }
- static int pm_rtas_activate_signals(u32 node, u32 count)
-@@ -255,7 +255,7 @@ static int pm_rtas_activate_signals(u32 
-               if (unlikely(ret)) {
-                       printk(KERN_WARNING "%s: rtas returned: %d\n",
--                             __FUNCTION__, ret);
-+                             __func__, ret);
-                       return -EIO;
-               }
-       }
-@@ -560,7 +560,7 @@ static int cell_reg_setup(struct op_coun
-               if (unlikely(spu_rtas_token == RTAS_UNKNOWN_SERVICE)) {
-                       printk(KERN_ERR
-                              "%s: rtas token ibm,cbe-spu-perftools unknown\n",
--                             __FUNCTION__);
-+                             __func__);
-                       return -EIO;
-               }
-       }
-@@ -576,7 +576,7 @@ static int cell_reg_setup(struct op_coun
-       if (unlikely(pm_rtas_token == RTAS_UNKNOWN_SERVICE)) {
-               printk(KERN_ERR
-                      "%s: rtas token ibm,cbe-perftools unknown\n",
--                     __FUNCTION__);
-+                     __func__);
-               return -EIO;
-       }
-@@ -853,7 +853,7 @@ static int pm_rtas_activate_spu_profilin
-       if (unlikely(ret)) {
-               printk(KERN_WARNING "%s: rtas returned: %d\n",
--                     __FUNCTION__, ret);
-+                     __func__, ret);
-               return -EIO;
-       }
-@@ -949,7 +949,7 @@ static int cell_global_start_spu(struct 
-               if (unlikely(ret != 0)) {
-                       printk(KERN_ERR
-                              "%s: rtas call ibm,cbe-spu-perftools failed, return = %d\n",
--                             __FUNCTION__, ret);
-+                             __func__, ret);
-                       rtas_error = -EIO;
-                       goto out;
-               }
-@@ -1061,7 +1061,7 @@ static void cell_global_stop_spu(void)
-               if (unlikely(rtn_value != 0)) {
-                       printk(KERN_ERR
-                              "%s: rtas call ibm,cbe-spu-perftools failed, return = %d\n",
--                             __FUNCTION__, rtn_value);
-+                             __func__, rtn_value);
-               }
-               /* Deactivate the signals */
---- a/arch/powerpc/platforms/40x/ep405.c
-+++ b/arch/powerpc/platforms/40x/ep405.c
-@@ -29,6 +29,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
-+#include <asm/ppc4xx.h>
- static struct device_node *bcsr_node;
- static void __iomem *bcsr_regs;
-@@ -119,5 +120,6 @@ define_machine(ep405) {
-       .progress               = udbg_progress,
-       .init_IRQ               = uic_init_tree,
-       .get_irq                = uic_get_irq,
-+      .restart                = ppc4xx_reset_system,
-       .calibrate_decr         = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/40x/kilauea.c
-+++ b/arch/powerpc/platforms/40x/kilauea.c
-@@ -1,7 +1,7 @@
- /*
-  * Kilauea board specific routines
-  *
-- * Copyright 2007 DENX Software Engineering, Stefan Roese <sr@denx.de>
-+ * Copyright 2007-2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
-  *
-  * Based on the Walnut code by
-  * Josh Boyer <jwboyer@linux.vnet.ibm.com>
-@@ -20,6 +20,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id kilauea_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -54,5 +55,6 @@ define_machine(kilauea) {
-       .progress                       = udbg_progress,
-       .init_IRQ                       = uic_init_tree,
-       .get_irq                        = uic_get_irq,
-+      .restart                        = ppc4xx_reset_system,
-       .calibrate_decr                 = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/40x/makalu.c
-+++ b/arch/powerpc/platforms/40x/makalu.c
-@@ -20,6 +20,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id makalu_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -54,5 +55,6 @@ define_machine(makalu) {
-       .progress                       = udbg_progress,
-       .init_IRQ                       = uic_init_tree,
-       .get_irq                        = uic_get_irq,
-+      .restart                        = ppc4xx_reset_system,
-       .calibrate_decr                 = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/40x/virtex.c
-+++ b/arch/powerpc/platforms/40x/virtex.c
-@@ -14,6 +14,7 @@
- #include <asm/prom.h>
- #include <asm/time.h>
- #include <asm/xilinx_intc.h>
-+#include <asm/ppc4xx.h>
- static struct of_device_id xilinx_of_bus_ids[] __initdata = {
-       { .compatible = "xlnx,plb-v46-1.00.a", },
-@@ -48,5 +49,6 @@ define_machine(virtex) {
-       .probe                  = virtex_probe,
-       .init_IRQ               = xilinx_intc_init_tree,
-       .get_irq                = xilinx_intc_get_irq,
-+      .restart                = ppc4xx_reset_system,
-       .calibrate_decr         = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/40x/walnut.c
-+++ b/arch/powerpc/platforms/40x/walnut.c
-@@ -26,6 +26,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id walnut_of_bus[] = {
-       { .compatible = "ibm,plb3", },
-@@ -61,5 +62,6 @@ define_machine(walnut) {
-       .progress               = udbg_progress,
-       .init_IRQ               = uic_init_tree,
-       .get_irq                = uic_get_irq,
--      .calibrate_decr = generic_calibrate_decr,
-+      .restart                = ppc4xx_reset_system,
-+      .calibrate_decr         = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/44x/44x.h
-+++ b/arch/powerpc/platforms/44x/44x.h
-@@ -3,6 +3,5 @@
- extern u8 as1_readb(volatile u8 __iomem  *addr);
- extern void as1_writeb(u8 data, volatile u8 __iomem *addr);
--extern void ppc44x_reset_system(char *cmd);
- #endif /* __POWERPC_PLATFORMS_44X_44X_H */
---- a/arch/powerpc/platforms/44x/Kconfig
-+++ b/arch/powerpc/platforms/44x/Kconfig
-@@ -67,6 +67,25 @@ config WARP
-         See http://www.pikatechnologies.com/ and follow the "PIKA for Computer
-         Telephony Developers" link for more information.
-+config CANYONLANDS
-+      bool "Canyonlands"
-+      depends on 44x
-+      default n
-+      select 460EX
-+      select PCI
-+      select PPC4xx_PCI_EXPRESS
-+      help
-+        This option enables support for the AMCC PPC460EX evaluation board.
-+
-+config YOSEMITE
-+      bool "Yosemite"
-+      depends on 44x
-+      default n
-+      select 440EP
-+      select PCI
-+      help
-+        This option enables support for the AMCC PPC440EP evaluation board.
-+
- #config LUAN
- #     bool "Luan"
- #     depends on 44x
-@@ -122,6 +141,14 @@ config 440SPe
-       bool
-       select IBM_NEW_EMAC_EMAC4
-+config 460EX
-+      bool
-+      select PPC_FPU
-+      select IBM_NEW_EMAC_EMAC4
-+      select IBM_NEW_EMAC_RGMII
-+      select IBM_NEW_EMAC_ZMII
-+      select IBM_NEW_EMAC_TAH
-+
- # 44x errata/workaround config symbols, selected by the CPU models above
- config IBM440EP_ERR42
-       bool
---- a/arch/powerpc/platforms/44x/Makefile
-+++ b/arch/powerpc/platforms/44x/Makefile
-@@ -1,9 +1,11 @@
--obj-$(CONFIG_44x)     := misc_44x.o
-+obj-$(CONFIG_44x)     := misc_44x.o idle.o
- obj-$(CONFIG_EBONY)   += ebony.o
- obj-$(CONFIG_TAISHAN) += taishan.o
- obj-$(CONFIG_BAMBOO)  += bamboo.o
-+obj-$(CONFIG_YOSEMITE)        += bamboo.o
- obj-$(CONFIG_SEQUOIA) += sequoia.o
- obj-$(CONFIG_KATMAI)  += katmai.o
- obj-$(CONFIG_RAINIER) += rainier.o
- obj-$(CONFIG_WARP)    += warp.o
- obj-$(CONFIG_WARP)    += warp-nand.o
-+obj-$(CONFIG_CANYONLANDS) += canyonlands.o
---- a/arch/powerpc/platforms/44x/bamboo.c
-+++ b/arch/powerpc/platforms/44x/bamboo.c
-@@ -22,8 +22,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
--
--#include "44x.h"
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id bamboo_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -53,11 +52,11 @@ static int __init bamboo_probe(void)
- }
- define_machine(bamboo) {
--      .name                           = "Bamboo",
--      .probe                          = bamboo_probe,
--      .progress                       = udbg_progress,
--      .init_IRQ                       = uic_init_tree,
--      .get_irq                        = uic_get_irq,
--      .restart                        = ppc44x_reset_system,
-+      .name                   = "Bamboo",
-+      .probe                  = bamboo_probe,
-+      .progress               = udbg_progress,
-+      .init_IRQ               = uic_init_tree,
-+      .get_irq                = uic_get_irq,
-+      .restart                = ppc4xx_reset_system,
-       .calibrate_decr         = generic_calibrate_decr,
- };
---- /dev/null
-+++ b/arch/powerpc/platforms/44x/canyonlands.c
-@@ -0,0 +1,63 @@
-+/*
-+ * Canyonlands board specific routines
-+ *
-+ * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
-+ *
-+ * Based on the Katmai code by
-+ * Benjamin Herrenschmidt <benh@kernel.crashing.org>
-+ * Copyright 2007 IBM Corp.
-+ * Josh Boyer <jwboyer@linux.vnet.ibm.com>
-+ * Copyright 2007 IBM Corporation
-+ *
-+ * 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 <linux/init.h>
-+#include <linux/of_platform.h>
-+
-+#include <asm/machdep.h>
-+#include <asm/prom.h>
-+#include <asm/udbg.h>
-+#include <asm/time.h>
-+#include <asm/uic.h>
-+#include <asm/pci-bridge.h>
-+#include <asm/ppc4xx.h>
-+
-+static __initdata struct of_device_id canyonlands_of_bus[] = {
-+      { .compatible = "ibm,plb4", },
-+      { .compatible = "ibm,opb", },
-+      { .compatible = "ibm,ebc", },
-+      {},
-+};
-+
-+static int __init canyonlands_device_probe(void)
-+{
-+      of_platform_bus_probe(NULL, canyonlands_of_bus, NULL);
-+
-+      return 0;
-+}
-+machine_device_initcall(canyonlands, canyonlands_device_probe);
-+
-+static int __init canyonlands_probe(void)
-+{
-+      unsigned long root = of_get_flat_dt_root();
-+
-+      if (!of_flat_dt_is_compatible(root, "amcc,canyonlands"))
-+              return 0;
-+
-+      ppc_pci_flags = PPC_PCI_REASSIGN_ALL_RSRC;
-+
-+      return 1;
-+}
-+
-+define_machine(canyonlands) {
-+      .name                           = "Canyonlands",
-+      .probe                          = canyonlands_probe,
-+      .progress                       = udbg_progress,
-+      .init_IRQ                       = uic_init_tree,
-+      .get_irq                        = uic_get_irq,
-+      .restart                        = ppc4xx_reset_system,
-+      .calibrate_decr                 = generic_calibrate_decr,
-+};
---- a/arch/powerpc/platforms/44x/ebony.c
-+++ b/arch/powerpc/platforms/44x/ebony.c
-@@ -26,8 +26,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
--
--#include "44x.h"
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id ebony_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -66,6 +65,6 @@ define_machine(ebony) {
-       .progress               = udbg_progress,
-       .init_IRQ               = uic_init_tree,
-       .get_irq                = uic_get_irq,
--      .restart                = ppc44x_reset_system,
-+      .restart                = ppc4xx_reset_system,
-       .calibrate_decr         = generic_calibrate_decr,
- };
---- /dev/null
-+++ b/arch/powerpc/platforms/44x/idle.c
-@@ -0,0 +1,67 @@
-+/*
-+ * Copyright 2008 IBM Corp. 
-+ *
-+ * Based on arch/powerpc/platforms/pasemi/idle.c: 
-+ * Copyright (C) 2006-2007 PA Semi, Inc
-+ *
-+ * Added by: Jerone Young <jyoung5@us.ibm.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.
-+ *
-+ * 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/of.h>
-+#include <linux/kernel.h>
-+#include <asm/machdep.h>
-+
-+static int mode_spin;
-+
-+static void ppc44x_idle(void)
-+{
-+      unsigned long msr_save;
-+
-+      msr_save = mfmsr();
-+      /* set wait state MSR */
-+      mtmsr(msr_save|MSR_WE|MSR_EE|MSR_CE|MSR_DE);
-+      isync();
-+      /* return to initial state */
-+      mtmsr(msr_save);
-+      isync();
-+}
-+
-+int __init ppc44x_idle_init(void)
-+{
-+      if (!mode_spin) {
-+              /* If we are not setting spin mode 
-+                   then we set to wait mode */
-+              ppc_md.power_save = &ppc44x_idle;
-+      }
-+
-+      return 0;
-+}
-+
-+arch_initcall(ppc44x_idle_init);
-+
-+static int __init idle_param(char *p)
-+{ 
-+
-+      if (!strcmp("spin", p)) {
-+              mode_spin = 1;
-+              ppc_md.power_save = NULL;
-+      }
-+
-+      return 0;
-+}
-+
-+early_param("idle", idle_param);
---- a/arch/powerpc/platforms/44x/katmai.c
-+++ b/arch/powerpc/platforms/44x/katmai.c
-@@ -22,8 +22,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
--
--#include "44x.h"
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id katmai_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -58,6 +57,6 @@ define_machine(katmai) {
-       .progress                       = udbg_progress,
-       .init_IRQ                       = uic_init_tree,
-       .get_irq                        = uic_get_irq,
--      .restart                        = ppc44x_reset_system,
-+      .restart                        = ppc4xx_reset_system,
-       .calibrate_decr                 = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/44x/misc_44x.S
-+++ b/arch/powerpc/platforms/44x/misc_44x.S
-@@ -44,14 +44,3 @@ _GLOBAL(as1_writeb)
-       sync
-       isync
-       blr
--
--/*
-- * void ppc44x_reset_system(char *cmd)
-- *
-- * At present, this routine just applies a system reset.
-- */
--_GLOBAL(ppc44x_reset_system)
--      mfspr   r13,SPRN_DBCR0
--      oris    r13,r13,DBCR0_RST_SYSTEM@h
--      mtspr   SPRN_DBCR0,r13
--      b       .                       /* Just in case the reset doesn't work */
---- a/arch/powerpc/platforms/44x/rainier.c
-+++ b/arch/powerpc/platforms/44x/rainier.c
-@@ -22,7 +22,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
--#include "44x.h"
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id rainier_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -57,6 +57,6 @@ define_machine(rainier) {
-       .progress                       = udbg_progress,
-       .init_IRQ                       = uic_init_tree,
-       .get_irq                        = uic_get_irq,
--      .restart                        = ppc44x_reset_system,
-+      .restart                        = ppc4xx_reset_system,
-       .calibrate_decr                 = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/44x/sequoia.c
-+++ b/arch/powerpc/platforms/44x/sequoia.c
-@@ -23,7 +23,7 @@
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
--#include "44x.h"
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id sequoia_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -58,6 +58,6 @@ define_machine(sequoia) {
-       .progress                       = udbg_progress,
-       .init_IRQ                       = uic_init_tree,
-       .get_irq                        = uic_get_irq,
--      .restart                        = ppc44x_reset_system,
-+      .restart                        = ppc4xx_reset_system,
-       .calibrate_decr                 = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/44x/taishan.c
-+++ b/arch/powerpc/platforms/44x/taishan.c
-@@ -29,8 +29,7 @@
- #include <asm/time.h>
- #include <asm/uic.h>
- #include <asm/pci-bridge.h>
--
--#include "44x.h"
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id taishan_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -68,6 +67,6 @@ define_machine(taishan) {
-       .progress               = udbg_progress,
-       .init_IRQ               = uic_init_tree,
-       .get_irq                = uic_get_irq,
--      .restart                = ppc44x_reset_system,
-+      .restart                = ppc4xx_reset_system,
-       .calibrate_decr         = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/44x/warp-nand.c
-+++ b/arch/powerpc/platforms/44x/warp-nand.c
-@@ -11,6 +11,7 @@
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/nand.h>
- #include <linux/mtd/ndfc.h>
-+#include <asm/machdep.h>
- #ifdef CONFIG_MTD_NAND_NDFC
-@@ -100,6 +101,6 @@ static int warp_setup_nand_flash(void)
-       return 0;
- }
--device_initcall(warp_setup_nand_flash);
-+machine_device_initcall(warp, warp_setup_nand_flash);
- #endif
---- a/arch/powerpc/platforms/44x/warp.c
-+++ b/arch/powerpc/platforms/44x/warp.c
-@@ -18,9 +18,7 @@
- #include <asm/udbg.h>
- #include <asm/time.h>
- #include <asm/uic.h>
--
--#include "44x.h"
--
-+#include <asm/ppc4xx.h>
- static __initdata struct of_device_id warp_of_bus[] = {
-       { .compatible = "ibm,plb4", },
-@@ -49,7 +47,7 @@ define_machine(warp) {
-       .progress       = udbg_progress,
-       .init_IRQ       = uic_init_tree,
-       .get_irq        = uic_get_irq,
--      .restart        = ppc44x_reset_system,
-+      .restart        = ppc4xx_reset_system,
-       .calibrate_decr = generic_calibrate_decr,
- };
---- a/arch/powerpc/platforms/52xx/lite5200.c
-+++ b/arch/powerpc/platforms/52xx/lite5200.c
-@@ -63,7 +63,7 @@ lite5200_fix_clock_config(void)
-       of_node_put(np);
-       if (!cdm) {
-               printk(KERN_ERR "%s() failed; expect abnormal behaviour\n",
--                     __FUNCTION__);
-+                     __func__);
-               return;
-       }
-@@ -98,7 +98,7 @@ lite5200_fix_port_config(void)
-       of_node_put(np);
-       if (!gpio) {
-               printk(KERN_ERR "%s() failed. expect abnormal behavior\n",
--                     __FUNCTION__);
-+                     __func__);
-               return;
-       }
---- a/arch/powerpc/platforms/82xx/Kconfig
-+++ b/arch/powerpc/platforms/82xx/Kconfig
-@@ -11,7 +11,6 @@ config MPC8272_ADS
-       select 8260
-       select FSL_SOC
-       select PQ2_ADS_PCI_PIC if PCI
--      select PPC_CPM_NEW_BINDING
-       help
-         This option enables support for the MPC8272 ADS board
-@@ -22,7 +21,6 @@ config PQ2FADS
-       select 8260
-       select FSL_SOC
-       select PQ2_ADS_PCI_PIC if PCI
--      select PPC_CPM_NEW_BINDING
-       help
-         This option enables support for the PQ2FADS board
-@@ -31,7 +29,6 @@ config EP8248E
-       select 8272
-       select 8260
-       select FSL_SOC
--      select PPC_CPM_NEW_BINDING
-       select MDIO_BITBANG
-       help
-         This enables support for the Embedded Planet EP8248E board.
---- a/arch/powerpc/platforms/83xx/mpc837x_rdb.c
-+++ b/arch/powerpc/platforms/83xx/mpc837x_rdb.c
-@@ -46,6 +46,7 @@ static void __init mpc837x_rdb_setup_arc
- static struct of_device_id mpc837x_ids[] = {
-       { .type = "soc", },
-       { .compatible = "soc", },
-+      { .compatible = "simple-bus", },
-       {},
- };
---- a/arch/powerpc/platforms/83xx/mpc83xx.h
-+++ b/arch/powerpc/platforms/83xx/mpc83xx.h
-@@ -16,6 +16,7 @@
- #define MPC83XX_SCCR_USB_DRCM_10   0x00200000
- #define MPC8315_SCCR_USB_MASK      0x00c00000
- #define MPC8315_SCCR_USB_DRCM_11   0x00c00000
-+#define MPC8315_SCCR_USB_DRCM_01   0x00400000
- #define MPC837X_SCCR_USB_DRCM_11   0x00c00000
- /* system i/o configuration register low */
-@@ -37,6 +38,7 @@
- /* USB Control Register */
- #define FSL_USB2_CONTROL_OFFS      0x500
- #define CONTROL_UTMI_PHY_EN        0x00000200
-+#define CONTROL_REFSEL_24MHZ       0x00000040
- #define CONTROL_REFSEL_48MHZ       0x00000080
- #define CONTROL_PHY_CLK_SEL_ULPI   0x00000400
- #define CONTROL_OTG_PORT           0x00000020
---- a/arch/powerpc/platforms/83xx/usb.c
-+++ b/arch/powerpc/platforms/83xx/usb.c
-@@ -129,7 +129,7 @@ int mpc831x_usb_cfg(void)
-       if (immr_node && of_device_is_compatible(immr_node, "fsl,mpc8315-immr"))
-               clrsetbits_be32(immap + MPC83XX_SCCR_OFFS,
-                               MPC8315_SCCR_USB_MASK,
--                              MPC8315_SCCR_USB_DRCM_11);
-+                              MPC8315_SCCR_USB_DRCM_01);
-       else
-               clrsetbits_be32(immap + MPC83XX_SCCR_OFFS,
-                               MPC83XX_SCCR_USB_MASK,
-@@ -164,9 +164,15 @@ int mpc831x_usb_cfg(void)
-       /* Using on-chip PHY */
-       if (prop && (!strcmp(prop, "utmi_wide") ||
-                    !strcmp(prop, "utmi"))) {
--              /* Set UTMI_PHY_EN, REFSEL to 48MHZ */
-+              u32 refsel;
-+
-+              if (of_device_is_compatible(immr_node, "fsl,mpc8315-immr"))
-+                      refsel = CONTROL_REFSEL_24MHZ;
-+              else
-+                      refsel = CONTROL_REFSEL_48MHZ;
-+              /* Set UTMI_PHY_EN and REFSEL */
-               out_be32(usb_regs + FSL_USB2_CONTROL_OFFS,
--                              CONTROL_UTMI_PHY_EN | CONTROL_REFSEL_48MHZ);
-+                              CONTROL_UTMI_PHY_EN | refsel);
-       /* Using external UPLI PHY */
-       } else if (prop && !strcmp(prop, "ulpi")) {
-               /* Set PHY_CLK_SEL to ULPI */
---- a/arch/powerpc/platforms/85xx/Kconfig
-+++ b/arch/powerpc/platforms/85xx/Kconfig
-@@ -19,7 +19,6 @@ config MPC8540_ADS
- config MPC8560_ADS
-       bool "Freescale MPC8560 ADS"
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING
-       select CPM2
-       help
-         This option enables support for the MPC 8560 ADS board
-@@ -46,6 +45,12 @@ config MPC85xx_DS
-       help
-         This option enables support for the MPC85xx DS (MPC8544 DS) board
-+config KSI8560
-+        bool "Emerson KSI8560"
-+        select DEFAULT_UIMAGE
-+        help
-+          This option enables support for the Emerson KSI8560 board
-+
- config STX_GP3
-       bool "Silicon Turnkey Express GP3"
-       help
-@@ -53,14 +58,12 @@ config STX_GP3
-         board.
-       select CPM2
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING
- config TQM8540
-       bool "TQ Components TQM8540"
-       help
-         This option enables support for the TQ Components TQM8540 board.
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING
-       select TQM85xx
- config TQM8541
-@@ -68,7 +71,6 @@ config TQM8541
-       help
-         This option enables support for the TQ Components TQM8541 board.
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING
-       select TQM85xx
-       select CPM2
-@@ -77,7 +79,6 @@ config TQM8555
-       help
-         This option enables support for the TQ Components TQM8555 board.
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING
-       select TQM85xx
-       select CPM2
-@@ -86,7 +87,6 @@ config TQM8560
-       help
-         This option enables support for the TQ Components TQM8560 board.
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING
-       select TQM85xx
-       select CPM2
-@@ -99,7 +99,6 @@ config SBC8548
- config SBC8560
-       bool "Wind River SBC8560"
-       select DEFAULT_UIMAGE
--      select PPC_CPM_NEW_BINDING if CPM2
-       help
-         This option enables support for the Wind River SBC8560 board
---- a/arch/powerpc/platforms/85xx/Makefile
-+++ b/arch/powerpc/platforms/85xx/Makefile
-@@ -10,3 +10,4 @@ obj-$(CONFIG_STX_GP3)          += stx_gp3.o
- obj-$(CONFIG_TQM85xx)   += tqm85xx.o
- obj-$(CONFIG_SBC8560)     += sbc8560.o
- obj-$(CONFIG_SBC8548)     += sbc8548.o
-+obj-$(CONFIG_KSI8560)   += ksi8560.o
---- /dev/null
-+++ b/arch/powerpc/platforms/85xx/ksi8560.c
-@@ -0,0 +1,257 @@
-+/*
-+ * Board setup routines for the Emerson KSI8560
-+ *
-+ * Author: Alexandr Smirnov <asmirnov@ru.mvista.com>
-+ *
-+ * Based on mpc85xx_ads.c maintained by Kumar Gala
-+ *
-+ * 2008 (c) MontaVista, Software, Inc.  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/stddef.h>
-+#include <linux/kernel.h>
-+#include <linux/pci.h>
-+#include <linux/kdev_t.h>
-+#include <linux/delay.h>
-+#include <linux/seq_file.h>
-+#include <linux/of_platform.h>
-+
-+#include <asm/system.h>
-+#include <asm/time.h>
-+#include <asm/machdep.h>
-+#include <asm/pci-bridge.h>
-+#include <asm/mpic.h>
-+#include <mm/mmu_decl.h>
-+#include <asm/udbg.h>
-+#include <asm/prom.h>
-+
-+#include <sysdev/fsl_soc.h>
-+#include <sysdev/fsl_pci.h>
-+
-+#include <asm/cpm2.h>
-+#include <sysdev/cpm2_pic.h>
-+
-+
-+#define KSI8560_CPLD_HVR              0x04 /* Hardware Version Register */
-+#define KSI8560_CPLD_PVR              0x08 /* PLD Version Register */
-+#define KSI8560_CPLD_RCR1             0x30 /* Reset Command Register 1 */
-+
-+#define KSI8560_CPLD_RCR1_CPUHR               0x80 /* CPU Hard Reset */
-+
-+static void __iomem *cpld_base = NULL;
-+
-+static void machine_restart(char *cmd)
-+{
-+      if (cpld_base)
-+              out_8(cpld_base + KSI8560_CPLD_RCR1, KSI8560_CPLD_RCR1_CPUHR);
-+      else
-+              printk(KERN_ERR "Can't find CPLD base, hang forever\n");
-+
-+      for (;;);
-+}
-+
-+static void cpm2_cascade(unsigned int irq, struct irq_desc *desc)
-+{
-+      int cascade_irq;
-+
-+      while ((cascade_irq = cpm2_get_irq()) >= 0)
-+              generic_handle_irq(cascade_irq);
-+
-+      desc->chip->eoi(irq);
-+}
-+
-+static void __init ksi8560_pic_init(void)
-+{
-+      struct mpic *mpic;
-+      struct resource r;
-+      struct device_node *np;
-+#ifdef CONFIG_CPM2
-+      int irq;
-+#endif
-+
-+      np = of_find_node_by_type(NULL, "open-pic");
-+
-+      if (np == NULL) {
-+              printk(KERN_ERR "Could not find open-pic node\n");
-+              return;
-+      }
-+
-+      if (of_address_to_resource(np, 0, &r)) {
-+              printk(KERN_ERR "Could not map mpic register space\n");
-+              of_node_put(np);
-+              return;
-+      }
-+
-+      mpic = mpic_alloc(np, r.start,
-+                      MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
-+                      0, 256, " OpenPIC  ");
-+      BUG_ON(mpic == NULL);
-+      of_node_put(np);
-+
-+      mpic_init(mpic);
-+
-+#ifdef CONFIG_CPM2
-+      /* Setup CPM2 PIC */
-+      np = of_find_compatible_node(NULL, NULL, "fsl,cpm2-pic");
-+      if (np == NULL) {
-+              printk(KERN_ERR "PIC init: can not find fsl,cpm2-pic node\n");
-+              return;
-+      }
-+      irq = irq_of_parse_and_map(np, 0);
-+
-+      cpm2_pic_init(np);
-+      of_node_put(np);
-+      set_irq_chained_handler(irq, cpm2_cascade);
-+
-+      setup_irq(0, NULL);
-+#endif
-+}
-+
-+#ifdef CONFIG_CPM2
-+/*
-+ * Setup I/O ports
-+ */
-+struct cpm_pin {
-+      int port, pin, flags;
-+};
-+
-+static struct cpm_pin __initdata ksi8560_pins[] = {
-+      /* SCC1 */
-+      {3, 29, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {3, 30, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
-+      {3, 31, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
-+
-+      /* SCC2 */
-+      {3, 26, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {3, 27, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {3, 28, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
-+
-+      /* FCC1 */
-+      {0, 14, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
-+      {0, 15, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
-+      {0, 16, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
-+      {0, 17, CPM_PIN_INPUT | CPM_PIN_PRIMARY},
-+      {0, 18, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {0, 19, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {0, 20, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {0, 21, CPM_PIN_OUTPUT | CPM_PIN_PRIMARY},
-+      {0, 26, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
-+      {0, 27, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
-+      {0, 28, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
-+      {0, 29, CPM_PIN_OUTPUT | CPM_PIN_SECONDARY},
-+      {0, 30, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
-+      {0, 31, CPM_PIN_INPUT | CPM_PIN_SECONDARY},
-+      {2, 23, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK9 */
-+      {2, 22, CPM_PIN_INPUT | CPM_PIN_PRIMARY}, /* CLK10 */
-+
-+};
-+
-+static void __init init_ioports(void)
-+{
-+      int i;
-+
-+      for (i = 0; i < ARRAY_SIZE(ksi8560_pins); i++) {
-+              struct cpm_pin *pin = &ksi8560_pins[i];
-+              cpm2_set_pin(pin->port, pin->pin, pin->flags);
-+      }
-+
-+      cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_RX);
-+      cpm2_clk_setup(CPM_CLK_SCC1, CPM_BRG1, CPM_CLK_TX);
-+      cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_RX);
-+      cpm2_clk_setup(CPM_CLK_SCC2, CPM_BRG2, CPM_CLK_TX);
-+      cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK9, CPM_CLK_RX);
-+      cpm2_clk_setup(CPM_CLK_FCC1, CPM_CLK10, CPM_CLK_TX);
-+}
-+#endif
-+
-+/*
-+ * Setup the architecture
-+ */
-+static void __init ksi8560_setup_arch(void)
-+{
-+      struct device_node *cpld;
-+
-+      cpld = of_find_compatible_node(NULL, NULL, "emerson,KSI8560-cpld");
-+      if (cpld)
-+              cpld_base = of_iomap(cpld, 0);
-+      else
-+              printk(KERN_ERR "Can't find CPLD in device tree\n");
-+
-+      if (ppc_md.progress)
-+              ppc_md.progress("ksi8560_setup_arch()", 0);
-+
-+#ifdef CONFIG_CPM2
-+      cpm2_reset();
-+      init_ioports();
-+#endif
-+}
-+
-+static void ksi8560_show_cpuinfo(struct seq_file *m)
-+{
-+      uint pvid, svid, phid1;
-+      uint memsize = total_memory;
-+
-+      pvid = mfspr(SPRN_PVR);
-+      svid = mfspr(SPRN_SVR);
-+
-+      seq_printf(m, "Vendor\t\t: Emerson Network Power\n");
-+      seq_printf(m, "Board\t\t: KSI8560\n");
-+
-+      if (cpld_base) {
-+              seq_printf(m, "Hardware rev\t: %d\n",
-+                                      in_8(cpld_base + KSI8560_CPLD_HVR));
-+              seq_printf(m, "CPLD rev\t: %d\n",
-+                                      in_8(cpld_base + KSI8560_CPLD_PVR));
-+      } else
-+              seq_printf(m, "Unknown Hardware and CPLD revs\n");
-+
-+      seq_printf(m, "PVR\t\t: 0x%x\n", pvid);
-+      seq_printf(m, "SVR\t\t: 0x%x\n", svid);
-+
-+      /* Display cpu Pll setting */
-+      phid1 = mfspr(SPRN_HID1);
-+      seq_printf(m, "PLL setting\t: 0x%x\n", ((phid1 >> 24) & 0x3f));
-+
-+      /* Display the amount of memory */
-+      seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
-+}
-+
-+static struct of_device_id __initdata of_bus_ids[] = {
-+      { .type = "soc", },
-+      { .name = "cpm", },
-+      { .name = "localbus", },
-+      {},
-+};
-+
-+static int __init declare_of_platform_devices(void)
-+{
-+      of_platform_bus_probe(NULL, of_bus_ids, NULL);
-+
-+      return 0;
-+}
-+machine_device_initcall(ksi8560, declare_of_platform_devices);
-+
-+/*
-+ * Called very early, device-tree isn't unflattened
-+ */
-+static int __init ksi8560_probe(void)
-+{
-+      unsigned long root = of_get_flat_dt_root();
-+
-+      return of_flat_dt_is_compatible(root, "emerson,KSI8560");
-+}
-+
-+define_machine(ksi8560) {
-+      .name                   = "KSI8560",
-+      .probe                  = ksi8560_probe,
-+      .setup_arch             = ksi8560_setup_arch,
-+      .init_IRQ               = ksi8560_pic_init,
-+      .show_cpuinfo           = ksi8560_show_cpuinfo,
-+      .get_irq                = mpic_get_irq,
-+      .restart                = machine_restart,
-+      .calibrate_decr         = generic_calibrate_decr,
-+};
---- a/arch/powerpc/platforms/85xx/mpc85xx_ads.c
-+++ b/arch/powerpc/platforms/85xx/mpc85xx_ads.c
-@@ -165,7 +165,7 @@ static void __init init_ioports(void)
-       int i;
-       for (i = 0; i < ARRAY_SIZE(mpc8560_ads_pins); i++) {
--              struct cpm_pin *pin = &mpc8560_ads_pins[i];
-+              const struct cpm_pin *pin = &mpc8560_ads_pins[i];
-               cpm2_set_pin(pin->port, pin->pin, pin->flags);
-       }
---- a/arch/powerpc/platforms/85xx/mpc85xx_ds.c
-+++ b/arch/powerpc/platforms/85xx/mpc85xx_ds.c
-@@ -19,6 +19,7 @@
- #include <linux/delay.h>
- #include <linux/seq_file.h>
- #include <linux/interrupt.h>
-+#include <linux/of_platform.h>
- #include <asm/system.h>
- #include <asm/time.h>
-@@ -36,7 +37,7 @@
- #undef DEBUG
- #ifdef DEBUG
--#define DBG(fmt, args...) printk(KERN_ERR "%s: " fmt, __FUNCTION__, ## args)
-+#define DBG(fmt, args...) printk(KERN_ERR "%s: " fmt, __func__, ## args)
- #else
- #define DBG(fmt, args...)
- #endif
-@@ -183,6 +184,18 @@ static int __init mpc8544_ds_probe(void)
-       }
- }
-+static struct of_device_id mpc85xxds_ids[] = {
-+      { .type = "soc", },
-+      { .compatible = "soc", },
-+      {},
-+};
-+
-+static int __init mpc85xxds_publish_devices(void)
-+{
-+      return of_platform_bus_probe(NULL, mpc85xxds_ids, NULL);
-+}
-+machine_device_initcall(mpc8544_ds, mpc85xxds_publish_devices);
-+
- /*
-  * Called very early, device-tree isn't unflattened
-  */
---- a/arch/powerpc/platforms/86xx/Kconfig
-+++ b/arch/powerpc/platforms/86xx/Kconfig
-@@ -11,6 +11,12 @@ config MPC8641_HPCN
-       help
-         This option enables support for the MPC8641 HPCN board.
-+config SBC8641D
-+      bool "Wind River SBC8641D"
-+      select DEFAULT_UIMAGE
-+      help
-+        This option enables support for the WRS SBC8641D board.
-+
- config MPC8610_HPCD
-       bool "Freescale MPC8610 HPCD"
-       select DEFAULT_UIMAGE
-@@ -24,7 +30,7 @@ config MPC8641
-       select FSL_PCI if PCI
-       select PPC_UDBG_16550
-       select MPIC
--      default y if MPC8641_HPCN
-+      default y if MPC8641_HPCN || SBC8641D
- config MPC8610
-       bool
---- a/arch/powerpc/platforms/86xx/Makefile
-+++ b/arch/powerpc/platforms/86xx/Makefile
-@@ -4,4 +4,5 @@
- obj-$(CONFIG_SMP)             += mpc86xx_smp.o
- obj-$(CONFIG_MPC8641_HPCN)    += mpc86xx_hpcn.o
-+obj-$(CONFIG_SBC8641D)                += sbc8641d.o
- obj-$(CONFIG_MPC8610_HPCD)    += mpc8610_hpcd.o
---- a/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
-+++ b/arch/powerpc/platforms/86xx/mpc8610_hpcd.c
-@@ -52,7 +52,7 @@ static int __init mpc8610_declare_of_pla
- }
- machine_device_initcall(mpc86xx_hpcd, mpc8610_declare_of_platform_devices);
--void __init
-+static void __init
- mpc86xx_hpcd_init_irq(void)
- {
-       struct mpic *mpic1;
-@@ -200,7 +200,7 @@ static int __init mpc86xx_hpcd_probe(voi
-       return 0;
- }
--long __init
-+static long __init
- mpc86xx_time_init(void)
- {
-       unsigned int temp;
---- a/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
-+++ b/arch/powerpc/platforms/86xx/mpc86xx_hpcn.c
-@@ -55,7 +55,7 @@ static void mpc86xx_8259_cascade(unsigne
- }
- #endif        /* CONFIG_PCI */
--void __init
-+static void __init
- mpc86xx_hpcn_init_irq(void)
- {
-       struct mpic *mpic1;
-@@ -162,7 +162,7 @@ mpc86xx_hpcn_setup_arch(void)
- }
--void
-+static void
- mpc86xx_hpcn_show_cpuinfo(struct seq_file *m)
- {
-       struct device_node *root;
-@@ -190,13 +190,19 @@ static int __init mpc86xx_hpcn_probe(voi
- {
-       unsigned long root = of_get_flat_dt_root();
--      if (of_flat_dt_is_compatible(root, "mpc86xx"))
-+      if (of_flat_dt_is_compatible(root, "fsl,mpc8641hpcn"))
-               return 1;       /* Looks good */
-+      /* Be nice and don't give silent boot death.  Delete this in 2.6.27 */
-+      if (of_flat_dt_is_compatible(root, "mpc86xx")) {
-+              pr_warning("WARNING: your dts/dtb is old. You must update before the next kernel release\n");
-+              return 1;
-+      }
-+
-       return 0;
- }
--long __init
-+static long __init
- mpc86xx_time_init(void)
- {
-       unsigned int temp;
---- /dev/null
-+++ b/arch/powerpc/platforms/86xx/sbc8641d.c
-@@ -0,0 +1,164 @@
-+/*
-+ * SBC8641D board specific routines
-+ *
-+ * Copyright 2008 Wind River Systems Inc.
-+ *
-+ * By Paul Gortmaker (see MAINTAINERS for contact information)
-+ *
-+ * Based largely on the 8641 HPCN support by 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 as published by the
-+ * Free Software Foundation;  either version 2 of the  License, or (at your
-+ * option) any later version.
-+ */
-+
-+#include <linux/stddef.h>
-+#include <linux/kernel.h>
-+#include <linux/pci.h>
-+#include <linux/kdev_t.h>
-+#include <linux/delay.h>
-+#include <linux/seq_file.h>
-+#include <linux/of_platform.h>
-+
-+#include <asm/system.h>
-+#include <asm/time.h>
-+#include <asm/machdep.h>
-+#include <asm/pci-bridge.h>
-+#include <asm/mpc86xx.h>
-+#include <asm/prom.h>
-+#include <mm/mmu_decl.h>
-+#include <asm/udbg.h>
-+
-+#include <asm/mpic.h>
-+
-+#include <sysdev/fsl_pci.h>
-+#include <sysdev/fsl_soc.h>
-+
-+#include "mpc86xx.h"
-+
-+static void __init
-+sbc8641_init_irq(void)
-+{
-+      struct mpic *mpic1;
-+      struct device_node *np;
-+      struct resource res;
-+
-+      /* Determine PIC address. */
-+      np = of_find_node_by_type(NULL, "open-pic");
-+      if (np == NULL)
-+              return;
-+      of_address_to_resource(np, 0, &res);
-+
-+      /* Alloc mpic structure and per isu has 16 INT entries. */
-+      mpic1 = mpic_alloc(np, res.start,
-+                      MPIC_PRIMARY | MPIC_WANTS_RESET | MPIC_BIG_ENDIAN,
-+                      0, 256, " MPIC     ");
-+      of_node_put(np);
-+      BUG_ON(mpic1 == NULL);
-+
-+      mpic_init(mpic1);
-+}
-+
-+static void __init
-+sbc8641_setup_arch(void)
-+{
-+#ifdef CONFIG_PCI
-+      struct device_node *np;
-+#endif
-+
-+      if (ppc_md.progress)
-+              ppc_md.progress("sbc8641_setup_arch()", 0);
-+
-+#ifdef CONFIG_PCI
-+      for_each_compatible_node(np, "pci", "fsl,mpc8641-pcie")
-+              fsl_add_bridge(np, 0);
-+#endif
-+
-+      printk("SBC8641 board from Wind River\n");
-+
-+#ifdef CONFIG_SMP
-+      mpc86xx_smp_init();
-+#endif
-+}
-+
-+
-+static void
-+sbc8641_show_cpuinfo(struct seq_file *m)
-+{
-+      struct device_node *root;
-+      uint memsize = total_memory;
-+      const char *model = "";
-+      uint svid = mfspr(SPRN_SVR);
-+
-+      seq_printf(m, "Vendor\t\t: Wind River Systems\n");
-+
-+      root = of_find_node_by_path("/");
-+      if (root)
-+              model = of_get_property(root, "model", NULL);
-+      seq_printf(m, "Machine\t\t: %s\n", model);
-+      of_node_put(root);
-+
-+      seq_printf(m, "SVR\t\t: 0x%x\n", svid);
-+      seq_printf(m, "Memory\t\t: %d MB\n", memsize / (1024 * 1024));
-+}
-+
-+
-+/*
-+ * Called very early, device-tree isn't unflattened
-+ */
-+static int __init sbc8641_probe(void)
-+{
-+      unsigned long root = of_get_flat_dt_root();
-+
-+      if (of_flat_dt_is_compatible(root, "wind,sbc8641"))
-+              return 1;       /* Looks good */
-+
-+      return 0;
-+}
-+
-+static long __init
-+mpc86xx_time_init(void)
-+{
-+      unsigned int temp;
-+
-+      /* Set the time base to zero */
-+      mtspr(SPRN_TBWL, 0);
-+      mtspr(SPRN_TBWU, 0);
-+
-+      temp = mfspr(SPRN_HID0);
-+      temp |= HID0_TBEN;
-+      mtspr(SPRN_HID0, temp);
-+      asm volatile("isync");
-+
-+      return 0;
-+}
-+
-+static __initdata struct of_device_id of_bus_ids[] = {
-+      { .compatible = "simple-bus", },
-+      {},
-+};
-+
-+static int __init declare_of_platform_devices(void)
-+{
-+      of_platform_bus_probe(NULL, of_bus_ids, NULL);
-+
-+      return 0;
-+}
-+machine_device_initcall(sbc8641, declare_of_platform_devices);
-+
-+define_machine(sbc8641) {
-+      .name                   = "SBC8641D",
-+      .probe                  = sbc8641_probe,
-+      .setup_arch             = sbc8641_setup_arch,
-+      .init_IRQ               = sbc8641_init_irq,
-+      .show_cpuinfo           = sbc8641_show_cpuinfo,
-+      .get_irq                = mpic_get_irq,
-+      .restart                = fsl_rstcr_restart,
-+      .time_init              = mpc86xx_time_init,
-+      .calibrate_decr         = generic_calibrate_decr,
-+      .progress               = udbg_progress,
-+#ifdef CONFIG_PCI
-+      .pcibios_fixup_bus      = fsl_pcibios_fixup_bus,
-+#endif
-+};
---- a/arch/powerpc/platforms/8xx/Kconfig
-+++ b/arch/powerpc/platforms/8xx/Kconfig
-@@ -18,7 +18,6 @@ config MPC8XXFADS
- config MPC86XADS
-       bool "MPC86XADS"
-       select CPM1
--      select PPC_CPM_NEW_BINDING
-       help
-         MPC86x Application Development System by Freescale Semiconductor.
-         The MPC86xADS is meant to serve as a platform for s/w and h/w
-@@ -27,7 +26,6 @@ config MPC86XADS
- config MPC885ADS
-       bool "MPC885ADS"
-       select CPM1
--      select PPC_CPM_NEW_BINDING
-       help
-         Freescale Semiconductor MPC885 Application Development System (ADS).
-         Also known as DUET.
-@@ -37,7 +35,6 @@ config MPC885ADS
- config PPC_EP88XC
-       bool "Embedded Planet EP88xC (a.k.a. CWH-PPC-885XN-VE)"
-       select CPM1
--      select PPC_CPM_NEW_BINDING
-       help
-         This enables support for the Embedded Planet EP88xC board.
-@@ -47,7 +44,6 @@ config PPC_EP88XC
- config PPC_ADDER875
-       bool "Analogue & Micro Adder 875"
-       select CPM1
--      select PPC_CPM_NEW_BINDING
-       select REDBOOT
-       help
-         This enables support for the Analogue & Micro Adder 875
---- a/arch/powerpc/platforms/8xx/m8xx_setup.c
-+++ b/arch/powerpc/platforms/8xx/m8xx_setup.c
-@@ -111,17 +111,12 @@ void __init mpc8xx_calibrate_decr(void)
-       /* Processor frequency is MHz.
-        */
--      ppc_tb_freq = 50000000;
--      if (!get_freq("bus-frequency", &ppc_tb_freq)) {
--              printk(KERN_ERR "WARNING: Estimating decrementer frequency "
--                              "(not found)\n");
--      }
--      ppc_tb_freq /= 16;
-       ppc_proc_freq = 50000000;
-       if (!get_freq("clock-frequency", &ppc_proc_freq))
-               printk(KERN_ERR "WARNING: Estimating processor frequency "
-                               "(not found)\n");
-+      ppc_tb_freq = ppc_proc_freq / 16;
-       printk("Decrementer Frequency = 0x%lx\n", ppc_tb_freq);
-       /* Perform some more timer/timebase initialization.  This used
---- a/arch/powerpc/platforms/Kconfig
-+++ b/arch/powerpc/platforms/Kconfig
-@@ -290,13 +290,7 @@ config CPM2
- config PPC_CPM_NEW_BINDING
-       bool
-       depends on CPM1 || CPM2
--      help
--        Select this if your board has been converted to use the new
--        device tree bindings for CPM, and no longer needs the
--        ioport callbacks or the platform device glue code.
--
--        The fs_enet and cpm_uart drivers will be built as
--        of_platform devices.
-+      default y
- config AXON_RAM
-       tristate "Axon DDR2 memory device driver"
---- a/arch/powerpc/platforms/Kconfig.cputype
-+++ b/arch/powerpc/platforms/Kconfig.cputype
-@@ -41,11 +41,13 @@ config 40x
-       bool "AMCC 40x"
-       select PPC_DCR_NATIVE
-       select PPC_UDBG_16550
-+      select 4xx_SOC
- config 44x
-       bool "AMCC 44x"
-       select PPC_DCR_NATIVE
-       select PPC_UDBG_16550
-+      select 4xx_SOC
- config E200
-       bool "Freescale e200"
---- a/arch/powerpc/platforms/cell/iommu.c
-+++ b/arch/powerpc/platforms/cell/iommu.c
-@@ -28,13 +28,13 @@
- #include <linux/notifier.h>
- #include <linux/of.h>
- #include <linux/of_platform.h>
-+#include <linux/lmb.h>
- #include <asm/prom.h>
- #include <asm/iommu.h>
- #include <asm/machdep.h>
- #include <asm/pci-bridge.h>
- #include <asm/udbg.h>
--#include <asm/lmb.h>
- #include <asm/firmware.h>
- #include <asm/cell-regs.h>
-@@ -316,7 +316,7 @@ static void cell_iommu_setup_stab(struct
-       segments = max(dbase + dsize, fbase + fsize) >> IO_SEGMENT_SHIFT;
-       pr_debug("%s: iommu[%d]: segments: %lu\n",
--                      __FUNCTION__, iommu->nid, segments);
-+                      __func__, iommu->nid, segments);
-       /* set up the segment table */
-       stab_size = segments * sizeof(unsigned long);
-@@ -343,7 +343,7 @@ static unsigned long *cell_iommu_alloc_p
-                               (1 << 12) / sizeof(unsigned long));
-       ptab_size = segments * pages_per_segment * sizeof(unsigned long);
--      pr_debug("%s: iommu[%d]: ptab_size: %lu, order: %d\n", __FUNCTION__,
-+      pr_debug("%s: iommu[%d]: ptab_size: %lu, order: %d\n", __func__,
-                       iommu->nid, ptab_size, get_order(ptab_size));
-       page = alloc_pages_node(iommu->nid, GFP_KERNEL, get_order(ptab_size));
-       BUG_ON(!page);
-@@ -355,7 +355,7 @@ static unsigned long *cell_iommu_alloc_p
-       n_pte_pages = (pages_per_segment * sizeof(unsigned long)) >> 12;
-       pr_debug("%s: iommu[%d]: stab at %p, ptab at %p, n_pte_pages: %lu\n",
--                      __FUNCTION__, iommu->nid, iommu->stab, ptab,
-+                      __func__, iommu->nid, iommu->stab, ptab,
-                       n_pte_pages);
-       /* initialise the STEs */
-@@ -394,7 +394,7 @@ static void cell_iommu_enable_hardware(s
-       if (cell_iommu_find_ioc(iommu->nid, &xlate_base))
-               panic("%s: missing IOC register mappings for node %d\n",
--                    __FUNCTION__, iommu->nid);
-+                    __func__, iommu->nid);
-       iommu->xlate_regs = ioremap(xlate_base, IOC_Reg_Size);
-       iommu->cmd_regs = iommu->xlate_regs + IOC_IOCmd_Offset;
---- a/arch/powerpc/platforms/cell/pervasive.c
-+++ b/arch/powerpc/platforms/cell/pervasive.c
-@@ -65,7 +65,7 @@ static void cbe_power_save(void)
-               break;
-       default:
-               printk(KERN_WARNING "%s: unknown configuration\n",
--                      __FUNCTION__);
-+                      __func__);
-               break;
-       }
-       mtspr(SPRN_TSC_CELL, thread_switch_control);
---- a/arch/powerpc/platforms/cell/ras.c
-+++ b/arch/powerpc/platforms/cell/ras.c
-@@ -132,7 +132,7 @@ static int __init cbe_ptcal_enable_on_no
-                               (unsigned int)(addr >> 32),
-                               (unsigned int)(addr & 0xffffffff))) {
-               printk(KERN_ERR "%s: error enabling PTCAL on node %d!\n",
--                              __FUNCTION__, nid);
-+                              __func__, nid);
-               goto out_free_pages;
-       }
-@@ -162,7 +162,7 @@ static int __init cbe_ptcal_enable(void)
-       if (!size)
-               return -ENODEV;
--      pr_debug("%s: enabling PTCAL, size = 0x%x\n", __FUNCTION__, *size);
-+      pr_debug("%s: enabling PTCAL, size = 0x%x\n", __func__, *size);
-       order = get_order(*size);
-       of_node_put(np);
-@@ -180,7 +180,7 @@ static int __init cbe_ptcal_enable(void)
-               const u32 *nid = of_get_property(np, "node-id", NULL);
-               if (!nid) {
-                       printk(KERN_ERR "%s: node %s is missing node-id?\n",
--                                      __FUNCTION__, np->full_name);
-+                                      __func__, np->full_name);
-                       continue;
-               }
-               cbe_ptcal_enable_on_node(*nid, order);
-@@ -195,13 +195,13 @@ static int cbe_ptcal_disable(void)
-       struct ptcal_area *area, *tmp;
-       int ret = 0;
--      pr_debug("%s: disabling PTCAL\n", __FUNCTION__);
-+      pr_debug("%s: disabling PTCAL\n", __func__);
-       list_for_each_entry_safe(area, tmp, &ptcal_list, list) {
-               /* disable ptcal on this node */
-               if (rtas_call(ptcal_stop_tok, 1, 1, NULL, area->nid)) {
-                       printk(KERN_ERR "%s: error disabling PTCAL "
--                                      "on node %d!\n", __FUNCTION__,
-+                                      "on node %d!\n", __func__,
-                                       area->nid);
-                       ret = -EIO;
-                       continue;
---- a/arch/powerpc/platforms/cell/spu_base.c
-+++ b/arch/powerpc/platforms/cell/spu_base.c
-@@ -165,7 +165,7 @@ static int __spu_trap_data_seg(struct sp
-       struct spu_slb slb;
-       int psize;
--      pr_debug("%s\n", __FUNCTION__);
-+      pr_debug("%s\n", __func__);
-       slb.esid = (ea & ESID_MASK) | SLB_ESID_V;
-@@ -215,7 +215,7 @@ static int __spu_trap_data_seg(struct sp
- extern int hash_page(unsigned long ea, unsigned long access, unsigned long trap); //XXX
- static int __spu_trap_data_map(struct spu *spu, unsigned long ea, u64 dsisr)
- {
--      pr_debug("%s, %lx, %lx\n", __FUNCTION__, dsisr, ea);
-+      pr_debug("%s, %lx, %lx\n", __func__, dsisr, ea);
-       /* Handle kernel space hash faults immediately.
-          User hash faults need to be deferred to process context. */
-@@ -351,7 +351,7 @@ spu_irq_class_1(int irq, void *data)
-               __spu_trap_data_seg(spu, dar);
-       spin_unlock(&spu->register_lock);
--      pr_debug("%s: %lx %lx %lx %lx\n", __FUNCTION__, mask, stat,
-+      pr_debug("%s: %lx %lx %lx %lx\n", __func__, mask, stat,
-                       dar, dsisr);
-       if (stat & CLASS1_STORAGE_FAULT_INTR)
-@@ -726,7 +726,7 @@ static int __init init_spu_base(void)
-       if (ret < 0) {
-               printk(KERN_WARNING "%s: Error initializing spus\n",
--                      __FUNCTION__);
-+                      __func__);
-               goto out_unregister_sysdev_class;
-       }
---- a/arch/powerpc/platforms/cell/spu_callbacks.c
-+++ b/arch/powerpc/platforms/cell/spu_callbacks.c
-@@ -54,7 +54,7 @@ long spu_sys_callback(struct spu_syscall
-       long (*syscall)(u64 a1, u64 a2, u64 a3, u64 a4, u64 a5, u64 a6);
-       if (s->nr_ret >= ARRAY_SIZE(spu_syscall_table)) {
--              pr_debug("%s: invalid syscall #%ld", __FUNCTION__, s->nr_ret);
-+              pr_debug("%s: invalid syscall #%ld", __func__, s->nr_ret);
-               return -ENOSYS;
-       }
---- a/arch/powerpc/platforms/cell/spu_manage.c
-+++ b/arch/powerpc/platforms/cell/spu_manage.c
-@@ -92,7 +92,7 @@ static int __init spu_map_interrupts_old
-       tmp = of_get_property(np->parent->parent, "node-id", NULL);
-       if (!tmp) {
--              printk(KERN_WARNING "%s: can't find node-id\n", __FUNCTION__);
-+              printk(KERN_WARNING "%s: can't find node-id\n", __func__);
-               nid = spu->node;
-       } else
-               nid = tmp[0];
-@@ -296,7 +296,7 @@ static int __init of_enumerate_spus(int 
-               ret = fn(node);
-               if (ret) {
-                       printk(KERN_WARNING "%s: Error initializing %s\n",
--                              __FUNCTION__, node->name);
-+                              __func__, node->name);
-                       break;
-               }
-               n++;
-@@ -327,7 +327,7 @@ static int __init of_create_spu(struct s
-               if (!legacy_map) {
-                       legacy_map = 1;
-                       printk(KERN_WARNING "%s: Legacy device tree found, "
--                              "trying to map old style\n", __FUNCTION__);
-+                              "trying to map old style\n", __func__);
-               }
-               ret = spu_map_device_old(spu);
-               if (ret) {
-@@ -342,7 +342,7 @@ static int __init of_create_spu(struct s
-               if (!legacy_irq) {
-                       legacy_irq = 1;
-                       printk(KERN_WARNING "%s: Legacy device tree found, "
--                              "trying old style irq\n", __FUNCTION__);
-+                              "trying old style irq\n", __func__);
-               }
-               ret = spu_map_interrupts_old(spu, spe);
-               if (ret) {
---- a/arch/powerpc/platforms/cell/spufs/coredump.c
-+++ b/arch/powerpc/platforms/cell/spufs/coredump.c
-@@ -133,8 +133,6 @@ static struct spu_context *coredump_next
-               if (ctx->flags & SPU_CREATE_NOSCHED)
-                       continue;
--              /* start searching the next fd next time we're called */
--              (*fd)++;
-               break;
-       }
-@@ -157,6 +155,9 @@ int spufs_coredump_extra_notes_size(void
-                       break;
-               size += rc;
-+
-+              /* start searching the next fd next time */
-+              fd++;
-       }
-       return size;
-@@ -239,6 +240,9 @@ int spufs_coredump_extra_notes_write(str
-               }
-               spu_release_saved(ctx);
-+
-+              /* start searching the next fd next time */
-+              fd++;
-       }
-       return 0;
---- a/arch/powerpc/platforms/cell/spufs/file.c
-+++ b/arch/powerpc/platforms/cell/spufs/file.c
-@@ -1337,7 +1337,7 @@ static u64 spufs_signal1_type_get(struct
-       return ctx->ops->signal1_type_get(ctx);
- }
- DEFINE_SPUFS_ATTRIBUTE(spufs_signal1_type, spufs_signal1_type_get,
--                     spufs_signal1_type_set, "%llu", SPU_ATTR_ACQUIRE);
-+                     spufs_signal1_type_set, "%llu\n", SPU_ATTR_ACQUIRE);
- static int spufs_signal2_type_set(void *data, u64 val)
-@@ -1359,7 +1359,7 @@ static u64 spufs_signal2_type_get(struct
-       return ctx->ops->signal2_type_get(ctx);
- }
- DEFINE_SPUFS_ATTRIBUTE(spufs_signal2_type, spufs_signal2_type_get,
--                     spufs_signal2_type_set, "%llu", SPU_ATTR_ACQUIRE);
-+                     spufs_signal2_type_set, "%llu\n", SPU_ATTR_ACQUIRE);
- #if SPUFS_MMAP_4K
- static unsigned long spufs_mss_mmap_nopfn(struct vm_area_struct *vma,
-@@ -1556,7 +1556,7 @@ void spufs_mfc_callback(struct spu *spu)
-       wake_up_all(&ctx->mfc_wq);
--      pr_debug("%s %s\n", __FUNCTION__, spu->name);
-+      pr_debug("%s %s\n", __func__, spu->name);
-       if (ctx->mfc_fasync) {
-               u32 free_elements, tagstatus;
-               unsigned int mask;
-@@ -1790,7 +1790,7 @@ static unsigned int spufs_mfc_poll(struc
-       if (tagstatus & ctx->tagwait)
-               mask |= POLLIN | POLLRDNORM;
--      pr_debug("%s: free %d tagstatus %d tagwait %d\n", __FUNCTION__,
-+      pr_debug("%s: free %d tagstatus %d tagwait %d\n", __func__,
-               free_elements, tagstatus, ctx->tagwait);
-       return mask;
---- a/arch/powerpc/platforms/cell/spufs/run.c
-+++ b/arch/powerpc/platforms/cell/spufs/run.c
-@@ -98,7 +98,7 @@ static int spu_setup_isolated(struct spu
-                       != MFC_CNTL_PURGE_DMA_COMPLETE) {
-               if (time_after(jiffies, timeout)) {
-                       printk(KERN_ERR "%s: timeout flushing MFC DMA queue\n",
--                                      __FUNCTION__);
-+                                      __func__);
-                       ret = -EIO;
-                       goto out;
-               }
-@@ -124,7 +124,7 @@ static int spu_setup_isolated(struct spu
-                               status_loading) {
-               if (time_after(jiffies, timeout)) {
-                       printk(KERN_ERR "%s: timeout waiting for loader\n",
--                                      __FUNCTION__);
-+                                      __func__);
-                       ret = -EIO;
-                       goto out_drop_priv;
-               }
-@@ -134,7 +134,7 @@ static int spu_setup_isolated(struct spu
-       if (!(status & SPU_STATUS_RUNNING)) {
-               /* If isolated LOAD has failed: run SPU, we will get a stop-and
-                * signal later. */
--              pr_debug("%s: isolated LOAD failed\n", __FUNCTION__);
-+              pr_debug("%s: isolated LOAD failed\n", __func__);
-               ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_RUNNABLE);
-               ret = -EACCES;
-               goto out_drop_priv;
-@@ -142,7 +142,7 @@ static int spu_setup_isolated(struct spu
-       if (!(status & SPU_STATUS_ISOLATED_STATE)) {
-               /* This isn't allowed by the CBEA, but check anyway */
--              pr_debug("%s: SPU fell out of isolated mode?\n", __FUNCTION__);
-+              pr_debug("%s: SPU fell out of isolated mode?\n", __func__);
-               ctx->ops->runcntl_write(ctx, SPU_RUNCNTL_STOP);
-               ret = -EINVAL;
-               goto out_drop_priv;
-@@ -282,7 +282,7 @@ static int spu_handle_restartsys(struct 
-               break;
-       default:
-               printk(KERN_WARNING "%s: unexpected return code %ld\n",
--                      __FUNCTION__, *spu_ret);
-+                      __func__, *spu_ret);
-               ret = 0;
-       }
-       return ret;
-@@ -323,6 +323,10 @@ static int spu_process_callback(struct s
-                       return -EINTR;
-       }
-+      /* need to re-get the ls, as it may have changed when we released the
-+       * spu */
-+      ls = (void __iomem *)ctx->ops->get_ls(ctx);
-+
-       /* write result, jump over indirect pointer */
-       memcpy_toio(ls + ls_pointer, &spu_ret, sizeof(spu_ret));
-       ctx->ops->npc_write(ctx, npc);
---- a/arch/powerpc/platforms/cell/spufs/switch.c
-+++ b/arch/powerpc/platforms/cell/spufs/switch.c
-@@ -1815,6 +1815,7 @@ static void save_csa(struct spu_state *p
-       save_mfc_csr_ato(prev, spu);    /* Step 24. */
-       save_mfc_tclass_id(prev, spu);  /* Step 25. */
-       set_mfc_tclass_id(prev, spu);   /* Step 26. */
-+      save_mfc_cmd(prev, spu);        /* Step 26a - moved from 44. */
-       purge_mfc_queue(prev, spu);     /* Step 27. */
-       wait_purge_complete(prev, spu); /* Step 28. */
-       setup_mfc_sr1(prev, spu);       /* Step 30. */
-@@ -1831,7 +1832,6 @@ static void save_csa(struct spu_state *p
-       save_ppuint_mb(prev, spu);      /* Step 41. */
-       save_ch_part1(prev, spu);       /* Step 42. */
-       save_spu_mb(prev, spu);         /* Step 43. */
--      save_mfc_cmd(prev, spu);        /* Step 44. */
-       reset_ch(prev, spu);            /* Step 45. */
- }
---- a/arch/powerpc/platforms/celleb/beat.c
-+++ b/arch/powerpc/platforms/celleb/beat.c
-@@ -48,6 +48,7 @@ void beat_power_off(void)
- }
- u64 beat_halt_code = 0x1000000000000000UL;
-+EXPORT_SYMBOL(beat_halt_code);
- void beat_halt(void)
- {
-@@ -94,9 +95,8 @@ ssize_t beat_nvram_read(char *buf, size_
-               len = count;
-               if (len > BEAT_NVRW_CNT)
-                       len = BEAT_NVRW_CNT;
--              if (beat_eeprom_read(i, len, p)) {
-+              if (beat_eeprom_read(i, len, p))
-                       return -EIO;
--              }
-               p += len;
-               i += len;
-@@ -121,9 +121,8 @@ ssize_t beat_nvram_write(char *buf, size
-               len = count;
-               if (len > BEAT_NVRW_CNT)
-                       len = BEAT_NVRW_CNT;
--              if (beat_eeprom_write(i, len, p)) {
-+              if (beat_eeprom_write(i, len, p))
-                       return -EIO;
--              }
-               p += len;
-               i += len;
-@@ -149,13 +148,14 @@ int64_t beat_get_term_char(u64 vterm, u6
-       u64 db[2];
-       s64 ret;
--      ret = beat_get_characters_from_console(vterm, len, (u8*)db);
-+      ret = beat_get_characters_from_console(vterm, len, (u8 *)db);
-       if (ret == 0) {
-               *t1 = db[0];
-               *t2 = db[1];
-       }
-       return ret;
- }
-+EXPORT_SYMBOL(beat_get_term_char);
- int64_t beat_put_term_char(u64 vterm, u64 len, u64 t1, u64 t2)
- {
-@@ -163,8 +163,9 @@ int64_t beat_put_term_char(u64 vterm, u6
-       db[0] = t1;
-       db[1] = t2;
--      return beat_put_characters_to_console(vterm, len, (u8*)db);
-+      return beat_put_characters_to_console(vterm, len, (u8 *)db);
- }
-+EXPORT_SYMBOL(beat_put_term_char);
- void beat_power_save(void)
- {
-@@ -261,7 +262,3 @@ static int __init beat_event_init(void)
- }
- device_initcall(beat_event_init);
--
--EXPORT_SYMBOL(beat_get_term_char);
--EXPORT_SYMBOL(beat_put_term_char);
--EXPORT_SYMBOL(beat_halt_code);
---- a/arch/powerpc/platforms/celleb/beat.h
-+++ b/arch/powerpc/platforms/celleb/beat.h
-@@ -21,8 +21,8 @@
- #ifndef _CELLEB_BEAT_H
- #define _CELLEB_BEAT_H
--int64_t beat_get_term_char(uint64_t,uint64_t*,uint64_t*,uint64_t*);
--int64_t beat_put_term_char(uint64_t,uint64_t,uint64_t,uint64_t);
-+int64_t beat_get_term_char(uint64_t, uint64_t *, uint64_t *, uint64_t *);
-+int64_t beat_put_term_char(uint64_t, uint64_t, uint64_t, uint64_t);
- int64_t beat_repository_encode(int, const char *, uint64_t[4]);
- void beat_restart(char *);
- void beat_power_off(void);
---- a/arch/powerpc/platforms/celleb/beat_wrapper.h
-+++ b/arch/powerpc/platforms/celleb/beat_wrapper.h
-@@ -197,7 +197,8 @@ static inline s64 beat_put_characters_to
-       u64 b[2];
-       memcpy(b, buffer, len);
--      return beat_hcall_norets(HV_put_characters_to_console, termno, len,                                      b[0], b[1]);
-+      return beat_hcall_norets(HV_put_characters_to_console, termno, len,
-+              b[0], b[1]);
- }
- static inline s64 beat_get_spe_privileged_state_1_registers(
---- a/arch/powerpc/platforms/celleb/htab.c
-+++ b/arch/powerpc/platforms/celleb/htab.c
-@@ -35,9 +35,9 @@
- #include "beat_wrapper.h"
- #ifdef DEBUG_LOW
--#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0)
-+#define DBG_LOW(fmt...) do { udbg_printf(fmt); } while (0)
- #else
--#define DBG_LOW(fmt...) do { } while(0)
-+#define DBG_LOW(fmt...) do { } while (0)
- #endif
- static DEFINE_SPINLOCK(beat_htab_lock);
-@@ -116,7 +116,8 @@ static long beat_lpar_hpte_insert(unsign
-               hpte_r &= ~_PAGE_COHERENT;
-       spin_lock(&beat_htab_lock);
--      if ((lpar_rc = beat_read_mask(hpte_group)) == 0) {
-+      lpar_rc = beat_read_mask(hpte_group);
-+      if (lpar_rc == 0) {
-               if (!(vflags & HPTE_V_BOLTED))
-                       DBG_LOW(" full\n");
-               spin_unlock(&beat_htab_lock);
---- a/arch/powerpc/platforms/celleb/interrupt.c
-+++ b/arch/powerpc/platforms/celleb/interrupt.c
-@@ -34,7 +34,7 @@ static DEFINE_SPINLOCK(beatic_irq_mask_l
- static uint64_t       beatic_irq_mask_enable[(MAX_IRQS+255)/64];
- static uint64_t       beatic_irq_mask_ack[(MAX_IRQS+255)/64];
--static struct irq_host *beatic_host = NULL;
-+static struct irq_host *beatic_host;
- /*
-  * In this implementation, "virq" == "IRQ plug number",
-@@ -49,13 +49,13 @@ static inline void beatic_update_irq_mas
-       off = (irq_plug / 256) * 4;
-       masks[0] = beatic_irq_mask_enable[off + 0]
--                 & beatic_irq_mask_ack[off + 0];
-+              & beatic_irq_mask_ack[off + 0];
-       masks[1] = beatic_irq_mask_enable[off + 1]
--                 & beatic_irq_mask_ack[off + 1];
-+              & beatic_irq_mask_ack[off + 1];
-       masks[2] = beatic_irq_mask_enable[off + 2]
--                 & beatic_irq_mask_ack[off + 2];
-+              & beatic_irq_mask_ack[off + 2];
-       masks[3] = beatic_irq_mask_enable[off + 3]
--                 & beatic_irq_mask_ack[off + 3];
-+              & beatic_irq_mask_ack[off + 3];
-       if (beat_set_interrupt_mask(irq_plug&~255UL,
-               masks[0], masks[1], masks[2], masks[3]) != 0)
-               panic("Failed to set mask IRQ!");
-@@ -96,7 +96,8 @@ static void beatic_end_irq(unsigned int 
-       s64 err;
-       unsigned long flags;
--      if ((err = beat_downcount_of_interrupt(irq_plug)) != 0) {
-+      err = beat_downcount_of_interrupt(irq_plug);
-+      if (err != 0) {
-               if ((err & 0xFFFFFFFF) != 0xFFFFFFF5) /* -11: wrong state */
-                       panic("Failed to downcount IRQ! Error = %16lx", err);
-@@ -138,7 +139,8 @@ static int beatic_pic_host_map(struct ir
-       struct irq_desc *desc = get_irq_desc(virq);
-       int64_t err;
--      if ((err = beat_construct_and_connect_irq_plug(virq, hw)) < 0)
-+      err = beat_construct_and_connect_irq_plug(virq, hw);
-+      if (err < 0)
-               return -EIO;
-       desc->status |= IRQ_LEVEL;
-@@ -202,22 +204,22 @@ static inline unsigned int beatic_get_ir
-               beat_detect_pending_interrupts(i, pending);
-               __asm__ ("cntlzd %0,%1":"=r"(ub):
-                       "r"(pending[0] & beatic_irq_mask_enable[i/64+0]
--                                     & beatic_irq_mask_ack[i/64+0]));
-+                                     & beatic_irq_mask_ack[i/64+0]));
-               if (ub != 64)
-                       return i + ub + 0;
-               __asm__ ("cntlzd %0,%1":"=r"(ub):
-                       "r"(pending[1] & beatic_irq_mask_enable[i/64+1]
--                                     & beatic_irq_mask_ack[i/64+1]));
-+                                     & beatic_irq_mask_ack[i/64+1]));
-               if (ub != 64)
-                       return i + ub + 64;
-               __asm__ ("cntlzd %0,%1":"=r"(ub):
-                       "r"(pending[2] & beatic_irq_mask_enable[i/64+2]
--                                     & beatic_irq_mask_ack[i/64+2]));
-+                                     & beatic_irq_mask_ack[i/64+2]));
-               if (ub != 64)
-                       return i + ub + 128;
-               __asm__ ("cntlzd %0,%1":"=r"(ub):
-                       "r"(pending[3] & beatic_irq_mask_enable[i/64+3]
--                                     & beatic_irq_mask_ack[i/64+3]));
-+                                     & beatic_irq_mask_ack[i/64+3]));
-               if (ub != 64)
-                       return i + ub + 192;
-       }
-@@ -250,7 +252,7 @@ void __init beatic_init_IRQ(void)
-       /* Allocate an irq host */
-       beatic_host = irq_alloc_host(NULL, IRQ_HOST_MAP_NOMAP, 0,
--                                       &beatic_pic_host_ops,
-+                                   &beatic_pic_host_ops,
-                                        0);
-       BUG_ON(beatic_host == NULL);
-       irq_set_default_host(beatic_host);
---- a/arch/powerpc/platforms/celleb/scc_epci.c
-+++ b/arch/powerpc/platforms/celleb/scc_epci.c
-@@ -161,9 +161,9 @@ static PCI_IO_ADDR celleb_epci_make_conf
-       if (bus != hose->bus)
-               addr = celleb_epci_get_epci_cfg(hose) +
-                      (((bus->number & 0xff) << 16)
--                      | ((devfn & 0xff) << 8)
--                      | (where & 0xff)
--                      | 0x01000000);
-+                      | ((devfn & 0xff) << 8)
-+                      | (where & 0xff)
-+                      | 0x01000000);
-       else
-               addr = celleb_epci_get_epci_cfg(hose) +
-                      (((devfn & 0xff) << 8) | (where & 0xff));
-@@ -174,7 +174,7 @@ static PCI_IO_ADDR celleb_epci_make_conf
- }
- static int celleb_epci_read_config(struct pci_bus *bus,
--                      unsigned int devfn, int where, int size, u32 * val)
-+                      unsigned int devfn, int where, int size, u32 *val)
- {
-       PCI_IO_ADDR epci_base;
-       PCI_IO_ADDR addr;
---- a/arch/powerpc/platforms/celleb/scc_sio.c
-+++ b/arch/powerpc/platforms/celleb/scc_sio.c
-@@ -28,7 +28,7 @@
- /* sio irq0=0xb00010022 irq0=0xb00010023 irq2=0xb00010024
-     mmio=0xfff000-0x1000,0xff2000-0x1000 */
--static int txx9_serial_bitmap __initdata = 0;
-+static int txx9_serial_bitmap __initdata;
- static struct {
-       uint32_t offset;
-@@ -84,7 +84,7 @@ static int __init txx9_serial_config(cha
-       int     i;
-       for (;;) {
--              switch(get_option(&ptr, &i)) {
-+              switch (get_option(&ptr, &i)) {
-               default:
-                       return 0;
-               case 2:
---- a/arch/powerpc/platforms/celleb/spu_priv1.c
-+++ b/arch/powerpc/platforms/celleb/spu_priv1.c
-@@ -183,8 +183,7 @@ static u64 resource_allocation_enable_ge
-       return enable;
- }
--const struct spu_priv1_ops spu_priv1_beat_ops =
--{
-+const struct spu_priv1_ops spu_priv1_beat_ops = {
-       .int_mask_and = int_mask_and,
-       .int_mask_or = int_mask_or,
-       .int_mask_set = int_mask_set,
---- a/arch/powerpc/platforms/celleb/udbg_beat.c
-+++ b/arch/powerpc/platforms/celleb/udbg_beat.c
-@@ -54,7 +54,8 @@ static int udbg_getc_poll_beat(void)
-       if (inbuflen == 0) {
-               /* get some more chars. */
-               inbuflen = 0;
--              rc = beat_get_term_char(celleb_vtermno, &inbuflen, inbuf+0, inbuf+1);
-+              rc = beat_get_term_char(celleb_vtermno, &inbuflen,
-+                                      inbuf+0, inbuf+1);
-               if (rc != 0)
-                       inbuflen = 0;   /* otherwise inbuflen is garbage */
-       }
-@@ -78,7 +79,7 @@ static int udbg_getc_beat(void)
-               if (ch == -1) {
-                       /* This shouldn't be needed...but... */
-                       volatile unsigned long delay;
--                      for (delay=0; delay < 2000000; delay++)
-+                      for (delay = 0; delay < 2000000; delay++)
-                               ;
-               } else {
-                       return ch;
---- a/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
-+++ b/arch/powerpc/platforms/embedded6xx/mpc7448_hpc2.c
-@@ -117,11 +117,11 @@ static void __init mpc7448_hpc2_init_IRQ
-       }
-       if (mpic_paddr == 0) {
--              printk("%s: No tsi108 PIC found !\n", __FUNCTION__);
-+              printk("%s: No tsi108 PIC found !\n", __func__);
-               return;
-       }
--      DBG("%s: tsi108 pic phys_addr = 0x%x\n", __FUNCTION__,
-+      DBG("%s: tsi108 pic phys_addr = 0x%x\n", __func__,
-           (u32) mpic_paddr);
-       mpic = mpic_alloc(tsi_pic, mpic_paddr,
-@@ -140,17 +140,17 @@ static void __init mpc7448_hpc2_init_IRQ
- #ifdef CONFIG_PCI
-       tsi_pci = of_find_node_by_type(NULL, "pci");
-       if (tsi_pci == NULL) {
--              printk("%s: No tsi108 pci node found !\n", __FUNCTION__);
-+              printk("%s: No tsi108 pci node found !\n", __func__);
-               return;
-       }
-       cascade_node = of_find_node_by_type(NULL, "pic-router");
-       if (cascade_node == NULL) {
--              printk("%s: No tsi108 pci cascade node found !\n", __FUNCTION__);
-+              printk("%s: No tsi108 pci cascade node found !\n", __func__);
-               return;
-       }
-       cascade_pci_irq = irq_of_parse_and_map(tsi_pci, 0);
--      DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __FUNCTION__,
-+      DBG("%s: tsi108 cascade_pci_irq = 0x%x\n", __func__,
-           (u32) cascade_pci_irq);
-       tsi108_pci_int_init(cascade_node);
-       set_irq_data(cascade_pci_irq, mpic);
---- a/arch/powerpc/platforms/embedded6xx/prpmc2800.c
-+++ b/arch/powerpc/platforms/embedded6xx/prpmc2800.c
-@@ -49,13 +49,13 @@ static void __init prpmc2800_setup_arch(
-        * ioremap mpp and gpp registers in case they are later
-        * needed by prpmc2800_reset_board().
-        */
--      np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-mpp");
-+      np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-mpp");
-       reg = of_get_property(np, "reg", NULL);
-       paddr = of_translate_address(np, reg);
-       of_node_put(np);
-       mv64x60_mpp_reg_base = ioremap(paddr, reg[1]);
--      np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-gpp");
-+      np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-gpp");
-       reg = of_get_property(np, "reg", NULL);
-       paddr = of_translate_address(np, reg);
-       of_node_put(np);
---- a/arch/powerpc/platforms/iseries/exception.S
-+++ b/arch/powerpc/platforms/iseries/exception.S
-@@ -38,11 +38,19 @@
-       .globl system_reset_iSeries
- system_reset_iSeries:
--      mfspr   r13,SPRN_SPRG3          /* Get paca address */
-+      mfspr   r13,SPRN_SPRG3          /* Get alpaca address */
-+      LOAD_REG_IMMEDIATE(r23, alpaca)
-+      li      r0,ALPACA_SIZE
-+      sub     r23,r13,r23
-+      divdu   r23,r23,r0              /* r23 has cpu number */
-+      LOAD_REG_IMMEDIATE(r13, paca)
-+      mulli   r0,r23,PACA_SIZE
-+      add     r13,r13,r0
-+      mtspr   SPRN_SPRG3,r13          /* Save it away for the future */
-       mfmsr   r24
-       ori     r24,r24,MSR_RI
-       mtmsrd  r24                     /* RI on */
--      lhz     r24,PACAPACAINDEX(r13)  /* Get processor # */
-+      mr      r24,r23
-       cmpwi   0,r24,0                 /* Are we processor 0? */
-       bne     1f
-       b       .__start_initialization_iSeries /* Start up the first processor */
---- a/arch/powerpc/platforms/iseries/ipl_parms.h
-+++ b/arch/powerpc/platforms/iseries/ipl_parms.h
-@@ -65,6 +65,4 @@ struct ItIplParmsReal {
-       u64     xRsvd13;                // Reserved                     x38-x3F
- };
--extern struct ItIplParmsReal  xItIplParmsReal;
--
- #endif /* _ISERIES_IPL_PARMS_H */
---- a/arch/powerpc/platforms/iseries/lpardata.c
-+++ b/arch/powerpc/platforms/iseries/lpardata.c
-@@ -14,10 +14,10 @@
- #include <asm/ptrace.h>
- #include <asm/abs_addr.h>
- #include <asm/lppaca.h>
--#include <asm/iseries/it_lp_reg_save.h>
- #include <asm/paca.h>
- #include <asm/iseries/lpar_map.h>
- #include <asm/iseries/it_lp_queue.h>
-+#include <asm/iseries/alpaca.h>
- #include "naca.h"
- #include "vpd_areas.h"
-@@ -31,7 +31,7 @@
- /* The HvReleaseData is the root of the information shared between
-  * the hypervisor and Linux.
-  */
--struct HvReleaseData hvReleaseData = {
-+const struct HvReleaseData hvReleaseData = {
-       .xDesc = 0xc8a5d9c4,    /* "HvRD" ebcdic */
-       .xSize = sizeof(struct HvReleaseData),
-       .xVpdAreasPtrOffset = offsetof(struct naca_struct, xItVpdAreas),
-@@ -61,6 +61,63 @@ struct naca_struct naca = {
-       .xRamDiskSize = 0,
- };
-+struct ItLpRegSave {
-+      u32     xDesc;          // Eye catcher  "LpRS" ebcdic   000-003
-+      u16     xSize;          // Size of this class           004-005
-+      u8      xInUse;         // Area is live                 006-007
-+      u8      xRsvd1[9];      // Reserved                     007-00F
-+
-+      u8      xFixedRegSave[352]; // Fixed Register Save Area 010-16F
-+      u32     xCTRL;          // Control Register             170-173
-+      u32     xDEC;           // Decrementer                  174-177
-+      u32     xFPSCR;         // FP Status and Control Reg    178-17B
-+      u32     xPVR;           // Processor Version Number     17C-17F
-+
-+      u64     xMMCR0;         // Monitor Mode Control Reg 0   180-187
-+      u32     xPMC1;          // Perf Monitor Counter 1       188-18B
-+      u32     xPMC2;          // Perf Monitor Counter 2       18C-18F
-+      u32     xPMC3;          // Perf Monitor Counter 3       190-193
-+      u32     xPMC4;          // Perf Monitor Counter 4       194-197
-+      u32     xPIR;           // Processor ID Reg             198-19B
-+
-+      u32     xMMCR1;         // Monitor Mode Control Reg 1   19C-19F
-+      u32     xMMCRA;         // Monitor Mode Control Reg A   1A0-1A3
-+      u32     xPMC5;          // Perf Monitor Counter 5       1A4-1A7
-+      u32     xPMC6;          // Perf Monitor Counter 6       1A8-1AB
-+      u32     xPMC7;          // Perf Monitor Counter 7       1AC-1AF
-+      u32     xPMC8;          // Perf Monitor Counter 8       1B0-1B3
-+      u32     xTSC;           // Thread Switch Control        1B4-1B7
-+      u32     xTST;           // Thread Switch Timeout        1B8-1BB
-+      u32     xRsvd;          // Reserved                     1BC-1BF
-+
-+      u64     xACCR;          // Address Compare Control Reg  1C0-1C7
-+      u64     xIMR;           // Instruction Match Register   1C8-1CF
-+      u64     xSDR1;          // Storage Description Reg 1    1D0-1D7
-+      u64     xSPRG0;         // Special Purpose Reg General0 1D8-1DF
-+      u64     xSPRG1;         // Special Purpose Reg General1 1E0-1E7
-+      u64     xSPRG2;         // Special Purpose Reg General2 1E8-1EF
-+      u64     xSPRG3;         // Special Purpose Reg General3 1F0-1F7
-+      u64     xTB;            // Time Base Register           1F8-1FF
-+
-+      u64     xFPR[32];       // Floating Point Registers     200-2FF
-+
-+      u64     xMSR;           // Machine State Register       300-307
-+      u64     xNIA;           // Next Instruction Address     308-30F
-+
-+      u64     xDABR;          // Data Address Breakpoint Reg  310-317
-+      u64     xIABR;          // Inst Address Breakpoint Reg  318-31F
-+
-+      u64     xHID0;          // HW Implementation Dependent0 320-327
-+
-+      u64     xHID4;          // HW Implementation Dependent4 328-32F
-+      u64     xSCOMd;         // SCON Data Reg (SPRG4)        330-337
-+      u64     xSCOMc;         // SCON Command Reg (SPRG5)     338-33F
-+      u64     xSDAR;          // Sample Data Address Register 340-347
-+      u64     xSIAR;          // Sample Inst Address Register 348-34F
-+
-+      u8      xRsvd3[176];    // Reserved                     350-3FF
-+};
-+
- extern void system_reset_iSeries(void);
- extern void machine_check_iSeries(void);
- extern void data_access_iSeries(void);
-@@ -129,7 +186,7 @@ struct ItLpNaca itLpNaca = {
- };
- /* May be filled in by the hypervisor so cannot end up in the BSS */
--struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
-+static struct ItIplParmsReal xItIplParmsReal __attribute__((__section__(".data")));
- /* May be filled in by the hypervisor so cannot end up in the BSS */
- struct ItExtVpdPanel xItExtVpdPanel __attribute__((__section__(".data")));
-@@ -152,13 +209,54 @@ u64    xMsVpd[3400] __attribute__((__sec
- /* Space for Recovery Log Buffer */
- /* May be filled in by the hypervisor so cannot end up in the BSS */
--u64    xRecoveryLogBuffer[32] __attribute__((__section__(".data")));
-+static u64    xRecoveryLogBuffer[32] __attribute__((__section__(".data")));
--struct SpCommArea xSpCommArea = {
-+static const struct SpCommArea xSpCommArea = {
-       .xDesc = 0xE2D7C3C2,
-       .xFormat = 1,
- };
-+static const struct ItLpRegSave iseries_reg_save[] = {
-+      [0 ... (NR_CPUS-1)] = {
-+              .xDesc = 0xd397d9e2,    /* "LpRS" */
-+              .xSize = sizeof(struct ItLpRegSave),
-+      },
-+};
-+
-+#define ALPACA_INIT(number)                                           \
-+{                                                                     \
-+      .lppaca_ptr = &lppaca[number],                                  \
-+      .reg_save_ptr = &iseries_reg_save[number],                      \
-+}
-+
-+const struct alpaca alpaca[] = {
-+      ALPACA_INIT( 0),
-+#if NR_CPUS > 1
-+      ALPACA_INIT( 1), ALPACA_INIT( 2), ALPACA_INIT( 3),
-+#if NR_CPUS > 4
-+      ALPACA_INIT( 4), ALPACA_INIT( 5), ALPACA_INIT( 6), ALPACA_INIT( 7),
-+#if NR_CPUS > 8
-+      ALPACA_INIT( 8), ALPACA_INIT( 9), ALPACA_INIT(10), ALPACA_INIT(11),
-+      ALPACA_INIT(12), ALPACA_INIT(13), ALPACA_INIT(14), ALPACA_INIT(15),
-+      ALPACA_INIT(16), ALPACA_INIT(17), ALPACA_INIT(18), ALPACA_INIT(19),
-+      ALPACA_INIT(20), ALPACA_INIT(21), ALPACA_INIT(22), ALPACA_INIT(23),
-+      ALPACA_INIT(24), ALPACA_INIT(25), ALPACA_INIT(26), ALPACA_INIT(27),
-+      ALPACA_INIT(28), ALPACA_INIT(29), ALPACA_INIT(30), ALPACA_INIT(31),
-+#if NR_CPUS > 32
-+      ALPACA_INIT(32), ALPACA_INIT(33), ALPACA_INIT(34), ALPACA_INIT(35),
-+      ALPACA_INIT(36), ALPACA_INIT(37), ALPACA_INIT(38), ALPACA_INIT(39),
-+      ALPACA_INIT(40), ALPACA_INIT(41), ALPACA_INIT(42), ALPACA_INIT(43),
-+      ALPACA_INIT(44), ALPACA_INIT(45), ALPACA_INIT(46), ALPACA_INIT(47),
-+      ALPACA_INIT(48), ALPACA_INIT(49), ALPACA_INIT(50), ALPACA_INIT(51),
-+      ALPACA_INIT(52), ALPACA_INIT(53), ALPACA_INIT(54), ALPACA_INIT(55),
-+      ALPACA_INIT(56), ALPACA_INIT(57), ALPACA_INIT(58), ALPACA_INIT(59),
-+      ALPACA_INIT(60), ALPACA_INIT(61), ALPACA_INIT(62), ALPACA_INIT(63),
-+#endif
-+#endif
-+#endif
-+#endif
-+};
-+
- /* The LparMap data is now located at offset 0x6000 in head.S
-  * It was put there so that the HvReleaseData could address it
-  * with a 32-bit offset as required by the iSeries hypervisor
-@@ -167,7 +265,7 @@ struct SpCommArea xSpCommArea = {
-  * the Naca via the HvReleaseData area.  The HvReleaseData has the
-  * offset into the Naca of the pointer to the ItVpdAreas.
-  */
--struct ItVpdAreas itVpdAreas = {
-+const struct ItVpdAreas itVpdAreas = {
-       .xSlicDesc = 0xc9a3e5c1,                /* "ItVA" */
-       .xSlicSize = sizeof(struct ItVpdAreas),
-       .xSlicVpdEntries = ItVpdMaxEntries,     /* # VPD array entries */
-@@ -185,7 +283,7 @@ struct ItVpdAreas itVpdAreas = {
-       .xSlicVpdLens = {                       /* VPD lengths */
-               0,0,0,                  /*  0 - 2 */
-               sizeof(xItExtVpdPanel), /*       3 Extended VPD   */
--              sizeof(struct paca_struct),     /*       4 length of Paca  */
-+              sizeof(struct alpaca),  /*       4 length of (fake) Paca  */
-               0,                      /*       5 */
-               sizeof(struct ItIplParmsReal),/* 6 length of IPL parms */
-               26992,                  /*       7 length of MS VPD */
-@@ -203,7 +301,7 @@ struct ItVpdAreas itVpdAreas = {
-       .xSlicVpdAdrs = {                       /* VPD addresses */
-               0,0,0,                  /*       0 -  2 */
-               &xItExtVpdPanel,        /*       3 Extended VPD */
--              &paca[0],               /*       4 first Paca */
-+              &alpaca[0],             /*       4 first (fake) Paca */
-               0,                      /*       5 */
-               &xItIplParmsReal,       /*       6 IPL parms */
-               &xMsVpd,                /*       7 MS Vpd */
-@@ -219,10 +317,3 @@ struct ItVpdAreas itVpdAreas = {
-               0,0
-       }
- };
--
--struct ItLpRegSave iseries_reg_save[] = {
--      [0 ... (NR_CPUS-1)] = {
--              .xDesc = 0xd397d9e2,    /* "LpRS" */
--              .xSize = sizeof(struct ItLpRegSave),
--      },
--};
---- a/arch/powerpc/platforms/iseries/naca.h
-+++ b/arch/powerpc/platforms/iseries/naca.h
-@@ -14,7 +14,7 @@
- struct naca_struct {
-       /* Kernel only data - undefined for user space */
--      void *xItVpdAreas;              /* VPD Data                  0x00 */
-+      const void *xItVpdAreas;        /* VPD Data                  0x00 */
-       void *xRamDisk;                 /* iSeries ramdisk           0x08 */
-       u64   xRamDiskSize;             /* In pages                  0x10 */
- };
---- a/arch/powerpc/platforms/iseries/pci.c
-+++ b/arch/powerpc/platforms/iseries/pci.c
-@@ -23,6 +23,7 @@
- #undef DEBUG
-+#include <linux/jiffies.h>
- #include <linux/kernel.h>
- #include <linux/list.h>
- #include <linux/string.h>
-@@ -586,7 +587,7 @@ static inline struct device_node *xlate_
-               static unsigned long last_jiffies;
-               static int num_printed;
--              if ((jiffies - last_jiffies) > 60 * HZ) {
-+              if (time_after(jiffies, last_jiffies + 60 * HZ)) {
-                       last_jiffies = jiffies;
-                       num_printed = 0;
-               }
---- a/arch/powerpc/platforms/iseries/release_data.h
-+++ b/arch/powerpc/platforms/iseries/release_data.h
-@@ -58,6 +58,6 @@ struct HvReleaseData {
-       char    xRsvd3[20];     /* Reserved                     x2C-x3F */
- };
--extern struct HvReleaseData   hvReleaseData;
-+extern const struct HvReleaseData     hvReleaseData;
- #endif /* _ISERIES_RELEASE_DATA_H */
---- a/arch/powerpc/platforms/iseries/spcomm_area.h
-+++ b/arch/powerpc/platforms/iseries/spcomm_area.h
-@@ -31,6 +31,4 @@ struct SpCommArea {
-       u8      xRsvd2[80];             // Reserved                             030-07F
- };
--extern struct SpCommArea xSpCommArea;
--
- #endif /* _ISERIES_SPCOMM_AREA_H */
---- a/arch/powerpc/platforms/iseries/vpd_areas.h
-+++ b/arch/powerpc/platforms/iseries/vpd_areas.h
-@@ -80,9 +80,9 @@ struct ItVpdAreas {
-       u32     xPlicDmaLens[ItDmaMaxEntries];// Array of DMA lengths   080-0A7
-       u32     xPlicDmaToks[ItDmaMaxEntries];// Array of DMA tokens    0A8-0CF
-       u32     xSlicVpdLens[ItVpdMaxEntries];// Array of VPD lengths   0D0-12F
--      void    *xSlicVpdAdrs[ItVpdMaxEntries];// Array of VPD buffers  130-1EF
-+      const void *xSlicVpdAdrs[ItVpdMaxEntries];// Array of VPD buffers 130-1EF
- };
--extern struct ItVpdAreas      itVpdAreas;
-+extern const struct ItVpdAreas        itVpdAreas;
- #endif /* _ISERIES_VPD_AREAS_H */
---- a/arch/powerpc/platforms/maple/pci.c
-+++ b/arch/powerpc/platforms/maple/pci.c
-@@ -592,50 +592,3 @@ int maple_pci_get_legacy_ide_irq(struct 
-       }
-       return irq;
- }
--
--/* XXX: To remove once all firmwares are ok */
--static void fixup_maple_ide(struct pci_dev* dev)
--{
--      if (!machine_is(maple))
--              return;
--
--#if 0 /* Enable this to enable IDE port 0 */
--      {
--              u8 v;
--
--              pci_read_config_byte(dev, 0x40, &v);
--              v |= 2;
--              pci_write_config_byte(dev, 0x40, v);
--      }
--#endif
--#if 0 /* fix bus master base */
--      pci_write_config_dword(dev, 0x20, 0xcc01);
--      printk("old ide resource: %lx -> %lx \n",
--             dev->resource[4].start, dev->resource[4].end);
--      dev->resource[4].start = 0xcc00;
--      dev->resource[4].end = 0xcc10;
--#endif
--#if 0 /* Enable this to fixup IDE sense/polarity of irqs in IO-APICs */
--      {
--              struct pci_dev *apicdev;
--              u32 v;
--
--              apicdev = pci_get_slot (dev->bus, PCI_DEVFN(5,0));
--              if (apicdev == NULL)
--                      printk("IDE Fixup IRQ: Can't find IO-APIC !\n");
--              else {
--                      pci_write_config_byte(apicdev, 0xf2, 0x10 + 2*14);
--                      pci_read_config_dword(apicdev, 0xf4, &v);
--                      v &= ~0x00000022;
--                      pci_write_config_dword(apicdev, 0xf4, v);
--                      pci_write_config_byte(apicdev, 0xf2, 0x10 + 2*15);
--                      pci_read_config_dword(apicdev, 0xf4, &v);
--                      v &= ~0x00000022;
--                      pci_write_config_dword(apicdev, 0xf4, v);
--                      pci_dev_put(apicdev);
--              }
--      }
--#endif
--}
--DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_AMD, PCI_DEVICE_ID_AMD_8111_IDE,
--                       fixup_maple_ide);
---- a/arch/powerpc/platforms/maple/setup.c
-+++ b/arch/powerpc/platforms/maple/setup.c
-@@ -43,6 +43,7 @@
- #include <linux/smp.h>
- #include <linux/bitops.h>
- #include <linux/of_device.h>
-+#include <linux/lmb.h>
- #include <asm/processor.h>
- #include <asm/sections.h>
-@@ -57,7 +58,6 @@
- #include <asm/dma.h>
- #include <asm/cputable.h>
- #include <asm/time.h>
--#include <asm/lmb.h>
- #include <asm/mpic.h>
- #include <asm/rtas.h>
- #include <asm/udbg.h>
-@@ -319,7 +319,7 @@ static int __init maple_probe(void)
-       return 1;
- }
--define_machine(maple_md) {
-+define_machine(maple) {
-       .name                   = "Maple",
-       .probe                  = maple_probe,
-       .setup_arch             = maple_setup_arch,
---- a/arch/powerpc/platforms/pasemi/dma_lib.c
-+++ b/arch/powerpc/platforms/pasemi/dma_lib.c
-@@ -17,6 +17,7 @@
-  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-  */
-+#include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/module.h>
- #include <linux/pci.h>
-@@ -26,6 +27,8 @@
- #define MAX_TXCH 64
- #define MAX_RXCH 64
-+#define MAX_FLAGS 64
-+#define MAX_FUN 8
- static struct pasdma_status *dma_status;
-@@ -43,6 +46,8 @@ static struct pci_dev *dma_pdev;
- static DECLARE_BITMAP(txch_free, MAX_TXCH);
- static DECLARE_BITMAP(rxch_free, MAX_RXCH);
-+static DECLARE_BITMAP(flags_free, MAX_FLAGS);
-+static DECLARE_BITMAP(fun_free, MAX_FUN);
- /* pasemi_read_iob_reg - read IOB register
-  * @reg: Register to read (offset into PCI CFG space)
-@@ -373,6 +378,106 @@ void pasemi_dma_free_buf(struct pasemi_d
- }
- EXPORT_SYMBOL(pasemi_dma_free_buf);
-+/* pasemi_dma_alloc_flag - Allocate a flag (event) for channel syncronization
-+ *
-+ * Allocates a flag for use with channel syncronization (event descriptors).
-+ * Returns allocated flag (0-63), < 0 on error.
-+ */
-+int pasemi_dma_alloc_flag(void)
-+{
-+      int bit;
-+
-+retry:
-+      bit = find_next_bit(flags_free, MAX_FLAGS, 0);
-+      if (bit >= MAX_FLAGS)
-+              return -ENOSPC;
-+      if (!test_and_clear_bit(bit, flags_free))
-+              goto retry;
-+
-+      return bit;
-+}
-+EXPORT_SYMBOL(pasemi_dma_alloc_flag);
-+
-+
-+/* pasemi_dma_free_flag - Deallocates a flag (event)
-+ * @flag: Flag number to deallocate
-+ *
-+ * Frees up a flag so it can be reused for other purposes.
-+ */
-+void pasemi_dma_free_flag(int flag)
-+{
-+      BUG_ON(test_bit(flag, flags_free));
-+      BUG_ON(flag >= MAX_FLAGS);
-+      set_bit(flag, flags_free);
-+}
-+EXPORT_SYMBOL(pasemi_dma_free_flag);
-+
-+
-+/* pasemi_dma_set_flag - Sets a flag (event) to 1
-+ * @flag: Flag number to set active
-+ *
-+ * Sets the flag provided to 1.
-+ */
-+void pasemi_dma_set_flag(int flag)
-+{
-+      BUG_ON(flag >= MAX_FLAGS);
-+      if (flag < 32)
-+              pasemi_write_dma_reg(PAS_DMA_TXF_SFLG0, 1 << flag);
-+      else
-+              pasemi_write_dma_reg(PAS_DMA_TXF_SFLG1, 1 << flag);
-+}
-+EXPORT_SYMBOL(pasemi_dma_set_flag);
-+
-+/* pasemi_dma_clear_flag - Sets a flag (event) to 0
-+ * @flag: Flag number to set inactive
-+ *
-+ * Sets the flag provided to 0.
-+ */
-+void pasemi_dma_clear_flag(int flag)
-+{
-+      BUG_ON(flag >= MAX_FLAGS);
-+      if (flag < 32)
-+              pasemi_write_dma_reg(PAS_DMA_TXF_CFLG0, 1 << flag);
-+      else
-+              pasemi_write_dma_reg(PAS_DMA_TXF_CFLG1, 1 << flag);
-+}
-+EXPORT_SYMBOL(pasemi_dma_clear_flag);
-+
-+/* pasemi_dma_alloc_fun - Allocate a function engine
-+ *
-+ * Allocates a function engine to use for crypto/checksum offload
-+ * Returns allocated engine (0-8), < 0 on error.
-+ */
-+int pasemi_dma_alloc_fun(void)
-+{
-+      int bit;
-+
-+retry:
-+      bit = find_next_bit(fun_free, MAX_FLAGS, 0);
-+      if (bit >= MAX_FLAGS)
-+              return -ENOSPC;
-+      if (!test_and_clear_bit(bit, fun_free))
-+              goto retry;
-+
-+      return bit;
-+}
-+EXPORT_SYMBOL(pasemi_dma_alloc_fun);
-+
-+
-+/* pasemi_dma_free_fun - Deallocates a function engine
-+ * @flag: Engine number to deallocate
-+ *
-+ * Frees up a function engine so it can be used for other purposes.
-+ */
-+void pasemi_dma_free_fun(int fun)
-+{
-+      BUG_ON(test_bit(fun, fun_free));
-+      BUG_ON(fun >= MAX_FLAGS);
-+      set_bit(fun, fun_free);
-+}
-+EXPORT_SYMBOL(pasemi_dma_free_fun);
-+
-+
- static void *map_onedev(struct pci_dev *p, int index)
- {
-       struct device_node *dn;
-@@ -410,6 +515,7 @@ int pasemi_dma_init(void)
-       struct resource res;
-       struct device_node *dn;
-       int i, intf, err = 0;
-+      unsigned long timeout;
-       u32 tmp;
-       if (!machine_is(pasemi))
-@@ -478,6 +584,44 @@ int pasemi_dma_init(void)
-       for (i = 0; i < MAX_RXCH; i++)
-               __set_bit(i, rxch_free);
-+      timeout = jiffies + HZ;
-+      pasemi_write_dma_reg(PAS_DMA_COM_RXCMD, 0);
-+      while (pasemi_read_dma_reg(PAS_DMA_COM_RXSTA) & 1) {
-+              if (time_after(jiffies, timeout)) {
-+                      pr_warning("Warning: Could not disable RX section\n");
-+                      break;
-+              }
-+      }
-+
-+      timeout = jiffies + HZ;
-+      pasemi_write_dma_reg(PAS_DMA_COM_TXCMD, 0);
-+      while (pasemi_read_dma_reg(PAS_DMA_COM_TXSTA) & 1) {
-+              if (time_after(jiffies, timeout)) {
-+                      pr_warning("Warning: Could not disable TX section\n");
-+                      break;
-+              }
-+      }
-+
-+      /* setup resource allocations for the different DMA sections */
-+      tmp = pasemi_read_dma_reg(PAS_DMA_COM_CFG);
-+      pasemi_write_dma_reg(PAS_DMA_COM_CFG, tmp | 0x18000000);
-+
-+      /* enable tx section */
-+      pasemi_write_dma_reg(PAS_DMA_COM_TXCMD, PAS_DMA_COM_TXCMD_EN);
-+
-+      /* enable rx section */
-+      pasemi_write_dma_reg(PAS_DMA_COM_RXCMD, PAS_DMA_COM_RXCMD_EN);
-+
-+      for (i = 0; i < MAX_FLAGS; i++)
-+              __set_bit(i, flags_free);
-+
-+      for (i = 0; i < MAX_FUN; i++)
-+              __set_bit(i, fun_free);
-+
-+      /* clear all status flags */
-+      pasemi_write_dma_reg(PAS_DMA_TXF_CFLG0, 0xffffffff);
-+      pasemi_write_dma_reg(PAS_DMA_TXF_CFLG1, 0xffffffff);
-+
-       printk(KERN_INFO "PA Semi PWRficient DMA library initialized "
-               "(%d tx, %d rx channels)\n", num_txch, num_rxch);
---- a/arch/powerpc/platforms/pasemi/iommu.c
-+++ b/arch/powerpc/platforms/pasemi/iommu.c
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2005-2007, PA Semi, Inc
-+ * Copyright (C) 2005-2008, PA Semi, Inc
-  *
-  * Maintained by: Olof Johansson <olof@lixom.net>
-  *
-@@ -27,7 +27,6 @@
- #include <asm/abs_addr.h>
- #include <asm/firmware.h>
--
- #define IOBMAP_PAGE_SHIFT     12
- #define IOBMAP_PAGE_SIZE      (1 << IOBMAP_PAGE_SHIFT)
- #define IOBMAP_PAGE_MASK      (IOBMAP_PAGE_SIZE - 1)
-@@ -35,13 +34,13 @@
- #define IOB_BASE              0xe0000000
- #define IOB_SIZE              0x3000
- /* Configuration registers */
--#define IOBCAP_REG            0x10
--#define IOBCOM_REG            0x40
-+#define IOBCAP_REG            0x40
-+#define IOBCOM_REG            0x100
- /* Enable IOB address translation */
- #define IOBCOM_ATEN           0x00000100
- /* Address decode configuration register */
--#define IOB_AD_REG            0x53
-+#define IOB_AD_REG            0x14c
- /* IOBCOM_AD_REG fields */
- #define IOB_AD_VGPRT          0x00000e00
- #define IOB_AD_VGAEN          0x00000100
-@@ -56,13 +55,13 @@
- #define IOB_AD_TRNG_2G                0x00000001
- #define IOB_AD_TRNG_128G      0x00000003
--#define IOB_TABLEBASE_REG     0x55
-+#define IOB_TABLEBASE_REG     0x154
- /* Base of the 64 4-byte L1 registers */
--#define IOB_XLT_L1_REGBASE    0xac0
-+#define IOB_XLT_L1_REGBASE    0x2b00
- /* Register to invalidate TLB entries */
--#define IOB_AT_INVAL_TLB_REG  0xb40
-+#define IOB_AT_INVAL_TLB_REG  0x2d00
- /* The top two bits of the level 1 entry contains valid and type flags */
- #define IOBMAP_L1E_V          0x40000000
-@@ -76,7 +75,7 @@
- #define IOBMAP_L2E_V          0x80000000
- #define IOBMAP_L2E_V_CACHED   0xc0000000
--static u32 __iomem *iob;
-+static void __iomem *iob;
- static u32 iob_l1_emptyval;
- static u32 iob_l2_emptyval;
- static u32 *iob_l2_base;
-@@ -219,7 +218,7 @@ int __init iob_init(struct device_node *
-       for (i = 0; i < 64; i++) {
-               /* Each L1 covers 32MB, i.e. 8K entries = 32K of ram */
-               regword = IOBMAP_L1E_V | (__pa(iob_l2_base + i*0x2000) >> 12);
--              out_le32(iob+IOB_XLT_L1_REGBASE+i, regword);
-+              out_le32(iob+IOB_XLT_L1_REGBASE+i*4, regword);
-       }
-       /* set 2GB translation window, based at 0 */
---- a/arch/powerpc/platforms/powermac/setup.c
-+++ b/arch/powerpc/platforms/powermac/setup.c
-@@ -53,6 +53,7 @@
- #include <linux/suspend.h>
- #include <linux/of_device.h>
- #include <linux/of_platform.h>
-+#include <linux/lmb.h>
- #include <asm/reg.h>
- #include <asm/sections.h>
-@@ -74,7 +75,6 @@
- #include <asm/iommu.h>
- #include <asm/smu.h>
- #include <asm/pmc.h>
--#include <asm/lmb.h>
- #include <asm/udbg.h>
- #include "pmac.h"
---- a/arch/powerpc/platforms/ps3/device-init.c
-+++ b/arch/powerpc/platforms/ps3/device-init.c
-@@ -499,41 +499,14 @@ static int __init ps3_register_graphics_
- }
- /**
-- * ps3_register_repository_device - Register a device from the repositiory info.
-- *
-+ * ps3_setup_dynamic_device - Setup a dynamic device from the repository
-  */
--static int ps3_register_repository_device(
--      const struct ps3_repository_device *repo)
-+static int ps3_setup_dynamic_device(const struct ps3_repository_device *repo)
- {
-       int result;
-       switch (repo->dev_type) {
--      case PS3_DEV_TYPE_SB_GELIC:
--              result = ps3_setup_gelic_device(repo);
--              if (result) {
--                      pr_debug("%s:%d ps3_setup_gelic_device failed\n",
--                              __func__, __LINE__);
--              }
--              break;
--      case PS3_DEV_TYPE_SB_USB:
--
--              /* Each USB device has both an EHCI and an OHCI HC */
--
--              result = ps3_setup_ehci_device(repo);
--
--              if (result) {
--                      pr_debug("%s:%d ps3_setup_ehci_device failed\n",
--                              __func__, __LINE__);
--              }
--
--              result = ps3_setup_ohci_device(repo);
--
--              if (result) {
--                      pr_debug("%s:%d ps3_setup_ohci_device failed\n",
--                              __func__, __LINE__);
--              }
--              break;
-       case PS3_DEV_TYPE_STOR_DISK:
-               result = ps3_setup_storage_dev(repo, PS3_MATCH_ID_STOR_DISK);
-@@ -572,6 +545,48 @@ static int ps3_register_repository_devic
-       return result;
- }
-+/**
-+ * ps3_setup_static_device - Setup a static device from the repository
-+ */
-+
-+static int __init ps3_setup_static_device(const struct ps3_repository_device *repo)
-+{
-+      int result;
-+
-+      switch (repo->dev_type) {
-+      case PS3_DEV_TYPE_SB_GELIC:
-+              result = ps3_setup_gelic_device(repo);
-+              if (result) {
-+                      pr_debug("%s:%d ps3_setup_gelic_device failed\n",
-+                              __func__, __LINE__);
-+              }
-+              break;
-+      case PS3_DEV_TYPE_SB_USB:
-+
-+              /* Each USB device has both an EHCI and an OHCI HC */
-+
-+              result = ps3_setup_ehci_device(repo);
-+
-+              if (result) {
-+                      pr_debug("%s:%d ps3_setup_ehci_device failed\n",
-+                              __func__, __LINE__);
-+              }
-+
-+              result = ps3_setup_ohci_device(repo);
-+
-+              if (result) {
-+                      pr_debug("%s:%d ps3_setup_ohci_device failed\n",
-+                              __func__, __LINE__);
-+              }
-+              break;
-+
-+      default:
-+              return ps3_setup_dynamic_device(repo);
-+      }
-+
-+      return result;
-+}
-+
- static void ps3_find_and_add_device(u64 bus_id, u64 dev_id)
- {
-       struct ps3_repository_device repo;
-@@ -601,7 +616,7 @@ found:
-               pr_debug("%s:%u: device %lu:%lu found after %u retries\n",
-                        __func__, __LINE__, bus_id, dev_id, retries);
--      ps3_register_repository_device(&repo);
-+      ps3_setup_dynamic_device(&repo);
-       return;
- }
-@@ -905,8 +920,7 @@ static int __init ps3_register_devices(v
-       ps3_register_graphics_devices();
--      ps3_repository_find_devices(PS3_BUS_TYPE_SB,
--              ps3_register_repository_device);
-+      ps3_repository_find_devices(PS3_BUS_TYPE_SB, ps3_setup_static_device);
-       ps3_register_sound_devices();
---- a/arch/powerpc/platforms/ps3/htab.c
-+++ b/arch/powerpc/platforms/ps3/htab.c
-@@ -19,9 +19,10 @@
-  */
- #include <linux/kernel.h>
-+#include <linux/lmb.h>
- #include <asm/machdep.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/udbg.h>
- #include <asm/lv1call.h>
- #include <asm/ps3fb.h>
---- a/arch/powerpc/platforms/ps3/interrupt.c
-+++ b/arch/powerpc/platforms/ps3/interrupt.c
-@@ -709,7 +709,7 @@ static unsigned int ps3_get_irq(void)
-       asm volatile("cntlzd %0,%1" : "=r" (plug) : "r" (x));
-       plug &= 0x3f;
--      if (unlikely(plug) == NO_IRQ) {
-+      if (unlikely(plug == NO_IRQ)) {
-               pr_debug("%s:%d: no plug found: thread_id %lu\n", __func__,
-                       __LINE__, pd->thread_id);
-               dump_bmp(&per_cpu(ps3_private, 0));
---- a/arch/powerpc/platforms/ps3/mm.c
-+++ b/arch/powerpc/platforms/ps3/mm.c
-@@ -21,9 +21,10 @@
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/memory_hotplug.h>
-+#include <linux/lmb.h>
- #include <asm/firmware.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include <asm/udbg.h>
- #include <asm/lv1call.h>
---- a/arch/powerpc/platforms/ps3/os-area.c
-+++ b/arch/powerpc/platforms/ps3/os-area.c
-@@ -24,8 +24,9 @@
- #include <linux/fs.h>
- #include <linux/syscalls.h>
- #include <linux/ctype.h>
-+#include <linux/lmb.h>
--#include <asm/lmb.h>
-+#include <asm/prom.h>
- #include "platform.h"
---- a/arch/powerpc/platforms/ps3/setup.c
-+++ b/arch/powerpc/platforms/ps3/setup.c
-@@ -95,6 +95,14 @@ static void ps3_power_off(void)
-       ps3_sys_manager_power_off(); /* never returns */
- }
-+static void ps3_halt(void)
-+{
-+      DBG("%s:%d\n", __func__, __LINE__);
-+
-+      smp_send_stop();
-+      ps3_sys_manager_halt(); /* never returns */
-+}
-+
- static void ps3_panic(char *str)
- {
-       DBG("%s:%d %s\n", __func__, __LINE__, str);
-@@ -105,7 +113,8 @@ static void ps3_panic(char *str)
-       printk("   Please press POWER button.\n");
-       printk("\n");
--      while(1);
-+      while(1)
-+              lv1_pause(1);
- }
- #if defined(CONFIG_FB_PS3) || defined(CONFIG_FB_PS3_MODULE) || \
-@@ -117,7 +126,7 @@ static void __init prealloc(struct ps3_p
-       p->address = __alloc_bootmem(p->size, p->align, __pa(MAX_DMA_ADDRESS));
-       if (!p->address) {
--              printk(KERN_ERR "%s: Cannot allocate %s\n", __FUNCTION__,
-+              printk(KERN_ERR "%s: Cannot allocate %s\n", __func__,
-                      p->name);
-               return;
-       }
-@@ -266,6 +275,7 @@ define_machine(ps3) {
-       .progress                       = ps3_progress,
-       .restart                        = ps3_restart,
-       .power_off                      = ps3_power_off,
-+      .halt                           = ps3_halt,
- #if defined(CONFIG_KEXEC)
-       .kexec_cpu_down                 = ps3_kexec_cpu_down,
-       .machine_kexec                  = default_machine_kexec,
---- a/arch/powerpc/platforms/ps3/spu.c
-+++ b/arch/powerpc/platforms/ps3/spu.c
-@@ -27,6 +27,7 @@
- #include <asm/spu.h>
- #include <asm/spu_priv1.h>
- #include <asm/lv1call.h>
-+#include <asm/ps3.h>
- #include "../cell/spufs/spufs.h"
- #include "platform.h"
-@@ -140,6 +141,12 @@ static void _dump_areas(unsigned int spe
-       pr_debug("%s:%d: shadow:  %lxh\n", func, line, shadow);
- }
-+inline u64 ps3_get_spe_id(void *arg)
-+{
-+      return spu_pdata(arg)->spe_id;
-+}
-+EXPORT_SYMBOL_GPL(ps3_get_spe_id);
-+
- static unsigned long get_vas_id(void)
- {
-       unsigned long id;
---- a/arch/powerpc/platforms/pseries/Makefile
-+++ b/arch/powerpc/platforms/pseries/Makefile
-@@ -18,3 +18,4 @@ obj-$(CONFIG_HOTPLUG_CPU)    += hotplug-cpu
- obj-$(CONFIG_HVC_CONSOLE)     += hvconsole.o
- obj-$(CONFIG_HVCS)            += hvcserver.o
- obj-$(CONFIG_HCALL_STATS)     += hvCall_inst.o
-+obj-$(CONFIG_PHYP_DUMP)       += phyp_dump.o
---- a/arch/powerpc/platforms/pseries/eeh.c
-+++ b/arch/powerpc/platforms/pseries/eeh.c
-@@ -945,7 +945,6 @@ static void *early_enable_eeh(struct dev
-       unsigned int rets[3];
-       struct eeh_early_enable_info *info = data;
-       int ret;
--      const char *status = of_get_property(dn, "status", NULL);
-       const u32 *class_code = of_get_property(dn, "class-code", NULL);
-       const u32 *vendor_id = of_get_property(dn, "vendor-id", NULL);
-       const u32 *device_id = of_get_property(dn, "device-id", NULL);
-@@ -959,8 +958,8 @@ static void *early_enable_eeh(struct dev
-       pdn->eeh_freeze_count = 0;
-       pdn->eeh_false_positives = 0;
--      if (status && strncmp(status, "ok", 2) != 0)
--              return NULL;    /* ignore devices with bad status */
-+      if (!of_device_is_available(dn))
-+              return NULL;
-       /* Ignore bad nodes. */
-       if (!class_code || !vendor_id || !device_id)
---- a/arch/powerpc/platforms/pseries/lpar.c
-+++ b/arch/powerpc/platforms/pseries/lpar.c
-@@ -40,6 +40,7 @@
- #include <asm/smp.h>
- #include "plpar_wrappers.h"
-+#include "pseries.h"
- #ifdef DEBUG_LOW
- #define DBG_LOW(fmt...) do { udbg_printf(fmt); } while(0)
-@@ -203,7 +204,6 @@ void __init find_udbg_vterm(void)
-       struct device_node *stdout_node;
-       const u32 *termno;
-       const char *name;
--      int add_console;
-       /* find the boot console from /chosen/stdout */
-       if (!of_chosen)
-@@ -219,8 +219,6 @@ void __init find_udbg_vterm(void)
-               printk(KERN_WARNING "stdout node missing 'name' property!\n");
-               goto out;
-       }
--      /* The user has requested a console so this is already set up. */
--      add_console = !strstr(cmd_line, "console=");
-       /* Check if it's a virtual terminal */
-       if (strncmp(name, "vty", 3) != 0)
-@@ -234,15 +232,13 @@ void __init find_udbg_vterm(void)
-               udbg_putc = udbg_putcLP;
-               udbg_getc = udbg_getcLP;
-               udbg_getc_poll = udbg_getc_pollLP;
--              if (add_console)
--                      add_preferred_console("hvc", termno[0] & 0xff, NULL);
-+              add_preferred_console("hvc", termno[0] & 0xff, NULL);
-       } else if (of_device_is_compatible(stdout_node, "hvterm-protocol")) {
-               vtermno = termno[0];
-               udbg_putc = udbg_hvsi_putc;
-               udbg_getc = udbg_hvsi_getc;
-               udbg_getc_poll = udbg_hvsi_getc_poll;
--              if (add_console)
--                      add_preferred_console("hvsi", termno[0] & 0xff, NULL);
-+              add_preferred_console("hvsi", termno[0] & 0xff, NULL);
-       }
- out:
-       of_node_put(stdout_node);
-@@ -520,6 +516,20 @@ static void pSeries_lpar_hpte_invalidate
-       BUG_ON(lpar_rc != H_SUCCESS);
- }
-+static void pSeries_lpar_hpte_removebolted(unsigned long ea,
-+                                         int psize, int ssize)
-+{
-+      unsigned long slot, vsid, va;
-+
-+      vsid = get_kernel_vsid(ea, ssize);
-+      va = hpt_va(ea, vsid, ssize);
-+
-+      slot = pSeries_lpar_hpte_find(va, psize, ssize);
-+      BUG_ON(slot == -1);
-+
-+      pSeries_lpar_hpte_invalidate(slot, va, psize, ssize, 0);
-+}
-+
- /* Flag bits for H_BULK_REMOVE */
- #define HBR_REQUEST   0x4000000000000000UL
- #define HBR_RESPONSE  0x8000000000000000UL
-@@ -597,6 +607,7 @@ void __init hpte_init_lpar(void)
-       ppc_md.hpte_updateboltedpp = pSeries_lpar_hpte_updateboltedpp;
-       ppc_md.hpte_insert      = pSeries_lpar_hpte_insert;
-       ppc_md.hpte_remove      = pSeries_lpar_hpte_remove;
-+      ppc_md.hpte_removebolted = pSeries_lpar_hpte_removebolted;
-       ppc_md.flush_hash_range = pSeries_lpar_flush_hash_range;
-       ppc_md.hpte_clear_all   = pSeries_lpar_hptab_clear;
- }
---- a/arch/powerpc/platforms/pseries/pci_dlpar.c
-+++ b/arch/powerpc/platforms/pseries/pci_dlpar.c
-@@ -123,7 +123,7 @@ pcibios_pci_config_bridge(struct pci_dev
-       /* Add to children of PCI bridge dev->bus */
-       child_bus = pci_add_new_bus(dev->bus, dev, sec_busno);
-       if (!child_bus) {
--              printk (KERN_ERR "%s: could not add second bus\n", __FUNCTION__);
-+              printk (KERN_ERR "%s: could not add second bus\n", __func__);
-               return -EIO;
-       }
-       sprintf(child_bus->name, "PCI Bus #%02x", child_bus->number);
---- /dev/null
-+++ b/arch/powerpc/platforms/pseries/phyp_dump.c
-@@ -0,0 +1,507 @@
-+/*
-+ * Hypervisor-assisted dump
-+ *
-+ * Linas Vepstas, Manish Ahuja 2008
-+ * Copyright 2008 IBM Corp.
-+ *
-+ *      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 <linux/init.h>
-+#include <linux/kobject.h>
-+#include <linux/mm.h>
-+#include <linux/of.h>
-+#include <linux/pfn.h>
-+#include <linux/swap.h>
-+#include <linux/sysfs.h>
-+
-+#include <asm/page.h>
-+#include <asm/phyp_dump.h>
-+#include <asm/machdep.h>
-+#include <asm/prom.h>
-+#include <asm/rtas.h>
-+
-+/* Variables, used to communicate data between early boot and late boot */
-+static struct phyp_dump phyp_dump_vars;
-+struct phyp_dump *phyp_dump_info = &phyp_dump_vars;
-+
-+static int ibm_configure_kernel_dump;
-+/* ------------------------------------------------- */
-+/* RTAS interfaces to declare the dump regions */
-+
-+struct dump_section {
-+      u32 dump_flags;
-+      u16 source_type;
-+      u16 error_flags;
-+      u64 source_address;
-+      u64 source_length;
-+      u64 length_copied;
-+      u64 destination_address;
-+};
-+
-+struct phyp_dump_header {
-+      u32 version;
-+      u16 num_of_sections;
-+      u16 status;
-+
-+      u32 first_offset_section;
-+      u32 dump_disk_section;
-+      u64 block_num_dd;
-+      u64 num_of_blocks_dd;
-+      u32 offset_dd;
-+      u32 maxtime_to_auto;
-+      /* No dump disk path string used */
-+
-+      struct dump_section cpu_data;
-+      struct dump_section hpte_data;
-+      struct dump_section kernel_data;
-+};
-+
-+/* The dump header *must be* in low memory, so .bss it */
-+static struct phyp_dump_header phdr;
-+
-+#define NUM_DUMP_SECTIONS     3
-+#define DUMP_HEADER_VERSION   0x1
-+#define DUMP_REQUEST_FLAG     0x1
-+#define DUMP_SOURCE_CPU               0x0001
-+#define DUMP_SOURCE_HPTE      0x0002
-+#define DUMP_SOURCE_RMO               0x0011
-+#define DUMP_ERROR_FLAG               0x2000
-+#define DUMP_TRIGGERED                0x4000
-+#define DUMP_PERFORMED                0x8000
-+
-+
-+/**
-+ * init_dump_header() - initialize the header declaring a dump
-+ * Returns: length of dump save area.
-+ *
-+ * When the hypervisor saves crashed state, it needs to put
-+ * it somewhere. The dump header tells the hypervisor where
-+ * the data can be saved.
-+ */
-+static unsigned long init_dump_header(struct phyp_dump_header *ph)
-+{
-+      unsigned long addr_offset = 0;
-+
-+      /* Set up the dump header */
-+      ph->version = DUMP_HEADER_VERSION;
-+      ph->num_of_sections = NUM_DUMP_SECTIONS;
-+      ph->status = 0;
-+
-+      ph->first_offset_section =
-+              (u32)offsetof(struct phyp_dump_header, cpu_data);
-+      ph->dump_disk_section = 0;
-+      ph->block_num_dd = 0;
-+      ph->num_of_blocks_dd = 0;
-+      ph->offset_dd = 0;
-+
-+      ph->maxtime_to_auto = 0; /* disabled */
-+
-+      /* The first two sections are mandatory */
-+      ph->cpu_data.dump_flags = DUMP_REQUEST_FLAG;
-+      ph->cpu_data.source_type = DUMP_SOURCE_CPU;
-+      ph->cpu_data.source_address = 0;
-+      ph->cpu_data.source_length = phyp_dump_info->cpu_state_size;
-+      ph->cpu_data.destination_address = addr_offset;
-+      addr_offset += phyp_dump_info->cpu_state_size;
-+
-+      ph->hpte_data.dump_flags = DUMP_REQUEST_FLAG;
-+      ph->hpte_data.source_type = DUMP_SOURCE_HPTE;
-+      ph->hpte_data.source_address = 0;
-+      ph->hpte_data.source_length = phyp_dump_info->hpte_region_size;
-+      ph->hpte_data.destination_address = addr_offset;
-+      addr_offset += phyp_dump_info->hpte_region_size;
-+
-+      /* This section describes the low kernel region */
-+      ph->kernel_data.dump_flags = DUMP_REQUEST_FLAG;
-+      ph->kernel_data.source_type = DUMP_SOURCE_RMO;
-+      ph->kernel_data.source_address = PHYP_DUMP_RMR_START;
-+      ph->kernel_data.source_length = PHYP_DUMP_RMR_END;
-+      ph->kernel_data.destination_address = addr_offset;
-+      addr_offset += ph->kernel_data.source_length;
-+
-+      return addr_offset;
-+}
-+
-+static void print_dump_header(const struct phyp_dump_header *ph)
-+{
-+#ifdef DEBUG
-+      printk(KERN_INFO "dump header:\n");
-+      /* setup some ph->sections required */
-+      printk(KERN_INFO "version = %d\n", ph->version);
-+      printk(KERN_INFO "Sections = %d\n", ph->num_of_sections);
-+      printk(KERN_INFO "Status = 0x%x\n", ph->status);
-+
-+      /* No ph->disk, so all should be set to 0 */
-+      printk(KERN_INFO "Offset to first section 0x%x\n",
-+              ph->first_offset_section);
-+      printk(KERN_INFO "dump disk sections should be zero\n");
-+      printk(KERN_INFO "dump disk section = %d\n", ph->dump_disk_section);
-+      printk(KERN_INFO "block num = %ld\n", ph->block_num_dd);
-+      printk(KERN_INFO "number of blocks = %ld\n", ph->num_of_blocks_dd);
-+      printk(KERN_INFO "dump disk offset = %d\n", ph->offset_dd);
-+      printk(KERN_INFO "Max auto time= %d\n", ph->maxtime_to_auto);
-+
-+      /*set cpu state and hpte states as well scratch pad area */
-+      printk(KERN_INFO " CPU AREA \n");
-+      printk(KERN_INFO "cpu dump_flags =%d\n", ph->cpu_data.dump_flags);
-+      printk(KERN_INFO "cpu source_type =%d\n", ph->cpu_data.source_type);
-+      printk(KERN_INFO "cpu error_flags =%d\n", ph->cpu_data.error_flags);
-+      printk(KERN_INFO "cpu source_address =%lx\n",
-+              ph->cpu_data.source_address);
-+      printk(KERN_INFO "cpu source_length =%lx\n",
-+              ph->cpu_data.source_length);
-+      printk(KERN_INFO "cpu length_copied =%lx\n",
-+              ph->cpu_data.length_copied);
-+
-+      printk(KERN_INFO " HPTE AREA \n");
-+      printk(KERN_INFO "HPTE dump_flags =%d\n", ph->hpte_data.dump_flags);
-+      printk(KERN_INFO "HPTE source_type =%d\n", ph->hpte_data.source_type);
-+      printk(KERN_INFO "HPTE error_flags =%d\n", ph->hpte_data.error_flags);
-+      printk(KERN_INFO "HPTE source_address =%lx\n",
-+              ph->hpte_data.source_address);
-+      printk(KERN_INFO "HPTE source_length =%lx\n",
-+              ph->hpte_data.source_length);
-+      printk(KERN_INFO "HPTE length_copied =%lx\n",
-+              ph->hpte_data.length_copied);
-+
-+      printk(KERN_INFO " SRSD AREA \n");
-+      printk(KERN_INFO "SRSD dump_flags =%d\n", ph->kernel_data.dump_flags);
-+      printk(KERN_INFO "SRSD source_type =%d\n", ph->kernel_data.source_type);
-+      printk(KERN_INFO "SRSD error_flags =%d\n", ph->kernel_data.error_flags);
-+      printk(KERN_INFO "SRSD source_address =%lx\n",
-+              ph->kernel_data.source_address);
-+      printk(KERN_INFO "SRSD source_length =%lx\n",
-+              ph->kernel_data.source_length);
-+      printk(KERN_INFO "SRSD length_copied =%lx\n",
-+              ph->kernel_data.length_copied);
-+#endif
-+}
-+
-+static ssize_t show_phyp_dump_active(struct kobject *kobj,
-+                      struct kobj_attribute *attr, char *buf)
-+{
-+
-+      /* create filesystem entry so kdump is phyp-dump aware */
-+      return sprintf(buf, "%lx\n", phyp_dump_info->phyp_dump_at_boot);
-+}
-+
-+static struct kobj_attribute pdl = __ATTR(phyp_dump_active, 0600,
-+                                      show_phyp_dump_active,
-+                                      NULL);
-+
-+static void register_dump_area(struct phyp_dump_header *ph, unsigned long addr)
-+{
-+      int rc;
-+
-+      /* Add addr value if not initialized before */
-+      if (ph->cpu_data.destination_address == 0) {
-+              ph->cpu_data.destination_address += addr;
-+              ph->hpte_data.destination_address += addr;
-+              ph->kernel_data.destination_address += addr;
-+      }
-+
-+      /* ToDo Invalidate kdump and free memory range. */
-+
-+      do {
-+              rc = rtas_call(ibm_configure_kernel_dump, 3, 1, NULL,
-+                              1, ph, sizeof(struct phyp_dump_header));
-+      } while (rtas_busy_delay(rc));
-+
-+      if (rc) {
-+              printk(KERN_ERR "phyp-dump: unexpected error (%d) on "
-+                                              "register\n", rc);
-+              print_dump_header(ph);
-+              return;
-+      }
-+
-+      rc = sysfs_create_file(kernel_kobj, &pdl.attr);
-+      if (rc)
-+              printk(KERN_ERR "phyp-dump: unable to create sysfs"
-+                              " file (%d)\n", rc);
-+}
-+
-+static
-+void invalidate_last_dump(struct phyp_dump_header *ph, unsigned long addr)
-+{
-+      int rc;
-+
-+      /* Add addr value if not initialized before */
-+      if (ph->cpu_data.destination_address == 0) {
-+              ph->cpu_data.destination_address += addr;
-+              ph->hpte_data.destination_address += addr;
-+              ph->kernel_data.destination_address += addr;
-+      }
-+
-+      do {
-+              rc = rtas_call(ibm_configure_kernel_dump, 3, 1, NULL,
-+                              2, ph, sizeof(struct phyp_dump_header));
-+      } while (rtas_busy_delay(rc));
-+
-+      if (rc) {
-+              printk(KERN_ERR "phyp-dump: unexpected error (%d) "
-+                                              "on invalidate\n", rc);
-+              print_dump_header(ph);
-+      }
-+}
-+
-+/* ------------------------------------------------- */
-+/**
-+ * release_memory_range -- release memory previously lmb_reserved
-+ * @start_pfn: starting physical frame number
-+ * @nr_pages: number of pages to free.
-+ *
-+ * This routine will release memory that had been previously
-+ * lmb_reserved in early boot. The released memory becomes
-+ * available for genreal use.
-+ */
-+static void release_memory_range(unsigned long start_pfn,
-+                      unsigned long nr_pages)
-+{
-+      struct page *rpage;
-+      unsigned long end_pfn;
-+      long i;
-+
-+      end_pfn = start_pfn + nr_pages;
-+
-+      for (i = start_pfn; i <= end_pfn; i++) {
-+              rpage = pfn_to_page(i);
-+              if (PageReserved(rpage)) {
-+                      ClearPageReserved(rpage);
-+                      init_page_count(rpage);
-+                      __free_page(rpage);
-+                      totalram_pages++;
-+              }
-+      }
-+}
-+
-+/**
-+ * track_freed_range -- Counts the range being freed.
-+ * Once the counter goes to zero, it re-registers dump for
-+ * future use.
-+ */
-+static void
-+track_freed_range(unsigned long addr, unsigned long length)
-+{
-+      static unsigned long scratch_area_size, reserved_area_size;
-+
-+      if (addr < phyp_dump_info->init_reserve_start)
-+              return;
-+
-+      if ((addr >= phyp_dump_info->init_reserve_start) &&
-+          (addr <= phyp_dump_info->init_reserve_start +
-+           phyp_dump_info->init_reserve_size))
-+              reserved_area_size += length;
-+
-+      if ((addr >= phyp_dump_info->reserved_scratch_addr) &&
-+          (addr <= phyp_dump_info->reserved_scratch_addr +
-+           phyp_dump_info->reserved_scratch_size))
-+              scratch_area_size += length;
-+
-+      if ((reserved_area_size == phyp_dump_info->init_reserve_size) &&
-+          (scratch_area_size == phyp_dump_info->reserved_scratch_size)) {
-+
-+              invalidate_last_dump(&phdr,
-+                              phyp_dump_info->reserved_scratch_addr);
-+              register_dump_area(&phdr,
-+                              phyp_dump_info->reserved_scratch_addr);
-+      }
-+}
-+
-+/* ------------------------------------------------- */
-+/**
-+ * sysfs_release_region -- sysfs interface to release memory range.
-+ *
-+ * Usage:
-+ *   "echo <start addr> <length> > /sys/kernel/release_region"
-+ *
-+ * Example:
-+ *   "echo 0x40000000 0x10000000 > /sys/kernel/release_region"
-+ *
-+ * will release 256MB starting at 1GB.
-+ */
-+static ssize_t store_release_region(struct kobject *kobj,
-+                              struct kobj_attribute *attr,
-+                              const char *buf, size_t count)
-+{
-+      unsigned long start_addr, length, end_addr;
-+      unsigned long start_pfn, nr_pages;
-+      ssize_t ret;
-+
-+      ret = sscanf(buf, "%lx %lx", &start_addr, &length);
-+      if (ret != 2)
-+              return -EINVAL;
-+
-+      track_freed_range(start_addr, length);
-+
-+      /* Range-check - don't free any reserved memory that
-+       * wasn't reserved for phyp-dump */
-+      if (start_addr < phyp_dump_info->init_reserve_start)
-+              start_addr = phyp_dump_info->init_reserve_start;
-+
-+      end_addr = phyp_dump_info->init_reserve_start +
-+                      phyp_dump_info->init_reserve_size;
-+      if (start_addr+length > end_addr)
-+              length = end_addr - start_addr;
-+
-+      /* Release the region of memory assed in by user */
-+      start_pfn = PFN_DOWN(start_addr);
-+      nr_pages = PFN_DOWN(length);
-+      release_memory_range(start_pfn, nr_pages);
-+
-+      return count;
-+}
-+
-+static ssize_t show_release_region(struct kobject *kobj,
-+                      struct kobj_attribute *attr, char *buf)
-+{
-+      u64 second_addr_range;
-+
-+      /* total reserved size - start of scratch area */
-+      second_addr_range = phyp_dump_info->init_reserve_size -
-+                              phyp_dump_info->reserved_scratch_size;
-+      return sprintf(buf, "CPU:0x%lx-0x%lx: HPTE:0x%lx-0x%lx:"
-+                          " DUMP:0x%lx-0x%lx, 0x%lx-0x%lx:\n",
-+              phdr.cpu_data.destination_address,
-+              phdr.cpu_data.length_copied,
-+              phdr.hpte_data.destination_address,
-+              phdr.hpte_data.length_copied,
-+              phdr.kernel_data.destination_address,
-+              phdr.kernel_data.length_copied,
-+              phyp_dump_info->init_reserve_start,
-+              second_addr_range);
-+}
-+
-+static struct kobj_attribute rr = __ATTR(release_region, 0600,
-+                                      show_release_region,
-+                                      store_release_region);
-+
-+static int __init phyp_dump_setup(void)
-+{
-+      struct device_node *rtas;
-+      const struct phyp_dump_header *dump_header = NULL;
-+      unsigned long dump_area_start;
-+      unsigned long dump_area_length;
-+      int header_len = 0;
-+      int rc;
-+
-+      /* If no memory was reserved in early boot, there is nothing to do */
-+      if (phyp_dump_info->init_reserve_size == 0)
-+              return 0;
-+
-+      /* Return if phyp dump not supported */
-+      if (!phyp_dump_info->phyp_dump_configured)
-+              return -ENOSYS;
-+
-+      /* Is there dump data waiting for us? If there isn't,
-+       * then register a new dump area, and release all of
-+       * the rest of the reserved ram.
-+       *
-+       * The /rtas/ibm,kernel-dump rtas node is present only
-+       * if there is dump data waiting for us.
-+       */
-+      rtas = of_find_node_by_path("/rtas");
-+      if (rtas) {
-+              dump_header = of_get_property(rtas, "ibm,kernel-dump",
-+                                              &header_len);
-+              of_node_put(rtas);
-+      }
-+
-+      print_dump_header(dump_header);
-+      dump_area_length = init_dump_header(&phdr);
-+      /* align down */
-+      dump_area_start = phyp_dump_info->init_reserve_start & PAGE_MASK;
-+
-+      if (dump_header == NULL) {
-+              register_dump_area(&phdr, dump_area_start);
-+              return 0;
-+      }
-+
-+      /* re-register the dump area, if old dump was invalid */
-+      if ((dump_header) && (dump_header->status & DUMP_ERROR_FLAG)) {
-+              invalidate_last_dump(&phdr, dump_area_start);
-+              register_dump_area(&phdr, dump_area_start);
-+              return 0;
-+      }
-+
-+      if (dump_header) {
-+              phyp_dump_info->reserved_scratch_addr =
-+                              dump_header->cpu_data.destination_address;
-+              phyp_dump_info->reserved_scratch_size =
-+                              dump_header->cpu_data.source_length +
-+                              dump_header->hpte_data.source_length +
-+                              dump_header->kernel_data.source_length;
-+      }
-+
-+      /* Should we create a dump_subsys, analogous to s390/ipl.c ? */
-+      rc = sysfs_create_file(kernel_kobj, &rr.attr);
-+      if (rc)
-+              printk(KERN_ERR "phyp-dump: unable to create sysfs file (%d)\n",
-+                                                                      rc);
-+
-+      /* ToDo: re-register the dump area, for next time. */
-+      return 0;
-+}
-+machine_subsys_initcall(pseries, phyp_dump_setup);
-+
-+int __init early_init_dt_scan_phyp_dump(unsigned long node,
-+              const char *uname, int depth, void *data)
-+{
-+      const unsigned int *sizes;
-+
-+      phyp_dump_info->phyp_dump_configured = 0;
-+      phyp_dump_info->phyp_dump_is_active = 0;
-+
-+      if (depth != 1 || strcmp(uname, "rtas") != 0)
-+              return 0;
-+
-+      if (of_get_flat_dt_prop(node, "ibm,configure-kernel-dump", NULL))
-+              phyp_dump_info->phyp_dump_configured++;
-+
-+      if (of_get_flat_dt_prop(node, "ibm,dump-kernel", NULL))
-+              phyp_dump_info->phyp_dump_is_active++;
-+
-+      sizes = of_get_flat_dt_prop(node, "ibm,configure-kernel-dump-sizes",
-+                                  NULL);
-+      if (!sizes)
-+              return 0;
-+
-+      if (sizes[0] == 1)
-+              phyp_dump_info->cpu_state_size = *((unsigned long *)&sizes[1]);
-+
-+      if (sizes[3] == 2)
-+              phyp_dump_info->hpte_region_size =
-+                                              *((unsigned long *)&sizes[4]);
-+      return 1;
-+}
-+
-+/* Look for phyp_dump= cmdline option */
-+static int __init early_phyp_dump_enabled(char *p)
-+{
-+      phyp_dump_info->phyp_dump_at_boot = 1;
-+
-+        if (!p)
-+                return 0;
-+
-+        if (strncmp(p, "1", 1) == 0)
-+              phyp_dump_info->phyp_dump_at_boot = 1;
-+        else if (strncmp(p, "0", 1) == 0)
-+              phyp_dump_info->phyp_dump_at_boot = 0;
-+
-+        return 0;
-+}
-+early_param("phyp_dump", early_phyp_dump_enabled);
-+
-+/* Look for phyp_dump_reserve_size= cmdline option */
-+static int __init early_phyp_dump_reserve_size(char *p)
-+{
-+        if (p)
-+              phyp_dump_info->reserve_bootvar = memparse(p, &p);
-+
-+        return 0;
-+}
-+early_param("phyp_dump_reserve_size", early_phyp_dump_reserve_size);
---- a/arch/powerpc/platforms/pseries/pseries.h
-+++ b/arch/powerpc/platforms/pseries/pseries.h
-@@ -38,4 +38,6 @@ extern void pSeries_final_fixup(void);
- /* Poweron flag used for enabling auto ups restart */
- extern unsigned long rtas_poweron_auto;
-+extern void find_udbg_vterm(void);
-+
- #endif /* _PSERIES_PSERIES_H */
---- a/arch/powerpc/platforms/pseries/reconfig.c
-+++ b/arch/powerpc/platforms/pseries/reconfig.c
-@@ -222,14 +222,14 @@ static char * parse_next_property(char *
-       tmp = strchr(buf, ' ');
-       if (!tmp) {
-               printk(KERN_ERR "property parse failed in %s at line %d\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               return NULL;
-       }
-       *tmp = '\0';
-       if (++tmp >= end) {
-               printk(KERN_ERR "property parse failed in %s at line %d\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               return NULL;
-       }
-@@ -238,12 +238,12 @@ static char * parse_next_property(char *
-       *length = simple_strtoul(tmp, &tmp, 10);
-       if (*length == -1) {
-               printk(KERN_ERR "property parse failed in %s at line %d\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               return NULL;
-       }
-       if (*tmp != ' ' || ++tmp >= end) {
-               printk(KERN_ERR "property parse failed in %s at line %d\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               return NULL;
-       }
-@@ -252,12 +252,12 @@ static char * parse_next_property(char *
-       tmp += *length;
-       if (tmp > end) {
-               printk(KERN_ERR "property parse failed in %s at line %d\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               return NULL;
-       }
-       else if (tmp < end && *tmp != ' ' && *tmp != '\0') {
-               printk(KERN_ERR "property parse failed in %s at line %d\n",
--                     __FUNCTION__, __LINE__);
-+                     __func__, __LINE__);
-               return NULL;
-       }
-       tmp++;
---- a/arch/powerpc/platforms/pseries/scanlog.c
-+++ b/arch/powerpc/platforms/pseries/scanlog.c
-@@ -195,31 +195,30 @@ const struct file_operations scanlog_fop
- static int __init scanlog_init(void)
- {
-       struct proc_dir_entry *ent;
-+      void *data;
-+      int err = -ENOMEM;
-       ibm_scan_log_dump = rtas_token("ibm,scan-log-dump");
--      if (ibm_scan_log_dump == RTAS_UNKNOWN_SERVICE) {
--              printk(KERN_ERR "scan-log-dump not implemented on this system\n");
--              return -EIO;
--      }
-+      if (ibm_scan_log_dump == RTAS_UNKNOWN_SERVICE)
-+              return -ENODEV;
--        ent = create_proc_entry("ppc64/rtas/scan-log-dump",  S_IRUSR, NULL);
--      if (ent) {
--              ent->proc_fops = &scanlog_fops;
--              /* Ideally we could allocate a buffer < 4G */
--              ent->data = kmalloc(RTAS_DATA_BUF_SIZE, GFP_KERNEL);
--              if (!ent->data) {
--                      printk(KERN_ERR "Failed to allocate a buffer\n");
--                      remove_proc_entry("scan-log-dump", ent->parent);
--                      return -ENOMEM;
--              }
--              ((unsigned int *)ent->data)[0] = 0;
--      } else {
--              printk(KERN_ERR "Failed to create ppc64/scan-log-dump proc entry\n");
--              return -EIO;
--      }
-+      /* Ideally we could allocate a buffer < 4G */
-+      data = kzalloc(RTAS_DATA_BUF_SIZE, GFP_KERNEL);
-+      if (!data)
-+              goto err;
-+
-+      ent = proc_create("ppc64/rtas/scan-log-dump", S_IRUSR, NULL,
-+                        &scanlog_fops);
-+      if (!ent)
-+              goto err;
-+
-+      ent->data = data;
-       proc_ppc64_scan_log_dump = ent;
-       return 0;
-+err:
-+      kfree(data);
-+      return err;
- }
- static void __exit scanlog_cleanup(void)
---- a/arch/powerpc/platforms/pseries/setup.c
-+++ b/arch/powerpc/platforms/pseries/setup.c
-@@ -76,9 +76,6 @@
- #define DBG(fmt...)
- #endif
--/* move those away to a .h */
--extern void find_udbg_vterm(void);
--
- int fwnmi_active;  /* TRUE if an FWNMI handler is present */
- static void pseries_shared_idle_sleep(void);
-@@ -127,14 +124,60 @@ void pseries_8259_cascade(unsigned int i
-       desc->chip->eoi(irq);
- }
--static void __init pseries_mpic_init_IRQ(void)
-+static void __init pseries_setup_i8259_cascade(void)
- {
--      struct device_node *np, *old, *cascade = NULL;
--        const unsigned int *addrp;
-+      struct device_node *np, *old, *found = NULL;
-+      unsigned int cascade;
-+      const u32 *addrp;
-       unsigned long intack = 0;
-+      int naddr;
-+
-+      for_each_node_by_type(np, "interrupt-controller") {
-+              if (of_device_is_compatible(np, "chrp,iic")) {
-+                      found = np;
-+                      break;
-+              }
-+      }
-+
-+      if (found == NULL) {
-+              printk(KERN_DEBUG "pic: no ISA interrupt controller\n");
-+              return;
-+      }
-+
-+      cascade = irq_of_parse_and_map(found, 0);
-+      if (cascade == NO_IRQ) {
-+              printk(KERN_ERR "pic: failed to map cascade interrupt");
-+              return;
-+      }
-+      pr_debug("pic: cascade mapped to irq %d\n", cascade);
-+
-+      for (old = of_node_get(found); old != NULL ; old = np) {
-+              np = of_get_parent(old);
-+              of_node_put(old);
-+              if (np == NULL)
-+                      break;
-+              if (strcmp(np->name, "pci") != 0)
-+                      continue;
-+              addrp = of_get_property(np, "8259-interrupt-acknowledge", NULL);
-+              if (addrp == NULL)
-+                      continue;
-+              naddr = of_n_addr_cells(np);
-+              intack = addrp[naddr-1];
-+              if (naddr > 1)
-+                      intack |= ((unsigned long)addrp[naddr-2]) << 32;
-+      }
-+      if (intack)
-+              printk(KERN_DEBUG "pic: PCI 8259 intack at 0x%016lx\n", intack);
-+      i8259_init(found, intack);
-+      of_node_put(found);
-+      set_irq_chained_handler(cascade, pseries_8259_cascade);
-+}
-+
-+static void __init pseries_mpic_init_IRQ(void)
-+{
-+      struct device_node *np;
-       const unsigned int *opprop;
-       unsigned long openpic_addr = 0;
--      unsigned int cascade_irq;
-       int naddr, n, i, opplen;
-       struct mpic *mpic;
-@@ -167,43 +210,13 @@ static void __init pseries_mpic_init_IRQ
-       mpic_init(mpic);
-       /* Look for cascade */
--      for_each_node_by_type(np, "interrupt-controller")
--              if (of_device_is_compatible(np, "chrp,iic")) {
--                      cascade = np;
--                      break;
--              }
--      if (cascade == NULL)
--              return;
--
--      cascade_irq = irq_of_parse_and_map(cascade, 0);
--      if (cascade_irq == NO_IRQ) {
--              printk(KERN_ERR "mpic: failed to map cascade interrupt");
--              return;
--      }
-+      pseries_setup_i8259_cascade();
-+}
--      /* Check ACK type */
--      for (old = of_node_get(cascade); old != NULL ; old = np) {
--              np = of_get_parent(old);
--              of_node_put(old);
--              if (np == NULL)
--                      break;
--              if (strcmp(np->name, "pci") != 0)
--                      continue;
--              addrp = of_get_property(np, "8259-interrupt-acknowledge",
--                                          NULL);
--              if (addrp == NULL)
--                      continue;
--              naddr = of_n_addr_cells(np);
--              intack = addrp[naddr-1];
--              if (naddr > 1)
--                      intack |= ((unsigned long)addrp[naddr-2]) << 32;
--      }
--      if (intack)
--              printk(KERN_DEBUG "mpic: PCI 8259 intack at 0x%016lx\n",
--                     intack);
--      i8259_init(cascade, intack);
--      of_node_put(cascade);
--      set_irq_chained_handler(cascade_irq, pseries_8259_cascade);
-+static void __init pseries_xics_init_IRQ(void)
-+{
-+      xics_init_IRQ();
-+      pseries_setup_i8259_cascade();
- }
- static void pseries_lpar_enable_pmcs(void)
-@@ -235,7 +248,7 @@ static void __init pseries_discover_pic(
-                       smp_init_pseries_mpic();
-                       return;
-               } else if (strstr(typep, "ppc-xicp")) {
--                      ppc_md.init_IRQ       = xics_init_IRQ;
-+                      ppc_md.init_IRQ       = pseries_xics_init_IRQ;
-                       setup_kexec_cpu_down_xics();
-                       smp_init_pseries_xics();
-                       return;
-@@ -393,6 +406,7 @@ static void pseries_dedicated_idle_sleep
- { 
-       unsigned int cpu = smp_processor_id();
-       unsigned long start_snooze;
-+      unsigned long in_purr, out_purr;
-       /*
-        * Indicate to the HV that we are idle. Now would be
-@@ -400,6 +414,7 @@ static void pseries_dedicated_idle_sleep
-        */
-       get_lppaca()->idle = 1;
-       get_lppaca()->donate_dedicated_cpu = 1;
-+      in_purr = mfspr(SPRN_PURR);
-       /*
-        * We come in with interrupts disabled, and need_resched()
-@@ -432,6 +447,8 @@ static void pseries_dedicated_idle_sleep
- out:
-       HMT_medium();
-+      out_purr = mfspr(SPRN_PURR);
-+      get_lppaca()->wait_state_cycles += out_purr - in_purr;
-       get_lppaca()->donate_dedicated_cpu = 0;
-       get_lppaca()->idle = 0;
- }
---- a/arch/powerpc/platforms/pseries/xics.c
-+++ b/arch/powerpc/platforms/pseries/xics.c
-@@ -516,6 +516,8 @@ static struct irq_chip xics_pic_lpar = {
-       .set_affinity = xics_set_affinity
- };
-+/* Points to the irq_chip we're actually using */
-+static struct irq_chip *xics_irq_chip;
- static int xics_host_match(struct irq_host *h, struct device_node *node)
- {
-@@ -526,23 +528,13 @@ static int xics_host_match(struct irq_ho
-       return !of_device_is_compatible(node, "chrp,iic");
- }
--static int xics_host_map_direct(struct irq_host *h, unsigned int virq,
--                              irq_hw_number_t hw)
-+static int xics_host_map(struct irq_host *h, unsigned int virq,
-+                       irq_hw_number_t hw)
- {
--      pr_debug("xics: map_direct virq %d, hwirq 0x%lx\n", virq, hw);
-+      pr_debug("xics: map virq %d, hwirq 0x%lx\n", virq, hw);
-       get_irq_desc(virq)->status |= IRQ_LEVEL;
--      set_irq_chip_and_handler(virq, &xics_pic_direct, handle_fasteoi_irq);
--      return 0;
--}
--
--static int xics_host_map_lpar(struct irq_host *h, unsigned int virq,
--                            irq_hw_number_t hw)
--{
--      pr_debug("xics: map_direct virq %d, hwirq 0x%lx\n", virq, hw);
--
--      get_irq_desc(virq)->status |= IRQ_LEVEL;
--      set_irq_chip_and_handler(virq, &xics_pic_lpar, handle_fasteoi_irq);
-+      set_irq_chip_and_handler(virq, xics_irq_chip, handle_fasteoi_irq);
-       return 0;
- }
-@@ -561,27 +553,20 @@ static int xics_host_xlate(struct irq_ho
-       return 0;
- }
--static struct irq_host_ops xics_host_direct_ops = {
--      .match = xics_host_match,
--      .map = xics_host_map_direct,
--      .xlate = xics_host_xlate,
--};
--
--static struct irq_host_ops xics_host_lpar_ops = {
-+static struct irq_host_ops xics_host_ops = {
-       .match = xics_host_match,
--      .map = xics_host_map_lpar,
-+      .map = xics_host_map,
-       .xlate = xics_host_xlate,
- };
- static void __init xics_init_host(void)
- {
--      struct irq_host_ops *ops;
--
-       if (firmware_has_feature(FW_FEATURE_LPAR))
--              ops = &xics_host_lpar_ops;
-+              xics_irq_chip = &xics_pic_lpar;
-       else
--              ops = &xics_host_direct_ops;
--      xics_host = irq_alloc_host(NULL, IRQ_HOST_MAP_TREE, 0, ops,
-+              xics_irq_chip = &xics_pic_direct;
-+
-+      xics_host = irq_alloc_host(NULL, IRQ_HOST_MAP_TREE, 0, &xics_host_ops,
-                                  XICS_IRQ_SPURIOUS);
-       BUG_ON(xics_host == NULL);
-       irq_set_default_host(xics_host);
-@@ -655,52 +640,6 @@ static void __init xics_init_one_node(st
-       }
- }
--
--static void __init xics_setup_8259_cascade(void)
--{
--      struct device_node *np, *old, *found = NULL;
--      int cascade, naddr;
--      const u32 *addrp;
--      unsigned long intack = 0;
--
--      for_each_node_by_type(np, "interrupt-controller")
--              if (of_device_is_compatible(np, "chrp,iic")) {
--                      found = np;
--                      break;
--              }
--      if (found == NULL) {
--              printk(KERN_DEBUG "xics: no ISA interrupt controller\n");
--              return;
--      }
--      cascade = irq_of_parse_and_map(found, 0);
--      if (cascade == NO_IRQ) {
--              printk(KERN_ERR "xics: failed to map cascade interrupt");
--              return;
--      }
--      pr_debug("xics: cascade mapped to irq %d\n", cascade);
--
--      for (old = of_node_get(found); old != NULL ; old = np) {
--              np = of_get_parent(old);
--              of_node_put(old);
--              if (np == NULL)
--                      break;
--              if (strcmp(np->name, "pci") != 0)
--                      continue;
--              addrp = of_get_property(np, "8259-interrupt-acknowledge", NULL);
--              if (addrp == NULL)
--                      continue;
--              naddr = of_n_addr_cells(np);
--              intack = addrp[naddr-1];
--              if (naddr > 1)
--                      intack |= ((unsigned long)addrp[naddr-2]) << 32;
--      }
--      if (intack)
--              printk(KERN_DEBUG "xics: PCI 8259 intack at 0x%016lx\n", intack);
--      i8259_init(found, intack);
--      of_node_put(found);
--      set_irq_chained_handler(cascade, pseries_8259_cascade);
--}
--
- void __init xics_init_IRQ(void)
- {
-       struct device_node *np;
-@@ -733,8 +672,6 @@ void __init xics_init_IRQ(void)
-       xics_setup_cpu();
--      xics_setup_8259_cascade();
--
-       ppc64_boot_msg(0x21, "XICS Done");
- }
---- a/arch/powerpc/platforms/pseries/xics.h
-+++ b/arch/powerpc/platforms/pseries/xics.h
-@@ -28,7 +28,4 @@ struct xics_ipi_struct {
- extern struct xics_ipi_struct xics_ipi_message[NR_CPUS] __cacheline_aligned;
--struct irq_desc;
--extern void pseries_8259_cascade(unsigned int irq, struct irq_desc *desc);
--
- #endif /* _POWERPC_KERNEL_XICS_H */
---- a/arch/powerpc/sysdev/Makefile
-+++ b/arch/powerpc/sysdev/Makefile
-@@ -12,6 +12,7 @@ obj-$(CONFIG_U3_DART)                += dart_iommu.o
- obj-$(CONFIG_MMIO_NVRAM)      += mmio_nvram.o
- obj-$(CONFIG_FSL_SOC)         += fsl_soc.o
- obj-$(CONFIG_FSL_PCI)         += fsl_pci.o
-+obj-$(CONFIG_FSL_LBC)         += fsl_lbc.o
- obj-$(CONFIG_RAPIDIO)         += fsl_rio.o
- obj-$(CONFIG_TSI108_BRIDGE)   += tsi108_pci.o tsi108_dev.o
- obj-$(CONFIG_QUICC_ENGINE)    += qe_lib/
-@@ -27,6 +28,7 @@ obj-$(CONFIG_PPC_INDIRECT_PCI)       += indire
- obj-$(CONFIG_PPC_I8259)               += i8259.o
- obj-$(CONFIG_IPIC)            += ipic.o
- obj-$(CONFIG_4xx)             += uic.o
-+obj-$(CONFIG_4xx_SOC)         += ppc4xx_soc.o
- obj-$(CONFIG_XILINX_VIRTEX)   += xilinx_intc.o
- obj-$(CONFIG_OF_RTC)          += of_rtc.o
- ifeq ($(CONFIG_PCI),y)
---- a/arch/powerpc/sysdev/cpm1.c
-+++ b/arch/powerpc/sysdev/cpm1.c
-@@ -44,9 +44,6 @@
- #define CPM_MAP_SIZE    (0x4000)
--#ifndef CONFIG_PPC_CPM_NEW_BINDING
--static void m8xx_cpm_dpinit(void);
--#endif
- cpm8xx_t __iomem *cpmp;  /* Pointer to comm processor space */
- immap_t __iomem *mpc8xx_immr;
- static cpic8xx_t __iomem *cpic_reg;
-@@ -229,12 +226,7 @@ void __init cpm_reset(void)
-       out_be32(&siu_conf->sc_sdcr, 1);
-       immr_unmap(siu_conf);
--#ifdef CONFIG_PPC_CPM_NEW_BINDING
-       cpm_muram_init();
--#else
--      /* Reclaim the DP memory for our use. */
--      m8xx_cpm_dpinit();
--#endif
- }
- static DEFINE_SPINLOCK(cmd_lock);
-@@ -257,7 +249,7 @@ int cpm_command(u32 command, u8 opcode)
-               if ((in_be16(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0)
-                       goto out;
--      printk(KERN_ERR "%s(): Not able to issue CPM command\n", __FUNCTION__);
-+      printk(KERN_ERR "%s(): Not able to issue CPM command\n", __func__);
-       ret = -EIO;
- out:
-       spin_unlock_irqrestore(&cmd_lock, flags);
-@@ -293,110 +285,6 @@ cpm_setbrg(uint brg, uint rate)
-                             CPM_BRG_EN | CPM_BRG_DIV16);
- }
--#ifndef CONFIG_PPC_CPM_NEW_BINDING
--/*
-- * dpalloc / dpfree bits.
-- */
--static spinlock_t cpm_dpmem_lock;
--/*
-- * 16 blocks should be enough to satisfy all requests
-- * until the memory subsystem goes up...
-- */
--static rh_block_t cpm_boot_dpmem_rh_block[16];
--static rh_info_t cpm_dpmem_info;
--
--#define CPM_DPMEM_ALIGNMENT   8
--static u8 __iomem *dpram_vbase;
--static phys_addr_t dpram_pbase;
--
--static void m8xx_cpm_dpinit(void)
--{
--      spin_lock_init(&cpm_dpmem_lock);
--
--      dpram_vbase = cpmp->cp_dpmem;
--      dpram_pbase = get_immrbase() + offsetof(immap_t, im_cpm.cp_dpmem);
--
--      /* Initialize the info header */
--      rh_init(&cpm_dpmem_info, CPM_DPMEM_ALIGNMENT,
--                      sizeof(cpm_boot_dpmem_rh_block) /
--                      sizeof(cpm_boot_dpmem_rh_block[0]),
--                      cpm_boot_dpmem_rh_block);
--
--      /*
--       * Attach the usable dpmem area.
--       * XXX: This is actually crap.  CPM_DATAONLY_BASE and
--       * CPM_DATAONLY_SIZE are a subset of the available dparm.  It varies
--       * with the processor and the microcode patches applied / activated.
--       * But the following should be at least safe.
--       */
--      rh_attach_region(&cpm_dpmem_info, CPM_DATAONLY_BASE, CPM_DATAONLY_SIZE);
--}
--
--/*
-- * Allocate the requested size worth of DP memory.
-- * This function returns an offset into the DPRAM area.
-- * Use cpm_dpram_addr() to get the virtual address of the area.
-- */
--unsigned long cpm_dpalloc(uint size, uint align)
--{
--      unsigned long start;
--      unsigned long flags;
--
--      spin_lock_irqsave(&cpm_dpmem_lock, flags);
--      cpm_dpmem_info.alignment = align;
--      start = rh_alloc(&cpm_dpmem_info, size, "commproc");
--      spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
--
--      return (uint)start;
--}
--EXPORT_SYMBOL(cpm_dpalloc);
--
--int cpm_dpfree(unsigned long offset)
--{
--      int ret;
--      unsigned long flags;
--
--      spin_lock_irqsave(&cpm_dpmem_lock, flags);
--      ret = rh_free(&cpm_dpmem_info, offset);
--      spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
--
--      return ret;
--}
--EXPORT_SYMBOL(cpm_dpfree);
--
--unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align)
--{
--      unsigned long start;
--      unsigned long flags;
--
--      spin_lock_irqsave(&cpm_dpmem_lock, flags);
--      cpm_dpmem_info.alignment = align;
--      start = rh_alloc_fixed(&cpm_dpmem_info, offset, size, "commproc");
--      spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
--
--      return start;
--}
--EXPORT_SYMBOL(cpm_dpalloc_fixed);
--
--void cpm_dpdump(void)
--{
--      rh_dump(&cpm_dpmem_info);
--}
--EXPORT_SYMBOL(cpm_dpdump);
--
--void *cpm_dpram_addr(unsigned long offset)
--{
--      return (void *)(dpram_vbase + offset);
--}
--EXPORT_SYMBOL(cpm_dpram_addr);
--
--uint cpm_dpram_phys(u8 *addr)
--{
--      return (dpram_pbase + (uint)(addr - dpram_vbase));
--}
--EXPORT_SYMBOL(cpm_dpram_phys);
--#endif /* !CONFIG_PPC_CPM_NEW_BINDING */
--
- struct cpm_ioport16 {
-       __be16 dir, par, odr_sor, dat, intr;
-       __be16 res[3];
---- a/arch/powerpc/sysdev/cpm2.c
-+++ b/arch/powerpc/sysdev/cpm2.c
-@@ -46,10 +46,6 @@
- #include <sysdev/fsl_soc.h>
--#ifndef CONFIG_PPC_CPM_NEW_BINDING
--static void cpm2_dpinit(void);
--#endif
--
- cpm_cpm2_t __iomem *cpmp; /* Pointer to comm processor space */
- /* We allocate this here because it is used almost exclusively for
-@@ -71,15 +67,17 @@ void __init cpm2_reset(void)
-       /* Reclaim the DP memory for our use.
-        */
--#ifdef CONFIG_PPC_CPM_NEW_BINDING
-       cpm_muram_init();
--#else
--      cpm2_dpinit();
--#endif
-       /* Tell everyone where the comm processor resides.
-        */
-       cpmp = &cpm2_immr->im_cpm;
-+
-+#ifndef CONFIG_PPC_EARLY_DEBUG_CPM
-+      /* Reset the CPM.
-+       */
-+      cpm_command(CPM_CR_RST, 0);
-+#endif
- }
- static DEFINE_SPINLOCK(cmd_lock);
-@@ -99,7 +97,7 @@ int cpm_command(u32 command, u8 opcode)
-               if ((in_be32(&cpmp->cp_cpcr) & CPM_CR_FLG) == 0)
-                       goto out;
--      printk(KERN_ERR "%s(): Not able to issue CPM command\n", __FUNCTION__);
-+      printk(KERN_ERR "%s(): Not able to issue CPM command\n", __func__);
-       ret = -EIO;
- out:
-       spin_unlock_irqrestore(&cmd_lock, flags);
-@@ -347,95 +345,6 @@ int cpm2_smc_clk_setup(enum cpm_clk_targ
-       return ret;
- }
--#ifndef CONFIG_PPC_CPM_NEW_BINDING
--/*
-- * dpalloc / dpfree bits.
-- */
--static spinlock_t cpm_dpmem_lock;
--/* 16 blocks should be enough to satisfy all requests
-- * until the memory subsystem goes up... */
--static rh_block_t cpm_boot_dpmem_rh_block[16];
--static rh_info_t cpm_dpmem_info;
--static u8 __iomem *im_dprambase;
--
--static void cpm2_dpinit(void)
--{
--      spin_lock_init(&cpm_dpmem_lock);
--
--      /* initialize the info header */
--      rh_init(&cpm_dpmem_info, 1,
--                      sizeof(cpm_boot_dpmem_rh_block) /
--                      sizeof(cpm_boot_dpmem_rh_block[0]),
--                      cpm_boot_dpmem_rh_block);
--
--      im_dprambase = cpm2_immr;
--
--      /* Attach the usable dpmem area */
--      /* XXX: This is actually crap. CPM_DATAONLY_BASE and
--       * CPM_DATAONLY_SIZE is only a subset of the available dpram. It
--       * varies with the processor and the microcode patches activated.
--       * But the following should be at least safe.
--       */
--      rh_attach_region(&cpm_dpmem_info, CPM_DATAONLY_BASE, CPM_DATAONLY_SIZE);
--}
--
--/* This function returns an index into the DPRAM area.
-- */
--unsigned long cpm_dpalloc(uint size, uint align)
--{
--      unsigned long start;
--      unsigned long flags;
--
--      spin_lock_irqsave(&cpm_dpmem_lock, flags);
--      cpm_dpmem_info.alignment = align;
--      start = rh_alloc(&cpm_dpmem_info, size, "commproc");
--      spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
--
--      return (uint)start;
--}
--EXPORT_SYMBOL(cpm_dpalloc);
--
--int cpm_dpfree(unsigned long offset)
--{
--      int ret;
--      unsigned long flags;
--
--      spin_lock_irqsave(&cpm_dpmem_lock, flags);
--      ret = rh_free(&cpm_dpmem_info, offset);
--      spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
--
--      return ret;
--}
--EXPORT_SYMBOL(cpm_dpfree);
--
--/* not sure if this is ever needed */
--unsigned long cpm_dpalloc_fixed(unsigned long offset, uint size, uint align)
--{
--      unsigned long start;
--      unsigned long flags;
--
--      spin_lock_irqsave(&cpm_dpmem_lock, flags);
--      cpm_dpmem_info.alignment = align;
--      start = rh_alloc_fixed(&cpm_dpmem_info, offset, size, "commproc");
--      spin_unlock_irqrestore(&cpm_dpmem_lock, flags);
--
--      return start;
--}
--EXPORT_SYMBOL(cpm_dpalloc_fixed);
--
--void cpm_dpdump(void)
--{
--      rh_dump(&cpm_dpmem_info);
--}
--EXPORT_SYMBOL(cpm_dpdump);
--
--void *cpm_dpram_addr(unsigned long offset)
--{
--      return (void *)(im_dprambase + offset);
--}
--EXPORT_SYMBOL(cpm_dpram_addr);
--#endif /* !CONFIG_PPC_CPM_NEW_BINDING */
--
- struct cpm2_ioports {
-       u32 dir, par, sor, odr, dat;
-       u32 res[3];
---- a/arch/powerpc/sysdev/cpm_common.c
-+++ b/arch/powerpc/sysdev/cpm_common.c
-@@ -58,7 +58,6 @@ void __init udbg_init_cpm(void)
- }
- #endif
--#ifdef CONFIG_PPC_CPM_NEW_BINDING
- static spinlock_t cpm_muram_lock;
- static rh_block_t cpm_boot_muram_rh_block[16];
- static rh_info_t cpm_muram_info;
-@@ -199,5 +198,3 @@ dma_addr_t cpm_muram_dma(void __iomem *a
-       return muram_pbase + ((u8 __iomem *)addr - muram_vbase);
- }
- EXPORT_SYMBOL(cpm_muram_dma);
--
--#endif /* CONFIG_PPC_CPM_NEW_BINDING */
---- a/arch/powerpc/sysdev/dart_iommu.c
-+++ b/arch/powerpc/sysdev/dart_iommu.c
-@@ -37,6 +37,7 @@
- #include <linux/dma-mapping.h>
- #include <linux/vmalloc.h>
- #include <linux/suspend.h>
-+#include <linux/lmb.h>
- #include <asm/io.h>
- #include <asm/prom.h>
- #include <asm/iommu.h>
-@@ -44,7 +45,6 @@
- #include <asm/machdep.h>
- #include <asm/abs_addr.h>
- #include <asm/cacheflush.h>
--#include <asm/lmb.h>
- #include <asm/ppc-pci.h>
- #include "dart.h"
---- /dev/null
-+++ b/arch/powerpc/sysdev/fsl_lbc.c
-@@ -0,0 +1,129 @@
-+/*
-+ * Freescale LBC and UPM routines.
-+ *
-+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
-+ *
-+ * Author: Anton Vorontsov <avorontsov@ru.mvista.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 <linux/kernel.h>
-+#include <linux/of.h>
-+#include <asm/fsl_lbc.h>
-+
-+spinlock_t fsl_lbc_lock = __SPIN_LOCK_UNLOCKED(fsl_lbc_lock);
-+
-+struct fsl_lbc_regs __iomem *fsl_lbc_regs;
-+EXPORT_SYMBOL(fsl_lbc_regs);
-+
-+static char __initdata *compat_lbc[] = {
-+      "fsl,pq2-localbus",
-+      "fsl,pq2pro-localbus",
-+      "fsl,pq3-localbus",
-+      "fsl,elbc",
-+};
-+
-+static int __init fsl_lbc_init(void)
-+{
-+      struct device_node *lbus;
-+      int i;
-+
-+      for (i = 0; i < ARRAY_SIZE(compat_lbc); i++) {
-+              lbus = of_find_compatible_node(NULL, NULL, compat_lbc[i]);
-+              if (lbus)
-+                      goto found;
-+      }
-+      return -ENODEV;
-+
-+found:
-+      fsl_lbc_regs = of_iomap(lbus, 0);
-+      of_node_put(lbus);
-+      if (!fsl_lbc_regs)
-+              return -ENOMEM;
-+      return 0;
-+}
-+arch_initcall(fsl_lbc_init);
-+
-+/**
-+ * fsl_lbc_find - find Localbus bank
-+ * @addr_base:        base address of the memory bank
-+ *
-+ * This function walks LBC banks comparing "Base address" field of the BR
-+ * registers with the supplied addr_base argument. When bases match this
-+ * function returns bank number (starting with 0), otherwise it returns
-+ * appropriate errno value.
-+ */
-+int fsl_lbc_find(phys_addr_t addr_base)
-+{
-+      int i;
-+
-+      if (!fsl_lbc_regs)
-+              return -ENODEV;
-+
-+      for (i = 0; i < ARRAY_SIZE(fsl_lbc_regs->bank); i++) {
-+              __be32 br = in_be32(&fsl_lbc_regs->bank[i].br);
-+              __be32 or = in_be32(&fsl_lbc_regs->bank[i].or);
-+
-+              if (br & BR_V && (br & or & BR_BA) == addr_base)
-+                      return i;
-+      }
-+
-+      return -ENOENT;
-+}
-+EXPORT_SYMBOL(fsl_lbc_find);
-+
-+/**
-+ * fsl_upm_find - find pre-programmed UPM via base address
-+ * @addr_base:        base address of the memory bank controlled by the UPM
-+ * @upm:      pointer to the allocated fsl_upm structure
-+ *
-+ * This function fills fsl_upm structure so you can use it with the rest of
-+ * UPM API. On success this function returns 0, otherwise it returns
-+ * appropriate errno value.
-+ */
-+int fsl_upm_find(phys_addr_t addr_base, struct fsl_upm *upm)
-+{
-+      int bank;
-+      __be32 br;
-+
-+      bank = fsl_lbc_find(addr_base);
-+      if (bank < 0)
-+              return bank;
-+
-+      br = in_be32(&fsl_lbc_regs->bank[bank].br);
-+
-+      switch (br & BR_MSEL) {
-+      case BR_MS_UPMA:
-+              upm->mxmr = &fsl_lbc_regs->mamr;
-+              break;
-+      case BR_MS_UPMB:
-+              upm->mxmr = &fsl_lbc_regs->mbmr;
-+              break;
-+      case BR_MS_UPMC:
-+              upm->mxmr = &fsl_lbc_regs->mcmr;
-+              break;
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      switch (br & BR_PS) {
-+      case BR_PS_8:
-+              upm->width = 8;
-+              break;
-+      case BR_PS_16:
-+              upm->width = 16;
-+              break;
-+      case BR_PS_32:
-+              upm->width = 32;
-+              break;
-+      default:
-+              return -EINVAL;
-+      }
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(fsl_upm_find);
---- a/arch/powerpc/sysdev/fsl_soc.c
-+++ b/arch/powerpc/sysdev/fsl_soc.c
-@@ -75,6 +75,33 @@ phys_addr_t get_immrbase(void)
- EXPORT_SYMBOL(get_immrbase);
-+static u32 sysfreq = -1;
-+
-+u32 fsl_get_sys_freq(void)
-+{
-+      struct device_node *soc;
-+      const u32 *prop;
-+      int size;
-+
-+      if (sysfreq != -1)
-+              return sysfreq;
-+
-+      soc = of_find_node_by_type(NULL, "soc");
-+      if (!soc)
-+              return -1;
-+
-+      prop = of_get_property(soc, "clock-frequency", &size);
-+      if (!prop || size != sizeof(*prop) || *prop == 0)
-+              prop = of_get_property(soc, "bus-frequency", &size);
-+
-+      if (prop && size == sizeof(*prop))
-+              sysfreq = *prop;
-+
-+      of_node_put(soc);
-+      return sysfreq;
-+}
-+EXPORT_SYMBOL(fsl_get_sys_freq);
-+
- #if defined(CONFIG_CPM2) || defined(CONFIG_QUICC_ENGINE) || defined(CONFIG_8xx)
- static u32 brgfreq = -1;
-@@ -516,9 +543,9 @@ arch_initcall(fsl_i2c_of_init);
- static int __init mpc83xx_wdt_init(void)
- {
-       struct resource r;
--      struct device_node *soc, *np;
-+      struct device_node *np;
-       struct platform_device *dev;
--      const unsigned int *freq;
-+      u32 freq = fsl_get_sys_freq();
-       int ret;
-       np = of_find_compatible_node(NULL, "watchdog", "mpc83xx_wdt");
-@@ -528,19 +555,6 @@ static int __init mpc83xx_wdt_init(void)
-               goto nodev;
-       }
--      soc = of_find_node_by_type(NULL, "soc");
--
--      if (!soc) {
--              ret = -ENODEV;
--              goto nosoc;
--      }
--
--      freq = of_get_property(soc, "bus-frequency", NULL);
--      if (!freq) {
--              ret = -ENODEV;
--              goto err;
--      }
--
-       memset(&r, 0, sizeof(r));
-       ret = of_address_to_resource(np, 0, &r);
-@@ -553,20 +567,16 @@ static int __init mpc83xx_wdt_init(void)
-               goto err;
-       }
--      ret = platform_device_add_data(dev, freq, sizeof(int));
-+      ret = platform_device_add_data(dev, &freq, sizeof(freq));
-       if (ret)
-               goto unreg;
--      of_node_put(soc);
-       of_node_put(np);
--
-       return 0;
- unreg:
-       platform_device_unregister(dev);
- err:
--      of_node_put(soc);
--nosoc:
-       of_node_put(np);
- nodev:
-       return ret;
-@@ -735,547 +745,6 @@ err:
- arch_initcall(fsl_usb_of_init);
--#ifndef CONFIG_PPC_CPM_NEW_BINDING
--#ifdef CONFIG_CPM2
--
--extern void init_scc_ioports(struct fs_uart_platform_info*);
--
--static const char fcc_regs[] = "fcc_regs";
--static const char fcc_regs_c[] = "fcc_regs_c";
--static const char fcc_pram[] = "fcc_pram";
--static char bus_id[9][BUS_ID_SIZE];
--
--static int __init fs_enet_of_init(void)
--{
--      struct device_node *np;
--      unsigned int i;
--      struct platform_device *fs_enet_dev;
--      struct resource res;
--      int ret;
--
--      for (np = NULL, i = 0;
--           (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL;
--           i++) {
--              struct resource r[4];
--              struct device_node *phy, *mdio;
--              struct fs_platform_info fs_enet_data;
--              const unsigned int *id, *phy_addr, *phy_irq;
--              const void *mac_addr;
--              const phandle *ph;
--              const char *model;
--
--              memset(r, 0, sizeof(r));
--              memset(&fs_enet_data, 0, sizeof(fs_enet_data));
--
--              ret = of_address_to_resource(np, 0, &r[0]);
--              if (ret)
--                      goto err;
--              r[0].name = fcc_regs;
--
--              ret = of_address_to_resource(np, 1, &r[1]);
--              if (ret)
--                      goto err;
--              r[1].name = fcc_pram;
--
--              ret = of_address_to_resource(np, 2, &r[2]);
--              if (ret)
--                      goto err;
--              r[2].name = fcc_regs_c;
--              fs_enet_data.fcc_regs_c = r[2].start;
--
--              of_irq_to_resource(np, 0, &r[3]);
--
--              fs_enet_dev =
--                  platform_device_register_simple("fsl-cpm-fcc", i, &r[0], 4);
--
--              if (IS_ERR(fs_enet_dev)) {
--                      ret = PTR_ERR(fs_enet_dev);
--                      goto err;
--              }
--
--              model = of_get_property(np, "model", NULL);
--              if (model == NULL) {
--                      ret = -ENODEV;
--                      goto unreg;
--              }
--
--              mac_addr = of_get_mac_address(np);
--              if (mac_addr)
--                      memcpy(fs_enet_data.macaddr, mac_addr, 6);
--
--              ph = of_get_property(np, "phy-handle", NULL);
--              phy = of_find_node_by_phandle(*ph);
--
--              if (phy == NULL) {
--                      ret = -ENODEV;
--                      goto unreg;
--              }
--
--              phy_addr = of_get_property(phy, "reg", NULL);
--              fs_enet_data.phy_addr = *phy_addr;
--
--              phy_irq = of_get_property(phy, "interrupts", NULL);
--
--              id = of_get_property(np, "device-id", NULL);
--              fs_enet_data.fs_no = *id;
--              strcpy(fs_enet_data.fs_type, model);
--
--              mdio = of_get_parent(phy);
--                ret = of_address_to_resource(mdio, 0, &res);
--                if (ret) {
--                        of_node_put(phy);
--                        of_node_put(mdio);
--                        goto unreg;
--                }
--
--              fs_enet_data.clk_rx = *((u32 *)of_get_property(np,
--                                              "rx-clock", NULL));
--              fs_enet_data.clk_tx = *((u32 *)of_get_property(np,
--                                              "tx-clock", NULL));
--
--              if (strstr(model, "FCC")) {
--                      int fcc_index = *id - 1;
--                      const unsigned char *mdio_bb_prop;
--
--                      fs_enet_data.dpram_offset = (u32)cpm_dpram_addr(0);
--                      fs_enet_data.rx_ring = 32;
--                      fs_enet_data.tx_ring = 32;
--                      fs_enet_data.rx_copybreak = 240;
--                      fs_enet_data.use_napi = 0;
--                      fs_enet_data.napi_weight = 17;
--                      fs_enet_data.mem_offset = FCC_MEM_OFFSET(fcc_index);
--                      fs_enet_data.cp_page = CPM_CR_FCC_PAGE(fcc_index);
--                      fs_enet_data.cp_block = CPM_CR_FCC_SBLOCK(fcc_index);
--
--                      snprintf((char*)&bus_id[(*id)], BUS_ID_SIZE, "%x:%02x",
--                                                      (u32)res.start, fs_enet_data.phy_addr);
--                      fs_enet_data.bus_id = (char*)&bus_id[(*id)];
--                      fs_enet_data.init_ioports = init_fcc_ioports;
--
--                      mdio_bb_prop = of_get_property(phy, "bitbang", NULL);
--                      if (mdio_bb_prop) {
--                              struct platform_device *fs_enet_mdio_bb_dev;
--                              struct fs_mii_bb_platform_info fs_enet_mdio_bb_data;
--
--                              fs_enet_mdio_bb_dev =
--                                      platform_device_register_simple("fsl-bb-mdio",
--                                                      i, NULL, 0);
--                              memset(&fs_enet_mdio_bb_data, 0,
--                                              sizeof(struct fs_mii_bb_platform_info));
--                              fs_enet_mdio_bb_data.mdio_dat.bit =
--                                      mdio_bb_prop[0];
--                              fs_enet_mdio_bb_data.mdio_dir.bit =
--                                      mdio_bb_prop[1];
--                              fs_enet_mdio_bb_data.mdc_dat.bit =
--                                      mdio_bb_prop[2];
--                              fs_enet_mdio_bb_data.mdio_port =
--                                      mdio_bb_prop[3];
--                              fs_enet_mdio_bb_data.mdc_port =
--                                      mdio_bb_prop[4];
--                              fs_enet_mdio_bb_data.delay =
--                                      mdio_bb_prop[5];
--
--                              fs_enet_mdio_bb_data.irq[0] = phy_irq[0];
--                              fs_enet_mdio_bb_data.irq[1] = -1;
--                              fs_enet_mdio_bb_data.irq[2] = -1;
--                              fs_enet_mdio_bb_data.irq[3] = phy_irq[0];
--                              fs_enet_mdio_bb_data.irq[31] = -1;
--
--                              fs_enet_mdio_bb_data.mdio_dat.offset =
--                                      (u32)&cpm2_immr->im_ioport.iop_pdatc;
--                              fs_enet_mdio_bb_data.mdio_dir.offset =
--                                      (u32)&cpm2_immr->im_ioport.iop_pdirc;
--                              fs_enet_mdio_bb_data.mdc_dat.offset =
--                                      (u32)&cpm2_immr->im_ioport.iop_pdatc;
--
--                              ret = platform_device_add_data(
--                                              fs_enet_mdio_bb_dev,
--                                              &fs_enet_mdio_bb_data,
--                                              sizeof(struct fs_mii_bb_platform_info));
--                              if (ret)
--                                      goto unreg;
--                      }
--
--                      of_node_put(phy);
--                      of_node_put(mdio);
--
--                      ret = platform_device_add_data(fs_enet_dev, &fs_enet_data,
--                                                   sizeof(struct
--                                                          fs_platform_info));
--                      if (ret)
--                              goto unreg;
--              }
--      }
--      return 0;
--
--unreg:
--      platform_device_unregister(fs_enet_dev);
--err:
--      return ret;
--}
--
--arch_initcall(fs_enet_of_init);
--
--static const char scc_regs[] = "regs";
--static const char scc_pram[] = "pram";
--
--static int __init cpm_uart_of_init(void)
--{
--      struct device_node *np;
--      unsigned int i;
--      struct platform_device *cpm_uart_dev;
--      int ret;
--
--      for (np = NULL, i = 0;
--           (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL;
--           i++) {
--              struct resource r[3];
--              struct fs_uart_platform_info cpm_uart_data;
--              const int *id;
--              const char *model;
--
--              memset(r, 0, sizeof(r));
--              memset(&cpm_uart_data, 0, sizeof(cpm_uart_data));
--
--              ret = of_address_to_resource(np, 0, &r[0]);
--              if (ret)
--                      goto err;
--
--              r[0].name = scc_regs;
--
--              ret = of_address_to_resource(np, 1, &r[1]);
--              if (ret)
--                      goto err;
--              r[1].name = scc_pram;
--
--              of_irq_to_resource(np, 0, &r[2]);
--
--              cpm_uart_dev =
--                  platform_device_register_simple("fsl-cpm-scc:uart", i, &r[0], 3);
--
--              if (IS_ERR(cpm_uart_dev)) {
--                      ret = PTR_ERR(cpm_uart_dev);
--                      goto err;
--              }
--
--              id = of_get_property(np, "device-id", NULL);
--              cpm_uart_data.fs_no = *id;
--
--              model = of_get_property(np, "model", NULL);
--              strcpy(cpm_uart_data.fs_type, model);
--
--              cpm_uart_data.uart_clk = ppc_proc_freq;
--
--              cpm_uart_data.tx_num_fifo = 4;
--              cpm_uart_data.tx_buf_size = 32;
--              cpm_uart_data.rx_num_fifo = 4;
--              cpm_uart_data.rx_buf_size = 32;
--              cpm_uart_data.clk_rx = *((u32 *)of_get_property(np,
--                                              "rx-clock", NULL));
--              cpm_uart_data.clk_tx = *((u32 *)of_get_property(np,
--                                              "tx-clock", NULL));
--
--              ret =
--                  platform_device_add_data(cpm_uart_dev, &cpm_uart_data,
--                                           sizeof(struct
--                                                  fs_uart_platform_info));
--              if (ret)
--                      goto unreg;
--      }
--
--      return 0;
--
--unreg:
--      platform_device_unregister(cpm_uart_dev);
--err:
--      return ret;
--}
--
--arch_initcall(cpm_uart_of_init);
--#endif /* CONFIG_CPM2 */
--
--#ifdef CONFIG_8xx
--
--extern void init_scc_ioports(struct fs_platform_info*);
--extern int platform_device_skip(const char *model, int id);
--
--static int __init fs_enet_mdio_of_init(void)
--{
--      struct device_node *np;
--      unsigned int i;
--      struct platform_device *mdio_dev;
--      struct resource res;
--      int ret;
--
--      for (np = NULL, i = 0;
--           (np = of_find_compatible_node(np, "mdio", "fs_enet")) != NULL;
--           i++) {
--              struct fs_mii_fec_platform_info mdio_data;
--
--              memset(&res, 0, sizeof(res));
--              memset(&mdio_data, 0, sizeof(mdio_data));
--
--              ret = of_address_to_resource(np, 0, &res);
--              if (ret)
--                      goto err;
--
--              mdio_dev =
--                  platform_device_register_simple("fsl-cpm-fec-mdio",
--                                                  res.start, &res, 1);
--              if (IS_ERR(mdio_dev)) {
--                      ret = PTR_ERR(mdio_dev);
--                      goto err;
--              }
--
--              mdio_data.mii_speed = ((((ppc_proc_freq + 4999999) / 2500000) / 2) & 0x3F) << 1;
--
--              ret =
--                  platform_device_add_data(mdio_dev, &mdio_data,
--                                           sizeof(struct fs_mii_fec_platform_info));
--              if (ret)
--                      goto unreg;
--      }
--      return 0;
--
--unreg:
--      platform_device_unregister(mdio_dev);
--err:
--      return ret;
--}
--
--arch_initcall(fs_enet_mdio_of_init);
--
--static const char *enet_regs = "regs";
--static const char *enet_pram = "pram";
--static const char *enet_irq = "interrupt";
--static char bus_id[9][BUS_ID_SIZE];
--
--static int __init fs_enet_of_init(void)
--{
--      struct device_node *np;
--      unsigned int i;
--      struct platform_device *fs_enet_dev = NULL;
--      struct resource res;
--      int ret;
--
--      for (np = NULL, i = 0;
--           (np = of_find_compatible_node(np, "network", "fs_enet")) != NULL;
--           i++) {
--              struct resource r[4];
--              struct device_node *phy = NULL, *mdio = NULL;
--              struct fs_platform_info fs_enet_data;
--              const unsigned int *id;
--              const unsigned int *phy_addr;
--              const void *mac_addr;
--              const phandle *ph;
--              const char *model;
--
--              memset(r, 0, sizeof(r));
--              memset(&fs_enet_data, 0, sizeof(fs_enet_data));
--
--              model = of_get_property(np, "model", NULL);
--              if (model == NULL) {
--                      ret = -ENODEV;
--                      goto unreg;
--              }
--
--              id = of_get_property(np, "device-id", NULL);
--              fs_enet_data.fs_no = *id;
--
--              if (platform_device_skip(model, *id))
--                      continue;
--
--              ret = of_address_to_resource(np, 0, &r[0]);
--              if (ret)
--                      goto err;
--              r[0].name = enet_regs;
--
--              mac_addr = of_get_mac_address(np);
--              if (mac_addr)
--                      memcpy(fs_enet_data.macaddr, mac_addr, 6);
--
--              ph = of_get_property(np, "phy-handle", NULL);
--              if (ph != NULL)
--                      phy = of_find_node_by_phandle(*ph);
--
--              if (phy != NULL) {
--                      phy_addr = of_get_property(phy, "reg", NULL);
--                      fs_enet_data.phy_addr = *phy_addr;
--                      fs_enet_data.has_phy = 1;
--
--                      mdio = of_get_parent(phy);
--                      ret = of_address_to_resource(mdio, 0, &res);
--                      if (ret) {
--                              of_node_put(phy);
--                              of_node_put(mdio);
--                                goto unreg;
--                      }
--              }
--
--              model = of_get_property(np, "model", NULL);
--              strcpy(fs_enet_data.fs_type, model);
--
--              if (strstr(model, "FEC")) {
--                      r[1].start = r[1].end = irq_of_parse_and_map(np, 0);
--                      r[1].flags = IORESOURCE_IRQ;
--                      r[1].name = enet_irq;
--
--                      fs_enet_dev =
--                                  platform_device_register_simple("fsl-cpm-fec", i, &r[0], 2);
--
--                      if (IS_ERR(fs_enet_dev)) {
--                              ret = PTR_ERR(fs_enet_dev);
--                              goto err;
--                      }
--
--                      fs_enet_data.rx_ring = 128;
--                      fs_enet_data.tx_ring = 16;
--                      fs_enet_data.rx_copybreak = 240;
--                      fs_enet_data.use_napi = 1;
--                      fs_enet_data.napi_weight = 17;
--
--                      snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%x:%02x",
--                                                      (u32)res.start, fs_enet_data.phy_addr);
--                      fs_enet_data.bus_id = (char*)&bus_id[i];
--                      fs_enet_data.init_ioports = init_fec_ioports;
--              }
--              if (strstr(model, "SCC")) {
--                      ret = of_address_to_resource(np, 1, &r[1]);
--                      if (ret)
--                              goto err;
--                      r[1].name = enet_pram;
--
--                      r[2].start = r[2].end = irq_of_parse_and_map(np, 0);
--                      r[2].flags = IORESOURCE_IRQ;
--                      r[2].name = enet_irq;
--
--                      fs_enet_dev =
--                                  platform_device_register_simple("fsl-cpm-scc", i, &r[0], 3);
--
--                      if (IS_ERR(fs_enet_dev)) {
--                              ret = PTR_ERR(fs_enet_dev);
--                              goto err;
--                      }
--
--                      fs_enet_data.rx_ring = 64;
--                      fs_enet_data.tx_ring = 8;
--                      fs_enet_data.rx_copybreak = 240;
--                      fs_enet_data.use_napi = 1;
--                      fs_enet_data.napi_weight = 17;
--
--                      snprintf((char*)&bus_id[i], BUS_ID_SIZE, "%s", "fixed@10:1");
--                        fs_enet_data.bus_id = (char*)&bus_id[i];
--                      fs_enet_data.init_ioports = init_scc_ioports;
--              }
--
--              of_node_put(phy);
--              of_node_put(mdio);
--
--              ret = platform_device_add_data(fs_enet_dev, &fs_enet_data,
--                                           sizeof(struct
--                                                  fs_platform_info));
--              if (ret)
--                      goto unreg;
--      }
--      return 0;
--
--unreg:
--      platform_device_unregister(fs_enet_dev);
--err:
--      return ret;
--}
--
--arch_initcall(fs_enet_of_init);
--
--static int __init fsl_pcmcia_of_init(void)
--{
--      struct device_node *np;
--      /*
--       * Register all the devices which type is "pcmcia"
--       */
--      for_each_compatible_node(np, "pcmcia", "fsl,pq-pcmcia")
--              of_platform_device_create(np, "m8xx-pcmcia", NULL);
--      return 0;
--}
--
--arch_initcall(fsl_pcmcia_of_init);
--
--static const char *smc_regs = "regs";
--static const char *smc_pram = "pram";
--
--static int __init cpm_smc_uart_of_init(void)
--{
--      struct device_node *np;
--      unsigned int i;
--      struct platform_device *cpm_uart_dev;
--      int ret;
--
--      for (np = NULL, i = 0;
--           (np = of_find_compatible_node(np, "serial", "cpm_uart")) != NULL;
--           i++) {
--              struct resource r[3];
--              struct fs_uart_platform_info cpm_uart_data;
--              const int *id;
--              const char *model;
--
--              memset(r, 0, sizeof(r));
--              memset(&cpm_uart_data, 0, sizeof(cpm_uart_data));
--
--              ret = of_address_to_resource(np, 0, &r[0]);
--              if (ret)
--                      goto err;
--
--              r[0].name = smc_regs;
--
--              ret = of_address_to_resource(np, 1, &r[1]);
--              if (ret)
--                      goto err;
--              r[1].name = smc_pram;
--
--              r[2].start = r[2].end = irq_of_parse_and_map(np, 0);
--              r[2].flags = IORESOURCE_IRQ;
--
--              cpm_uart_dev =
--                  platform_device_register_simple("fsl-cpm-smc:uart", i, &r[0], 3);
--
--              if (IS_ERR(cpm_uart_dev)) {
--                      ret = PTR_ERR(cpm_uart_dev);
--                      goto err;
--              }
--
--              model = of_get_property(np, "model", NULL);
--              strcpy(cpm_uart_data.fs_type, model);
--
--              id = of_get_property(np, "device-id", NULL);
--              cpm_uart_data.fs_no = *id;
--              cpm_uart_data.uart_clk = ppc_proc_freq;
--
--              cpm_uart_data.tx_num_fifo = 4;
--              cpm_uart_data.tx_buf_size = 32;
--              cpm_uart_data.rx_num_fifo = 4;
--              cpm_uart_data.rx_buf_size = 32;
--
--              ret =
--                  platform_device_add_data(cpm_uart_dev, &cpm_uart_data,
--                                           sizeof(struct
--                                                  fs_uart_platform_info));
--              if (ret)
--                      goto unreg;
--      }
--
--      return 0;
--
--unreg:
--      platform_device_unregister(cpm_uart_dev);
--err:
--      return ret;
--}
--
--arch_initcall(cpm_smc_uart_of_init);
--
--#endif /* CONFIG_8xx */
--#endif /* CONFIG_PPC_CPM_NEW_BINDING */
--
- static int __init of_fsl_spi_probe(char *type, char *compatible, u32 sysclk,
-                                  struct spi_board_info *board_infos,
-                                  unsigned int num_board_infos,
-@@ -1371,25 +840,9 @@ int __init fsl_spi_init(struct spi_board
-       sysclk = get_brgfreq();
- #endif
-       if (sysclk == -1) {
--              struct device_node *np;
--              const u32 *freq;
--              int size;
--
--              np = of_find_node_by_type(NULL, "soc");
--              if (!np)
-+              sysclk = fsl_get_sys_freq();
-+              if (sysclk == -1)
-                       return -ENODEV;
--
--              freq = of_get_property(np, "clock-frequency", &size);
--              if (!freq || size != sizeof(*freq) || *freq == 0) {
--                      freq = of_get_property(np, "bus-frequency", &size);
--                      if (!freq || size != sizeof(*freq) || *freq == 0) {
--                              of_node_put(np);
--                              return -ENODEV;
--                      }
--              }
--
--              sysclk = *freq;
--              of_node_put(np);
-       }
-       ret = of_fsl_spi_probe(NULL, "fsl,spi", sysclk, board_infos,
---- a/arch/powerpc/sysdev/fsl_soc.h
-+++ b/arch/powerpc/sysdev/fsl_soc.h
-@@ -7,6 +7,7 @@
- extern phys_addr_t get_immrbase(void);
- extern u32 get_brgfreq(void);
- extern u32 get_baudrate(void);
-+extern u32 fsl_get_sys_freq(void);
- struct spi_board_info;
---- a/arch/powerpc/sysdev/mpic.c
-+++ b/arch/powerpc/sysdev/mpic.c
-@@ -175,13 +175,16 @@ static inline void _mpic_write(enum mpic
-       switch(type) {
- #ifdef CONFIG_PPC_DCR
-       case mpic_access_dcr:
--              return dcr_write(rb->dhost, reg, value);
-+              dcr_write(rb->dhost, reg, value);
-+              break;
- #endif
-       case mpic_access_mmio_be:
--              return out_be32(rb->base + (reg >> 2), value);
-+              out_be32(rb->base + (reg >> 2), value);
-+              break;
-       case mpic_access_mmio_le:
-       default:
--              return out_le32(rb->base + (reg >> 2), value);
-+              out_le32(rb->base + (reg >> 2), value);
-+              break;
-       }
- }
-@@ -1000,7 +1003,7 @@ struct mpic * __init mpic_alloc(struct d
-                               const char *name)
- {
-       struct mpic     *mpic;
--      u32             reg;
-+      u32             greg_feature;
-       const char      *vers;
-       int             i;
-       int             intvec_top;
-@@ -1064,7 +1067,8 @@ struct mpic * __init mpic_alloc(struct d
-       /* Look for protected sources */
-       if (node) {
--              unsigned int psize, bits, mapsize;
-+              int psize;
-+              unsigned int bits, mapsize;
-               const u32 *psrc =
-                       of_get_property(node, "protected-sources", &psize);
-               if (psrc) {
-@@ -1107,8 +1111,7 @@ struct mpic * __init mpic_alloc(struct d
-        * in, try to obtain one
-        */
-       if (paddr == 0 && !(mpic->flags & MPIC_USES_DCR)) {
--              const u32 *reg;
--              reg = of_get_property(node, "reg", NULL);
-+              const u32 *reg = of_get_property(node, "reg", NULL);
-               BUG_ON(reg == NULL);
-               paddr = of_translate_address(node, reg);
-               BUG_ON(paddr == OF_BAD_ADDR);
-@@ -1137,12 +1140,13 @@ struct mpic * __init mpic_alloc(struct d
-        * MPICs, num sources as well. On ISU MPICs, sources are counted
-        * as ISUs are added
-        */
--      reg = mpic_read(mpic->gregs, MPIC_INFO(GREG_FEATURE_0));
--      mpic->num_cpus = ((reg & MPIC_GREG_FEATURE_LAST_CPU_MASK)
-+      greg_feature = mpic_read(mpic->gregs, MPIC_INFO(GREG_FEATURE_0));
-+      mpic->num_cpus = ((greg_feature & MPIC_GREG_FEATURE_LAST_CPU_MASK)
-                         >> MPIC_GREG_FEATURE_LAST_CPU_SHIFT) + 1;
-       if (isu_size == 0)
--              mpic->num_sources = ((reg & MPIC_GREG_FEATURE_LAST_SRC_MASK)
--                                   >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1;
-+              mpic->num_sources =
-+                      ((greg_feature & MPIC_GREG_FEATURE_LAST_SRC_MASK)
-+                       >> MPIC_GREG_FEATURE_LAST_SRC_SHIFT) + 1;
-       /* Map the per-CPU registers */
-       for (i = 0; i < mpic->num_cpus; i++) {
-@@ -1161,7 +1165,7 @@ struct mpic * __init mpic_alloc(struct d
-       mpic->isu_mask = (1 << mpic->isu_shift) - 1;
-       /* Display version */
--      switch (reg & MPIC_GREG_FEATURE_VERSION_MASK) {
-+      switch (greg_feature & MPIC_GREG_FEATURE_VERSION_MASK) {
-       case 1:
-               vers = "1.0";
-               break;
-@@ -1321,7 +1325,7 @@ void __init mpic_set_serial_int(struct m
- void mpic_irq_set_priority(unsigned int irq, unsigned int pri)
- {
--      int is_ipi;
-+      unsigned int is_ipi;
-       struct mpic *mpic = mpic_find(irq, &is_ipi);
-       unsigned int src = mpic_irq_to_hw(irq);
-       unsigned long flags;
-@@ -1344,7 +1348,7 @@ void mpic_irq_set_priority(unsigned int 
- unsigned int mpic_irq_get_priority(unsigned int irq)
- {
--      int is_ipi;
-+      unsigned int is_ipi;
-       struct mpic *mpic = mpic_find(irq, &is_ipi);
-       unsigned int src = mpic_irq_to_hw(irq);
-       unsigned long flags;
-@@ -1406,11 +1410,6 @@ void mpic_cpu_set_priority(int prio)
-       mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), prio);
- }
--/*
-- * XXX: someone who knows mpic should check this.
-- * do we need to eoi the ipi including for kexec cpu here (see xics comments)?
-- * or can we reset the mpic in the new kernel?
-- */
- void mpic_teardown_this_cpu(int secondary)
- {
-       struct mpic *mpic = mpic_primary;
-@@ -1430,6 +1429,10 @@ void mpic_teardown_this_cpu(int secondar
-       /* Set current processor priority to max */
-       mpic_cpu_write(MPIC_INFO(CPU_CURRENT_TASK_PRI), 0xf);
-+      /* We need to EOI the IPI since not all platforms reset the MPIC
-+       * on boot and new interrupts wouldn't get delivered otherwise.
-+       */
-+      mpic_eoi(mpic);
-       spin_unlock_irqrestore(&mpic_lock, flags);
- }
---- a/arch/powerpc/sysdev/mv64x60_dev.c
-+++ b/arch/powerpc/sysdev/mv64x60_dev.c
-@@ -127,7 +127,7 @@ static int __init mv64x60_mpsc_device_se
-       if (err)
-               return err;
--      prop = of_get_property(np, "block-index", NULL);
-+      prop = of_get_property(np, "cell-index", NULL);
-       if (!prop)
-               return -ENODEV;
-       port_number = *(int *)prop;
-@@ -136,6 +136,7 @@ static int __init mv64x60_mpsc_device_se
-       pdata.cache_mgmt = 1; /* All current revs need this set */
-+      pdata.max_idle = 40; /* default */
-       prop = of_get_property(np, "max_idle", NULL);
-       if (prop)
-               pdata.max_idle = *prop;
-@@ -205,30 +206,24 @@ error:
- /*
-  * Create mv64x60_eth platform devices
-  */
--static int __init eth_register_shared_pdev(struct device_node *np)
-+static struct platform_device * __init mv64x60_eth_register_shared_pdev(
-+                                              struct device_node *np, int id)
- {
-       struct platform_device *pdev;
-       struct resource r[1];
-       int err;
--      np = of_get_parent(np);
--      if (!np)
--              return -ENODEV;
--
-       err = of_address_to_resource(np, 0, &r[0]);
--      of_node_put(np);
-       if (err)
--              return err;
-+              return ERR_PTR(err);
--      pdev = platform_device_register_simple(MV643XX_ETH_SHARED_NAME, 0,
-+      pdev = platform_device_register_simple(MV643XX_ETH_SHARED_NAME, id,
-                                              r, 1);
--      if (IS_ERR(pdev))
--              return PTR_ERR(pdev);
--
--      return 0;
-+      return pdev;
- }
--static int __init mv64x60_eth_device_setup(struct device_node *np, int id)
-+static int __init mv64x60_eth_device_setup(struct device_node *np, int id,
-+                                         struct platform_device *shared_pdev)
- {
-       struct resource r[1];
-       struct mv643xx_eth_platform_data pdata;
-@@ -239,16 +234,12 @@ static int __init mv64x60_eth_device_set
-       const phandle *ph;
-       int err;
--      /* only register the shared platform device the first time through */
--      if (id == 0 && (err = eth_register_shared_pdev(np)))
--              return err;
--
-       memset(r, 0, sizeof(r));
-       of_irq_to_resource(np, 0, &r[0]);
-       memset(&pdata, 0, sizeof(pdata));
--      prop = of_get_property(np, "block-index", NULL);
-+      prop = of_get_property(np, "reg", NULL);
-       if (!prop)
-               return -ENODEV;
-       pdata.port_number = *prop;
-@@ -301,7 +292,7 @@ static int __init mv64x60_eth_device_set
-       of_node_put(phy);
--      pdev = platform_device_alloc(MV643XX_ETH_NAME, pdata.port_number);
-+      pdev = platform_device_alloc(MV643XX_ETH_NAME, id);
-       if (!pdev)
-               return -ENOMEM;
-@@ -345,21 +336,19 @@ static int __init mv64x60_i2c_device_set
-       memset(&pdata, 0, sizeof(pdata));
-+      pdata.freq_m = 8;       /* default */
-       prop = of_get_property(np, "freq_m", NULL);
-       if (!prop)
-               return -ENODEV;
-       pdata.freq_m = *prop;
-+      pdata.freq_m = 3;       /* default */
-       prop = of_get_property(np, "freq_n", NULL);
-       if (!prop)
-               return -ENODEV;
-       pdata.freq_n = *prop;
--      prop = of_get_property(np, "timeout", NULL);
--      if (prop)
--              pdata.timeout = *prop;
--      else
--              pdata.timeout = 1000;   /* 1 second */
-+      pdata.timeout = 1000;                           /* default: 1 second */
-       pdev = platform_device_alloc(MV64XXX_I2C_CTLR_NAME, id);
-       if (!pdev)
-@@ -401,10 +390,7 @@ static int __init mv64x60_wdt_device_set
-       memset(&pdata, 0, sizeof(pdata));
--      prop = of_get_property(np, "timeout", NULL);
--      if (!prop)
--              return -ENODEV;
--      pdata.timeout = *prop;
-+      pdata.timeout = 10;                     /* Default: 10 seconds */
-       np = of_get_parent(np);
-       if (!np)
-@@ -441,27 +427,43 @@ error:
- static int __init mv64x60_device_setup(void)
- {
--      struct device_node *np = NULL;
--      int id;
-+      struct device_node *np, *np2;
-+      struct platform_device *pdev;
-+      int id, id2;
-       int err;
-       id = 0;
--      for_each_compatible_node(np, "serial", "marvell,mpsc")
-+      for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc")
-               if ((err = mv64x60_mpsc_device_setup(np, id++)))
-                       goto error;
-       id = 0;
--      for_each_compatible_node(np, "network", "marvell,mv64x60-eth")
--              if ((err = mv64x60_eth_device_setup(np, id++)))
-+      id2 = 0;
-+      for_each_compatible_node(np, NULL, "marvell,mv64360-eth-group") {
-+              pdev = mv64x60_eth_register_shared_pdev(np, id++);
-+              if (IS_ERR(pdev)) {
-+                      err = PTR_ERR(pdev);
-                       goto error;
-+              }
-+              for_each_child_of_node(np, np2) {
-+                      if (!of_device_is_compatible(np2,
-+                                      "marvell,mv64360-eth"))
-+                              continue;
-+                      err = mv64x60_eth_device_setup(np2, id2++, pdev);
-+                      if (err) {
-+                              of_node_put(np2);
-+                              goto error;
-+                      }
-+              }
-+      }
-       id = 0;
--      for_each_compatible_node(np, "i2c", "marvell,mv64x60-i2c")
-+      for_each_compatible_node(np, "i2c", "marvell,mv64360-i2c")
-               if ((err = mv64x60_i2c_device_setup(np, id++)))
-                       goto error;
-       /* support up to one watchdog timer */
--      np = of_find_compatible_node(np, NULL, "marvell,mv64x60-wdt");
-+      np = of_find_compatible_node(np, NULL, "marvell,mv64360-wdt");
-       if (np) {
-               if ((err = mv64x60_wdt_device_setup(np, id)))
-                       goto error;
-@@ -489,10 +491,10 @@ static int __init mv64x60_add_mpsc_conso
-       if (!np)
-               goto not_mpsc;
--      if (!of_device_is_compatible(np, "marvell,mpsc"))
-+      if (!of_device_is_compatible(np, "marvell,mv64360-mpsc"))
-               goto not_mpsc;
--      prop = of_get_property(np, "block-index", NULL);
-+      prop = of_get_property(np, "cell-index", NULL);
-       if (!prop)
-               goto not_mpsc;
---- a/arch/powerpc/sysdev/mv64x60_pci.c
-+++ b/arch/powerpc/sysdev/mv64x60_pci.c
-@@ -86,14 +86,14 @@ static int __init mv64x60_sysfs_init(voi
-       struct platform_device *pdev;
-       const unsigned int *prop;
--      np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60");
-+      np = of_find_compatible_node(NULL, NULL, "marvell,mv64360");
-       if (!np)
-               return 0;
-       prop = of_get_property(np, "hs_reg_valid", NULL);
-       of_node_put(np);
--      pdev = platform_device_register_simple("marvell,mv64x60", 0, NULL, 0);
-+      pdev = platform_device_register_simple("marvell,mv64360", 0, NULL, 0);
-       if (IS_ERR(pdev))
-               return PTR_ERR(pdev);
-@@ -166,6 +166,6 @@ void __init mv64x60_pci_init(void)
- {
-       struct device_node *np;
--      for_each_compatible_node(np, "pci", "marvell,mv64x60-pci")
-+      for_each_compatible_node(np, "pci", "marvell,mv64360-pci")
-               mv64x60_add_bridge(np);
- }
---- a/arch/powerpc/sysdev/mv64x60_pic.c
-+++ b/arch/powerpc/sysdev/mv64x60_pic.c
-@@ -238,13 +238,13 @@ void __init mv64x60_init_irq(void)
-       const unsigned int *reg;
-       unsigned long flags;
--      np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-gpp");
-+      np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-gpp");
-       reg = of_get_property(np, "reg", &size);
-       paddr = of_translate_address(np, reg);
-       mv64x60_gpp_reg_base = ioremap(paddr, reg[1]);
-       of_node_put(np);
--      np = of_find_compatible_node(NULL, NULL, "marvell,mv64x60-pic");
-+      np = of_find_compatible_node(NULL, NULL, "marvell,mv64360-pic");
-       reg = of_get_property(np, "reg", &size);
-       paddr = of_translate_address(np, reg);
-       mv64x60_irq_reg_base = ioremap(paddr, reg[1]);
---- a/arch/powerpc/sysdev/mv64x60_udbg.c
-+++ b/arch/powerpc/sysdev/mv64x60_udbg.c
-@@ -85,7 +85,7 @@ static void mv64x60_udbg_init(void)
-       if (!stdout)
-               return;
--      for_each_compatible_node(np, "serial", "marvell,mpsc") {
-+      for_each_compatible_node(np, "serial", "marvell,mv64360-mpsc") {
-               if (np == stdout)
-                       break;
-       }
---- a/arch/powerpc/sysdev/ppc4xx_pci.c
-+++ b/arch/powerpc/sysdev/ppc4xx_pci.c
-@@ -527,6 +527,7 @@ static void __init ppc4xx_probe_pcix_bri
-  *
-  * ibm,plb-pciex-440spe
-  * ibm,plb-pciex-405ex
-+ * ibm,plb-pciex-460ex
-  *
-  * Anything else will be rejected for now as they are all subtly
-  * different unfortunately.
-@@ -645,7 +646,7 @@ static int __init ppc440spe_pciex_core_i
-       int time_out = 20;
-       /* Set PLL clock receiver to LVPECL */
--      mtdcri(SDR0, PESDR0_PLLLCT1, mfdcri(SDR0, PESDR0_PLLLCT1) | 1 << 28);
-+      dcri_clrset(SDR0, PESDR0_PLLLCT1, 0, 1 << 28);
-       /* Shouldn't we do all the calibration stuff etc... here ? */
-       if (ppc440spe_pciex_check_reset(np))
-@@ -659,8 +660,7 @@ static int __init ppc440spe_pciex_core_i
-       }
-       /* De-assert reset of PCIe PLL, wait for lock */
--      mtdcri(SDR0, PESDR0_PLLLCT1,
--             mfdcri(SDR0, PESDR0_PLLLCT1) & ~(1 << 24));
-+      dcri_clrset(SDR0, PESDR0_PLLLCT1, 1 << 24, 0);
-       udelay(3);
-       while (time_out) {
-@@ -712,9 +712,8 @@ static int ppc440spe_pciex_init_port_hw(
-               mtdcri(SDR0, port->sdr_base + PESDRn_440SPE_HSSL7SET1,
-                      0x35000000);
-       }
--      val = mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET);
--      mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
--             (val & ~(1 << 24 | 1 << 16)) | 1 << 12);
-+      dcri_clrset(SDR0, port->sdr_base + PESDRn_RCSSET,
-+                      (1 << 24) | (1 << 16), 1 << 12);
-       return 0;
- }
-@@ -775,6 +774,115 @@ static struct ppc4xx_pciex_hwops ppc440s
-       .setup_utl      = ppc440speB_pciex_init_utl,
- };
-+static int __init ppc460ex_pciex_core_init(struct device_node *np)
-+{
-+      /* Nothing to do, return 2 ports */
-+      return 2;
-+}
-+
-+static int ppc460ex_pciex_init_port_hw(struct ppc4xx_pciex_port *port)
-+{
-+      u32 val;
-+      u32 utlset1;
-+
-+      if (port->endpoint)
-+              val = PTYPE_LEGACY_ENDPOINT << 20;
-+      else
-+              val = PTYPE_ROOT_PORT << 20;
-+
-+      if (port->index == 0) {
-+              val |= LNKW_X1 << 12;
-+              utlset1 = 0x20000000;
-+      } else {
-+              val |= LNKW_X4 << 12;
-+              utlset1 = 0x20101101;
-+      }
-+
-+      mtdcri(SDR0, port->sdr_base + PESDRn_DLPSET, val);
-+      mtdcri(SDR0, port->sdr_base + PESDRn_UTLSET1, utlset1);
-+      mtdcri(SDR0, port->sdr_base + PESDRn_UTLSET2, 0x01210000);
-+
-+      switch (port->index) {
-+      case 0:
-+              mtdcri(SDR0, PESDR0_460EX_L0CDRCTL, 0x00003230);
-+              mtdcri(SDR0, PESDR0_460EX_L0DRV, 0x00000136);
-+              mtdcri(SDR0, PESDR0_460EX_L0CLK, 0x00000006);
-+
-+              mtdcri(SDR0, PESDR0_460EX_PHY_CTL_RST,0x10000000);
-+              break;
-+
-+      case 1:
-+              mtdcri(SDR0, PESDR1_460EX_L0CDRCTL, 0x00003230);
-+              mtdcri(SDR0, PESDR1_460EX_L1CDRCTL, 0x00003230);
-+              mtdcri(SDR0, PESDR1_460EX_L2CDRCTL, 0x00003230);
-+              mtdcri(SDR0, PESDR1_460EX_L3CDRCTL, 0x00003230);
-+              mtdcri(SDR0, PESDR1_460EX_L0DRV, 0x00000136);
-+              mtdcri(SDR0, PESDR1_460EX_L1DRV, 0x00000136);
-+              mtdcri(SDR0, PESDR1_460EX_L2DRV, 0x00000136);
-+              mtdcri(SDR0, PESDR1_460EX_L3DRV, 0x00000136);
-+              mtdcri(SDR0, PESDR1_460EX_L0CLK, 0x00000006);
-+              mtdcri(SDR0, PESDR1_460EX_L1CLK, 0x00000006);
-+              mtdcri(SDR0, PESDR1_460EX_L2CLK, 0x00000006);
-+              mtdcri(SDR0, PESDR1_460EX_L3CLK, 0x00000006);
-+
-+              mtdcri(SDR0, PESDR1_460EX_PHY_CTL_RST,0x10000000);
-+              break;
-+      }
-+
-+      mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
-+             mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) |
-+             (PESDRx_RCSSET_RSTGU | PESDRx_RCSSET_RSTPYN));
-+
-+      /* Poll for PHY reset */
-+      /* XXX FIXME add timeout */
-+      switch (port->index) {
-+      case 0:
-+              while (!(mfdcri(SDR0, PESDR0_460EX_RSTSTA) & 0x1))
-+                      udelay(10);
-+              break;
-+      case 1:
-+              while (!(mfdcri(SDR0, PESDR1_460EX_RSTSTA) & 0x1))
-+                      udelay(10);
-+              break;
-+      }
-+
-+      mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
-+             (mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) &
-+              ~(PESDRx_RCSSET_RSTGU | PESDRx_RCSSET_RSTDL)) |
-+             PESDRx_RCSSET_RSTPYN);
-+
-+      port->has_ibpre = 1;
-+
-+      return 0;
-+}
-+
-+static int ppc460ex_pciex_init_utl(struct ppc4xx_pciex_port *port)
-+{
-+      dcr_write(port->dcrs, DCRO_PEGPL_SPECIAL, 0x0);
-+
-+      /*
-+       * Set buffer allocations and then assert VRB and TXE.
-+       */
-+      out_be32(port->utl_base + PEUTL_PBCTL,  0x0800000c);
-+      out_be32(port->utl_base + PEUTL_OUTTR,  0x08000000);
-+      out_be32(port->utl_base + PEUTL_INTR,   0x02000000);
-+      out_be32(port->utl_base + PEUTL_OPDBSZ, 0x04000000);
-+      out_be32(port->utl_base + PEUTL_PBBSZ,  0x00000000);
-+      out_be32(port->utl_base + PEUTL_IPHBSZ, 0x02000000);
-+      out_be32(port->utl_base + PEUTL_IPDBSZ, 0x04000000);
-+      out_be32(port->utl_base + PEUTL_RCIRQEN,0x00f00000);
-+      out_be32(port->utl_base + PEUTL_PCTL,   0x80800066);
-+
-+      return 0;
-+}
-+
-+static struct ppc4xx_pciex_hwops ppc460ex_pcie_hwops __initdata =
-+{
-+      .core_init      = ppc460ex_pciex_core_init,
-+      .port_init_hw   = ppc460ex_pciex_init_port_hw,
-+      .setup_utl      = ppc460ex_pciex_init_utl,
-+};
-+
- #endif /* CONFIG_44x */
- #ifdef CONFIG_40x
-@@ -830,17 +938,9 @@ static int ppc405ex_pciex_init_port_hw(s
-        * PCIe boards don't show this problem.
-        * This has to be re-tested and fixed in a later release!
-        */
--#if 0 /* XXX FIXME: Not resetting the PHY will leave all resources
--       * configured as done previously by U-Boot. Then Linux will currently
--       * not reassign them. So the PHY reset is now done always. This will
--       * lead to problems with the Atheros PCIe board again.
--       */
-       val = mfdcri(SDR0, port->sdr_base + PESDRn_LOOP);
-       if (!(val & 0x00001000))
-               ppc405ex_pcie_phy_reset(port);
--#else
--      ppc405ex_pcie_phy_reset(port);
--#endif
-       dcr_write(port->dcrs, DCRO_PEGPL_CFG, 0x10000000);  /* guarded on */
-@@ -896,6 +996,8 @@ static int __init ppc4xx_pciex_check_cor
-               else
-                       ppc4xx_pciex_hwops = &ppc440speB_pcie_hwops;
-       }
-+      if (of_device_is_compatible(np, "ibm,plb-pciex-460ex"))
-+              ppc4xx_pciex_hwops = &ppc460ex_pcie_hwops;
- #endif /* CONFIG_44x    */
- #ifdef CONFIG_40x
-       if (of_device_is_compatible(np, "ibm,plb-pciex-405ex"))
-@@ -1042,8 +1144,7 @@ static int __init ppc4xx_pciex_port_init
-               port->link = 0;
-       }
--      mtdcri(SDR0, port->sdr_base + PESDRn_RCSSET,
--             mfdcri(SDR0, port->sdr_base + PESDRn_RCSSET) | 1 << 20);
-+      dcri_clrset(SDR0, port->sdr_base + PESDRn_RCSSET, 0, 1 << 20);
-       msleep(100);
-       return 0;
---- a/arch/powerpc/sysdev/ppc4xx_pci.h
-+++ b/arch/powerpc/sysdev/ppc4xx_pci.h
-@@ -271,6 +271,59 @@
- #define PESDR1_405EX_PHYSTA           0x044C
- /*
-+ * 460EX additional DCRs
-+ */
-+#define PESDR0_460EX_L0BIST           0x0308
-+#define PESDR0_460EX_L0BISTSTS                0x0309
-+#define PESDR0_460EX_L0CDRCTL         0x030A
-+#define PESDR0_460EX_L0DRV            0x030B
-+#define PESDR0_460EX_L0REC            0x030C
-+#define PESDR0_460EX_L0LPB            0x030D
-+#define PESDR0_460EX_L0CLK            0x030E
-+#define PESDR0_460EX_PHY_CTL_RST      0x030F
-+#define PESDR0_460EX_RSTSTA           0x0310
-+#define PESDR0_460EX_OBS              0x0311
-+#define PESDR0_460EX_L0ERRC           0x0320
-+
-+#define PESDR1_460EX_L0BIST           0x0348
-+#define PESDR1_460EX_L1BIST           0x0349
-+#define PESDR1_460EX_L2BIST           0x034A
-+#define PESDR1_460EX_L3BIST           0x034B
-+#define PESDR1_460EX_L0BISTSTS                0x034C
-+#define PESDR1_460EX_L1BISTSTS                0x034D
-+#define PESDR1_460EX_L2BISTSTS                0x034E
-+#define PESDR1_460EX_L3BISTSTS                0x034F
-+#define PESDR1_460EX_L0CDRCTL         0x0350
-+#define PESDR1_460EX_L1CDRCTL         0x0351
-+#define PESDR1_460EX_L2CDRCTL         0x0352
-+#define PESDR1_460EX_L3CDRCTL         0x0353
-+#define PESDR1_460EX_L0DRV            0x0354
-+#define PESDR1_460EX_L1DRV            0x0355
-+#define PESDR1_460EX_L2DRV            0x0356
-+#define PESDR1_460EX_L3DRV            0x0357
-+#define PESDR1_460EX_L0REC            0x0358
-+#define PESDR1_460EX_L1REC            0x0359
-+#define PESDR1_460EX_L2REC            0x035A
-+#define PESDR1_460EX_L3REC            0x035B
-+#define PESDR1_460EX_L0LPB            0x035C
-+#define PESDR1_460EX_L1LPB            0x035D
-+#define PESDR1_460EX_L2LPB            0x035E
-+#define PESDR1_460EX_L3LPB            0x035F
-+#define PESDR1_460EX_L0CLK            0x0360
-+#define PESDR1_460EX_L1CLK            0x0361
-+#define PESDR1_460EX_L2CLK            0x0362
-+#define PESDR1_460EX_L3CLK            0x0363
-+#define PESDR1_460EX_PHY_CTL_RST      0x0364
-+#define PESDR1_460EX_RSTSTA           0x0365
-+#define PESDR1_460EX_OBS              0x0366
-+#define PESDR1_460EX_L0ERRC           0x0368
-+#define PESDR1_460EX_L1ERRC           0x0369
-+#define PESDR1_460EX_L2ERRC           0x036A
-+#define PESDR1_460EX_L3ERRC           0x036B
-+#define PESDR0_460EX_IHS1             0x036C
-+#define PESDR0_460EX_IHS2             0x036D
-+
-+/*
-  * Of the above, some are common offsets from the base
-  */
- #define PESDRn_UTLSET1                        0x00
-@@ -353,6 +406,12 @@
- #define PECFG_POM2LAL         0x390
- #define PECFG_POM2LAH         0x394
-+/* SDR Bit Mappings */
-+#define PESDRx_RCSSET_HLDPLB  0x10000000
-+#define PESDRx_RCSSET_RSTGU   0x01000000
-+#define PESDRx_RCSSET_RDY       0x00100000
-+#define PESDRx_RCSSET_RSTDL     0x00010000
-+#define PESDRx_RCSSET_RSTPYN    0x00001000
- enum
- {
---- /dev/null
-+++ b/arch/powerpc/sysdev/ppc4xx_soc.c
-@@ -0,0 +1,200 @@
-+/*
-+ * IBM/AMCC PPC4xx SoC setup code
-+ *
-+ * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
-+ *
-+ * L2 cache routines cloned from arch/ppc/syslib/ibm440gx_common.c which is:
-+ *   Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
-+ *   Copyright (c) 2003 - 2006 Zultys Technologies
-+ *
-+ * 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 <linux/stddef.h>
-+#include <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/errno.h>
-+#include <linux/interrupt.h>
-+#include <linux/irq.h>
-+#include <linux/of_platform.h>
-+
-+#include <asm/dcr.h>
-+#include <asm/dcr-regs.h>
-+#include <asm/reg.h>
-+
-+static u32 dcrbase_l2c;
-+
-+/*
-+ * L2-cache
-+ */
-+
-+/* Issue L2C diagnostic command */
-+static inline u32 l2c_diag(u32 addr)
-+{
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_ADDR, addr);
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_DIAG);
-+      while (!(mfdcr(dcrbase_l2c + DCRN_L2C0_SR) & L2C_SR_CC))
-+              ;
-+
-+      return mfdcr(dcrbase_l2c + DCRN_L2C0_DATA);
-+}
-+
-+static irqreturn_t l2c_error_handler(int irq, void *dev)
-+{
-+      u32 sr = mfdcr(dcrbase_l2c + DCRN_L2C0_SR);
-+
-+      if (sr & L2C_SR_CPE) {
-+              /* Read cache trapped address */
-+              u32 addr = l2c_diag(0x42000000);
-+              printk(KERN_EMERG "L2C: Cache Parity Error, addr[16:26] = 0x%08x\n",
-+                     addr);
-+      }
-+      if (sr & L2C_SR_TPE) {
-+              /* Read tag trapped address */
-+              u32 addr = l2c_diag(0x82000000) >> 16;
-+              printk(KERN_EMERG "L2C: Tag Parity Error, addr[16:26] = 0x%08x\n",
-+                     addr);
-+      }
-+
-+      /* Clear parity errors */
-+      if (sr & (L2C_SR_CPE | L2C_SR_TPE)){
-+              mtdcr(dcrbase_l2c + DCRN_L2C0_ADDR, 0);
-+              mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_CCP | L2C_CMD_CTE);
-+      } else {
-+              printk(KERN_EMERG "L2C: LRU error\n");
-+      }
-+
-+      return IRQ_HANDLED;
-+}
-+
-+static int __init ppc4xx_l2c_probe(void)
-+{
-+      struct device_node *np;
-+      u32 r;
-+      unsigned long flags;
-+      int irq;
-+      const u32 *dcrreg;
-+      u32 dcrbase_isram;
-+      int len;
-+      const u32 *prop;
-+      u32 l2_size;
-+
-+      np = of_find_compatible_node(NULL, NULL, "ibm,l2-cache");
-+      if (!np)
-+              return 0;
-+
-+      /* Get l2 cache size */
-+      prop = of_get_property(np, "cache-size", NULL);
-+      if (prop == NULL) {
-+              printk(KERN_ERR "%s: Can't get cache-size!\n", np->full_name);
-+              of_node_put(np);
-+              return -ENODEV;
-+      }
-+      l2_size = prop[0];
-+
-+      /* Map DCRs */
-+      dcrreg = of_get_property(np, "dcr-reg", &len);
-+      if (!dcrreg || (len != 4 * sizeof(u32))) {
-+              printk(KERN_ERR "%s: Can't get DCR register base !",
-+                     np->full_name);
-+              of_node_put(np);
-+              return -ENODEV;
-+      }
-+      dcrbase_isram = dcrreg[0];
-+      dcrbase_l2c = dcrreg[2];
-+
-+      /* Get and map irq number from device tree */
-+      irq = irq_of_parse_and_map(np, 0);
-+      if (irq == NO_IRQ) {
-+              printk(KERN_ERR "irq_of_parse_and_map failed\n");
-+              of_node_put(np);
-+              return -ENODEV;
-+      }
-+
-+      /* Install error handler */
-+      if (request_irq(irq, l2c_error_handler, IRQF_DISABLED, "L2C", 0) < 0) {
-+              printk(KERN_ERR "Cannot install L2C error handler"
-+                     ", cache is not enabled\n");
-+              of_node_put(np);
-+              return -ENODEV;
-+      }
-+
-+      local_irq_save(flags);
-+      asm volatile ("sync" ::: "memory");
-+
-+      /* Disable SRAM */
-+      mtdcr(dcrbase_isram + DCRN_SRAM0_DPC,
-+            mfdcr(dcrbase_isram + DCRN_SRAM0_DPC) & ~SRAM_DPC_ENABLE);
-+      mtdcr(dcrbase_isram + DCRN_SRAM0_SB0CR,
-+            mfdcr(dcrbase_isram + DCRN_SRAM0_SB0CR) & ~SRAM_SBCR_BU_MASK);
-+      mtdcr(dcrbase_isram + DCRN_SRAM0_SB1CR,
-+            mfdcr(dcrbase_isram + DCRN_SRAM0_SB1CR) & ~SRAM_SBCR_BU_MASK);
-+      mtdcr(dcrbase_isram + DCRN_SRAM0_SB2CR,
-+            mfdcr(dcrbase_isram + DCRN_SRAM0_SB2CR) & ~SRAM_SBCR_BU_MASK);
-+      mtdcr(dcrbase_isram + DCRN_SRAM0_SB3CR,
-+            mfdcr(dcrbase_isram + DCRN_SRAM0_SB3CR) & ~SRAM_SBCR_BU_MASK);
-+
-+      /* Enable L2_MODE without ICU/DCU */
-+      r = mfdcr(dcrbase_l2c + DCRN_L2C0_CFG) &
-+              ~(L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_SS_MASK);
-+      r |= L2C_CFG_L2M | L2C_CFG_SS_256;
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_CFG, r);
-+
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_ADDR, 0);
-+
-+      /* Hardware Clear Command */
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_HCC);
-+      while (!(mfdcr(dcrbase_l2c + DCRN_L2C0_SR) & L2C_SR_CC))
-+              ;
-+
-+      /* Clear Cache Parity and Tag Errors */
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_CMD, L2C_CMD_CCP | L2C_CMD_CTE);
-+
-+      /* Enable 64G snoop region starting at 0 */
-+      r = mfdcr(dcrbase_l2c + DCRN_L2C0_SNP0) &
-+              ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK);
-+      r |= L2C_SNP_SSR_32G | L2C_SNP_ESR;
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_SNP0, r);
-+
-+      r = mfdcr(dcrbase_l2c + DCRN_L2C0_SNP1) &
-+              ~(L2C_SNP_BA_MASK | L2C_SNP_SSR_MASK);
-+      r |= 0x80000000 | L2C_SNP_SSR_32G | L2C_SNP_ESR;
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_SNP1, r);
-+
-+      asm volatile ("sync" ::: "memory");
-+
-+      /* Enable ICU/DCU ports */
-+      r = mfdcr(dcrbase_l2c + DCRN_L2C0_CFG);
-+      r &= ~(L2C_CFG_DCW_MASK | L2C_CFG_PMUX_MASK | L2C_CFG_PMIM
-+             | L2C_CFG_TPEI | L2C_CFG_CPEI | L2C_CFG_NAM | L2C_CFG_NBRM);
-+      r |= L2C_CFG_ICU | L2C_CFG_DCU | L2C_CFG_TPC | L2C_CFG_CPC | L2C_CFG_FRAN
-+              | L2C_CFG_CPIM | L2C_CFG_TPIM | L2C_CFG_LIM | L2C_CFG_SMCM;
-+
-+      /* Check for 460EX/GT special handling */
-+      if (of_device_is_compatible(np, "ibm,l2-cache-460ex"))
-+              r |= L2C_CFG_RDBW;
-+
-+      mtdcr(dcrbase_l2c + DCRN_L2C0_CFG, r);
-+
-+      asm volatile ("sync; isync" ::: "memory");
-+      local_irq_restore(flags);
-+
-+      printk(KERN_INFO "%dk L2-cache enabled\n", l2_size >> 10);
-+
-+      of_node_put(np);
-+      return 0;
-+}
-+arch_initcall(ppc4xx_l2c_probe);
-+
-+/*
-+ * At present, this routine just applies a system reset.
-+ */
-+void ppc4xx_reset_system(char *cmd)
-+{
-+      mtspr(SPRN_DBCR0, mfspr(SPRN_DBCR0) | DBCR0_RST_SYSTEM);
-+      while (1)
-+              ;       /* Just in case the reset doesn't work */
-+}
---- a/arch/powerpc/sysdev/qe_lib/qe.c
-+++ b/arch/powerpc/sysdev/qe_lib/qe.c
-@@ -55,7 +55,7 @@ struct qe_snum {
- /* We allocate this here because it is used almost exclusively for
-  * the communication processor devices.
-  */
--struct qe_immap *qe_immr = NULL;
-+struct qe_immap __iomem *qe_immr;
- EXPORT_SYMBOL(qe_immr);
- static struct qe_snum snums[QE_NUM_OF_SNUM];  /* Dynamically allocated SNUMs */
-@@ -156,7 +156,7 @@ EXPORT_SYMBOL(qe_issue_cmd);
-  */
- static unsigned int brg_clk = 0;
--unsigned int get_brg_clk(void)
-+unsigned int qe_get_brg_clk(void)
- {
-       struct device_node *qe;
-       unsigned int size;
-@@ -180,6 +180,7 @@ unsigned int get_brg_clk(void)
-       return brg_clk;
- }
-+EXPORT_SYMBOL(qe_get_brg_clk);
- /* Program the BRG to the given sampling rate and multiplier
-  *
-@@ -197,7 +198,7 @@ int qe_setbrg(enum qe_clock brg, unsigne
-       if ((brg < QE_BRG1) || (brg > QE_BRG16))
-               return -EINVAL;
--      divisor = get_brg_clk() / (rate * multiplier);
-+      divisor = qe_get_brg_clk() / (rate * multiplier);
-       if (divisor > QE_BRGC_DIVISOR_MAX + 1) {
-               div16 = QE_BRGC_DIV16;
-@@ -415,12 +416,6 @@ void qe_muram_dump(void)
- }
- EXPORT_SYMBOL(qe_muram_dump);
--void *qe_muram_addr(unsigned long offset)
--{
--      return (void *)&qe_immr->muram[offset];
--}
--EXPORT_SYMBOL(qe_muram_addr);
--
- /* The maximum number of RISCs we support */
- #define MAX_QE_RISC     2
---- a/arch/powerpc/sysdev/qe_lib/qe_io.c
-+++ b/arch/powerpc/sysdev/qe_lib/qe_io.c
-@@ -22,6 +22,7 @@
- #include <linux/ioport.h>
- #include <asm/io.h>
-+#include <asm/qe.h>
- #include <asm/prom.h>
- #include <sysdev/fsl_soc.h>
-@@ -41,7 +42,7 @@ struct port_regs {
- #endif
- };
--static struct port_regs *par_io = NULL;
-+static struct port_regs __iomem *par_io;
- static int num_par_io_ports = 0;
- int par_io_init(struct device_node *np)
-@@ -165,7 +166,7 @@ int par_io_of_config(struct device_node 
-       }
-       ph = of_get_property(np, "pio-handle", NULL);
--      if (ph == 0) {
-+      if (ph == NULL) {
-               printk(KERN_ERR "pio-handle not available \n");
-               return -1;
-       }
-@@ -200,7 +201,7 @@ static void dump_par_io(void)
- {
-       unsigned int i;
--      printk(KERN_INFO "%s: par_io=%p\n", __FUNCTION__, par_io);
-+      printk(KERN_INFO "%s: par_io=%p\n", __func__, par_io);
-       for (i = 0; i < num_par_io_ports; i++) {
-               printk(KERN_INFO "      cpodr[%u]=%08x\n", i,
-                       in_be32(&par_io[i].cpodr));
---- a/arch/powerpc/sysdev/qe_lib/ucc_fast.c
-+++ b/arch/powerpc/sysdev/qe_lib/ucc_fast.c
-@@ -148,57 +148,57 @@ int ucc_fast_init(struct ucc_fast_info *
-       /* check if the UCC port number is in range. */
-       if ((uf_info->ucc_num < 0) || (uf_info->ucc_num > UCC_MAX_NUM - 1)) {
--              printk(KERN_ERR "%s: illegal UCC number\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: illegal UCC number\n", __func__);
-               return -EINVAL;
-       }
-       /* Check that 'max_rx_buf_length' is properly aligned (4). */
-       if (uf_info->max_rx_buf_length & (UCC_FAST_MRBLR_ALIGNMENT - 1)) {
-               printk(KERN_ERR "%s: max_rx_buf_length not aligned\n",
--                      __FUNCTION__);
-+                      __func__);
-               return -EINVAL;
-       }
-       /* Validate Virtual Fifo register values */
-       if (uf_info->urfs < UCC_FAST_URFS_MIN_VAL) {
--              printk(KERN_ERR "%s: urfs is too small\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: urfs is too small\n", __func__);
-               return -EINVAL;
-       }
-       if (uf_info->urfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
--              printk(KERN_ERR "%s: urfs is not aligned\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: urfs is not aligned\n", __func__);
-               return -EINVAL;
-       }
-       if (uf_info->urfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
--              printk(KERN_ERR "%s: urfet is not aligned.\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: urfet is not aligned.\n", __func__);
-               return -EINVAL;
-       }
-       if (uf_info->urfset & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
--              printk(KERN_ERR "%s: urfset is not aligned\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: urfset is not aligned\n", __func__);
-               return -EINVAL;
-       }
-       if (uf_info->utfs & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
--              printk(KERN_ERR "%s: utfs is not aligned\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: utfs is not aligned\n", __func__);
-               return -EINVAL;
-       }
-       if (uf_info->utfet & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
--              printk(KERN_ERR "%s: utfet is not aligned\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: utfet is not aligned\n", __func__);
-               return -EINVAL;
-       }
-       if (uf_info->utftt & (UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT - 1)) {
--              printk(KERN_ERR "%s: utftt is not aligned\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: utftt is not aligned\n", __func__);
-               return -EINVAL;
-       }
-       uccf = kzalloc(sizeof(struct ucc_fast_private), GFP_KERNEL);
-       if (!uccf) {
-               printk(KERN_ERR "%s: Cannot allocate private data\n",
--                      __FUNCTION__);
-+                      __func__);
-               return -ENOMEM;
-       }
-@@ -207,7 +207,7 @@ int ucc_fast_init(struct ucc_fast_info *
-       /* Set the PHY base address */
-       uccf->uf_regs = ioremap(uf_info->regs, sizeof(struct ucc_fast));
-       if (uccf->uf_regs == NULL) {
--              printk(KERN_ERR "%s: Cannot map UCC registers\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: Cannot map UCC registers\n", __func__);
-               return -ENOMEM;
-       }
-@@ -230,7 +230,7 @@ int ucc_fast_init(struct ucc_fast_info *
-       /* Set UCC to fast type */
-       ret = ucc_set_type(uf_info->ucc_num, UCC_SPEED_TYPE_FAST);
-       if (ret) {
--              printk(KERN_ERR "%s: cannot set UCC type\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: cannot set UCC type\n", __func__);
-               ucc_fast_free(uccf);
-               return ret;
-       }
-@@ -270,7 +270,7 @@ int ucc_fast_init(struct ucc_fast_info *
-           qe_muram_alloc(uf_info->utfs, UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
-       if (IS_ERR_VALUE(uccf->ucc_fast_tx_virtual_fifo_base_offset)) {
-               printk(KERN_ERR "%s: cannot allocate MURAM for TX FIFO\n",
--                      __FUNCTION__);
-+                      __func__);
-               uccf->ucc_fast_tx_virtual_fifo_base_offset = 0;
-               ucc_fast_free(uccf);
-               return -ENOMEM;
-@@ -283,7 +283,7 @@ int ucc_fast_init(struct ucc_fast_info *
-                          UCC_FAST_VIRT_FIFO_REGS_ALIGNMENT);
-       if (IS_ERR_VALUE(uccf->ucc_fast_rx_virtual_fifo_base_offset)) {
-               printk(KERN_ERR "%s: cannot allocate MURAM for RX FIFO\n",
--                      __FUNCTION__);
-+                      __func__);
-               uccf->ucc_fast_rx_virtual_fifo_base_offset = 0;
-               ucc_fast_free(uccf);
-               return -ENOMEM;
-@@ -314,7 +314,7 @@ int ucc_fast_init(struct ucc_fast_info *
-                   ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->rx_clock,
-                                       COMM_DIR_RX)) {
-                       printk(KERN_ERR "%s: illegal value for RX clock\n",
--                             __FUNCTION__);
-+                             __func__);
-                       ucc_fast_free(uccf);
-                       return -EINVAL;
-               }
-@@ -323,7 +323,7 @@ int ucc_fast_init(struct ucc_fast_info *
-                   ucc_set_qe_mux_rxtx(uf_info->ucc_num, uf_info->tx_clock,
-                                       COMM_DIR_TX)) {
-                       printk(KERN_ERR "%s: illegal value for TX clock\n",
--                             __FUNCTION__);
-+                             __func__);
-                       ucc_fast_free(uccf);
-                       return -EINVAL;
-               }
---- a/arch/powerpc/sysdev/qe_lib/ucc_slow.c
-+++ b/arch/powerpc/sysdev/qe_lib/ucc_slow.c
-@@ -142,7 +142,7 @@ int ucc_slow_init(struct ucc_slow_info *
-       /* check if the UCC port number is in range. */
-       if ((us_info->ucc_num < 0) || (us_info->ucc_num > UCC_MAX_NUM - 1)) {
--              printk(KERN_ERR "%s: illegal UCC number\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: illegal UCC number\n", __func__);
-               return -EINVAL;
-       }
-@@ -161,7 +161,7 @@ int ucc_slow_init(struct ucc_slow_info *
-       uccs = kzalloc(sizeof(struct ucc_slow_private), GFP_KERNEL);
-       if (!uccs) {
-               printk(KERN_ERR "%s: Cannot allocate private data\n",
--                      __FUNCTION__);
-+                      __func__);
-               return -ENOMEM;
-       }
-@@ -170,7 +170,7 @@ int ucc_slow_init(struct ucc_slow_info *
-       /* Set the PHY base address */
-       uccs->us_regs = ioremap(us_info->regs, sizeof(struct ucc_slow));
-       if (uccs->us_regs == NULL) {
--              printk(KERN_ERR "%s: Cannot map UCC registers\n", __FUNCTION__);
-+              printk(KERN_ERR "%s: Cannot map UCC registers\n", __func__);
-               return -ENOMEM;
-       }
-@@ -189,7 +189,7 @@ int ucc_slow_init(struct ucc_slow_info *
-       uccs->us_pram_offset =
-               qe_muram_alloc(UCC_SLOW_PRAM_SIZE, ALIGNMENT_OF_UCC_SLOW_PRAM);
-       if (IS_ERR_VALUE(uccs->us_pram_offset)) {
--              printk(KERN_ERR "%s: cannot allocate MURAM for PRAM", __FUNCTION__);
-+              printk(KERN_ERR "%s: cannot allocate MURAM for PRAM", __func__);
-               ucc_slow_free(uccs);
-               return -ENOMEM;
-       }
-@@ -202,7 +202,7 @@ int ucc_slow_init(struct ucc_slow_info *
-       /* Set UCC to slow type */
-       ret = ucc_set_type(us_info->ucc_num, UCC_SPEED_TYPE_SLOW);
-       if (ret) {
--              printk(KERN_ERR "%s: cannot set UCC type", __FUNCTION__);
-+              printk(KERN_ERR "%s: cannot set UCC type", __func__);
-               ucc_slow_free(uccs);
-               return ret;
-       }
-@@ -216,7 +216,7 @@ int ucc_slow_init(struct ucc_slow_info *
-               qe_muram_alloc(us_info->rx_bd_ring_len * sizeof(struct qe_bd),
-                               QE_ALIGNMENT_OF_BD);
-       if (IS_ERR_VALUE(uccs->rx_base_offset)) {
--              printk(KERN_ERR "%s: cannot allocate %u RX BDs\n", __FUNCTION__,
-+              printk(KERN_ERR "%s: cannot allocate %u RX BDs\n", __func__,
-                       us_info->rx_bd_ring_len);
-               uccs->rx_base_offset = 0;
-               ucc_slow_free(uccs);
-@@ -227,7 +227,7 @@ int ucc_slow_init(struct ucc_slow_info *
-               qe_muram_alloc(us_info->tx_bd_ring_len * sizeof(struct qe_bd),
-                       QE_ALIGNMENT_OF_BD);
-       if (IS_ERR_VALUE(uccs->tx_base_offset)) {
--              printk(KERN_ERR "%s: cannot allocate TX BDs", __FUNCTION__);
-+              printk(KERN_ERR "%s: cannot allocate TX BDs", __func__);
-               uccs->tx_base_offset = 0;
-               ucc_slow_free(uccs);
-               return -ENOMEM;
-@@ -317,7 +317,7 @@ int ucc_slow_init(struct ucc_slow_info *
-               if (ucc_set_qe_mux_rxtx(us_info->ucc_num, us_info->rx_clock,
-                                       COMM_DIR_RX)) {
-                       printk(KERN_ERR "%s: illegal value for RX clock\n",
--                             __FUNCTION__);
-+                             __func__);
-                       ucc_slow_free(uccs);
-                       return -EINVAL;
-               }
-@@ -325,7 +325,7 @@ int ucc_slow_init(struct ucc_slow_info *
-               if (ucc_set_qe_mux_rxtx(us_info->ucc_num, us_info->tx_clock,
-                                       COMM_DIR_TX)) {
-                       printk(KERN_ERR "%s: illegal value for TX clock\n",
--                             __FUNCTION__);
-+                             __func__);
-                       ucc_slow_free(uccs);
-                       return -EINVAL;
-               }
---- a/arch/powerpc/sysdev/rtc_cmos_setup.c
-+++ b/arch/powerpc/sysdev/rtc_cmos_setup.c
-@@ -56,3 +56,5 @@ static int  __init add_rtc(void)
-       return 0;
- }
- fs_initcall(add_rtc);
-+
-+MODULE_LICENSE("GPL");
---- a/arch/powerpc/sysdev/tsi108_dev.c
-+++ b/arch/powerpc/sysdev/tsi108_dev.c
-@@ -84,7 +84,7 @@ static int __init tsi108_eth_of_init(voi
-               ret = of_address_to_resource(np, 0, &r[0]);
-               DBG("%s: name:start->end = %s:0x%lx-> 0x%lx\n",
--                      __FUNCTION__,r[0].name, r[0].start, r[0].end);
-+                      __func__,r[0].name, r[0].start, r[0].end);
-               if (ret)
-                       goto err;
-@@ -93,7 +93,7 @@ static int __init tsi108_eth_of_init(voi
-               r[1].end = irq_of_parse_and_map(np, 0);
-               r[1].flags = IORESOURCE_IRQ;
-               DBG("%s: name:start->end = %s:0x%lx-> 0x%lx\n",
--                      __FUNCTION__,r[1].name, r[1].start, r[1].end);
-+                      __func__,r[1].name, r[1].start, r[1].end);
-               tsi_eth_dev =
-                   platform_device_register_simple("tsi-ethernet", i++, &r[0],
---- a/arch/powerpc/sysdev/tsi108_pci.c
-+++ b/arch/powerpc/sysdev/tsi108_pci.c
-@@ -207,7 +207,7 @@ int __init tsi108_setup_pci(struct devic
-       /* PCI Config mapping */
-       tsi108_pci_cfg_base = (u32)ioremap(cfg_phys, TSI108_PCI_CFG_SIZE);
-       tsi108_pci_cfg_phys = cfg_phys;
--      DBG("TSI_PCI: %s tsi108_pci_cfg_base=0x%x\n", __FUNCTION__,
-+      DBG("TSI_PCI: %s tsi108_pci_cfg_base=0x%x\n", __func__,
-           tsi108_pci_cfg_base);
-       /* Fetch host bridge registers address */
-@@ -395,7 +395,7 @@ static int pci_irq_host_xlate(struct irq
- static int pci_irq_host_map(struct irq_host *h, unsigned int virq,
-                         irq_hw_number_t hw)
- {     unsigned int irq;
--      DBG("%s(%d, 0x%lx)\n", __FUNCTION__, virq, hw);
-+      DBG("%s(%d, 0x%lx)\n", __func__, virq, hw);
-       if ((virq >= 1) && (virq <= 4)){
-               irq = virq + IRQ_PCI_INTAD_BASE - 1;
-               get_irq_desc(irq)->status |= IRQ_LEVEL;
---- a/arch/powerpc/xmon/xmon.c
-+++ b/arch/powerpc/xmon/xmon.c
-@@ -45,7 +45,6 @@
- #ifdef CONFIG_PPC64
- #include <asm/hvcall.h>
- #include <asm/paca.h>
--#include <asm/iseries/it_lp_reg_save.h>
- #endif
- #include "nonstdio.h"
-@@ -1244,15 +1243,12 @@ static void get_function_bounds(unsigned
- static int xmon_depth_to_print = 64;
--#ifdef CONFIG_PPC64
--#define LRSAVE_OFFSET         0x10
--#define REG_FRAME_MARKER      0x7265677368657265ul    /* "regshere" */
--#define MARKER_OFFSET         0x60
-+#define LRSAVE_OFFSET         (STACK_FRAME_LR_SAVE * sizeof(unsigned long))
-+#define MARKER_OFFSET         (STACK_FRAME_MARKER * sizeof(unsigned long))
-+
-+#ifdef __powerpc64__
- #define REGS_OFFSET           0x70
- #else
--#define LRSAVE_OFFSET         4
--#define REG_FRAME_MARKER      0x72656773
--#define MARKER_OFFSET         8
- #define REGS_OFFSET           16
- #endif
-@@ -1318,7 +1314,7 @@ static void xmon_show_stack(unsigned lon
-               /* Look for "regshere" marker to see if this is
-                  an exception frame. */
-               if (mread(sp + MARKER_OFFSET, &marker, sizeof(unsigned long))
--                  && marker == REG_FRAME_MARKER) {
-+                  && marker == STACK_FRAME_REGS_MARKER) {
-                       if (mread(sp + REGS_OFFSET, &regs, sizeof(regs))
-                           != sizeof(regs)) {
-                               printf("Couldn't read registers at %lx\n",
-@@ -1598,7 +1594,6 @@ void super_regs(void)
-               if (firmware_has_feature(FW_FEATURE_ISERIES)) {
-                       struct paca_struct *ptrPaca;
-                       struct lppaca *ptrLpPaca;
--                      struct ItLpRegSave *ptrLpRegSave;
-                       /* Dump out relevant Paca data areas. */
-                       printf("Paca: \n");
-@@ -1611,15 +1606,6 @@ void super_regs(void)
-                       printf("    Saved Gpr3=%.16lx  Saved Gpr4=%.16lx \n",
-                              ptrLpPaca->saved_gpr3, ptrLpPaca->saved_gpr4);
-                       printf("    Saved Gpr5=%.16lx \n", ptrLpPaca->saved_gpr5);
--
--                      printf("  Local Processor Register Save Area (LpRegSave): \n");
--                      ptrLpRegSave = ptrPaca->reg_save_ptr;
--                      printf("    Saved Sprg0=%.16lx  Saved Sprg1=%.16lx \n",
--                             ptrLpRegSave->xSPRG0, ptrLpRegSave->xSPRG0);
--                      printf("    Saved Sprg2=%.16lx  Saved Sprg3=%.16lx \n",
--                             ptrLpRegSave->xSPRG2, ptrLpRegSave->xSPRG3);
--                      printf("    Saved Msr  =%.16lx  Saved Nia  =%.16lx \n",
--                             ptrLpRegSave->xMSR, ptrLpRegSave->xNIA);
-               }
- #endif
---- a/arch/ppc/8xx_io/commproc.c
-+++ b/arch/ppc/8xx_io/commproc.c
-@@ -43,7 +43,7 @@
- ({                                                                    \
-       u32 offset = offsetof(immap_t, member);                         \
-       void *addr = ioremap (IMAP_ADDR + offset,                       \
--                            sizeof( ((immap_t*)0)->member));          \
-+                            FIELD_SIZEOF(immap_t, member));           \
-       addr;                                                           \
- })
---- a/arch/ppc/8xx_io/fec.c
-+++ b/arch/ppc/8xx_io/fec.c
-@@ -520,7 +520,7 @@ fec_enet_interrupt(int irq, void * dev_i
- #ifdef        CONFIG_USE_MDIO
-                       fec_enet_mii(dev);
- #else
--printk("%s[%d] %s: unexpected FEC_ENET_MII event\n", __FILE__,__LINE__,__FUNCTION__);
-+printk("%s[%d] %s: unexpected FEC_ENET_MII event\n", __FILE__, __LINE__, __func__);
- #endif        /* CONFIG_USE_MDIO */
-               }
-@@ -1441,7 +1441,7 @@ irqreturn_t mii_link_interrupt(int irq, 
-               fecp->fec_ecntrl = ecntrl;      /* restore old settings */
-       }
- #else
--printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__,__LINE__,__FUNCTION__);
-+printk("%s[%d] %s: unexpected Link interrupt\n", __FILE__, __LINE__, __func__);
- #endif        /* CONFIG_USE_MDIO */
- #ifndef CONFIG_RPXCLASSIC
---- a/arch/ppc/kernel/head.S
-+++ b/arch/ppc/kernel/head.S
-@@ -701,23 +701,6 @@ load_up_altivec:
-       b       fast_exception_return
- /*
-- * AltiVec unavailable trap from kernel - print a message, but let
-- * the task use AltiVec in the kernel until it returns to user mode.
-- */
--KernelAltiVec:
--      lwz     r3,_MSR(r1)
--      oris    r3,r3,MSR_VEC@h
--      stw     r3,_MSR(r1)     /* enable use of AltiVec after return */
--      lis     r3,87f@h
--      ori     r3,r3,87f@l
--      mr      r4,r2           /* current */
--      lwz     r5,_NIP(r1)
--      bl      printk
--      b       ret_from_except
--87:   .string "AltiVec used in kernel  (task=%p, pc=%x)  \n"
--      .align  4,0
--
--/*
-  * giveup_altivec(tsk)
-  * Disable AltiVec for the task given as the argument,
-  * and save the AltiVec registers in its thread_struct.
---- a/arch/ppc/mm/init.c
-+++ b/arch/ppc/mm/init.c
-@@ -109,7 +109,6 @@ void show_mem(void)
-       printk("Mem-info:\n");
-       show_free_areas();
--      printk("Free swap:       %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
-       i = max_mapnr;
-       while (i-- > 0) {
-               total++;
---- a/arch/ppc/platforms/radstone_ppc7d.c
-+++ b/arch/ppc/platforms/radstone_ppc7d.c
-@@ -512,7 +512,7 @@ static void __init ppc7d_init_irq(void)
- {
-       int irq;
--      pr_debug("%s\n", __FUNCTION__);
-+      pr_debug("%s\n", __func__);
-       i8259_init(0, 0);
-       mv64360_init_irq();
-@@ -569,7 +569,7 @@ static int __init ppc7d_map_irq(struct p
-       };
-       const long min_idsel = 10, max_idsel = 14, irqs_per_slot = 4;
--      pr_debug("%s: %04x/%04x/%x: idsel=%hx pin=%hu\n", __FUNCTION__,
-+      pr_debug("%s: %04x/%04x/%x: idsel=%hx pin=%hu\n", __func__,
-                dev->vendor, dev->device, PCI_FUNC(dev->devfn), idsel, pin);
-       return PCI_IRQ_TABLE_LOOKUP;
-@@ -1300,7 +1300,7 @@ static void ppc7d_init2(void)
-       u32 data;
-       u8 data8;
--      pr_debug("%s: enter\n", __FUNCTION__);
-+      pr_debug("%s: enter\n", __func__);
-       /* Wait for debugger? */
-       if (ppc7d_wait_debugger) {
-@@ -1333,7 +1333,7 @@ static void ppc7d_init2(void)
-         ppc_md.set_rtc_time = ppc7d_set_rtc_time;
-         ppc_md.get_rtc_time = ppc7d_get_rtc_time;
--      pr_debug("%s: exit\n", __FUNCTION__);
-+      pr_debug("%s: exit\n", __func__);
- }
- /* Called from machine_init(), early, before any of the __init functions
---- a/arch/ppc/syslib/mpc52xx_setup.c
-+++ b/arch/ppc/syslib/mpc52xx_setup.c
-@@ -279,7 +279,7 @@ int mpc52xx_match_psc_function(int psc_i
- int mpc52xx_set_psc_clkdiv(int psc_id, int clkdiv)
- {
--      static spinlock_t lock = SPIN_LOCK_UNLOCKED;
-+      static DEFINE_SPINLOCK(lock);
-       struct mpc52xx_cdm __iomem *cdm;
-       unsigned long flags;
-       u16 mclken_div;
---- a/arch/sparc64/Kconfig
-+++ b/arch/sparc64/Kconfig
-@@ -16,6 +16,7 @@ config SPARC64
-       bool
-       default y
-       select HAVE_IDE
-+      select HAVE_LMB
-       help
-         SPARC is a family of RISC microprocessors designed and marketed by
-         Sun Microsystems, incorporated.  This port covers the newer 64-bit
---- a/drivers/block/viodasd.c
-+++ b/drivers/block/viodasd.c
-@@ -69,7 +69,7 @@ MODULE_LICENSE("GPL");
- enum {
-       PARTITION_SHIFT = 3,
-       MAX_DISKNO = HVMAXARCHITECTEDVIRTUALDISKS,
--      MAX_DISK_NAME = sizeof(((struct gendisk *)0)->disk_name)
-+      MAX_DISK_NAME = FIELD_SIZEOF(struct gendisk, disk_name)
- };
- static DEFINE_SPINLOCK(viodasd_spinlock);
---- a/drivers/char/hvc_beat.c
-+++ b/drivers/char/hvc_beat.c
-@@ -78,8 +78,8 @@ static int hvc_beat_put_chars(uint32_t v
-       for (rest = cnt; rest > 0; rest -= nlen) {
-               nlen = (rest > 16) ? 16 : rest;
-               memcpy(kb, buf, nlen);
--              beat_put_term_char(vtermno, rest, kb[0], kb[1]);
--              rest -= nlen;
-+              beat_put_term_char(vtermno, nlen, kb[0], kb[1]);
-+              buf += nlen;
-       }
-       return cnt;
- }
---- a/drivers/char/xilinx_hwicap/buffer_icap.c
-+++ b/drivers/char/xilinx_hwicap/buffer_icap.c
-@@ -74,7 +74,7 @@
- /**
-  * buffer_icap_get_status - Get the contents of the status register.
-- * @base_address: is the base address of the device
-+ * @drvdata: a pointer to the drvdata.
-  *
-  * The status register contains the ICAP status and the done bit.
-  *
-@@ -88,9 +88,9 @@
-  * D1 - Always 1
-  * D0 - Done bit
-  **/
--static inline u32 buffer_icap_get_status(void __iomem *base_address)
-+u32 buffer_icap_get_status(struct hwicap_drvdata *drvdata)
- {
--      return in_be32(base_address + XHI_STATUS_REG_OFFSET);
-+      return in_be32(drvdata->base_address + XHI_STATUS_REG_OFFSET);
- }
- /**
-@@ -117,20 +117,8 @@ static inline u32 buffer_icap_get_bram(v
-  **/
- static inline bool buffer_icap_busy(void __iomem *base_address)
- {
--      return (buffer_icap_get_status(base_address) & 1) == XHI_NOT_FINISHED;
--}
--
--/**
-- * buffer_icap_busy - Return true if the icap device is not busy
-- * @base_address: is the base address of the device
-- *
-- * The queries the low order bit of the status register, which
-- * indicates whether the current configuration or readback operation
-- * has completed.
-- **/
--static inline bool buffer_icap_done(void __iomem *base_address)
--{
--      return (buffer_icap_get_status(base_address) & 1) == XHI_FINISHED;
-+      u32 status = in_be32(base_address + XHI_STATUS_REG_OFFSET);
-+      return (status & 1) == XHI_NOT_FINISHED;
- }
- /**
---- a/drivers/char/xilinx_hwicap/buffer_icap.h
-+++ b/drivers/char/xilinx_hwicap/buffer_icap.h
-@@ -44,8 +44,6 @@
- #include <asm/io.h>
- #include "xilinx_hwicap.h"
--void buffer_icap_reset(struct hwicap_drvdata *drvdata);
--
- /* Loads a partial bitstream from system memory. */
- int buffer_icap_set_configuration(struct hwicap_drvdata *drvdata, u32 *data,
-                            u32 Size);
-@@ -54,4 +52,7 @@ int buffer_icap_set_configuration(struct
- int buffer_icap_get_configuration(struct hwicap_drvdata *drvdata, u32 *data,
-                            u32 Size);
-+u32 buffer_icap_get_status(struct hwicap_drvdata *drvdata);
-+void buffer_icap_reset(struct hwicap_drvdata *drvdata);
-+
- #endif
---- a/drivers/char/xilinx_hwicap/fifo_icap.c
-+++ b/drivers/char/xilinx_hwicap/fifo_icap.c
-@@ -78,13 +78,6 @@
- #define XHI_CR_READ_MASK 0x00000002 /* Read from ICAP to FIFO */
- #define XHI_CR_WRITE_MASK 0x00000001 /* Write from FIFO to ICAP */
--/* Status Register (SR) */
--#define XHI_SR_CFGERR_N_MASK 0x00000100 /* Config Error Mask */
--#define XHI_SR_DALIGN_MASK 0x00000080 /* Data Alignment Mask */
--#define XHI_SR_RIP_MASK 0x00000040 /* Read back Mask */
--#define XHI_SR_IN_ABORT_N_MASK 0x00000020 /* Select Map Abort Mask */
--#define XHI_SR_DONE_MASK 0x00000001 /* Done bit Mask  */
--
- #define XHI_WFO_MAX_VACANCY 1024 /* Max Write FIFO Vacancy, in words */
- #define XHI_RFO_MAX_OCCUPANCY 256 /* Max Read FIFO Occupancy, in words */
-@@ -152,13 +145,35 @@ static inline void fifo_icap_start_readb
- }
- /**
-+ * fifo_icap_get_status - Get the contents of the status register.
-+ * @drvdata: a pointer to the drvdata.
-+ *
-+ * The status register contains the ICAP status and the done bit.
-+ *
-+ * D8 - cfgerr
-+ * D7 - dalign
-+ * D6 - rip
-+ * D5 - in_abort_l
-+ * D4 - Always 1
-+ * D3 - Always 1
-+ * D2 - Always 1
-+ * D1 - Always 1
-+ * D0 - Done bit
-+ **/
-+u32 fifo_icap_get_status(struct hwicap_drvdata *drvdata)
-+{
-+      u32 status = in_be32(drvdata->base_address + XHI_SR_OFFSET);
-+      dev_dbg(drvdata->dev, "Getting status = %x\n", status);
-+      return status;
-+}
-+
-+/**
-  * fifo_icap_busy - Return true if the ICAP is still processing a transaction.
-  * @drvdata: a pointer to the drvdata.
-  **/
- static inline u32 fifo_icap_busy(struct hwicap_drvdata *drvdata)
- {
-       u32 status = in_be32(drvdata->base_address + XHI_SR_OFFSET);
--      dev_dbg(drvdata->dev, "Getting status = %x\n", status);
-       return (status & XHI_SR_DONE_MASK) ? 0 : 1;
- }
---- a/drivers/char/xilinx_hwicap/fifo_icap.h
-+++ b/drivers/char/xilinx_hwicap/fifo_icap.h
-@@ -56,6 +56,7 @@ int fifo_icap_set_configuration(
-               u32 *FrameBuffer,
-               u32 NumWords);
-+u32 fifo_icap_get_status(struct hwicap_drvdata *drvdata);
- void fifo_icap_reset(struct hwicap_drvdata *drvdata);
- void fifo_icap_flush_fifo(struct hwicap_drvdata *drvdata);
---- a/drivers/char/xilinx_hwicap/xilinx_hwicap.c
-+++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.c
-@@ -36,7 +36,7 @@
-  *****************************************************************************/
- /*
-- * This is the code behind /dev/xilinx_icap -- it allows a user-space
-+ * This is the code behind /dev/icap* -- it allows a user-space
-  * application to use the Xilinx ICAP subsystem.
-  *
-  * The following operations are possible:
-@@ -67,7 +67,7 @@
-  * user-space application code that uses this device.  The simplest
-  * way to use this interface is simply:
-  *
-- * cp foo.bit /dev/xilinx_icap
-+ * cp foo.bit /dev/icap0
-  *
-  * Note that unless foo.bit is an appropriately constructed partial
-  * bitstream, this has a high likelyhood of overwriting the design
-@@ -105,18 +105,14 @@
- #include "buffer_icap.h"
- #include "fifo_icap.h"
--#define DRIVER_NAME "xilinx_icap"
-+#define DRIVER_NAME "icap"
- #define HWICAP_REGS   (0x10000)
--/* dynamically allocate device number */
--static int xhwicap_major;
--static int xhwicap_minor;
-+#define XHWICAP_MAJOR 259
-+#define XHWICAP_MINOR 0
- #define HWICAP_DEVICES 1
--module_param(xhwicap_major, int, S_IRUGO);
--module_param(xhwicap_minor, int, S_IRUGO);
--
- /* An array, which is set to true when the device is registered. */
- static bool probed_devices[HWICAP_DEVICES];
- static struct mutex icap_sem;
-@@ -250,8 +246,26 @@ static int hwicap_get_configuration_regi
-        * Create the data to be written to the ICAP.
-        */
-       buffer[index++] = XHI_DUMMY_PACKET;
-+      buffer[index++] = XHI_NOOP_PACKET;
-       buffer[index++] = XHI_SYNC_PACKET;
-       buffer[index++] = XHI_NOOP_PACKET;
-+      buffer[index++] = XHI_NOOP_PACKET;
-+
-+      /*
-+       * Write the data to the FIFO and initiate the transfer of data present
-+       * in the FIFO to the ICAP device.
-+       */
-+      status = drvdata->config->set_configuration(drvdata,
-+                                                  &buffer[0], index);
-+      if (status)
-+              return status;
-+
-+      /* If the syncword was not found, then we need to start over. */
-+      status = drvdata->config->get_status(drvdata);
-+      if ((status & XHI_SR_DALIGN_MASK) != XHI_SR_DALIGN_MASK)
-+              return -EIO;
-+
-+      index = 0;
-       buffer[index++] = hwicap_type_1_read(reg) | 1;
-       buffer[index++] = XHI_NOOP_PACKET;
-       buffer[index++] = XHI_NOOP_PACKET;
-@@ -587,7 +601,7 @@ static int __devinit hwicap_setup(struct
-       probed_devices[id] = 1;
-       mutex_unlock(&icap_sem);
--      devt = MKDEV(xhwicap_major, xhwicap_minor + id);
-+      devt = MKDEV(XHWICAP_MAJOR, XHWICAP_MINOR + id);
-       drvdata = kzalloc(sizeof(struct hwicap_drvdata), GFP_KERNEL);
-       if (!drvdata) {
-@@ -664,12 +678,14 @@ static int __devinit hwicap_setup(struct
- static struct hwicap_driver_config buffer_icap_config = {
-       .get_configuration = buffer_icap_get_configuration,
-       .set_configuration = buffer_icap_set_configuration,
-+      .get_status = buffer_icap_get_status,
-       .reset = buffer_icap_reset,
- };
- static struct hwicap_driver_config fifo_icap_config = {
-       .get_configuration = fifo_icap_get_configuration,
-       .set_configuration = fifo_icap_set_configuration,
-+      .get_status = fifo_icap_get_status,
-       .reset = fifo_icap_reset,
- };
-@@ -690,7 +706,7 @@ static int __devexit hwicap_remove(struc
-       dev_set_drvdata(dev, NULL);
-       mutex_lock(&icap_sem);
--      probed_devices[MINOR(dev->devt)-xhwicap_minor] = 0;
-+      probed_devices[MINOR(dev->devt)-XHWICAP_MINOR] = 0;
-       mutex_unlock(&icap_sem);
-       return 0;               /* success */
- }
-@@ -830,23 +846,12 @@ static int __init hwicap_module_init(voi
-       icap_class = class_create(THIS_MODULE, "xilinx_config");
-       mutex_init(&icap_sem);
--      if (xhwicap_major) {
--              devt = MKDEV(xhwicap_major, xhwicap_minor);
--              retval = register_chrdev_region(
--                              devt,
--                              HWICAP_DEVICES,
--                              DRIVER_NAME);
--              if (retval < 0)
--                      return retval;
--      } else {
--              retval = alloc_chrdev_region(&devt,
--                              xhwicap_minor,
--                              HWICAP_DEVICES,
--                              DRIVER_NAME);
--              if (retval < 0)
--                      return retval;
--              xhwicap_major = MAJOR(devt);
--      }
-+      devt = MKDEV(XHWICAP_MAJOR, XHWICAP_MINOR);
-+      retval = register_chrdev_region(devt,
-+                                      HWICAP_DEVICES,
-+                                      DRIVER_NAME);
-+      if (retval < 0)
-+              return retval;
-       retval = platform_driver_register(&hwicap_platform_driver);
-@@ -871,7 +876,7 @@ static int __init hwicap_module_init(voi
- static void __exit hwicap_module_cleanup(void)
- {
--      dev_t devt = MKDEV(xhwicap_major, xhwicap_minor);
-+      dev_t devt = MKDEV(XHWICAP_MAJOR, XHWICAP_MINOR);
-       class_destroy(icap_class);
---- a/drivers/char/xilinx_hwicap/xilinx_hwicap.h
-+++ b/drivers/char/xilinx_hwicap/xilinx_hwicap.h
-@@ -65,10 +65,27 @@ struct hwicap_drvdata {
- };
- struct hwicap_driver_config {
-+      /* Read configuration data given by size into the data buffer.
-+         Return 0 if successful. */
-       int (*get_configuration)(struct hwicap_drvdata *drvdata, u32 *data,
-                       u32 size);
-+      /* Write configuration data given by size from the data buffer.
-+         Return 0 if successful. */
-       int (*set_configuration)(struct hwicap_drvdata *drvdata, u32 *data,
-                       u32 size);
-+      /* Get the status register, bit pattern given by:
-+       * D8 - 0 = configuration error
-+       * D7 - 1 = alignment found
-+       * D6 - 1 = readback in progress
-+       * D5 - 0 = abort in progress
-+       * D4 - Always 1
-+       * D3 - Always 1
-+       * D2 - Always 1
-+       * D1 - Always 1
-+       * D0 - 1 = operation completed
-+       */
-+      u32 (*get_status)(struct hwicap_drvdata *drvdata);
-+      /* Reset the hw */
-       void (*reset)(struct hwicap_drvdata *drvdata);
- };
-@@ -163,6 +180,13 @@ struct config_registers {
- /* Constant to use for CRC check when CRC has been disabled */
- #define XHI_DISABLED_AUTO_CRC       0x0000DEFCUL
-+/* Meanings of the bits returned by get_status */
-+#define XHI_SR_CFGERR_N_MASK 0x00000100 /* Config Error Mask */
-+#define XHI_SR_DALIGN_MASK 0x00000080 /* Data Alignment Mask */
-+#define XHI_SR_RIP_MASK 0x00000040 /* Read back Mask */
-+#define XHI_SR_IN_ABORT_N_MASK 0x00000020 /* Select Map Abort Mask */
-+#define XHI_SR_DONE_MASK 0x00000001 /* Done bit Mask  */
-+
- /**
-  * hwicap_type_1_read - Generates a Type 1 read packet header.
-  * @reg: is the address of the register to be read back.
---- a/drivers/mtd/nand/fsl_elbc_nand.c
-+++ b/drivers/mtd/nand/fsl_elbc_nand.c
-@@ -36,207 +36,12 @@
- #include <linux/mtd/partitions.h>
- #include <asm/io.h>
--
-+#include <asm/fsl_lbc.h>
- #define MAX_BANKS 8
- #define ERR_BYTE 0xFF /* Value returned for read bytes when read failed */
- #define FCM_TIMEOUT_MSECS 500 /* Maximum number of mSecs to wait for FCM */
--struct elbc_bank {
--      __be32 br;             /**< Base Register  */
--#define BR_BA           0xFFFF8000
--#define BR_BA_SHIFT             15
--#define BR_PS           0x00001800
--#define BR_PS_SHIFT             11
--#define BR_PS_8         0x00000800  /* Port Size 8 bit */
--#define BR_PS_16        0x00001000  /* Port Size 16 bit */
--#define BR_PS_32        0x00001800  /* Port Size 32 bit */
--#define BR_DECC         0x00000600
--#define BR_DECC_SHIFT            9
--#define BR_DECC_OFF     0x00000000  /* HW ECC checking and generation off */
--#define BR_DECC_CHK     0x00000200  /* HW ECC checking on, generation off */
--#define BR_DECC_CHK_GEN 0x00000400  /* HW ECC checking and generation on */
--#define BR_WP           0x00000100
--#define BR_WP_SHIFT              8
--#define BR_MSEL         0x000000E0
--#define BR_MSEL_SHIFT            5
--#define BR_MS_GPCM      0x00000000  /* GPCM */
--#define BR_MS_FCM       0x00000020  /* FCM */
--#define BR_MS_SDRAM     0x00000060  /* SDRAM */
--#define BR_MS_UPMA      0x00000080  /* UPMA */
--#define BR_MS_UPMB      0x000000A0  /* UPMB */
--#define BR_MS_UPMC      0x000000C0  /* UPMC */
--#define BR_V            0x00000001
--#define BR_V_SHIFT               0
--#define BR_RES          ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
--
--      __be32 or;             /**< Base Register  */
--#define OR0 0x5004
--#define OR1 0x500C
--#define OR2 0x5014
--#define OR3 0x501C
--#define OR4 0x5024
--#define OR5 0x502C
--#define OR6 0x5034
--#define OR7 0x503C
--
--#define OR_FCM_AM               0xFFFF8000
--#define OR_FCM_AM_SHIFT                 15
--#define OR_FCM_BCTLD            0x00001000
--#define OR_FCM_BCTLD_SHIFT              12
--#define OR_FCM_PGS              0x00000400
--#define OR_FCM_PGS_SHIFT                10
--#define OR_FCM_CSCT             0x00000200
--#define OR_FCM_CSCT_SHIFT                9
--#define OR_FCM_CST              0x00000100
--#define OR_FCM_CST_SHIFT                 8
--#define OR_FCM_CHT              0x00000080
--#define OR_FCM_CHT_SHIFT                 7
--#define OR_FCM_SCY              0x00000070
--#define OR_FCM_SCY_SHIFT                 4
--#define OR_FCM_SCY_1            0x00000010
--#define OR_FCM_SCY_2            0x00000020
--#define OR_FCM_SCY_3            0x00000030
--#define OR_FCM_SCY_4            0x00000040
--#define OR_FCM_SCY_5            0x00000050
--#define OR_FCM_SCY_6            0x00000060
--#define OR_FCM_SCY_7            0x00000070
--#define OR_FCM_RST              0x00000008
--#define OR_FCM_RST_SHIFT                 3
--#define OR_FCM_TRLX             0x00000004
--#define OR_FCM_TRLX_SHIFT                2
--#define OR_FCM_EHTR             0x00000002
--#define OR_FCM_EHTR_SHIFT                1
--};
--
--struct elbc_regs {
--      struct elbc_bank bank[8];
--      u8 res0[0x28];
--      __be32 mar;             /**< UPM Address Register */
--      u8 res1[0x4];
--      __be32 mamr;            /**< UPMA Mode Register */
--      __be32 mbmr;            /**< UPMB Mode Register */
--      __be32 mcmr;            /**< UPMC Mode Register */
--      u8 res2[0x8];
--      __be32 mrtpr;           /**< Memory Refresh Timer Prescaler Register */
--      __be32 mdr;             /**< UPM Data Register */
--      u8 res3[0x4];
--      __be32 lsor;            /**< Special Operation Initiation Register */
--      __be32 lsdmr;           /**< SDRAM Mode Register */
--      u8 res4[0x8];
--      __be32 lurt;            /**< UPM Refresh Timer */
--      __be32 lsrt;            /**< SDRAM Refresh Timer */
--      u8 res5[0x8];
--      __be32 ltesr;           /**< Transfer Error Status Register */
--#define LTESR_BM   0x80000000
--#define LTESR_FCT  0x40000000
--#define LTESR_PAR  0x20000000
--#define LTESR_WP   0x04000000
--#define LTESR_ATMW 0x00800000
--#define LTESR_ATMR 0x00400000
--#define LTESR_CS   0x00080000
--#define LTESR_CC   0x00000001
--#define LTESR_NAND_MASK (LTESR_FCT | LTESR_PAR | LTESR_CC)
--      __be32 ltedr;           /**< Transfer Error Disable Register */
--      __be32 lteir;           /**< Transfer Error Interrupt Register */
--      __be32 lteatr;          /**< Transfer Error Attributes Register */
--      __be32 ltear;           /**< Transfer Error Address Register */
--      u8 res6[0xC];
--      __be32 lbcr;            /**< Configuration Register */
--#define LBCR_LDIS  0x80000000
--#define LBCR_LDIS_SHIFT    31
--#define LBCR_BCTLC 0x00C00000
--#define LBCR_BCTLC_SHIFT   22
--#define LBCR_AHD   0x00200000
--#define LBCR_LPBSE 0x00020000
--#define LBCR_LPBSE_SHIFT   17
--#define LBCR_EPAR  0x00010000
--#define LBCR_EPAR_SHIFT    16
--#define LBCR_BMT   0x0000FF00
--#define LBCR_BMT_SHIFT      8
--#define LBCR_INIT  0x00040000
--      __be32 lcrr;            /**< Clock Ratio Register */
--#define LCRR_DBYP    0x80000000
--#define LCRR_DBYP_SHIFT      31
--#define LCRR_BUFCMDC 0x30000000
--#define LCRR_BUFCMDC_SHIFT   28
--#define LCRR_ECL     0x03000000
--#define LCRR_ECL_SHIFT       24
--#define LCRR_EADC    0x00030000
--#define LCRR_EADC_SHIFT      16
--#define LCRR_CLKDIV  0x0000000F
--#define LCRR_CLKDIV_SHIFT     0
--      u8 res7[0x8];
--      __be32 fmr;             /**< Flash Mode Register */
--#define FMR_CWTO     0x0000F000
--#define FMR_CWTO_SHIFT       12
--#define FMR_BOOT     0x00000800
--#define FMR_ECCM     0x00000100
--#define FMR_AL       0x00000030
--#define FMR_AL_SHIFT          4
--#define FMR_OP       0x00000003
--#define FMR_OP_SHIFT          0
--      __be32 fir;             /**< Flash Instruction Register */
--#define FIR_OP0      0xF0000000
--#define FIR_OP0_SHIFT        28
--#define FIR_OP1      0x0F000000
--#define FIR_OP1_SHIFT        24
--#define FIR_OP2      0x00F00000
--#define FIR_OP2_SHIFT        20
--#define FIR_OP3      0x000F0000
--#define FIR_OP3_SHIFT        16
--#define FIR_OP4      0x0000F000
--#define FIR_OP4_SHIFT        12
--#define FIR_OP5      0x00000F00
--#define FIR_OP5_SHIFT         8
--#define FIR_OP6      0x000000F0
--#define FIR_OP6_SHIFT         4
--#define FIR_OP7      0x0000000F
--#define FIR_OP7_SHIFT         0
--#define FIR_OP_NOP   0x0      /* No operation and end of sequence */
--#define FIR_OP_CA    0x1        /* Issue current column address */
--#define FIR_OP_PA    0x2        /* Issue current block+page address */
--#define FIR_OP_UA    0x3        /* Issue user defined address */
--#define FIR_OP_CM0   0x4        /* Issue command from FCR[CMD0] */
--#define FIR_OP_CM1   0x5        /* Issue command from FCR[CMD1] */
--#define FIR_OP_CM2   0x6        /* Issue command from FCR[CMD2] */
--#define FIR_OP_CM3   0x7        /* Issue command from FCR[CMD3] */
--#define FIR_OP_WB    0x8        /* Write FBCR bytes from FCM buffer */
--#define FIR_OP_WS    0x9        /* Write 1 or 2 bytes from MDR[AS] */
--#define FIR_OP_RB    0xA        /* Read FBCR bytes to FCM buffer */
--#define FIR_OP_RS    0xB        /* Read 1 or 2 bytes to MDR[AS] */
--#define FIR_OP_CW0   0xC        /* Wait then issue FCR[CMD0] */
--#define FIR_OP_CW1   0xD        /* Wait then issue FCR[CMD1] */
--#define FIR_OP_RBW   0xE        /* Wait then read FBCR bytes */
--#define FIR_OP_RSW   0xE        /* Wait then read 1 or 2 bytes */
--      __be32 fcr;             /**< Flash Command Register */
--#define FCR_CMD0     0xFF000000
--#define FCR_CMD0_SHIFT       24
--#define FCR_CMD1     0x00FF0000
--#define FCR_CMD1_SHIFT       16
--#define FCR_CMD2     0x0000FF00
--#define FCR_CMD2_SHIFT        8
--#define FCR_CMD3     0x000000FF
--#define FCR_CMD3_SHIFT        0
--      __be32 fbar;            /**< Flash Block Address Register */
--#define FBAR_BLK     0x00FFFFFF
--      __be32 fpar;            /**< Flash Page Address Register */
--#define FPAR_SP_PI   0x00007C00
--#define FPAR_SP_PI_SHIFT     10
--#define FPAR_SP_MS   0x00000200
--#define FPAR_SP_CI   0x000001FF
--#define FPAR_SP_CI_SHIFT      0
--#define FPAR_LP_PI   0x0003F000
--#define FPAR_LP_PI_SHIFT     12
--#define FPAR_LP_MS   0x00000800
--#define FPAR_LP_CI   0x000007FF
--#define FPAR_LP_CI_SHIFT      0
--      __be32 fbcr;            /**< Flash Byte Count Register */
--#define FBCR_BC      0x00000FFF
--      u8 res11[0x8];
--      u8 res8[0xF00];
--};
--
- struct fsl_elbc_ctrl;
- /* mtd information per set */
-@@ -261,7 +66,7 @@ struct fsl_elbc_ctrl {
-       /* device info */
-       struct device *dev;
--      struct elbc_regs __iomem *regs;
-+      struct fsl_lbc_regs __iomem *regs;
-       int irq;
-       wait_queue_head_t irq_wait;
-       unsigned int irq_status; /* status read from LTESR by irq handler */
-@@ -322,7 +127,7 @@ static void set_addr(struct mtd_info *mt
-       struct nand_chip *chip = mtd->priv;
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       int buf_num;
-       ctrl->page = page_addr;
-@@ -363,7 +168,7 @@ static int fsl_elbc_run_command(struct m
-       struct nand_chip *chip = mtd->priv;
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       /* Setup the FMR[OP] to execute without write protection */
-       out_be32(&lbc->fmr, priv->fmr | 3);
-@@ -406,7 +211,7 @@ static void fsl_elbc_do_read(struct nand
- {
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       if (priv->page_size) {
-               out_be32(&lbc->fir,
-@@ -439,7 +244,7 @@ static void fsl_elbc_cmdfunc(struct mtd_
-       struct nand_chip *chip = mtd->priv;
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       ctrl->use_mdr = 0;
-@@ -775,7 +580,7 @@ static int fsl_elbc_wait(struct mtd_info
- {
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       if (ctrl->status != LTESR_CC)
-               return NAND_STATUS_FAIL;
-@@ -807,7 +612,7 @@ static int fsl_elbc_chip_init_tail(struc
-       struct nand_chip *chip = mtd->priv;
-       struct fsl_elbc_mtd *priv = chip->priv;
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       unsigned int al;
-       /* calculate FMR Address Length field */
-@@ -922,7 +727,7 @@ static void fsl_elbc_write_page(struct m
- static int fsl_elbc_chip_init(struct fsl_elbc_mtd *priv)
- {
-       struct fsl_elbc_ctrl *ctrl = priv->ctrl;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       struct nand_chip *chip = &priv->chip;
-       dev_dbg(priv->dev, "eLBC Set Information for bank %d\n", priv->bank);
-@@ -986,7 +791,7 @@ static int fsl_elbc_chip_remove(struct f
- static int fsl_elbc_chip_probe(struct fsl_elbc_ctrl *ctrl,
-                                struct device_node *node)
- {
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       struct fsl_elbc_mtd *priv;
-       struct resource res;
- #ifdef CONFIG_MTD_PARTITIONS
-@@ -1083,7 +888,7 @@ err:
- static int __devinit fsl_elbc_ctrl_init(struct fsl_elbc_ctrl *ctrl)
- {
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       /* clear event registers */
-       setbits32(&lbc->ltesr, LTESR_NAND_MASK);
-@@ -1128,7 +933,7 @@ static int __devexit fsl_elbc_ctrl_remov
- static irqreturn_t fsl_elbc_ctrl_irq(int irqno, void *data)
- {
-       struct fsl_elbc_ctrl *ctrl = data;
--      struct elbc_regs __iomem *lbc = ctrl->regs;
-+      struct fsl_lbc_regs __iomem *lbc = ctrl->regs;
-       __be32 status = in_be32(&lbc->ltesr) & LTESR_NAND_MASK;
-       if (status) {
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -219,7 +219,8 @@ obj-$(CONFIG_SMC911X) += smc911x.o
- obj-$(CONFIG_BFIN_MAC) += bfin_mac.o
- obj-$(CONFIG_DM9000) += dm9000.o
- obj-$(CONFIG_FEC_8XX) += fec_8xx/
--obj-$(CONFIG_PASEMI_MAC) += pasemi_mac.o
-+obj-$(CONFIG_PASEMI_MAC) += pasemi_mac_driver.o
-+pasemi_mac_driver-objs := pasemi_mac.o pasemi_mac_ethtool.o
- obj-$(CONFIG_MLX4_CORE) += mlx4/
- obj-$(CONFIG_ENC28J60) += enc28j60.o
---- a/drivers/net/iseries_veth.c
-+++ b/drivers/net/iseries_veth.c
-@@ -308,7 +308,8 @@ static void veth_complete_allocation(voi
- static int veth_allocate_events(HvLpIndex rlp, int number)
- {
--      struct veth_allocation vc = { COMPLETION_INITIALIZER(vc.c), 0 };
-+      struct veth_allocation vc =
-+              { COMPLETION_INITIALIZER_ONSTACK(vc.c), 0 };
-       mf_allocate_lp_events(rlp, HvLpEvent_Type_VirtualLan,
-                           sizeof(struct veth_lpevent), number,
---- a/drivers/net/pasemi_mac.c
-+++ b/drivers/net/pasemi_mac.c
-@@ -55,15 +55,10 @@
-  * - Multiqueue RX/TX
-  */
--
--/* Must be a power of two */
--#define RX_RING_SIZE 2048
--#define TX_RING_SIZE 4096
--
- #define LRO_MAX_AGGR 64
- #define PE_MIN_MTU    64
--#define PE_MAX_MTU    1500
-+#define PE_MAX_MTU    9000
- #define PE_DEF_MTU    ETH_DATA_LEN
- #define DEFAULT_MSG_ENABLE      \
-@@ -76,16 +71,6 @@
-        NETIF_MSG_RX_ERR       | \
-        NETIF_MSG_TX_ERR)
--#define TX_DESC(tx, num)      ((tx)->chan.ring_virt[(num) & (TX_RING_SIZE-1)])
--#define TX_DESC_INFO(tx, num) ((tx)->ring_info[(num) & (TX_RING_SIZE-1)])
--#define RX_DESC(rx, num)      ((rx)->chan.ring_virt[(num) & (RX_RING_SIZE-1)])
--#define RX_DESC_INFO(rx, num) ((rx)->ring_info[(num) & (RX_RING_SIZE-1)])
--#define RX_BUFF(rx, num)      ((rx)->buffers[(num) & (RX_RING_SIZE-1)])
--
--#define RING_USED(ring)               (((ring)->next_to_fill - (ring)->next_to_clean) \
--                               & ((ring)->size - 1))
--#define RING_AVAIL(ring)      ((ring->size) - RING_USED(ring))
--
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR ("Olof Johansson <olof@lixom.net>");
- MODULE_DESCRIPTION("PA Semi PWRficient Ethernet driver");
-@@ -94,6 +79,8 @@ static int debug = -1;       /* -1 == use DEFA
- module_param(debug, int, 0);
- MODULE_PARM_DESC(debug, "PA Semi MAC bitmapped debugging message enable value");
-+extern const struct ethtool_ops pasemi_mac_ethtool_ops;
-+
- static int translation_enabled(void)
- {
- #if defined(CONFIG_PPC_PASEMI_IOMMU_DMA_FORCE)
-@@ -322,6 +309,104 @@ static int pasemi_mac_unmap_tx_skb(struc
-       return (nfrags + 3) & ~1;
- }
-+static struct pasemi_mac_csring *pasemi_mac_setup_csring(struct pasemi_mac *mac)
-+{
-+      struct pasemi_mac_csring *ring;
-+      u32 val;
-+      unsigned int cfg;
-+      int chno;
-+
-+      ring = pasemi_dma_alloc_chan(TXCHAN, sizeof(struct pasemi_mac_csring),
-+                                     offsetof(struct pasemi_mac_csring, chan));
-+
-+      if (!ring) {
-+              dev_err(&mac->pdev->dev, "Can't allocate checksum channel\n");
-+              goto out_chan;
-+      }
-+
-+      chno = ring->chan.chno;
-+
-+      ring->size = CS_RING_SIZE;
-+      ring->next_to_fill = 0;
-+
-+      /* Allocate descriptors */
-+      if (pasemi_dma_alloc_ring(&ring->chan, CS_RING_SIZE))
-+              goto out_ring_desc;
-+
-+      write_dma_reg(PAS_DMA_TXCHAN_BASEL(chno),
-+                    PAS_DMA_TXCHAN_BASEL_BRBL(ring->chan.ring_dma));
-+      val = PAS_DMA_TXCHAN_BASEU_BRBH(ring->chan.ring_dma >> 32);
-+      val |= PAS_DMA_TXCHAN_BASEU_SIZ(CS_RING_SIZE >> 3);
-+
-+      write_dma_reg(PAS_DMA_TXCHAN_BASEU(chno), val);
-+
-+      ring->events[0] = pasemi_dma_alloc_flag();
-+      ring->events[1] = pasemi_dma_alloc_flag();
-+      if (ring->events[0] < 0 || ring->events[1] < 0)
-+              goto out_flags;
-+
-+      pasemi_dma_clear_flag(ring->events[0]);
-+      pasemi_dma_clear_flag(ring->events[1]);
-+
-+      ring->fun = pasemi_dma_alloc_fun();
-+      if (ring->fun < 0)
-+              goto out_fun;
-+
-+      cfg = PAS_DMA_TXCHAN_CFG_TY_FUNC | PAS_DMA_TXCHAN_CFG_UP |
-+            PAS_DMA_TXCHAN_CFG_TATTR(ring->fun) |
-+            PAS_DMA_TXCHAN_CFG_LPSQ | PAS_DMA_TXCHAN_CFG_LPDQ;
-+
-+      if (translation_enabled())
-+              cfg |= PAS_DMA_TXCHAN_CFG_TRD | PAS_DMA_TXCHAN_CFG_TRR;
-+
-+      write_dma_reg(PAS_DMA_TXCHAN_CFG(chno), cfg);
-+
-+      /* enable channel */
-+      pasemi_dma_start_chan(&ring->chan, PAS_DMA_TXCHAN_TCMDSTA_SZ |
-+                                         PAS_DMA_TXCHAN_TCMDSTA_DB |
-+                                         PAS_DMA_TXCHAN_TCMDSTA_DE |
-+                                         PAS_DMA_TXCHAN_TCMDSTA_DA);
-+
-+      return ring;
-+
-+out_fun:
-+out_flags:
-+      if (ring->events[0] >= 0)
-+              pasemi_dma_free_flag(ring->events[0]);
-+      if (ring->events[1] >= 0)
-+              pasemi_dma_free_flag(ring->events[1]);
-+      pasemi_dma_free_ring(&ring->chan);
-+out_ring_desc:
-+      pasemi_dma_free_chan(&ring->chan);
-+out_chan:
-+
-+      return NULL;
-+}
-+
-+static void pasemi_mac_setup_csrings(struct pasemi_mac *mac)
-+{
-+      int i;
-+      mac->cs[0] = pasemi_mac_setup_csring(mac);
-+      if (mac->type == MAC_TYPE_XAUI)
-+              mac->cs[1] = pasemi_mac_setup_csring(mac);
-+      else
-+              mac->cs[1] = 0;
-+
-+      for (i = 0; i < MAX_CS; i++)
-+              if (mac->cs[i])
-+                      mac->num_cs++;
-+}
-+
-+static void pasemi_mac_free_csring(struct pasemi_mac_csring *csring)
-+{
-+      pasemi_dma_stop_chan(&csring->chan);
-+      pasemi_dma_free_flag(csring->events[0]);
-+      pasemi_dma_free_flag(csring->events[1]);
-+      pasemi_dma_free_ring(&csring->chan);
-+      pasemi_dma_free_chan(&csring->chan);
-+      pasemi_dma_free_fun(csring->fun);
-+}
-+
- static int pasemi_mac_setup_rx_resources(const struct net_device *dev)
- {
-       struct pasemi_mac_rxring *ring;
-@@ -445,7 +530,7 @@ pasemi_mac_setup_tx_resources(const stru
-       cfg = PAS_DMA_TXCHAN_CFG_TY_IFACE |
-             PAS_DMA_TXCHAN_CFG_TATTR(mac->dma_if) |
-             PAS_DMA_TXCHAN_CFG_UP |
--            PAS_DMA_TXCHAN_CFG_WT(2);
-+            PAS_DMA_TXCHAN_CFG_WT(4);
-       if (translation_enabled())
-               cfg |= PAS_DMA_TXCHAN_CFG_TRD | PAS_DMA_TXCHAN_CFG_TRR;
-@@ -810,13 +895,21 @@ restart:
-               u64 mactx = TX_DESC(txring, i);
-               struct sk_buff *skb;
--              skb = TX_DESC_INFO(txring, i+1).skb;
--              nr_frags = TX_DESC_INFO(txring, i).dma;
--
-               if ((mactx  & XCT_MACTX_E) ||
-                   (*chan->status & PAS_STATUS_ERROR))
-                       pasemi_mac_tx_error(mac, mactx);
-+              /* Skip over control descriptors */
-+              if (!(mactx & XCT_MACTX_LLEN_M)) {
-+                      TX_DESC(txring, i) = 0;
-+                      TX_DESC(txring, i+1) = 0;
-+                      buf_count = 2;
-+                      continue;
-+              }
-+
-+              skb = TX_DESC_INFO(txring, i+1).skb;
-+              nr_frags = TX_DESC_INFO(txring, i).dma;
-+
-               if (unlikely(mactx & XCT_MACTX_O))
-                       /* Not yet transmitted */
-                       break;
-@@ -1041,13 +1134,7 @@ static int pasemi_mac_open(struct net_de
- {
-       struct pasemi_mac *mac = netdev_priv(dev);
-       unsigned int flags;
--      int ret;
--
--      /* enable rx section */
--      write_dma_reg(PAS_DMA_COM_RXCMD, PAS_DMA_COM_RXCMD_EN);
--
--      /* enable tx section */
--      write_dma_reg(PAS_DMA_COM_TXCMD, PAS_DMA_COM_TXCMD_EN);
-+      int i, ret;
-       flags = PAS_MAC_CFG_TXP_FCE | PAS_MAC_CFG_TXP_FPC(3) |
-               PAS_MAC_CFG_TXP_SL(3) | PAS_MAC_CFG_TXP_COB(0xf) |
-@@ -1064,6 +1151,19 @@ static int pasemi_mac_open(struct net_de
-       if (!mac->tx)
-               goto out_tx_ring;
-+      /* We might already have allocated rings in case mtu was changed
-+       * before interface was brought up.
-+       */
-+      if (dev->mtu > 1500 && !mac->num_cs) {
-+              pasemi_mac_setup_csrings(mac);
-+              if (!mac->num_cs)
-+                      goto out_tx_ring;
-+      }
-+
-+      /* Zero out rmon counters */
-+      for (i = 0; i < 32; i++)
-+              write_mac_reg(mac, PAS_MAC_RMON(i), 0);
-+
-       /* 0x3ff with 33MHz clock is about 31us */
-       write_iob_reg(PAS_IOB_DMA_COM_TIMEOUTCFG,
-                     PAS_IOB_DMA_COM_TIMEOUTCFG_TCNT(0x3ff));
-@@ -1247,7 +1347,7 @@ static int pasemi_mac_close(struct net_d
- {
-       struct pasemi_mac *mac = netdev_priv(dev);
-       unsigned int sta;
--      int rxch, txch;
-+      int rxch, txch, i;
-       rxch = rx_ring(mac)->chan.chno;
-       txch = tx_ring(mac)->chan.chno;
-@@ -1292,6 +1392,13 @@ static int pasemi_mac_close(struct net_d
-       free_irq(mac->tx->chan.irq, mac->tx);
-       free_irq(mac->rx->chan.irq, mac->rx);
-+      for (i = 0; i < mac->num_cs; i++) {
-+              pasemi_mac_free_csring(mac->cs[i]);
-+              mac->cs[i] = NULL;
-+      }
-+
-+      mac->num_cs = 0;
-+
-       /* Free resources */
-       pasemi_mac_free_rx_resources(mac);
-       pasemi_mac_free_tx_resources(mac);
-@@ -1299,35 +1406,113 @@ static int pasemi_mac_close(struct net_d
-       return 0;
- }
-+static void pasemi_mac_queue_csdesc(const struct sk_buff *skb,
-+                                  const dma_addr_t *map,
-+                                  const unsigned int *map_size,
-+                                  struct pasemi_mac_txring *txring,
-+                                  struct pasemi_mac_csring *csring)
-+{
-+      u64 fund;
-+      dma_addr_t cs_dest;
-+      const int nh_off = skb_network_offset(skb);
-+      const int nh_len = skb_network_header_len(skb);
-+      const int nfrags = skb_shinfo(skb)->nr_frags;
-+      int cs_size, i, fill, hdr, cpyhdr, evt;
-+      dma_addr_t csdma;
-+
-+      fund = XCT_FUN_ST | XCT_FUN_RR_8BRES |
-+             XCT_FUN_O | XCT_FUN_FUN(csring->fun) |
-+             XCT_FUN_CRM_SIG | XCT_FUN_LLEN(skb->len - nh_off) |
-+             XCT_FUN_SHL(nh_len >> 2) | XCT_FUN_SE;
-+
-+      switch (ip_hdr(skb)->protocol) {
-+      case IPPROTO_TCP:
-+              fund |= XCT_FUN_SIG_TCP4;
-+              /* TCP checksum is 16 bytes into the header */
-+              cs_dest = map[0] + skb_transport_offset(skb) + 16;
-+              break;
-+      case IPPROTO_UDP:
-+              fund |= XCT_FUN_SIG_UDP4;
-+              /* UDP checksum is 6 bytes into the header */
-+              cs_dest = map[0] + skb_transport_offset(skb) + 6;
-+              break;
-+      default:
-+              BUG();
-+      }
-+
-+      /* Do the checksum offloaded */
-+      fill = csring->next_to_fill;
-+      hdr = fill;
-+
-+      CS_DESC(csring, fill++) = fund;
-+      /* Room for 8BRES. Checksum result is really 2 bytes into it */
-+      csdma = csring->chan.ring_dma + (fill & (CS_RING_SIZE-1)) * 8 + 2;
-+      CS_DESC(csring, fill++) = 0;
-+
-+      CS_DESC(csring, fill) = XCT_PTR_LEN(map_size[0]-nh_off) | XCT_PTR_ADDR(map[0]+nh_off);
-+      for (i = 1; i <= nfrags; i++)
-+              CS_DESC(csring, fill+i) = XCT_PTR_LEN(map_size[i]) | XCT_PTR_ADDR(map[i]);
-+
-+      fill += i;
-+      if (fill & 1)
-+              fill++;
-+
-+      /* Copy the result into the TCP packet */
-+      cpyhdr = fill;
-+      CS_DESC(csring, fill++) = XCT_FUN_O | XCT_FUN_FUN(csring->fun) |
-+                                XCT_FUN_LLEN(2) | XCT_FUN_SE;
-+      CS_DESC(csring, fill++) = XCT_PTR_LEN(2) | XCT_PTR_ADDR(cs_dest) | XCT_PTR_T;
-+      CS_DESC(csring, fill++) = XCT_PTR_LEN(2) | XCT_PTR_ADDR(csdma);
-+      fill++;
-+
-+      evt = !csring->last_event;
-+      csring->last_event = evt;
-+
-+      /* Event handshaking with MAC TX */
-+      CS_DESC(csring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
-+                                CTRL_CMD_ETYPE_SET | CTRL_CMD_REG(csring->events[evt]);
-+      CS_DESC(csring, fill++) = 0;
-+      CS_DESC(csring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
-+                                CTRL_CMD_ETYPE_WCLR | CTRL_CMD_REG(csring->events[!evt]);
-+      CS_DESC(csring, fill++) = 0;
-+      csring->next_to_fill = fill & (CS_RING_SIZE-1);
-+
-+      cs_size = fill - hdr;
-+      write_dma_reg(PAS_DMA_TXCHAN_INCR(csring->chan.chno), (cs_size) >> 1);
-+
-+      /* TX-side event handshaking */
-+      fill = txring->next_to_fill;
-+      TX_DESC(txring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
-+                                CTRL_CMD_ETYPE_WSET | CTRL_CMD_REG(csring->events[evt]);
-+      TX_DESC(txring, fill++) = 0;
-+      TX_DESC(txring, fill++) = CTRL_CMD_T | CTRL_CMD_META_EVT | CTRL_CMD_O |
-+                                CTRL_CMD_ETYPE_CLR | CTRL_CMD_REG(csring->events[!evt]);
-+      TX_DESC(txring, fill++) = 0;
-+      txring->next_to_fill = fill;
-+
-+      write_dma_reg(PAS_DMA_TXCHAN_INCR(txring->chan.chno), 2);
-+
-+      return;
-+}
-+
- static int pasemi_mac_start_tx(struct sk_buff *skb, struct net_device *dev)
- {
--      struct pasemi_mac *mac = netdev_priv(dev);
--      struct pasemi_mac_txring *txring;
--      u64 dflags, mactx;
-+      struct pasemi_mac * const mac = netdev_priv(dev);
-+      struct pasemi_mac_txring * const txring = tx_ring(mac);
-+      struct pasemi_mac_csring *csring;
-+      u64 dflags = 0;
-+      u64 mactx;
-       dma_addr_t map[MAX_SKB_FRAGS+1];
-       unsigned int map_size[MAX_SKB_FRAGS+1];
-       unsigned long flags;
-       int i, nfrags;
-       int fill;
-+      const int nh_off = skb_network_offset(skb);
-+      const int nh_len = skb_network_header_len(skb);
--      dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_CRC_PAD;
--
--      if (skb->ip_summed == CHECKSUM_PARTIAL) {
--              const unsigned char *nh = skb_network_header(skb);
-+      prefetch(&txring->ring_info);
--              switch (ip_hdr(skb)->protocol) {
--              case IPPROTO_TCP:
--                      dflags |= XCT_MACTX_CSUM_TCP;
--                      dflags |= XCT_MACTX_IPH(skb_network_header_len(skb) >> 2);
--                      dflags |= XCT_MACTX_IPO(nh - skb->data);
--                      break;
--              case IPPROTO_UDP:
--                      dflags |= XCT_MACTX_CSUM_UDP;
--                      dflags |= XCT_MACTX_IPH(skb_network_header_len(skb) >> 2);
--                      dflags |= XCT_MACTX_IPO(nh - skb->data);
--                      break;
--              }
--      }
-+      dflags = XCT_MACTX_O | XCT_MACTX_ST | XCT_MACTX_CRC_PAD;
-       nfrags = skb_shinfo(skb)->nr_frags;
-@@ -1350,24 +1535,46 @@ static int pasemi_mac_start_tx(struct sk
-               }
-       }
--      mactx = dflags | XCT_MACTX_LLEN(skb->len);
-+      if (skb->ip_summed == CHECKSUM_PARTIAL && skb->len <= 1540) {
-+              switch (ip_hdr(skb)->protocol) {
-+              case IPPROTO_TCP:
-+                      dflags |= XCT_MACTX_CSUM_TCP;
-+                      dflags |= XCT_MACTX_IPH(nh_len >> 2);
-+                      dflags |= XCT_MACTX_IPO(nh_off);
-+                      break;
-+              case IPPROTO_UDP:
-+                      dflags |= XCT_MACTX_CSUM_UDP;
-+                      dflags |= XCT_MACTX_IPH(nh_len >> 2);
-+                      dflags |= XCT_MACTX_IPO(nh_off);
-+                      break;
-+              default:
-+                      WARN_ON(1);
-+              }
-+      }
--      txring = tx_ring(mac);
-+      mactx = dflags | XCT_MACTX_LLEN(skb->len);
-       spin_lock_irqsave(&txring->lock, flags);
--      fill = txring->next_to_fill;
--
-       /* Avoid stepping on the same cache line that the DMA controller
-        * is currently about to send, so leave at least 8 words available.
-        * Total free space needed is mactx + fragments + 8
-        */
--      if (RING_AVAIL(txring) < nfrags + 10) {
-+      if (RING_AVAIL(txring) < nfrags + 14) {
-               /* no room -- stop the queue and wait for tx intr */
-               netif_stop_queue(dev);
-               goto out_err;
-       }
-+      /* Queue up checksum + event descriptors, if needed */
-+      if (mac->num_cs && skb->ip_summed == CHECKSUM_PARTIAL && skb->len > 1540) {
-+              csring = mac->cs[mac->last_cs];
-+              mac->last_cs = (mac->last_cs + 1) % mac->num_cs;
-+
-+              pasemi_mac_queue_csdesc(skb, map, map_size, txring, csring);
-+      }
-+
-+      fill = txring->next_to_fill;
-       TX_DESC(txring, fill) = mactx;
-       TX_DESC_INFO(txring, fill).dma = nfrags;
-       fill++;
-@@ -1441,12 +1648,33 @@ static int pasemi_mac_poll(struct napi_s
-       return pkts;
- }
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+/*
-+ * Polling 'interrupt' - used by things like netconsole to send skbs
-+ * without having to re-enable interrupts. It's not called while
-+ * the interrupt routine is executing.
-+ */
-+static void pasemi_mac_netpoll(struct net_device *dev)
-+{
-+      const struct pasemi_mac *mac = netdev_priv(dev);
-+
-+      disable_irq(mac->tx->chan.irq);
-+      pasemi_mac_tx_intr(mac->tx->chan.irq, mac->tx);
-+      enable_irq(mac->tx->chan.irq);
-+
-+      disable_irq(mac->rx->chan.irq);
-+      pasemi_mac_rx_intr(mac->rx->chan.irq, mac->rx);
-+      enable_irq(mac->rx->chan.irq);
-+}
-+#endif
-+
- static int pasemi_mac_change_mtu(struct net_device *dev, int new_mtu)
- {
-       struct pasemi_mac *mac = netdev_priv(dev);
-       unsigned int reg;
--      unsigned int rcmdsta;
-+      unsigned int rcmdsta = 0;
-       int running;
-+      int ret = 0;
-       if (new_mtu < PE_MIN_MTU || new_mtu > PE_MAX_MTU)
-               return -EINVAL;
-@@ -1468,6 +1696,16 @@ static int pasemi_mac_change_mtu(struct 
-               pasemi_mac_pause_rxint(mac);
-               pasemi_mac_clean_rx(rx_ring(mac), RX_RING_SIZE);
-               pasemi_mac_free_rx_buffers(mac);
-+
-+      }
-+
-+      /* Setup checksum channels if large MTU and none already allocated */
-+      if (new_mtu > 1500 && !mac->num_cs) {
-+              pasemi_mac_setup_csrings(mac);
-+              if (!mac->num_cs) {
-+                      ret = -ENOMEM;
-+                      goto out;
-+              }
-       }
-       /* Change maxf, i.e. what size frames are accepted.
-@@ -1482,6 +1720,7 @@ static int pasemi_mac_change_mtu(struct 
-       /* MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */
-       mac->bufsz = new_mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128;
-+out:
-       if (running) {
-               write_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if),
-                             rcmdsta | PAS_DMA_RXINT_RCMDSTA_EN);
-@@ -1494,7 +1733,7 @@ static int pasemi_mac_change_mtu(struct 
-               pasemi_mac_intf_enable(mac);
-       }
--      return 0;
-+      return ret;
- }
- static int __devinit
-@@ -1528,7 +1767,7 @@ pasemi_mac_probe(struct pci_dev *pdev, c
-       netif_napi_add(dev, &mac->napi, pasemi_mac_poll, 64);
-       dev->features = NETIF_F_IP_CSUM | NETIF_F_LLTX | NETIF_F_SG |
--                      NETIF_F_HIGHDMA;
-+                      NETIF_F_HIGHDMA | NETIF_F_GSO;
-       mac->lro_mgr.max_aggr = LRO_MAX_AGGR;
-       mac->lro_mgr.max_desc = MAX_LRO_DESCRIPTORS;
-@@ -1588,8 +1827,12 @@ pasemi_mac_probe(struct pci_dev *pdev, c
-       dev->mtu = PE_DEF_MTU;
-       /* 1500 MTU + ETH_HLEN + VLAN_HLEN + 2 64B cachelines */
-       mac->bufsz = dev->mtu + ETH_HLEN + ETH_FCS_LEN + LOCAL_SKB_ALIGN + 128;
-+#ifdef CONFIG_NET_POLL_CONTROLLER
-+      dev->poll_controller = pasemi_mac_netpoll;
-+#endif
-       dev->change_mtu = pasemi_mac_change_mtu;
-+      dev->ethtool_ops = &pasemi_mac_ethtool_ops;
-       if (err)
-               goto out;
---- a/drivers/net/pasemi_mac.h
-+++ b/drivers/net/pasemi_mac.h
-@@ -26,7 +26,14 @@
- #include <linux/spinlock.h>
- #include <linux/phy.h>
-+/* Must be a power of two */
-+#define RX_RING_SIZE 2048
-+#define TX_RING_SIZE 4096
-+#define CS_RING_SIZE (TX_RING_SIZE*2)
-+
-+
- #define MAX_LRO_DESCRIPTORS 8
-+#define MAX_CS        2
- struct pasemi_mac_txring {
-       struct pasemi_dmachan chan; /* Must be first */
-@@ -51,6 +58,15 @@ struct pasemi_mac_rxring {
-       struct pasemi_mac *mac; /* Needed in intr handler */
- };
-+struct pasemi_mac_csring {
-+      struct pasemi_dmachan chan;
-+      unsigned int    size;
-+      unsigned int    next_to_fill;
-+      int             events[2];
-+      int             last_event;
-+      int             fun;
-+};
-+
- struct pasemi_mac {
-       struct net_device *netdev;
-       struct pci_dev *pdev;
-@@ -60,10 +76,12 @@ struct pasemi_mac {
-       struct napi_struct napi;
-       int             bufsz; /* RX ring buffer size */
-+      int             last_cs;
-+      int             num_cs;
-+      u32             dma_if;
-       u8              type;
- #define MAC_TYPE_GMAC 1
- #define MAC_TYPE_XAUI 2
--      u32     dma_if;
-       u8              mac_addr[6];
-@@ -74,6 +92,7 @@ struct pasemi_mac {
-       struct pasemi_mac_txring *tx;
-       struct pasemi_mac_rxring *rx;
-+      struct pasemi_mac_csring *cs[MAX_CS];
-       char            tx_irq_name[10];                /* "eth%d tx" */
-       char            rx_irq_name[10];                /* "eth%d rx" */
-       int     link;
-@@ -90,6 +109,16 @@ struct pasemi_mac_buffer {
-       dma_addr_t      dma;
- };
-+#define TX_DESC(tx, num)      ((tx)->chan.ring_virt[(num) & (TX_RING_SIZE-1)])
-+#define TX_DESC_INFO(tx, num) ((tx)->ring_info[(num) & (TX_RING_SIZE-1)])
-+#define RX_DESC(rx, num)      ((rx)->chan.ring_virt[(num) & (RX_RING_SIZE-1)])
-+#define RX_DESC_INFO(rx, num) ((rx)->ring_info[(num) & (RX_RING_SIZE-1)])
-+#define RX_BUFF(rx, num)      ((rx)->buffers[(num) & (RX_RING_SIZE-1)])
-+#define CS_DESC(cs, num)      ((cs)->chan.ring_virt[(num) & (CS_RING_SIZE-1)])
-+
-+#define RING_USED(ring)       (((ring)->next_to_fill - (ring)->next_to_clean) \
-+                              & ((ring)->size - 1))
-+#define RING_AVAIL(ring)      ((ring->size) - RING_USED(ring))
- /* PCI register offsets and formats */
-@@ -101,6 +130,7 @@ enum {
-       PAS_MAC_CFG_ADR0 = 0x8c,
-       PAS_MAC_CFG_ADR1 = 0x90,
-       PAS_MAC_CFG_TXP = 0x98,
-+      PAS_MAC_CFG_RMON = 0x100,
-       PAS_MAC_IPC_CHNL = 0x208,
- };
-@@ -172,6 +202,8 @@ enum {
- #define PAS_MAC_CFG_TXP_TIFG(x)               (((x) << PAS_MAC_CFG_TXP_TIFG_S) & \
-                                        PAS_MAC_CFG_TXP_TIFG_M)
-+#define PAS_MAC_RMON(r)                       (0x100+(r)*4)
-+
- #define PAS_MAC_IPC_CHNL_DCHNO_M      0x003f0000
- #define PAS_MAC_IPC_CHNL_DCHNO_S      16
- #define PAS_MAC_IPC_CHNL_DCHNO(x)     (((x) << PAS_MAC_IPC_CHNL_DCHNO_S) & \
-@@ -181,4 +213,5 @@ enum {
- #define PAS_MAC_IPC_CHNL_BCH(x)               (((x) << PAS_MAC_IPC_CHNL_BCH_S) & \
-                                        PAS_MAC_IPC_CHNL_BCH_M)
-+
- #endif /* PASEMI_MAC_H */
---- /dev/null
-+++ b/drivers/net/pasemi_mac_ethtool.c
-@@ -0,0 +1,159 @@
-+/*
-+ * Copyright (C) 2006-2008 PA Semi, Inc
-+ *
-+ * Ethtool hooks for the PA Semi PWRficient onchip 1G/10G Ethernet MACs
-+ *
-+ * 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, write to the Free Software
-+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-+ */
-+
-+
-+#include <linux/netdevice.h>
-+#include <linux/ethtool.h>
-+#include <linux/pci.h>
-+#include <linux/inet_lro.h>
-+
-+#include <asm/pasemi_dma.h>
-+#include "pasemi_mac.h"
-+
-+static struct {
-+      const char str[ETH_GSTRING_LEN];
-+} ethtool_stats_keys[] = {
-+      { "rx-drops" },
-+      { "rx-bytes" },
-+      { "rx-packets" },
-+      { "rx-broadcast-packets" },
-+      { "rx-multicast-packets" },
-+      { "rx-crc-errors" },
-+      { "rx-undersize-errors" },
-+      { "rx-oversize-errors" },
-+      { "rx-short-fragment-errors" },
-+      { "rx-jabber-errors" },
-+      { "rx-64-byte-packets" },
-+      { "rx-65-127-byte-packets" },
-+      { "rx-128-255-byte-packets" },
-+      { "rx-256-511-byte-packets" },
-+      { "rx-512-1023-byte-packets" },
-+      { "rx-1024-1518-byte-packets" },
-+      { "rx-pause-frames" },
-+      { "tx-bytes" },
-+      { "tx-packets" },
-+      { "tx-broadcast-packets" },
-+      { "tx-multicast-packets" },
-+      { "tx-collisions" },
-+      { "tx-late-collisions" },
-+      { "tx-excessive-collisions" },
-+      { "tx-crc-errors" },
-+      { "tx-undersize-errors" },
-+      { "tx-oversize-errors" },
-+      { "tx-64-byte-packets" },
-+      { "tx-65-127-byte-packets" },
-+      { "tx-128-255-byte-packets" },
-+      { "tx-256-511-byte-packets" },
-+      { "tx-512-1023-byte-packets" },
-+      { "tx-1024-1518-byte-packets" },
-+};
-+
-+static int
-+pasemi_mac_ethtool_get_settings(struct net_device *netdev,
-+                             struct ethtool_cmd *cmd)
-+{
-+      struct pasemi_mac *mac = netdev_priv(netdev);
-+      struct phy_device *phydev = mac->phydev;
-+
-+      return phy_ethtool_gset(phydev, cmd);
-+}
-+
-+static void
-+pasemi_mac_ethtool_get_drvinfo(struct net_device *netdev,
-+                             struct ethtool_drvinfo *drvinfo)
-+{
-+      struct pasemi_mac *mac;
-+      mac = netdev_priv(netdev);
-+
-+      /* clear and fill out info */
-+      memset(drvinfo, 0, sizeof(struct ethtool_drvinfo));
-+      strncpy(drvinfo->driver, "pasemi_mac", 12);
-+      strcpy(drvinfo->version, "N/A");
-+      strcpy(drvinfo->fw_version, "N/A");
-+      strncpy(drvinfo->bus_info, pci_name(mac->pdev), 32);
-+}
-+
-+static u32
-+pasemi_mac_ethtool_get_msglevel(struct net_device *netdev)
-+{
-+      struct pasemi_mac *mac = netdev_priv(netdev);
-+      return mac->msg_enable;
-+}
-+
-+static void
-+pasemi_mac_ethtool_set_msglevel(struct net_device *netdev,
-+                              u32 level)
-+{
-+      struct pasemi_mac *mac = netdev_priv(netdev);
-+      mac->msg_enable = level;
-+}
-+
-+
-+static void
-+pasemi_mac_ethtool_get_ringparam(struct net_device *netdev,
-+                               struct ethtool_ringparam *ering)
-+{
-+      struct pasemi_mac *mac = netdev->priv;
-+
-+      ering->tx_max_pending = TX_RING_SIZE/2;
-+      ering->tx_pending = RING_USED(mac->tx)/2;
-+      ering->rx_max_pending = RX_RING_SIZE/4;
-+      ering->rx_pending = RING_USED(mac->rx)/4;
-+}
-+
-+static int pasemi_mac_get_sset_count(struct net_device *netdev, int sset)
-+{
-+      switch (sset) {
-+      case ETH_SS_STATS:
-+              return ARRAY_SIZE(ethtool_stats_keys);
-+      default:
-+              return -EOPNOTSUPP;
-+      }
-+}
-+
-+static void pasemi_mac_get_ethtool_stats(struct net_device *netdev,
-+              struct ethtool_stats *stats, u64 *data)
-+{
-+      struct pasemi_mac *mac = netdev->priv;
-+      int i;
-+
-+      data[0] = pasemi_read_dma_reg(PAS_DMA_RXINT_RCMDSTA(mac->dma_if))
-+                      >> PAS_DMA_RXINT_RCMDSTA_DROPS_S;
-+      for (i = 0; i < 32; i++)
-+              data[1+i] = pasemi_read_mac_reg(mac->dma_if, PAS_MAC_RMON(i));
-+}
-+
-+static void pasemi_mac_get_strings(struct net_device *netdev, u32 stringset,
-+                                 u8 *data)
-+{
-+      memcpy(data, ethtool_stats_keys, sizeof(ethtool_stats_keys));
-+}
-+
-+const struct ethtool_ops pasemi_mac_ethtool_ops = {
-+      .get_settings           = pasemi_mac_ethtool_get_settings,
-+      .get_drvinfo            = pasemi_mac_ethtool_get_drvinfo,
-+      .get_msglevel           = pasemi_mac_ethtool_get_msglevel,
-+      .set_msglevel           = pasemi_mac_ethtool_set_msglevel,
-+      .get_link               = ethtool_op_get_link,
-+      .get_ringparam          = pasemi_mac_ethtool_get_ringparam,
-+      .get_strings            = pasemi_mac_get_strings,
-+      .get_sset_count         = pasemi_mac_get_sset_count,
-+      .get_ethtool_stats      = pasemi_mac_get_ethtool_stats,
-+};
-+
---- a/drivers/net/ps3_gelic_net.c
-+++ b/drivers/net/ps3_gelic_net.c
-@@ -1266,6 +1266,85 @@ int gelic_net_set_rx_csum(struct net_dev
-       return 0;
- }
-+static void gelic_net_get_wol(struct net_device *netdev,
-+                            struct ethtool_wolinfo *wol)
-+{
-+      if (0 <= ps3_compare_firmware_version(2, 2, 0))
-+              wol->supported = WAKE_MAGIC;
-+      else
-+              wol->supported = 0;
-+
-+      wol->wolopts = ps3_sys_manager_get_wol() ? wol->supported : 0;
-+      memset(&wol->sopass, 0, sizeof(wol->sopass));
-+}
-+static int gelic_net_set_wol(struct net_device *netdev,
-+                           struct ethtool_wolinfo *wol)
-+{
-+      int status;
-+      struct gelic_card *card;
-+      u64 v1, v2;
-+
-+      if (ps3_compare_firmware_version(2, 2, 0) < 0 ||
-+          !capable(CAP_NET_ADMIN))
-+              return -EPERM;
-+
-+      if (wol->wolopts & ~WAKE_MAGIC)
-+              return -EINVAL;
-+
-+      card = netdev_card(netdev);
-+      if (wol->wolopts & WAKE_MAGIC) {
-+              status = lv1_net_control(bus_id(card), dev_id(card),
-+                                       GELIC_LV1_SET_WOL,
-+                                       GELIC_LV1_WOL_MAGIC_PACKET,
-+                                       0, GELIC_LV1_WOL_MP_ENABLE,
-+                                       &v1, &v2);
-+              if (status) {
-+                      pr_info("%s: enabling WOL failed %d\n", __func__,
-+                              status);
-+                      status = -EIO;
-+                      goto done;
-+              }
-+              status = lv1_net_control(bus_id(card), dev_id(card),
-+                                       GELIC_LV1_SET_WOL,
-+                                       GELIC_LV1_WOL_ADD_MATCH_ADDR,
-+                                       0, GELIC_LV1_WOL_MATCH_ALL,
-+                                       &v1, &v2);
-+              if (!status)
-+                      ps3_sys_manager_set_wol(1);
-+              else {
-+                      pr_info("%s: enabling WOL filter failed %d\n",
-+                              __func__, status);
-+                      status = -EIO;
-+              }
-+      } else {
-+              status = lv1_net_control(bus_id(card), dev_id(card),
-+                                       GELIC_LV1_SET_WOL,
-+                                       GELIC_LV1_WOL_MAGIC_PACKET,
-+                                       0, GELIC_LV1_WOL_MP_DISABLE,
-+                                       &v1, &v2);
-+              if (status) {
-+                      pr_info("%s: disabling WOL failed %d\n", __func__,
-+                              status);
-+                      status = -EIO;
-+                      goto done;
-+              }
-+              status = lv1_net_control(bus_id(card), dev_id(card),
-+                                       GELIC_LV1_SET_WOL,
-+                                       GELIC_LV1_WOL_DELETE_MATCH_ADDR,
-+                                       0, GELIC_LV1_WOL_MATCH_ALL,
-+                                       &v1, &v2);
-+              if (!status)
-+                      ps3_sys_manager_set_wol(0);
-+              else {
-+                      pr_info("%s: removing WOL filter failed %d\n",
-+                              __func__, status);
-+                      status = -EIO;
-+              }
-+      }
-+done:
-+      return status;
-+}
-+
- static struct ethtool_ops gelic_ether_ethtool_ops = {
-       .get_drvinfo    = gelic_net_get_drvinfo,
-       .get_settings   = gelic_ether_get_settings,
-@@ -1274,6 +1353,8 @@ static struct ethtool_ops gelic_ether_et
-       .set_tx_csum    = ethtool_op_set_tx_csum,
-       .get_rx_csum    = gelic_net_get_rx_csum,
-       .set_rx_csum    = gelic_net_set_rx_csum,
-+      .get_wol        = gelic_net_get_wol,
-+      .set_wol        = gelic_net_set_wol,
- };
- /**
---- a/drivers/net/ps3_gelic_net.h
-+++ b/drivers/net/ps3_gelic_net.h
-@@ -182,12 +182,32 @@ enum gelic_lv1_net_control_code {
-       GELIC_LV1_GET_ETH_PORT_STATUS   = 2,
-       GELIC_LV1_SET_NEGOTIATION_MODE  = 3,
-       GELIC_LV1_GET_VLAN_ID           = 4,
-+      GELIC_LV1_SET_WOL               = 5,
-       GELIC_LV1_GET_CHANNEL           = 6,
-       GELIC_LV1_POST_WLAN_CMD         = 9,
-       GELIC_LV1_GET_WLAN_CMD_RESULT   = 10,
-       GELIC_LV1_GET_WLAN_EVENT        = 11
- };
-+/* for GELIC_LV1_SET_WOL */
-+enum gelic_lv1_wol_command {
-+      GELIC_LV1_WOL_MAGIC_PACKET      = 1,
-+      GELIC_LV1_WOL_ADD_MATCH_ADDR    = 6,
-+      GELIC_LV1_WOL_DELETE_MATCH_ADDR = 7,
-+};
-+
-+/* for GELIC_LV1_WOL_MAGIC_PACKET */
-+enum gelic_lv1_wol_mp_arg {
-+      GELIC_LV1_WOL_MP_DISABLE        = 0,
-+      GELIC_LV1_WOL_MP_ENABLE         = 1,
-+};
-+
-+/* for GELIC_LV1_WOL_{ADD,DELETE}_MATCH_ADDR */
-+enum gelic_lv1_wol_match_arg {
-+      GELIC_LV1_WOL_MATCH_INDIVIDUAL  = 0,
-+      GELIC_LV1_WOL_MATCH_ALL         = 1,
-+};
-+
- /* status returened from GET_ETH_PORT_STATUS */
- enum gelic_lv1_ether_port_status {
-       GELIC_LV1_ETHER_LINK_UP         = 0x0000000000000001L,
---- a/drivers/net/ucc_geth.c
-+++ b/drivers/net/ucc_geth.c
-@@ -3853,7 +3853,13 @@ static int ucc_geth_probe(struct of_devi
-       ugeth_vdbg("%s: IN", __FUNCTION__);
--      prop = of_get_property(np, "device-id", NULL);
-+      prop = of_get_property(np, "cell-index", NULL);
-+      if (!prop) {
-+              prop = of_get_property(np, "device-id", NULL);
-+              if (!prop)
-+                      return -ENODEV;
-+      }
-+
-       ucc_num = *prop - 1;
-       if ((ucc_num < 0) || (ucc_num > 7))
-               return -ENODEV;
---- a/drivers/net/ucc_geth_mii.c
-+++ b/drivers/net/ucc_geth_mii.c
-@@ -203,9 +203,14 @@ static int uec_mdio_probe(struct of_devi
-               if ((res.start >= tempres.start) &&
-                   (res.end <= tempres.end)) {
-                       /* set this UCC to be the MII master */
--                      const u32 *id = of_get_property(tempnp, "device-id", NULL);
--                      if (id == NULL)
--                              goto bus_register_fail;
-+                      const u32 *id;
-+
-+                      id = of_get_property(tempnp, "cell-index", NULL);
-+                      if (!id) {
-+                              id = of_get_property(tempnp, "device-id", NULL);
-+                              if (!id)
-+                                      goto bus_register_fail;
-+                      }
-                       ucc_set_qe_mux_mii_mng(*id - 1);
---- a/drivers/of/Kconfig
-+++ b/drivers/of/Kconfig
-@@ -1,3 +1,15 @@
- config OF_DEVICE
-       def_bool y
-       depends on OF && (SPARC || PPC_OF)
-+
-+config OF_GPIO
-+      def_bool y
-+      depends on OF && PPC_OF && HAVE_GPIO_LIB
-+      help
-+        OpenFirmware GPIO accessors
-+
-+config OF_I2C
-+      def_bool y
-+      depends on OF && I2C
-+      help
-+        OpenFirmware I2C accessors
---- a/drivers/of/Makefile
-+++ b/drivers/of/Makefile
-@@ -1,2 +1,4 @@
- obj-y = base.o
- obj-$(CONFIG_OF_DEVICE) += device.o platform.o
-+obj-$(CONFIG_OF_GPIO)   += gpio.o
-+obj-$(CONFIG_OF_I2C)  += i2c.o
---- a/drivers/of/base.c
-+++ b/drivers/of/base.c
-@@ -117,6 +117,32 @@ int of_device_is_compatible(const struct
- EXPORT_SYMBOL(of_device_is_compatible);
- /**
-+ *  of_device_is_available - check if a device is available for use
-+ *
-+ *  @device: Node to check for availability
-+ *
-+ *  Returns 1 if the status property is absent or set to "okay" or "ok",
-+ *  0 otherwise
-+ */
-+int of_device_is_available(const struct device_node *device)
-+{
-+      const char *status;
-+      int statlen;
-+
-+      status = of_get_property(device, "status", &statlen);
-+      if (status == NULL)
-+              return 1;
-+
-+      if (statlen > 0) {
-+              if (!strcmp(status, "okay") || !strcmp(status, "ok"))
-+                      return 1;
-+      }
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL(of_device_is_available);
-+
-+/**
-  *    of_get_parent - Get a node's parent if any
-  *    @node:  Node to get parent
-  *
---- /dev/null
-+++ b/drivers/of/gpio.c
-@@ -0,0 +1,242 @@
-+/*
-+ * OF helpers for the GPIO API
-+ *
-+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
-+ *
-+ * Author: Anton Vorontsov <avorontsov@ru.mvista.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 <linux/kernel.h>
-+#include <linux/errno.h>
-+#include <linux/io.h>
-+#include <linux/of.h>
-+#include <linux/of_gpio.h>
-+#include <asm/prom.h>
-+
-+/**
-+ * of_get_gpio - Get a GPIO number from the device tree to use with GPIO API
-+ * @np:               device node to get GPIO from
-+ * @index:    index of the GPIO
-+ *
-+ * Returns GPIO number to use with Linux generic GPIO API, or one of the errno
-+ * value on the error condition.
-+ */
-+int of_get_gpio(struct device_node *np, int index)
-+{
-+      int ret = -EINVAL;
-+      struct device_node *gc;
-+      struct of_gpio_chip *of_gc = NULL;
-+      int size;
-+      const u32 *gpios;
-+      u32 nr_cells;
-+      int i;
-+      const void *gpio_spec;
-+      const u32 *gpio_cells;
-+      int gpio_index = 0;
-+
-+      gpios = of_get_property(np, "gpios", &size);
-+      if (!gpios) {
-+              ret = -ENOENT;
-+              goto err0;
-+      }
-+      nr_cells = size / sizeof(u32);
-+
-+      for (i = 0; i < nr_cells; gpio_index++) {
-+              const phandle *gpio_phandle;
-+
-+              gpio_phandle = gpios + i;
-+              gpio_spec = gpio_phandle + 1;
-+
-+              /* one cell hole in the gpios = <>; */
-+              if (!*gpio_phandle) {
-+                      if (gpio_index == index)
-+                              return -ENOENT;
-+                      i++;
-+                      continue;
-+              }
-+
-+              gc = of_find_node_by_phandle(*gpio_phandle);
-+              if (!gc) {
-+                      pr_debug("%s: could not find phandle for gpios\n",
-+                               np->full_name);
-+                      goto err0;
-+              }
-+
-+              of_gc = gc->data;
-+              if (!of_gc) {
-+                      pr_debug("%s: gpio controller %s isn't registered\n",
-+                               np->full_name, gc->full_name);
-+                      goto err1;
-+              }
-+
-+              gpio_cells = of_get_property(gc, "#gpio-cells", &size);
-+              if (!gpio_cells || size != sizeof(*gpio_cells) ||
-+                              *gpio_cells != of_gc->gpio_cells) {
-+                      pr_debug("%s: wrong #gpio-cells for %s\n",
-+                               np->full_name, gc->full_name);
-+                      goto err1;
-+              }
-+
-+              /* Next phandle is at phandle cells + #gpio-cells */
-+              i += sizeof(*gpio_phandle) / sizeof(u32) + *gpio_cells;
-+              if (i >= nr_cells + 1) {
-+                      pr_debug("%s: insufficient gpio-spec length\n",
-+                               np->full_name);
-+                      goto err1;
-+              }
-+
-+              if (gpio_index == index)
-+                      break;
-+
-+              of_gc = NULL;
-+              of_node_put(gc);
-+      }
-+
-+      if (!of_gc) {
-+              ret = -ENOENT;
-+              goto err0;
-+      }
-+
-+      ret = of_gc->xlate(of_gc, np, gpio_spec);
-+      if (ret < 0)
-+              goto err1;
-+
-+      ret += of_gc->gc.base;
-+err1:
-+      of_node_put(gc);
-+err0:
-+      pr_debug("%s exited with status %d\n", __func__, ret);
-+      return ret;
-+}
-+EXPORT_SYMBOL(of_get_gpio);
-+
-+/**
-+ * of_gpio_simple_xlate - translate gpio_spec to the GPIO number
-+ * @of_gc:    pointer to the of_gpio_chip structure
-+ * @np:               device node of the GPIO chip
-+ * @gpio_spec:        gpio specifier as found in the device tree
-+ *
-+ * This is simple translation function, suitable for the most 1:1 mapped
-+ * gpio chips. This function performs only one sanity check: whether gpio
-+ * is less than ngpios (that is specified in the gpio_chip).
-+ */
-+int of_gpio_simple_xlate(struct of_gpio_chip *of_gc, struct device_node *np,
-+                       const void *gpio_spec)
-+{
-+      const u32 *gpio = gpio_spec;
-+
-+      if (*gpio > of_gc->gc.ngpio)
-+              return -EINVAL;
-+
-+      return *gpio;
-+}
-+EXPORT_SYMBOL(of_gpio_simple_xlate);
-+
-+/* Should be sufficient for now, later we'll use dynamic bases. */
-+#if defined(CONFIG_PPC32) || defined(CONFIG_SPARC32)
-+#define GPIOS_PER_CHIP 32
-+#else
-+#define GPIOS_PER_CHIP 64
-+#endif
-+
-+static int of_get_gpiochip_base(struct device_node *np)
-+{
-+      struct device_node *gc = NULL;
-+      int gpiochip_base = 0;
-+
-+      while ((gc = of_find_all_nodes(gc))) {
-+              if (!of_get_property(gc, "gpio-controller", NULL))
-+                      continue;
-+
-+              if (gc != np) {
-+                      gpiochip_base += GPIOS_PER_CHIP;
-+                      continue;
-+              }
-+
-+              of_node_put(gc);
-+
-+              if (gpiochip_base >= ARCH_NR_GPIOS)
-+                      return -ENOSPC;
-+
-+              return gpiochip_base;
-+      }
-+
-+      return -ENOENT;
-+}
-+
-+/**
-+ * of_mm_gpiochip_add - Add memory mapped GPIO chip (bank)
-+ * @np:               device node of the GPIO chip
-+ * @mm_gc:    pointer to the of_mm_gpio_chip allocated structure
-+ *
-+ * To use this function you should allocate and fill mm_gc with:
-+ *
-+ * 1) In the gpio_chip structure:
-+ *    - all the callbacks
-+ *
-+ * 2) In the of_gpio_chip structure:
-+ *    - gpio_cells
-+ *    - xlate callback (optional)
-+ *
-+ * 3) In the of_mm_gpio_chip structure:
-+ *    - save_regs callback (optional)
-+ *
-+ * If succeeded, this function will map bank's memory and will
-+ * do all necessary work for you. Then you'll able to use .regs
-+ * to manage GPIOs from the callbacks.
-+ */
-+int of_mm_gpiochip_add(struct device_node *np,
-+                     struct of_mm_gpio_chip *mm_gc)
-+{
-+      int ret = -ENOMEM;
-+      struct of_gpio_chip *of_gc = &mm_gc->of_gc;
-+      struct gpio_chip *gc = &of_gc->gc;
-+
-+      gc->label = kstrdup(np->full_name, GFP_KERNEL);
-+      if (!gc->label)
-+              goto err0;
-+
-+      mm_gc->regs = of_iomap(np, 0);
-+      if (!mm_gc->regs)
-+              goto err1;
-+
-+      gc->base = of_get_gpiochip_base(np);
-+      if (gc->base < 0) {
-+              ret = gc->base;
-+              goto err1;
-+      }
-+
-+      if (!of_gc->xlate)
-+              of_gc->xlate = of_gpio_simple_xlate;
-+
-+      if (mm_gc->save_regs)
-+              mm_gc->save_regs(mm_gc);
-+
-+      np->data = of_gc;
-+
-+      ret = gpiochip_add(gc);
-+      if (ret)
-+              goto err2;
-+
-+      /* We don't want to lose the node and its ->data */
-+      of_node_get(np);
-+
-+      pr_debug("%s: registered as generic GPIO chip, base is %d\n",
-+               np->full_name, gc->base);
-+      return 0;
-+err2:
-+      np->data = NULL;
-+      iounmap(mm_gc->regs);
-+err1:
-+      kfree(gc->label);
-+err0:
-+      pr_err("%s: GPIO chip registration failed with status %d\n",
-+             np->full_name, ret);
-+      return ret;
-+}
-+EXPORT_SYMBOL(of_mm_gpiochip_add);
---- /dev/null
-+++ b/drivers/of/i2c.c
-@@ -0,0 +1,115 @@
-+/*
-+ * OF helpers for the I2C API
-+ *
-+ * Copyright (c) 2008 Jochen Friedrich <jochen@scram.de>
-+ *
-+ * Based on a previous patch from Jon Smirl <jonsmirl@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.
-+ */
-+
-+#include <linux/i2c.h>
-+#include <linux/of.h>
-+
-+struct i2c_driver_device {
-+      char    *of_device;
-+      char    *i2c_type;
-+};
-+
-+static struct i2c_driver_device i2c_devices[] = {
-+      { "dallas,ds1374", "rtc-ds1374" },
-+};
-+
-+static int of_find_i2c_driver(struct device_node *node,
-+                            struct i2c_board_info *info)
-+{
-+      int i, cplen;
-+      const char *compatible;
-+      const char *p;
-+
-+      /* 1. search for exception list entry */
-+      for (i = 0; i < ARRAY_SIZE(i2c_devices); i++) {
-+              if (!of_device_is_compatible(node, i2c_devices[i].of_device))
-+                      continue;
-+              if (strlcpy(info->type, i2c_devices[i].i2c_type,
-+                          I2C_NAME_SIZE) >= I2C_NAME_SIZE)
-+                      return -ENOMEM;
-+
-+              return 0;
-+      }
-+
-+      compatible = of_get_property(node, "compatible", &cplen);
-+      if (!compatible)
-+              return -ENODEV;
-+
-+      /* 2. search for linux,<i2c-type> entry */
-+      p = compatible;
-+      while (cplen > 0) {
-+              if (!strncmp(p, "linux,", 6)) {
-+                      p += 6;
-+                      if (strlcpy(info->type, p,
-+                                  I2C_NAME_SIZE) >= I2C_NAME_SIZE)
-+                              return -ENOMEM;
-+                      return 0;
-+              }
-+
-+              i = strlen(p) + 1;
-+              p += i;
-+              cplen -= i;
-+      }
-+
-+      /* 3. take fist compatible entry and strip manufacturer */
-+      p = strchr(compatible, ',');
-+      if (!p)
-+              return -ENODEV;
-+      p++;
-+      if (strlcpy(info->type, p, I2C_NAME_SIZE) >= I2C_NAME_SIZE)
-+              return -ENOMEM;
-+      return 0;
-+}
-+
-+void of_register_i2c_devices(struct i2c_adapter *adap,
-+                           struct device_node *adap_node)
-+{
-+      void *result;
-+      struct device_node *node;
-+
-+      for_each_child_of_node(adap_node, node) {
-+              struct i2c_board_info info = {};
-+              const u32 *addr;
-+              int len;
-+
-+              addr = of_get_property(node, "reg", &len);
-+              if (!addr || len < sizeof(int) || *addr > (1 << 10) - 1) {
-+                      printk(KERN_ERR
-+                             "of-i2c: invalid i2c device entry\n");
-+                      continue;
-+              }
-+
-+              info.irq = irq_of_parse_and_map(node, 0);
-+              if (info.irq == NO_IRQ)
-+                      info.irq = -1;
-+
-+              if (of_find_i2c_driver(node, &info) < 0) {
-+                      irq_dispose_mapping(info.irq);
-+                      continue;
-+              }
-+
-+              info.addr = *addr;
-+
-+              request_module(info.type);
-+
-+              result = i2c_new_device(adap, &info);
-+              if (result == NULL) {
-+                      printk(KERN_ERR
-+                             "of-i2c: Failed to load driver for %s\n",
-+                             info.type);
-+                      irq_dispose_mapping(info.irq);
-+                      continue;
-+              }
-+      }
-+}
-+EXPORT_SYMBOL(of_register_i2c_devices);
---- a/drivers/ps3/ps3-sys-manager.c
-+++ b/drivers/ps3/ps3-sys-manager.c
-@@ -24,6 +24,7 @@
- #include <linux/reboot.h>
- #include <asm/firmware.h>
-+#include <asm/lv1call.h>
- #include <asm/ps3.h>
- #include "vuart.h"
-@@ -187,6 +188,7 @@ enum ps3_sys_manager_next_op {
-  * controller, and bluetooth controller.
-  * @PS3_SM_WAKE_RTC:
-  * @PS3_SM_WAKE_RTC_ERROR:
-+ * @PS3_SM_WAKE_W_O_L: Ether or wireless LAN.
-  * @PS3_SM_WAKE_P_O_R: Power on reset.
-  *
-  * Additional wakeup sources when specifying PS3_SM_NEXT_OP_SYS_SHUTDOWN.
-@@ -200,10 +202,19 @@ enum ps3_sys_manager_wake_source {
-       PS3_SM_WAKE_DEFAULT   = 0,
-       PS3_SM_WAKE_RTC       = 0x00000040,
-       PS3_SM_WAKE_RTC_ERROR = 0x00000080,
-+      PS3_SM_WAKE_W_O_L     = 0x00000400,
-       PS3_SM_WAKE_P_O_R     = 0x80000000,
- };
- /**
-+ * user_wake_sources - User specified wakeup sources.
-+ *
-+ * Logical OR of enum ps3_sys_manager_wake_source types.
-+ */
-+
-+static u32 user_wake_sources = PS3_SM_WAKE_DEFAULT;
-+
-+/**
-  * enum ps3_sys_manager_cmd - Command from system manager to guest.
-  *
-  * The guest completes the actions needed, then acks or naks the command via
-@@ -581,6 +592,23 @@ fail_id:
-       return -EIO;
- }
-+static void ps3_sys_manager_fin(struct ps3_system_bus_device *dev)
-+{
-+      ps3_sys_manager_send_request_shutdown(dev);
-+
-+      pr_emerg("System Halted, OK to turn off power\n");
-+
-+      while (ps3_sys_manager_handle_msg(dev)) {
-+              /* pause until next DEC interrupt */
-+              lv1_pause(0);
-+      }
-+
-+      while (1) {
-+              /* pause, ignoring DEC interrupt */
-+              lv1_pause(1);
-+      }
-+}
-+
- /**
-  * ps3_sys_manager_final_power_off - The final platform machine_power_off routine.
-  *
-@@ -601,13 +629,9 @@ static void ps3_sys_manager_final_power_
-       ps3_vuart_cancel_async(dev);
-       ps3_sys_manager_send_next_op(dev, PS3_SM_NEXT_OP_SYS_SHUTDOWN,
--              PS3_SM_WAKE_DEFAULT);
--      ps3_sys_manager_send_request_shutdown(dev);
--
--      pr_emerg("System Halted, OK to turn off power\n");
-+              user_wake_sources);
--      while (1)
--              ps3_sys_manager_handle_msg(dev);
-+      ps3_sys_manager_fin(dev);
- }
- /**
-@@ -638,14 +662,42 @@ static void ps3_sys_manager_final_restar
-       ps3_sys_manager_send_attr(dev, 0);
-       ps3_sys_manager_send_next_op(dev, PS3_SM_NEXT_OP_SYS_REBOOT,
--              PS3_SM_WAKE_DEFAULT);
--      ps3_sys_manager_send_request_shutdown(dev);
-+              user_wake_sources);
--      pr_emerg("System Halted, OK to turn off power\n");
-+      ps3_sys_manager_fin(dev);
-+}
-+
-+/**
-+ * ps3_sys_manager_get_wol - Get wake-on-lan setting.
-+ */
-+
-+int ps3_sys_manager_get_wol(void)
-+{
-+      pr_debug("%s:%d\n", __func__, __LINE__);
-+
-+      return (user_wake_sources & PS3_SM_WAKE_W_O_L) != 0;
-+}
-+EXPORT_SYMBOL_GPL(ps3_sys_manager_get_wol);
-+
-+/**
-+ * ps3_sys_manager_set_wol - Set wake-on-lan setting.
-+ */
-+
-+void ps3_sys_manager_set_wol(int state)
-+{
-+      static DEFINE_MUTEX(mutex);
-+
-+      mutex_lock(&mutex);
-+
-+      pr_debug("%s:%d: %d\n", __func__, __LINE__, state);
--      while (1)
--              ps3_sys_manager_handle_msg(dev);
-+      if (state)
-+              user_wake_sources |= PS3_SM_WAKE_W_O_L;
-+      else
-+              user_wake_sources &= ~PS3_SM_WAKE_W_O_L;
-+      mutex_unlock(&mutex);
- }
-+EXPORT_SYMBOL_GPL(ps3_sys_manager_set_wol);
- /**
-  * ps3_sys_manager_work - Asynchronous read handler.
---- a/drivers/ps3/sys-manager-core.c
-+++ b/drivers/ps3/sys-manager-core.c
-@@ -19,6 +19,7 @@
-  */
- #include <linux/kernel.h>
-+#include <asm/lv1call.h>
- #include <asm/ps3.h>
- /**
-@@ -50,10 +51,7 @@ void ps3_sys_manager_power_off(void)
-       if (ps3_sys_manager_ops.power_off)
-               ps3_sys_manager_ops.power_off(ps3_sys_manager_ops.dev);
--      printk(KERN_EMERG "System Halted, OK to turn off power\n");
--      local_irq_disable();
--      while (1)
--              (void)0;
-+      ps3_sys_manager_halt();
- }
- void ps3_sys_manager_restart(void)
-@@ -61,8 +59,14 @@ void ps3_sys_manager_restart(void)
-       if (ps3_sys_manager_ops.restart)
-               ps3_sys_manager_ops.restart(ps3_sys_manager_ops.dev);
--      printk(KERN_EMERG "System Halted, OK to turn off power\n");
-+      ps3_sys_manager_halt();
-+}
-+
-+void ps3_sys_manager_halt(void)
-+{
-+      pr_emerg("System Halted, OK to turn off power\n");
-       local_irq_disable();
-       while (1)
--              (void)0;
-+              lv1_pause(1);
- }
-+
---- a/drivers/serial/cpm_uart/cpm_uart.h
-+++ b/drivers/serial/cpm_uart/cpm_uart.h
-@@ -92,6 +92,9 @@ extern struct uart_cpm_port cpm_uart_por
- /* these are located in their respective files */
- void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd);
-+void __iomem *cpm_uart_map_pram(struct uart_cpm_port *port,
-+                              struct device_node *np);
-+void cpm_uart_unmap_pram(struct uart_cpm_port *port, void __iomem *pram);
- int cpm_uart_init_portdesc(void);
- int cpm_uart_allocbuf(struct uart_cpm_port *pinfo, unsigned int is_con);
- void cpm_uart_freebuf(struct uart_cpm_port *pinfo);
---- a/drivers/serial/cpm_uart/cpm_uart_core.c
-+++ b/drivers/serial/cpm_uart/cpm_uart_core.c
-@@ -966,24 +966,23 @@ static int cpm_uart_init_port(struct dev
-       if (!mem)
-               return -ENOMEM;
--      pram = of_iomap(np, 1);
--      if (!pram) {
--              ret = -ENOMEM;
--              goto out_mem;
--      }
--
-       if (of_device_is_compatible(np, "fsl,cpm1-scc-uart") ||
-           of_device_is_compatible(np, "fsl,cpm2-scc-uart")) {
-               pinfo->sccp = mem;
--              pinfo->sccup = pram;
-+              pinfo->sccup = pram = cpm_uart_map_pram(pinfo, np);
-       } else if (of_device_is_compatible(np, "fsl,cpm1-smc-uart") ||
-                  of_device_is_compatible(np, "fsl,cpm2-smc-uart")) {
-               pinfo->flags |= FLAG_SMC;
-               pinfo->smcp = mem;
--              pinfo->smcup = pram;
-+              pinfo->smcup = pram = cpm_uart_map_pram(pinfo, np);
-       } else {
-               ret = -ENODEV;
--              goto out_pram;
-+              goto out_mem;
-+      }
-+
-+      if (!pram) {
-+              ret = -ENOMEM;
-+              goto out_mem;
-       }
-       pinfo->tx_nrfifos = TX_NUM_FIFO;
-@@ -1007,7 +1006,7 @@ static int cpm_uart_init_port(struct dev
-       return cpm_uart_request_port(&pinfo->port);
- out_pram:
--      iounmap(pram);
-+      cpm_uart_unmap_pram(pinfo, pram);
- out_mem:
-       iounmap(mem);
-       return ret;
---- a/drivers/serial/cpm_uart/cpm_uart_cpm1.c
-+++ b/drivers/serial/cpm_uart/cpm_uart_cpm1.c
-@@ -45,6 +45,8 @@
- #include <linux/serial_core.h>
- #include <linux/kernel.h>
-+#include <linux/of.h>
-+
- #include "cpm_uart.h"
- /**************************************************************/
-@@ -54,6 +56,18 @@ void cpm_line_cr_cmd(struct uart_cpm_por
- {
-       cpm_command(port->command, cmd);
- }
-+
-+void __iomem *cpm_uart_map_pram(struct uart_cpm_port *port,
-+                              struct device_node *np)
-+{
-+      return of_iomap(np, 1);
-+}
-+
-+void cpm_uart_unmap_pram(struct uart_cpm_port *port, void __iomem *pram)
-+{
-+      iounmap(pram);
-+}
-+
- #else
- void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
- {
---- a/drivers/serial/cpm_uart/cpm_uart_cpm2.c
-+++ b/drivers/serial/cpm_uart/cpm_uart_cpm2.c
-@@ -41,6 +41,9 @@
- #include <asm/io.h>
- #include <asm/irq.h>
- #include <asm/fs_pd.h>
-+#ifdef CONFIG_PPC_CPM_NEW_BINDING
-+#include <asm/prom.h>
-+#endif
- #include <linux/serial_core.h>
- #include <linux/kernel.h>
-@@ -54,6 +57,55 @@ void cpm_line_cr_cmd(struct uart_cpm_por
- {
-       cpm_command(port->command, cmd);
- }
-+
-+void __iomem *cpm_uart_map_pram(struct uart_cpm_port *port,
-+                              struct device_node *np)
-+{
-+      void __iomem *pram;
-+      unsigned long offset;
-+      struct resource res;
-+      unsigned long len;
-+
-+      /* Don't remap parameter RAM if it has already been initialized
-+       * during console setup.
-+       */
-+      if (IS_SMC(port) && port->smcup)
-+              return port->smcup;
-+      else if (!IS_SMC(port) && port->sccup)
-+              return port->sccup;
-+
-+      if (of_address_to_resource(np, 1, &res))
-+              return NULL;
-+
-+      len = 1 + res.end - res.start;
-+      pram = ioremap(res.start, len);
-+      if (!pram)
-+              return NULL;
-+
-+      if (!IS_SMC(port))
-+              return pram;
-+
-+      if (len != 2) {
-+              printk(KERN_WARNING "cpm_uart[%d]: device tree references "
-+                      "SMC pram, using boot loader/wrapper pram mapping. "
-+                      "Please fix your device tree to reference the pram "
-+                      "base register instead.\n",
-+                      port->port.line);
-+              return pram;
-+      }
-+
-+      offset = cpm_dpalloc(PROFF_SMC_SIZE, 64);
-+      out_be16(pram, offset);
-+      iounmap(pram);
-+      return cpm_muram_addr(offset);
-+}
-+
-+void cpm_uart_unmap_pram(struct uart_cpm_port *port, void __iomem *pram)
-+{
-+      if (!IS_SMC(port))
-+              iounmap(pram);
-+}
-+
- #else
- void cpm_line_cr_cmd(struct uart_cpm_port *port, int cmd)
- {
---- a/drivers/serial/of_serial.c
-+++ b/drivers/serial/of_serial.c
-@@ -56,7 +56,9 @@ static int __devinit of_platform_serial_
-       port->flags = UPF_SHARE_IRQ | UPF_BOOT_AUTOCONF | UPF_IOREMAP
-               | UPF_FIXED_PORT;
-       port->dev = &ofdev->dev;
--      port->custom_divisor = *clk / (16 * (*spd));
-+      /* If current-speed was set, then try not to change it. */
-+      if (spd)
-+              port->custom_divisor = *clk / (16 * (*spd));
-       return 0;
- }
---- a/drivers/serial/ucc_uart.c
-+++ b/drivers/serial/ucc_uart.c
-@@ -1270,10 +1270,18 @@ static int ucc_uart_probe(struct of_devi
-       /* Get the UCC number (device ID) */
-       /* UCCs are numbered 1-7 */
--      iprop = of_get_property(np, "device-id", NULL);
--      if (!iprop || (*iprop < 1) || (*iprop > UCC_MAX_NUM)) {
--              dev_err(&ofdev->dev,
--                      "missing or invalid UCC specified in device tree\n");
-+      iprop = of_get_property(np, "cell-index", NULL);
-+      if (!iprop) {
-+              iprop = of_get_property(np, "device-id", NULL);
-+              if (!iprop) {
-+                      dev_err(&ofdev->dev, "UCC is unspecified in "
-+                              "device tree\n");
-+                      return -EINVAL;
-+              }
-+      }
-+
-+      if ((*iprop < 1) || (*iprop > UCC_MAX_NUM)) {
-+              dev_err(&ofdev->dev, "no support for UCC%u\n", *iprop);
-               kfree(qe_port);
-               return -ENODEV;
-       }
---- a/include/asm-powerpc/Kbuild
-+++ b/include/asm-powerpc/Kbuild
-@@ -1,5 +1,6 @@
- include include/asm-generic/Kbuild.asm
-+header-y += a.out.h
- header-y += auxvec.h
- header-y += ioctls.h
- header-y += mman.h
-@@ -23,7 +24,6 @@ header-y += sigcontext.h
- header-y += statfs.h
- header-y += ps3fb.h
--unifdef-y += a.out.h
- unifdef-y += asm-compat.h
- unifdef-y += bootx.h
- unifdef-y += byteorder.h
---- a/include/asm-powerpc/abs_addr.h
-+++ b/include/asm-powerpc/abs_addr.h
-@@ -12,10 +12,11 @@
-  * 2 of the License, or (at your option) any later version.
-  */
-+#include <linux/lmb.h>
-+
- #include <asm/types.h>
- #include <asm/page.h>
- #include <asm/prom.h>
--#include <asm/lmb.h>
- #include <asm/firmware.h>
- struct mschunks_map {
---- a/include/asm-powerpc/bitops.h
-+++ b/include/asm-powerpc/bitops.h
-@@ -312,24 +312,26 @@ static __inline__ int fls(unsigned int x
-       asm ("cntlzw %0,%1" : "=r" (lz) : "r" (x));
-       return 32 - lz;
- }
-+
-+/*
-+ * 64-bit can do this using one cntlzd (count leading zeroes doubleword)
-+ * instruction; for 32-bit we use the generic version, which does two
-+ * 32-bit fls calls.
-+ */
-+#ifdef __powerpc64__
-+static __inline__ int fls64(__u64 x)
-+{
-+      int lz;
-+
-+      asm ("cntlzd %0,%1" : "=r" (lz) : "r" (x));
-+      return 64 - lz;
-+}
-+#else
- #include <asm-generic/bitops/fls64.h>
-+#endif /* __powerpc64__ */
- #include <asm-generic/bitops/hweight.h>
--
--#define find_first_zero_bit(addr, size) find_next_zero_bit((addr), (size), 0)
--unsigned long find_next_zero_bit(const unsigned long *addr,
--                               unsigned long size, unsigned long offset);
--/**
-- * find_first_bit - find the first set bit in a memory region
-- * @addr: The address to start the search at
-- * @size: The maximum size to search
-- *
-- * Returns the bit-number of the first set bit, not the number of the byte
-- * containing a bit.
-- */
--#define find_first_bit(addr, size) find_next_bit((addr), (size), 0)
--unsigned long find_next_bit(const unsigned long *addr,
--                          unsigned long size, unsigned long offset);
-+#include <asm-generic/bitops/find.h>
- /* Little-endian versions */
---- a/include/asm-powerpc/cpm.h
-+++ b/include/asm-powerpc/cpm.h
-@@ -4,6 +4,20 @@
- #include <linux/compiler.h>
- #include <linux/types.h>
-+/* Opcodes common to CPM1 and CPM2
-+*/
-+#define CPM_CR_INIT_TRX               ((ushort)0x0000)
-+#define CPM_CR_INIT_RX                ((ushort)0x0001)
-+#define CPM_CR_INIT_TX                ((ushort)0x0002)
-+#define CPM_CR_HUNT_MODE      ((ushort)0x0003)
-+#define CPM_CR_STOP_TX                ((ushort)0x0004)
-+#define CPM_CR_GRA_STOP_TX    ((ushort)0x0005)
-+#define CPM_CR_RESTART_TX     ((ushort)0x0006)
-+#define CPM_CR_CLOSE_RX_BD    ((ushort)0x0007)
-+#define CPM_CR_SET_GADDR      ((ushort)0x0008)
-+#define CPM_CR_SET_TIMER      ((ushort)0x0008)
-+#define CPM_CR_STOP_IDMA      ((ushort)0x000b)
-+
- /* Buffer descriptors used by many of the CPM protocols. */
- typedef struct cpm_buf_desc {
-       ushort  cbd_sc;         /* Status and Control */
---- a/include/asm-powerpc/cpm1.h
-+++ b/include/asm-powerpc/cpm1.h
-@@ -28,19 +28,6 @@
- #define CPM_CR_CHAN   ((ushort)0x00f0)
- #define CPM_CR_FLG    ((ushort)0x0001)
--/* Some commands (there are more...later)
--*/
--#define CPM_CR_INIT_TRX               ((ushort)0x0000)
--#define CPM_CR_INIT_RX                ((ushort)0x0001)
--#define CPM_CR_INIT_TX                ((ushort)0x0002)
--#define CPM_CR_HUNT_MODE      ((ushort)0x0003)
--#define CPM_CR_STOP_TX                ((ushort)0x0004)
--#define CPM_CR_GRA_STOP_TX    ((ushort)0x0005)
--#define CPM_CR_RESTART_TX     ((ushort)0x0006)
--#define CPM_CR_CLOSE_RX_BD    ((ushort)0x0007)
--#define CPM_CR_SET_GADDR      ((ushort)0x0008)
--#define CPM_CR_SET_TIMER      CPM_CR_SET_GADDR
--
- /* Channel numbers.
- */
- #define CPM_CR_CH_SCC1                ((ushort)0x0000)
---- a/include/asm-powerpc/cpm2.h
-+++ b/include/asm-powerpc/cpm2.h
-@@ -71,18 +71,9 @@
- #define CPM_CR_FCC_PAGE(x)    (x + 0x04)
--/* Some opcodes (there are more...later)
-+/* CPM2-specific opcodes (see cpm.h for common opcodes)
- */
--#define CPM_CR_INIT_TRX               ((ushort)0x0000)
--#define CPM_CR_INIT_RX                ((ushort)0x0001)
--#define CPM_CR_INIT_TX                ((ushort)0x0002)
--#define CPM_CR_HUNT_MODE      ((ushort)0x0003)
--#define CPM_CR_STOP_TX                ((ushort)0x0004)
--#define CPM_CR_GRA_STOP_TX    ((ushort)0x0005)
--#define CPM_CR_RESTART_TX     ((ushort)0x0006)
--#define CPM_CR_SET_GADDR      ((ushort)0x0008)
- #define CPM_CR_START_IDMA     ((ushort)0x0009)
--#define CPM_CR_STOP_IDMA      ((ushort)0x000b)
- #define mk_cr_cmd(PG, SBC, MCN, OP) \
-       ((PG << 26) | (SBC << 21) | (MCN << 6) | OP)
---- a/include/asm-powerpc/cputhreads.h
-+++ b/include/asm-powerpc/cputhreads.h
-@@ -35,7 +35,7 @@ static inline cpumask_t cpu_thread_mask_
-       res = CPU_MASK_NONE;
-       for (i = 0; i < NR_CPUS; i += threads_per_core) {
--              cpus_shift_right(tmp, threads_core_mask, i);
-+              cpus_shift_left(tmp, threads_core_mask, i);
-               if (cpus_intersects(threads, tmp))
-                       cpu_set(i, res);
-       }
---- a/include/asm-powerpc/dcr-native.h
-+++ b/include/asm-powerpc/dcr-native.h
-@@ -82,6 +82,19 @@ static inline void __mtdcri(int base_add
-       spin_unlock_irqrestore(&dcr_ind_lock, flags);
- }
-+static inline void __dcri_clrset(int base_addr, int base_data, int reg,
-+                               unsigned clr, unsigned set)
-+{
-+      unsigned long flags;
-+      unsigned int val;
-+
-+      spin_lock_irqsave(&dcr_ind_lock, flags);
-+      __mtdcr(base_addr, reg);
-+      val = (__mfdcr(base_data) & ~clr) | set;
-+      __mtdcr(base_data, val);
-+      spin_unlock_irqrestore(&dcr_ind_lock, flags);
-+}
-+
- #define mfdcri(base, reg)     __mfdcri(DCRN_ ## base ## _CONFIG_ADDR, \
-                                        DCRN_ ## base ## _CONFIG_DATA, \
-                                        reg)
-@@ -90,6 +103,10 @@ static inline void __mtdcri(int base_add
-                                        DCRN_ ## base ## _CONFIG_DATA, \
-                                        reg, data)
-+#define dcri_clrset(base, reg, clr, set)      __dcri_clrset(DCRN_ ## base ## _CONFIG_ADDR,    \
-+                                                            DCRN_ ## base ## _CONFIG_DATA,    \
-+                                                            reg, clr, set)
-+
- #endif /* __ASSEMBLY__ */
- #endif /* __KERNEL__ */
- #endif /* _ASM_POWERPC_DCR_NATIVE_H */
---- a/include/asm-powerpc/dcr-regs.h
-+++ b/include/asm-powerpc/dcr-regs.h
-@@ -68,4 +68,82 @@
- #define SDR0_UART3            0x0123
- #define SDR0_CUST0            0x4000
-+/*
-+ * All those DCR register addresses are offsets from the base address
-+ * for the SRAM0 controller (e.g. 0x20 on 440GX). The base address is
-+ * excluded here and configured in the device tree.
-+ */
-+#define DCRN_SRAM0_SB0CR      0x00
-+#define DCRN_SRAM0_SB1CR      0x01
-+#define DCRN_SRAM0_SB2CR      0x02
-+#define DCRN_SRAM0_SB3CR      0x03
-+#define  SRAM_SBCR_BU_MASK    0x00000180
-+#define  SRAM_SBCR_BS_64KB    0x00000800
-+#define  SRAM_SBCR_BU_RO      0x00000080
-+#define  SRAM_SBCR_BU_RW      0x00000180
-+#define DCRN_SRAM0_BEAR               0x04
-+#define DCRN_SRAM0_BESR0      0x05
-+#define DCRN_SRAM0_BESR1      0x06
-+#define DCRN_SRAM0_PMEG               0x07
-+#define DCRN_SRAM0_CID                0x08
-+#define DCRN_SRAM0_REVID      0x09
-+#define DCRN_SRAM0_DPC                0x0a
-+#define  SRAM_DPC_ENABLE      0x80000000
-+
-+/*
-+ * All those DCR register addresses are offsets from the base address
-+ * for the SRAM0 controller (e.g. 0x30 on 440GX). The base address is
-+ * excluded here and configured in the device tree.
-+ */
-+#define DCRN_L2C0_CFG         0x00
-+#define  L2C_CFG_L2M          0x80000000
-+#define  L2C_CFG_ICU          0x40000000
-+#define  L2C_CFG_DCU          0x20000000
-+#define  L2C_CFG_DCW_MASK     0x1e000000
-+#define  L2C_CFG_TPC          0x01000000
-+#define  L2C_CFG_CPC          0x00800000
-+#define  L2C_CFG_FRAN         0x00200000
-+#define  L2C_CFG_SS_MASK      0x00180000
-+#define  L2C_CFG_SS_256               0x00000000
-+#define  L2C_CFG_CPIM         0x00040000
-+#define  L2C_CFG_TPIM         0x00020000
-+#define  L2C_CFG_LIM          0x00010000
-+#define  L2C_CFG_PMUX_MASK    0x00007000
-+#define  L2C_CFG_PMUX_SNP     0x00000000
-+#define  L2C_CFG_PMUX_IF      0x00001000
-+#define  L2C_CFG_PMUX_DF      0x00002000
-+#define  L2C_CFG_PMUX_DS      0x00003000
-+#define  L2C_CFG_PMIM         0x00000800
-+#define  L2C_CFG_TPEI         0x00000400
-+#define  L2C_CFG_CPEI         0x00000200
-+#define  L2C_CFG_NAM          0x00000100
-+#define  L2C_CFG_SMCM         0x00000080
-+#define  L2C_CFG_NBRM         0x00000040
-+#define  L2C_CFG_RDBW         0x00000008      /* only 460EX/GT */
-+#define DCRN_L2C0_CMD         0x01
-+#define  L2C_CMD_CLR          0x80000000
-+#define  L2C_CMD_DIAG         0x40000000
-+#define  L2C_CMD_INV          0x20000000
-+#define  L2C_CMD_CCP          0x10000000
-+#define  L2C_CMD_CTE          0x08000000
-+#define  L2C_CMD_STRC         0x04000000
-+#define  L2C_CMD_STPC         0x02000000
-+#define  L2C_CMD_RPMC         0x01000000
-+#define  L2C_CMD_HCC          0x00800000
-+#define DCRN_L2C0_ADDR                0x02
-+#define DCRN_L2C0_DATA                0x03
-+#define DCRN_L2C0_SR          0x04
-+#define  L2C_SR_CC            0x80000000
-+#define  L2C_SR_CPE           0x40000000
-+#define  L2C_SR_TPE           0x20000000
-+#define  L2C_SR_LRU           0x10000000
-+#define  L2C_SR_PCS           0x08000000
-+#define DCRN_L2C0_REVID               0x05
-+#define DCRN_L2C0_SNP0                0x06
-+#define DCRN_L2C0_SNP1                0x07
-+#define  L2C_SNP_BA_MASK      0xffff0000
-+#define  L2C_SNP_SSR_MASK     0x0000f000
-+#define  L2C_SNP_SSR_32G      0x0000f000
-+#define  L2C_SNP_ESR          0x00000800
-+
- #endif /* __DCR_REGS_H__ */
---- a/include/asm-powerpc/exception.h
-+++ b/include/asm-powerpc/exception.h
-@@ -228,18 +228,18 @@ label##_pSeries:                                                 \
- BEGIN_FW_FTR_SECTION;                         \
-       stb     r11,PACAHARDIRQEN(r13);         \
- END_FW_FTR_SECTION_IFCLR(FW_FEATURE_ISERIES); \
-+      TRACE_DISABLE_INTS;                     \
- BEGIN_FW_FTR_SECTION;                         \
-       mfmsr   r10;                            \
-       ori     r10,r10,MSR_EE;                 \
-       mtmsrd  r10,1;                          \
- END_FW_FTR_SECTION_IFSET(FW_FEATURE_ISERIES)
--
- #else
- #define DISABLE_INTS                          \
-       li      r11,0;                          \
-       stb     r11,PACASOFTIRQEN(r13);         \
--      stb     r11,PACAHARDIRQEN(r13)
--
-+      stb     r11,PACAHARDIRQEN(r13);         \
-+      TRACE_DISABLE_INTS
- #endif /* CONFIG_PPC_ISERIES */
- #define ENABLE_INTS                           \
---- /dev/null
-+++ b/include/asm-powerpc/fsl_lbc.h
-@@ -0,0 +1,311 @@
-+/* Freescale Local Bus Controller
-+ *
-+ * Copyright (c) 2006-2007 Freescale Semiconductor
-+ *
-+ * Authors: Nick Spence <nick.spence@freescale.com>,
-+ *          Scott Wood <scottwood@freescale.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
-+ */
-+
-+#ifndef __ASM_FSL_LBC_H
-+#define __ASM_FSL_LBC_H
-+
-+#include <linux/types.h>
-+#include <linux/spinlock.h>
-+#include <asm/io.h>
-+
-+struct fsl_lbc_bank {
-+      __be32 br;             /**< Base Register  */
-+#define BR_BA           0xFFFF8000
-+#define BR_BA_SHIFT             15
-+#define BR_PS           0x00001800
-+#define BR_PS_SHIFT             11
-+#define BR_PS_8         0x00000800  /* Port Size 8 bit */
-+#define BR_PS_16        0x00001000  /* Port Size 16 bit */
-+#define BR_PS_32        0x00001800  /* Port Size 32 bit */
-+#define BR_DECC         0x00000600
-+#define BR_DECC_SHIFT            9
-+#define BR_DECC_OFF     0x00000000  /* HW ECC checking and generation off */
-+#define BR_DECC_CHK     0x00000200  /* HW ECC checking on, generation off */
-+#define BR_DECC_CHK_GEN 0x00000400  /* HW ECC checking and generation on */
-+#define BR_WP           0x00000100
-+#define BR_WP_SHIFT              8
-+#define BR_MSEL         0x000000E0
-+#define BR_MSEL_SHIFT            5
-+#define BR_MS_GPCM      0x00000000  /* GPCM */
-+#define BR_MS_FCM       0x00000020  /* FCM */
-+#define BR_MS_SDRAM     0x00000060  /* SDRAM */
-+#define BR_MS_UPMA      0x00000080  /* UPMA */
-+#define BR_MS_UPMB      0x000000A0  /* UPMB */
-+#define BR_MS_UPMC      0x000000C0  /* UPMC */
-+#define BR_V            0x00000001
-+#define BR_V_SHIFT               0
-+#define BR_RES          ~(BR_BA|BR_PS|BR_DECC|BR_WP|BR_MSEL|BR_V)
-+
-+      __be32 or;             /**< Base Register  */
-+#define OR0 0x5004
-+#define OR1 0x500C
-+#define OR2 0x5014
-+#define OR3 0x501C
-+#define OR4 0x5024
-+#define OR5 0x502C
-+#define OR6 0x5034
-+#define OR7 0x503C
-+
-+#define OR_FCM_AM               0xFFFF8000
-+#define OR_FCM_AM_SHIFT                 15
-+#define OR_FCM_BCTLD            0x00001000
-+#define OR_FCM_BCTLD_SHIFT              12
-+#define OR_FCM_PGS              0x00000400
-+#define OR_FCM_PGS_SHIFT                10
-+#define OR_FCM_CSCT             0x00000200
-+#define OR_FCM_CSCT_SHIFT                9
-+#define OR_FCM_CST              0x00000100
-+#define OR_FCM_CST_SHIFT                 8
-+#define OR_FCM_CHT              0x00000080
-+#define OR_FCM_CHT_SHIFT                 7
-+#define OR_FCM_SCY              0x00000070
-+#define OR_FCM_SCY_SHIFT                 4
-+#define OR_FCM_SCY_1            0x00000010
-+#define OR_FCM_SCY_2            0x00000020
-+#define OR_FCM_SCY_3            0x00000030
-+#define OR_FCM_SCY_4            0x00000040
-+#define OR_FCM_SCY_5            0x00000050
-+#define OR_FCM_SCY_6            0x00000060
-+#define OR_FCM_SCY_7            0x00000070
-+#define OR_FCM_RST              0x00000008
-+#define OR_FCM_RST_SHIFT                 3
-+#define OR_FCM_TRLX             0x00000004
-+#define OR_FCM_TRLX_SHIFT                2
-+#define OR_FCM_EHTR             0x00000002
-+#define OR_FCM_EHTR_SHIFT                1
-+};
-+
-+struct fsl_lbc_regs {
-+      struct fsl_lbc_bank bank[8];
-+      u8 res0[0x28];
-+      __be32 mar;             /**< UPM Address Register */
-+      u8 res1[0x4];
-+      __be32 mamr;            /**< UPMA Mode Register */
-+#define MxMR_OP_NO    (0 << 28) /**< normal operation */
-+#define MxMR_OP_WA    (1 << 28) /**< write array */
-+#define MxMR_OP_RA    (2 << 28) /**< read array */
-+#define MxMR_OP_RP    (3 << 28) /**< run pattern */
-+#define MxMR_MAD      0x3f      /**< machine address */
-+      __be32 mbmr;            /**< UPMB Mode Register */
-+      __be32 mcmr;            /**< UPMC Mode Register */
-+      u8 res2[0x8];
-+      __be32 mrtpr;           /**< Memory Refresh Timer Prescaler Register */
-+      __be32 mdr;             /**< UPM Data Register */
-+      u8 res3[0x4];
-+      __be32 lsor;            /**< Special Operation Initiation Register */
-+      __be32 lsdmr;           /**< SDRAM Mode Register */
-+      u8 res4[0x8];
-+      __be32 lurt;            /**< UPM Refresh Timer */
-+      __be32 lsrt;            /**< SDRAM Refresh Timer */
-+      u8 res5[0x8];
-+      __be32 ltesr;           /**< Transfer Error Status Register */
-+#define LTESR_BM   0x80000000
-+#define LTESR_FCT  0x40000000
-+#define LTESR_PAR  0x20000000
-+#define LTESR_WP   0x04000000
-+#define LTESR_ATMW 0x00800000
-+#define LTESR_ATMR 0x00400000
-+#define LTESR_CS   0x00080000
-+#define LTESR_CC   0x00000001
-+#define LTESR_NAND_MASK (LTESR_FCT | LTESR_PAR | LTESR_CC)
-+      __be32 ltedr;           /**< Transfer Error Disable Register */
-+      __be32 lteir;           /**< Transfer Error Interrupt Register */
-+      __be32 lteatr;          /**< Transfer Error Attributes Register */
-+      __be32 ltear;           /**< Transfer Error Address Register */
-+      u8 res6[0xC];
-+      __be32 lbcr;            /**< Configuration Register */
-+#define LBCR_LDIS  0x80000000
-+#define LBCR_LDIS_SHIFT    31
-+#define LBCR_BCTLC 0x00C00000
-+#define LBCR_BCTLC_SHIFT   22
-+#define LBCR_AHD   0x00200000
-+#define LBCR_LPBSE 0x00020000
-+#define LBCR_LPBSE_SHIFT   17
-+#define LBCR_EPAR  0x00010000
-+#define LBCR_EPAR_SHIFT    16
-+#define LBCR_BMT   0x0000FF00
-+#define LBCR_BMT_SHIFT      8
-+#define LBCR_INIT  0x00040000
-+      __be32 lcrr;            /**< Clock Ratio Register */
-+#define LCRR_DBYP    0x80000000
-+#define LCRR_DBYP_SHIFT      31
-+#define LCRR_BUFCMDC 0x30000000
-+#define LCRR_BUFCMDC_SHIFT   28
-+#define LCRR_ECL     0x03000000
-+#define LCRR_ECL_SHIFT       24
-+#define LCRR_EADC    0x00030000
-+#define LCRR_EADC_SHIFT      16
-+#define LCRR_CLKDIV  0x0000000F
-+#define LCRR_CLKDIV_SHIFT     0
-+      u8 res7[0x8];
-+      __be32 fmr;             /**< Flash Mode Register */
-+#define FMR_CWTO     0x0000F000
-+#define FMR_CWTO_SHIFT       12
-+#define FMR_BOOT     0x00000800
-+#define FMR_ECCM     0x00000100
-+#define FMR_AL       0x00000030
-+#define FMR_AL_SHIFT          4
-+#define FMR_OP       0x00000003
-+#define FMR_OP_SHIFT          0
-+      __be32 fir;             /**< Flash Instruction Register */
-+#define FIR_OP0      0xF0000000
-+#define FIR_OP0_SHIFT        28
-+#define FIR_OP1      0x0F000000
-+#define FIR_OP1_SHIFT        24
-+#define FIR_OP2      0x00F00000
-+#define FIR_OP2_SHIFT        20
-+#define FIR_OP3      0x000F0000
-+#define FIR_OP3_SHIFT        16
-+#define FIR_OP4      0x0000F000
-+#define FIR_OP4_SHIFT        12
-+#define FIR_OP5      0x00000F00
-+#define FIR_OP5_SHIFT         8
-+#define FIR_OP6      0x000000F0
-+#define FIR_OP6_SHIFT         4
-+#define FIR_OP7      0x0000000F
-+#define FIR_OP7_SHIFT         0
-+#define FIR_OP_NOP   0x0      /* No operation and end of sequence */
-+#define FIR_OP_CA    0x1        /* Issue current column address */
-+#define FIR_OP_PA    0x2        /* Issue current block+page address */
-+#define FIR_OP_UA    0x3        /* Issue user defined address */
-+#define FIR_OP_CM0   0x4        /* Issue command from FCR[CMD0] */
-+#define FIR_OP_CM1   0x5        /* Issue command from FCR[CMD1] */
-+#define FIR_OP_CM2   0x6        /* Issue command from FCR[CMD2] */
-+#define FIR_OP_CM3   0x7        /* Issue command from FCR[CMD3] */
-+#define FIR_OP_WB    0x8        /* Write FBCR bytes from FCM buffer */
-+#define FIR_OP_WS    0x9        /* Write 1 or 2 bytes from MDR[AS] */
-+#define FIR_OP_RB    0xA        /* Read FBCR bytes to FCM buffer */
-+#define FIR_OP_RS    0xB        /* Read 1 or 2 bytes to MDR[AS] */
-+#define FIR_OP_CW0   0xC        /* Wait then issue FCR[CMD0] */
-+#define FIR_OP_CW1   0xD        /* Wait then issue FCR[CMD1] */
-+#define FIR_OP_RBW   0xE        /* Wait then read FBCR bytes */
-+#define FIR_OP_RSW   0xE        /* Wait then read 1 or 2 bytes */
-+      __be32 fcr;             /**< Flash Command Register */
-+#define FCR_CMD0     0xFF000000
-+#define FCR_CMD0_SHIFT       24
-+#define FCR_CMD1     0x00FF0000
-+#define FCR_CMD1_SHIFT       16
-+#define FCR_CMD2     0x0000FF00
-+#define FCR_CMD2_SHIFT        8
-+#define FCR_CMD3     0x000000FF
-+#define FCR_CMD3_SHIFT        0
-+      __be32 fbar;            /**< Flash Block Address Register */
-+#define FBAR_BLK     0x00FFFFFF
-+      __be32 fpar;            /**< Flash Page Address Register */
-+#define FPAR_SP_PI   0x00007C00
-+#define FPAR_SP_PI_SHIFT     10
-+#define FPAR_SP_MS   0x00000200
-+#define FPAR_SP_CI   0x000001FF
-+#define FPAR_SP_CI_SHIFT      0
-+#define FPAR_LP_PI   0x0003F000
-+#define FPAR_LP_PI_SHIFT     12
-+#define FPAR_LP_MS   0x00000800
-+#define FPAR_LP_CI   0x000007FF
-+#define FPAR_LP_CI_SHIFT      0
-+      __be32 fbcr;            /**< Flash Byte Count Register */
-+#define FBCR_BC      0x00000FFF
-+      u8 res11[0x8];
-+      u8 res8[0xF00];
-+};
-+
-+extern struct fsl_lbc_regs __iomem *fsl_lbc_regs;
-+extern spinlock_t fsl_lbc_lock;
-+
-+/*
-+ * FSL UPM routines
-+ */
-+struct fsl_upm {
-+      __be32 __iomem *mxmr;
-+      int width;
-+};
-+
-+extern int fsl_lbc_find(phys_addr_t addr_base);
-+extern int fsl_upm_find(phys_addr_t addr_base, struct fsl_upm *upm);
-+
-+/**
-+ * fsl_upm_start_pattern - start UPM patterns execution
-+ * @upm:      pointer to the fsl_upm structure obtained via fsl_upm_find
-+ * @pat_offset:       UPM pattern offset for the command to be executed
-+ *
-+ * This routine programmes UPM so the next memory access that hits an UPM
-+ * will trigger pattern execution, starting at pat_offset.
-+ */
-+static inline void fsl_upm_start_pattern(struct fsl_upm *upm, u8 pat_offset)
-+{
-+      clrsetbits_be32(upm->mxmr, MxMR_MAD, MxMR_OP_RP | pat_offset);
-+}
-+
-+/**
-+ * fsl_upm_end_pattern - end UPM patterns execution
-+ * @upm:      pointer to the fsl_upm structure obtained via fsl_upm_find
-+ *
-+ * This routine reverts UPM to normal operation mode.
-+ */
-+static inline void fsl_upm_end_pattern(struct fsl_upm *upm)
-+{
-+      clrbits32(upm->mxmr, MxMR_OP_RP);
-+
-+      while (in_be32(upm->mxmr) & MxMR_OP_RP)
-+              cpu_relax();
-+}
-+
-+/**
-+ * fsl_upm_run_pattern - actually run an UPM pattern
-+ * @upm:      pointer to the fsl_upm structure obtained via fsl_upm_find
-+ * @io_base:  remapped pointer to where memory access should happen
-+ * @mar:      MAR register content during pattern execution
-+ *
-+ * This function triggers dummy write to the memory specified by the io_base,
-+ * thus UPM pattern actually executed. Note that mar usage depends on the
-+ * pre-programmed AMX bits in the UPM RAM.
-+ */
-+static inline int fsl_upm_run_pattern(struct fsl_upm *upm,
-+                                    void __iomem *io_base, u32 mar)
-+{
-+      int ret = 0;
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&fsl_lbc_lock, flags);
-+
-+      out_be32(&fsl_lbc_regs->mar, mar << (32 - upm->width));
-+
-+      switch (upm->width) {
-+      case 8:
-+              out_8(io_base, 0x0);
-+              break;
-+      case 16:
-+              out_be16(io_base, 0x0);
-+              break;
-+      case 32:
-+              out_be32(io_base, 0x0);
-+              break;
-+      default:
-+              ret = -EINVAL;
-+              break;
-+      }
-+
-+      spin_unlock_irqrestore(&fsl_lbc_lock, flags);
-+
-+      return ret;
-+}
-+
-+#endif /* __ASM_FSL_LBC_H */
---- /dev/null
-+++ b/include/asm-powerpc/gpio.h
-@@ -0,0 +1,56 @@
-+/*
-+ * Generic GPIO API implementation for PowerPC.
-+ *
-+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
-+ *
-+ * Author: Anton Vorontsov <avorontsov@ru.mvista.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.
-+ */
-+
-+#ifndef __ASM_POWERPC_GPIO_H
-+#define __ASM_POWERPC_GPIO_H
-+
-+#include <linux/errno.h>
-+#include <asm-generic/gpio.h>
-+
-+#ifdef CONFIG_HAVE_GPIO_LIB
-+
-+/*
-+ * We don't (yet) implement inlined/rapid versions for on-chip gpios.
-+ * Just call gpiolib.
-+ */
-+static inline int gpio_get_value(unsigned int gpio)
-+{
-+      return __gpio_get_value(gpio);
-+}
-+
-+static inline void gpio_set_value(unsigned int gpio, int value)
-+{
-+      __gpio_set_value(gpio, value);
-+}
-+
-+static inline int gpio_cansleep(unsigned int gpio)
-+{
-+      return __gpio_cansleep(gpio);
-+}
-+
-+/*
-+ * Not implemented, yet.
-+ */
-+static inline int gpio_to_irq(unsigned int gpio)
-+{
-+      return -ENOSYS;
-+}
-+
-+static inline int irq_to_gpio(unsigned int irq)
-+{
-+      return -EINVAL;
-+}
-+
-+#endif /* CONFIG_HAVE_GPIO_LIB */
-+
-+#endif /* __ASM_POWERPC_GPIO_H */
---- a/include/asm-powerpc/hw_irq.h
-+++ b/include/asm-powerpc/hw_irq.h
-@@ -27,7 +27,7 @@ static inline unsigned long local_get_fl
-       return flags;
- }
--static inline unsigned long local_irq_disable(void)
-+static inline unsigned long raw_local_irq_disable(void)
- {
-       unsigned long flags, zero;
-@@ -39,14 +39,15 @@ static inline unsigned long local_irq_di
-       return flags;
- }
--extern void local_irq_restore(unsigned long);
-+extern void raw_local_irq_restore(unsigned long);
- extern void iseries_handle_interrupts(void);
--#define local_irq_enable()    local_irq_restore(1)
--#define local_save_flags(flags)       ((flags) = local_get_flags())
--#define local_irq_save(flags) ((flags) = local_irq_disable())
-+#define raw_local_irq_enable()                raw_local_irq_restore(1)
-+#define raw_local_save_flags(flags)   ((flags) = local_get_flags())
-+#define raw_local_irq_save(flags)     ((flags) = raw_local_irq_disable())
--#define irqs_disabled()               (local_get_flags() == 0)
-+#define raw_irqs_disabled()           (local_get_flags() == 0)
-+#define raw_irqs_disabled_flags(flags)        ((flags) == 0)
- #define __hard_irq_enable()   __mtmsrd(mfmsr() | MSR_EE, 1)
- #define __hard_irq_disable()  __mtmsrd(mfmsr() & ~MSR_EE, 1)
---- a/include/asm-powerpc/immap_qe.h
-+++ b/include/asm-powerpc/immap_qe.h
-@@ -20,6 +20,7 @@
- #ifdef __KERNEL__
- #include <linux/kernel.h>
-+#include <asm/io.h>
- #define QE_IMMAP_SIZE (1024 * 1024)   /* 1MB from 1MB+IMMR */
-@@ -468,7 +469,7 @@ struct qe_immap {
-       u8                      res18[0xC0000]; /* 0x140000 - 0x200000 */
- } __attribute__ ((packed));
--extern struct qe_immap *qe_immr;
-+extern struct qe_immap __iomem *qe_immr;
- extern phys_addr_t get_qe_base(void);
- static inline unsigned long immrbar_virt_to_phys(void *address)
---- a/include/asm-powerpc/irqflags.h
-+++ b/include/asm-powerpc/irqflags.h
-@@ -2,30 +2,43 @@
-  * include/asm-powerpc/irqflags.h
-  *
-  * IRQ flags handling
-- *
-- * This file gets included from lowlevel asm headers too, to provide
-- * wrapped versions of the local_irq_*() APIs, based on the
-- * raw_local_irq_*() macros from the lowlevel headers.
-  */
- #ifndef _ASM_IRQFLAGS_H
- #define _ASM_IRQFLAGS_H
-+#ifndef __ASSEMBLY__
- /*
-  * Get definitions for raw_local_save_flags(x), etc.
-  */
- #include <asm-powerpc/hw_irq.h>
-+#else
-+#ifdef CONFIG_TRACE_IRQFLAGS
- /*
-- * Do the CPU's IRQ-state tracing from assembly code. We call a
-- * C function, so save all the C-clobbered registers:
-+ * Most of the CPU's IRQ-state tracing is done from assembly code; we
-+ * have to call a C function so call a wrapper that saves all the
-+ * C-clobbered registers.
-  */
--#ifdef CONFIG_TRACE_IRQFLAGS
--
--#error No support on PowerPC yet for CONFIG_TRACE_IRQFLAGS
--
-+#define TRACE_ENABLE_INTS     bl .trace_hardirqs_on
-+#define TRACE_DISABLE_INTS    bl .trace_hardirqs_off
-+#define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip)        \
-+      cmpdi   en, 0;                          \
-+      bne     95f;                            \
-+      stb     en,PACASOFTIRQEN(r13);          \
-+      bl      .trace_hardirqs_off;            \
-+      b       skip;                           \
-+95:   bl      .trace_hardirqs_on;             \
-+      li      en,1;
-+#define TRACE_AND_RESTORE_IRQ(en)             \
-+      TRACE_AND_RESTORE_IRQ_PARTIAL(en,96f);  \
-+96:   stb     en,PACASOFTIRQEN(r13)
- #else
--# define TRACE_IRQS_ON
--# define TRACE_IRQS_OFF
-+#define TRACE_ENABLE_INTS
-+#define TRACE_DISABLE_INTS
-+#define TRACE_AND_RESTORE_IRQ_PARTIAL(en,skip)
-+#define TRACE_AND_RESTORE_IRQ(en)             \
-+      stb     en,PACASOFTIRQEN(r13)
-+#endif
- #endif
- #endif
---- /dev/null
-+++ b/include/asm-powerpc/iseries/alpaca.h
-@@ -0,0 +1,31 @@
-+/*
-+ * Copyright Â© 2008  Stephen Rothwell IBM Corporation
-+ *
-+ * 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
-+ */
-+#ifndef _ASM_POWERPC_ISERIES_ALPACA_H
-+#define _ASM_POWERPC_ISERIES_ALPACA_H
-+
-+/*
-+ * This is the part of the paca that the iSeries hypervisor
-+ * needs to be statically initialised. Immediately after boot
-+ * we switch to the normal Linux paca.
-+ */
-+struct alpaca {
-+      struct lppaca *lppaca_ptr;      /* Pointer to LpPaca for PLIC */
-+      const void *reg_save_ptr;       /* Pointer to LpRegSave for PLIC */
-+};
-+
-+#endif /* _ASM_POWERPC_ISERIES_ALPACA_H */
---- a/include/asm-powerpc/iseries/it_lp_reg_save.h
-+++ /dev/null
-@@ -1,85 +0,0 @@
--/*
-- * Copyright (C) 2001  Mike Corrigan IBM Corporation
-- *
-- * 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
-- */
--#ifndef _ASM_POWERPC_ISERIES_IT_LP_REG_SAVE_H
--#define _ASM_POWERPC_ISERIES_IT_LP_REG_SAVE_H
--
--/*
-- * This control block contains the data that is shared between PLIC
-- * and the OS
-- */
--
--struct ItLpRegSave {
--      u32     xDesc;          // Eye catcher  "LpRS" ebcdic   000-003
--      u16     xSize;          // Size of this class           004-005
--      u8      xInUse;         // Area is live                 006-007
--      u8      xRsvd1[9];      // Reserved                     007-00F
--
--      u8      xFixedRegSave[352]; // Fixed Register Save Area 010-16F
--      u32     xCTRL;          // Control Register             170-173
--      u32     xDEC;           // Decrementer                  174-177
--      u32     xFPSCR;         // FP Status and Control Reg    178-17B
--      u32     xPVR;           // Processor Version Number     17C-17F
--
--      u64     xMMCR0;         // Monitor Mode Control Reg 0   180-187
--      u32     xPMC1;          // Perf Monitor Counter 1       188-18B
--      u32     xPMC2;          // Perf Monitor Counter 2       18C-18F
--      u32     xPMC3;          // Perf Monitor Counter 3       190-193
--      u32     xPMC4;          // Perf Monitor Counter 4       194-197
--      u32     xPIR;           // Processor ID Reg             198-19B
--
--      u32     xMMCR1;         // Monitor Mode Control Reg 1   19C-19F
--      u32     xMMCRA;         // Monitor Mode Control Reg A   1A0-1A3
--      u32     xPMC5;          // Perf Monitor Counter 5       1A4-1A7
--      u32     xPMC6;          // Perf Monitor Counter 6       1A8-1AB
--      u32     xPMC7;          // Perf Monitor Counter 7       1AC-1AF
--      u32     xPMC8;          // Perf Monitor Counter 8       1B0-1B3
--      u32     xTSC;           // Thread Switch Control        1B4-1B7
--      u32     xTST;           // Thread Switch Timeout        1B8-1BB
--      u32     xRsvd;          // Reserved                     1BC-1BF
--
--      u64     xACCR;          // Address Compare Control Reg  1C0-1C7
--      u64     xIMR;           // Instruction Match Register   1C8-1CF
--      u64     xSDR1;          // Storage Description Reg 1    1D0-1D7
--      u64     xSPRG0;         // Special Purpose Reg General0 1D8-1DF
--      u64     xSPRG1;         // Special Purpose Reg General1 1E0-1E7
--      u64     xSPRG2;         // Special Purpose Reg General2 1E8-1EF
--      u64     xSPRG3;         // Special Purpose Reg General3 1F0-1F7
--      u64     xTB;            // Time Base Register           1F8-1FF
--
--      u64     xFPR[32];       // Floating Point Registers     200-2FF
--
--      u64     xMSR;           // Machine State Register       300-307
--      u64     xNIA;           // Next Instruction Address     308-30F
--
--      u64     xDABR;          // Data Address Breakpoint Reg  310-317
--      u64     xIABR;          // Inst Address Breakpoint Reg  318-31F
--
--      u64     xHID0;          // HW Implementation Dependent0 320-327
--
--      u64     xHID4;          // HW Implementation Dependent4 328-32F
--      u64     xSCOMd;         // SCON Data Reg (SPRG4)        330-337
--      u64     xSCOMc;         // SCON Command Reg (SPRG5)     338-33F
--      u64     xSDAR;          // Sample Data Address Register 340-347
--      u64     xSIAR;          // Sample Inst Address Register 348-34F
--
--      u8      xRsvd3[176];    // Reserved                     350-3FF
--};
--
--extern struct ItLpRegSave iseries_reg_save[];
--
--#endif /* _ASM_POWERPC_ISERIES_IT_LP_REG_SAVE_H */
---- a/include/asm-powerpc/lmb.h
-+++ b/include/asm-powerpc/lmb.h
-@@ -1,81 +1,15 @@
- #ifndef _ASM_POWERPC_LMB_H
- #define _ASM_POWERPC_LMB_H
--#ifdef __KERNEL__
--/*
-- * Definitions for talking to the Open Firmware PROM on
-- * Power Macintosh computers.
-- *
-- * Copyright (C) 2001 Peter Bergner, IBM Corp.
-- *
-- * 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 <asm/udbg.h>
--#include <linux/init.h>
--#include <asm/prom.h>
-+#define LMB_DBG(fmt...) udbg_printf(fmt)
--#define MAX_LMB_REGIONS 128
-+#ifdef CONFIG_PPC32
-+extern phys_addr_t lowmem_end_addr;
-+#define LMB_REAL_LIMIT        lowmem_end_addr
-+#else
-+#define LMB_REAL_LIMIT        0
-+#endif
--struct lmb_property {
--      unsigned long base;
--      unsigned long size;
--};
--
--struct lmb_region {
--      unsigned long cnt;
--      unsigned long size;
--      struct lmb_property region[MAX_LMB_REGIONS+1];
--};
--
--struct lmb {
--      unsigned long debug;
--      unsigned long rmo_size;
--      struct lmb_region memory;
--      struct lmb_region reserved;
--};
--
--extern struct lmb lmb;
--
--extern void __init lmb_init(void);
--extern void __init lmb_analyze(void);
--extern long __init lmb_add(unsigned long base, unsigned long size);
--extern long __init lmb_reserve(unsigned long base, unsigned long size);
--extern unsigned long __init lmb_alloc(unsigned long size, unsigned long align);
--extern unsigned long __init lmb_alloc_base(unsigned long size,
--              unsigned long align, unsigned long max_addr);
--extern unsigned long __init __lmb_alloc_base(unsigned long size,
--              unsigned long align, unsigned long max_addr);
--extern unsigned long __init lmb_phys_mem_size(void);
--extern unsigned long __init lmb_end_of_DRAM(void);
--extern void __init lmb_enforce_memory_limit(unsigned long memory_limit);
--extern int __init lmb_is_reserved(unsigned long addr);
--
--extern void lmb_dump_all(void);
--
--static inline unsigned long
--lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
--{
--      return type->region[region_nr].size;
--}
--static inline unsigned long
--lmb_size_pages(struct lmb_region *type, unsigned long region_nr)
--{
--      return lmb_size_bytes(type, region_nr) >> PAGE_SHIFT;
--}
--static inline unsigned long
--lmb_start_pfn(struct lmb_region *type, unsigned long region_nr)
--{
--      return type->region[region_nr].base >> PAGE_SHIFT;
--}
--static inline unsigned long
--lmb_end_pfn(struct lmb_region *type, unsigned long region_nr)
--{
--      return lmb_start_pfn(type, region_nr) +
--             lmb_size_pages(type, region_nr);
--}
--
--#endif /* __KERNEL__ */
- #endif /* _ASM_POWERPC_LMB_H */
---- a/include/asm-powerpc/machdep.h
-+++ b/include/asm-powerpc/machdep.h
-@@ -68,6 +68,8 @@ struct machdep_calls {
-                                      unsigned long vflags,
-                                      int psize, int ssize);
-       long            (*hpte_remove)(unsigned long hpte_group);
-+      void            (*hpte_removebolted)(unsigned long ea,
-+                                           int psize, int ssize);
-       void            (*flush_hash_range)(unsigned long number, int local);
-       /* special for kexec, to be called in real mode, linar mapping is
-@@ -196,9 +198,6 @@ struct machdep_calls {
-          May be NULL. */
-       void            (*init)(void);
--      void            (*setup_io_mappings)(void);
--
--      void            (*early_serial_map)(void);
-       void            (*kgdb_map_scc)(void);
-       /*
---- a/include/asm-powerpc/macio.h
-+++ b/include/asm-powerpc/macio.h
-@@ -2,7 +2,7 @@
- #define __MACIO_ASIC_H__
- #ifdef __KERNEL__
--#include <asm/of_device.h>
-+#include <linux/of_device.h>
- extern struct bus_type macio_bus_type;
---- a/include/asm-powerpc/mmu-40x.h
-+++ b/include/asm-powerpc/mmu-40x.h
-@@ -53,8 +53,6 @@
- #ifndef __ASSEMBLY__
--typedef unsigned long phys_addr_t;
--
- typedef struct {
-       unsigned long id;
-       unsigned long vdso_base;
---- a/include/asm-powerpc/mmu-44x.h
-+++ b/include/asm-powerpc/mmu-44x.h
-@@ -53,8 +53,6 @@
- #ifndef __ASSEMBLY__
--typedef unsigned long long phys_addr_t;
--
- typedef struct {
-       unsigned long id;
-       unsigned long vdso_base;
---- a/include/asm-powerpc/mmu-8xx.h
-+++ b/include/asm-powerpc/mmu-8xx.h
-@@ -136,8 +136,6 @@
- #define SPRN_M_TW     799
- #ifndef __ASSEMBLY__
--typedef unsigned long phys_addr_t;
--
- typedef struct {
-       unsigned long id;
-       unsigned long vdso_base;
---- a/include/asm-powerpc/mmu-fsl-booke.h
-+++ b/include/asm-powerpc/mmu-fsl-booke.h
-@@ -73,12 +73,6 @@
- #ifndef __ASSEMBLY__
--#ifndef CONFIG_PHYS_64BIT
--typedef unsigned long phys_addr_t;
--#else
--typedef unsigned long long phys_addr_t;
--#endif
--
- typedef struct {
-       unsigned long id;
-       unsigned long vdso_base;
---- a/include/asm-powerpc/mmu-hash32.h
-+++ b/include/asm-powerpc/mmu-hash32.h
-@@ -84,8 +84,6 @@ typedef struct {
-       unsigned long vdso_base;
- } mm_context_t;
--typedef unsigned long phys_addr_t;
--
- #endif /* !__ASSEMBLY__ */
- #endif /* _ASM_POWERPC_MMU_HASH32_H_ */
---- a/include/asm-powerpc/mmu-hash64.h
-+++ b/include/asm-powerpc/mmu-hash64.h
-@@ -469,9 +469,6 @@ static inline unsigned long get_vsid(uns
-                                VSID_MODULUS_256M)
- #define KERNEL_VSID(ea)               VSID_SCRAMBLE(GET_ESID(ea))
--/* Physical address used by some IO functions */
--typedef unsigned long phys_addr_t;
--
- #endif /* __ASSEMBLY__ */
- #endif /* _ASM_POWERPC_MMU_HASH64_H_ */
---- a/include/asm-powerpc/paca.h
-+++ b/include/asm-powerpc/paca.h
-@@ -42,10 +42,7 @@ struct task_struct;
-  * Defines the layout of the paca.
-  *
-  * This structure is not directly accessed by firmware or the service
-- * processor except for the first two pointers that point to the
-- * lppaca area and the ItLpRegSave area for this CPU.  The lppaca
-- * object is currently contained within the PACA but it doesn't need
-- * to be.
-+ * processor.
-  */
- struct paca_struct {
-       /*
-@@ -55,14 +52,7 @@ struct paca_struct {
-        * avoid cacheline bouncing.
-        */
--      /*
--       * MAGIC: These first two pointers can't be moved - they're
--       * accessed by the firmware
--       */
-       struct lppaca *lppaca_ptr;      /* Pointer to LpPaca for PLIC */
--#ifdef CONFIG_PPC_ISERIES
--      void *reg_save_ptr; /* Pointer to LpRegSave for PLIC */
--#endif /* CONFIG_PPC_ISERIES */
-       /*
-        * MAGIC: the spinlock functions in arch/powerpc/lib/locks.c 
---- a/include/asm-powerpc/page.h
-+++ b/include/asm-powerpc/page.h
-@@ -53,6 +53,7 @@
- #define PAGE_OFFSET     ASM_CONST(CONFIG_KERNEL_START)
- #define KERNELBASE      (PAGE_OFFSET + PHYSICAL_START)
-+#define LOAD_OFFSET   PAGE_OFFSET
- #ifdef CONFIG_FLATMEM
- #define pfn_valid(pfn)                ((pfn) < max_mapnr)
---- a/include/asm-powerpc/page_32.h
-+++ b/include/asm-powerpc/page_32.h
-@@ -3,8 +3,6 @@
- #define VM_DATA_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS32
--#define PPC_MEMSTART  0
--
- #ifdef CONFIG_NOT_COHERENT_CACHE
- #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES
- #endif
---- a/include/asm-powerpc/pasemi_dma.h
-+++ b/include/asm-powerpc/pasemi_dma.h
-@@ -1,5 +1,5 @@
- /*
-- * Copyright (C) 2006 PA Semi, Inc
-+ * Copyright (C) 2006-2008 PA Semi, Inc
-  *
-  * Hardware register layout and descriptor formats for the on-board
-  * DMA engine on PA Semi PWRficient. Used by ethernet, function and security
-@@ -40,6 +40,11 @@ enum {
-       PAS_DMA_COM_TXSTA = 0x104,      /* Transmit Status Register   */
-       PAS_DMA_COM_RXCMD = 0x108,      /* Receive Command Register   */
-       PAS_DMA_COM_RXSTA = 0x10c,      /* Receive Status Register    */
-+      PAS_DMA_COM_CFG   = 0x114,      /* Common config reg          */
-+      PAS_DMA_TXF_SFLG0 = 0x140,      /* Set flags                  */
-+      PAS_DMA_TXF_SFLG1 = 0x144,      /* Set flags                  */
-+      PAS_DMA_TXF_CFLG0 = 0x148,      /* Set flags                  */
-+      PAS_DMA_TXF_CFLG1 = 0x14c,      /* Set flags                  */
- };
-@@ -123,11 +128,16 @@ enum {
- #define    PAS_DMA_TXCHAN_TCMDSTA_DA  0x00000100
- #define PAS_DMA_TXCHAN_CFG(c)     (0x304+(c)*_PAS_DMA_TXCHAN_STRIDE)
- #define    PAS_DMA_TXCHAN_CFG_TY_IFACE        0x00000000      /* Type = interface */
-+#define    PAS_DMA_TXCHAN_CFG_TY_COPY 0x00000001      /* Type = copy only */
-+#define    PAS_DMA_TXCHAN_CFG_TY_FUNC 0x00000002      /* Type = function */
-+#define    PAS_DMA_TXCHAN_CFG_TY_XOR  0x00000003      /* Type = xor only */
- #define    PAS_DMA_TXCHAN_CFG_TATTR_M 0x0000003c
- #define    PAS_DMA_TXCHAN_CFG_TATTR_S 2
- #define    PAS_DMA_TXCHAN_CFG_TATTR(x)        (((x) << PAS_DMA_TXCHAN_CFG_TATTR_S) & \
-                                        PAS_DMA_TXCHAN_CFG_TATTR_M)
--#define    PAS_DMA_TXCHAN_CFG_WT_M    0x000001c0
-+#define    PAS_DMA_TXCHAN_CFG_LPDQ    0x00000800
-+#define    PAS_DMA_TXCHAN_CFG_LPSQ    0x00000400
-+#define    PAS_DMA_TXCHAN_CFG_WT_M    0x000003c0
- #define    PAS_DMA_TXCHAN_CFG_WT_S    6
- #define    PAS_DMA_TXCHAN_CFG_WT(x)   (((x) << PAS_DMA_TXCHAN_CFG_WT_S) & \
-                                        PAS_DMA_TXCHAN_CFG_WT_M)
-@@ -394,11 +404,62 @@ enum {
-                                XCT_COPY_LLEN_M)
- #define XCT_COPY_SE           0x0000000000000001ull
-+/* Function descriptor fields */
-+#define XCT_FUN_T             0x8000000000000000ull
-+#define XCT_FUN_ST            0x4000000000000000ull
-+#define XCT_FUN_RR_M          0x3000000000000000ull
-+#define XCT_FUN_RR_NORES      0x0000000000000000ull
-+#define XCT_FUN_RR_8BRES      0x1000000000000000ull
-+#define XCT_FUN_RR_24BRES     0x2000000000000000ull
-+#define XCT_FUN_RR_40BRES     0x3000000000000000ull
-+#define XCT_FUN_I             0x0800000000000000ull
-+#define XCT_FUN_O             0x0400000000000000ull
-+#define XCT_FUN_E             0x0200000000000000ull
-+#define XCT_FUN_FUN_M         0x01c0000000000000ull
-+#define XCT_FUN_FUN_S         54
-+#define XCT_FUN_FUN(x)                ((((long)(x)) << XCT_FUN_FUN_S) & XCT_FUN_FUN_M)
-+#define XCT_FUN_CRM_M         0x0038000000000000ull
-+#define XCT_FUN_CRM_NOP               0x0000000000000000ull
-+#define XCT_FUN_CRM_SIG               0x0008000000000000ull
-+#define XCT_FUN_LLEN_M                0x0007ffff00000000ull
-+#define XCT_FUN_LLEN_S                32
-+#define XCT_FUN_LLEN(x)               ((((long)(x)) << XCT_FUN_LLEN_S) & XCT_FUN_LLEN_M)
-+#define XCT_FUN_SHL_M         0x00000000f8000000ull
-+#define XCT_FUN_SHL_S         27
-+#define XCT_FUN_SHL(x)                ((((long)(x)) << XCT_FUN_SHL_S) & XCT_FUN_SHL_M)
-+#define XCT_FUN_CHL_M         0x0000000007c00000ull
-+#define XCT_FUN_HSZ_M         0x00000000003c0000ull
-+#define XCT_FUN_ALG_M         0x0000000000038000ull
-+#define XCT_FUN_HP            0x0000000000004000ull
-+#define XCT_FUN_BCM_M         0x0000000000003800ull
-+#define XCT_FUN_BCP_M         0x0000000000000600ull
-+#define XCT_FUN_SIG_M         0x00000000000001f0ull
-+#define XCT_FUN_SIG_TCP4      0x0000000000000140ull
-+#define XCT_FUN_SIG_TCP6      0x0000000000000150ull
-+#define XCT_FUN_SIG_UDP4      0x0000000000000160ull
-+#define XCT_FUN_SIG_UDP6      0x0000000000000170ull
-+#define XCT_FUN_A             0x0000000000000008ull
-+#define XCT_FUN_C             0x0000000000000004ull
-+#define XCT_FUN_AL2           0x0000000000000002ull
-+#define XCT_FUN_SE            0x0000000000000001ull
-+
-+/* Function descriptor 8byte result fields */
-+#define XCT_FUNRES_8B_CS_M    0x0000ffff00000000ull
-+#define XCT_FUNRES_8B_CS_S    32
-+#define XCT_FUNRES_8B_CRC_M   0x00000000ffffffffull
-+#define XCT_FUNRES_8B_CRC_S   0
-+
- /* Control descriptor fields */
- #define CTRL_CMD_T            0x8000000000000000ull
- #define CTRL_CMD_META_EVT     0x2000000000000000ull
- #define CTRL_CMD_O            0x0400000000000000ull
--#define CTRL_CMD_REG_M                0x000000000000000full
-+#define CTRL_CMD_ETYPE_M      0x0038000000000000ull
-+#define CTRL_CMD_ETYPE_EXT    0x0000000000000000ull
-+#define CTRL_CMD_ETYPE_WSET   0x0020000000000000ull
-+#define CTRL_CMD_ETYPE_WCLR   0x0028000000000000ull
-+#define CTRL_CMD_ETYPE_SET    0x0030000000000000ull
-+#define CTRL_CMD_ETYPE_CLR    0x0038000000000000ull
-+#define CTRL_CMD_REG_M                0x000000000000007full
- #define CTRL_CMD_REG_S                0
- #define CTRL_CMD_REG(x)               ((((long)(x)) << CTRL_CMD_REG_S) & \
-                                CTRL_CMD_REG_M)
-@@ -461,6 +522,16 @@ extern void *pasemi_dma_alloc_buf(struct
- extern void pasemi_dma_free_buf(struct pasemi_dmachan *chan, int size,
-                               dma_addr_t *handle);
-+/* Routines to allocate flags (events) for channel syncronization */
-+extern int  pasemi_dma_alloc_flag(void);
-+extern void pasemi_dma_free_flag(int flag);
-+extern void pasemi_dma_set_flag(int flag);
-+extern void pasemi_dma_clear_flag(int flag);
-+
-+/* Routines to allocate function engines */
-+extern int  pasemi_dma_alloc_fun(void);
-+extern void pasemi_dma_free_fun(int fun);
-+
- /* Initialize the library, must be called before any other functions */
- extern int pasemi_dma_init(void);
---- a/include/asm-powerpc/pci-bridge.h
-+++ b/include/asm-powerpc/pci-bridge.h
-@@ -117,7 +117,7 @@ struct pci_controller {
- #ifndef CONFIG_PPC64
--static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus)
-+static inline struct pci_controller *pci_bus_to_host(const struct pci_bus *bus)
- {
-       return bus->sysdata;
- }
-@@ -235,7 +235,7 @@ extern void pcibios_fixup_new_pci_device
- extern int pcibios_remove_root_bus(struct pci_controller *phb);
--static inline struct pci_controller *pci_bus_to_host(struct pci_bus *bus)
-+static inline struct pci_controller *pci_bus_to_host(const struct pci_bus *bus)
- {
-       struct device_node *busdn = bus->sysdata;
---- a/include/asm-powerpc/pgtable-ppc32.h
-+++ b/include/asm-powerpc/pgtable-ppc32.h
-@@ -98,9 +98,6 @@ extern int icache_44x_need_flush;
- #define USER_PTRS_PER_PGD     (TASK_SIZE / PGDIR_SIZE)
- #define FIRST_USER_ADDRESS    0
--#define USER_PGD_PTRS (PAGE_OFFSET >> PGDIR_SHIFT)
--#define KERNEL_PGD_PTRS (PTRS_PER_PGD-USER_PGD_PTRS)
--
- #define pte_ERROR(e) \
-       printk("%s:%d: bad pte %llx.\n", __FILE__, __LINE__, \
-               (unsigned long long)pte_val(e))
-@@ -420,7 +417,8 @@ extern int icache_44x_need_flush;
- #define _PAGE_IO      (_PAGE_KERNEL | _PAGE_NO_CACHE | _PAGE_GUARDED)
- #define _PAGE_RAM     (_PAGE_KERNEL | _PAGE_HWEXEC)
--#if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH)
-+#if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH) ||\
-+      defined(CONFIG_KPROBES)
- /* We want the debuggers to be able to set breakpoints anywhere, so
-  * don't write protect the kernel text */
- #define _PAGE_RAM_TEXT        _PAGE_RAM
-@@ -692,7 +690,7 @@ extern pgprot_t phys_mem_access_prot(str
- #define pmd_page_vaddr(pmd)   \
-       ((unsigned long) (pmd_val(pmd) & PAGE_MASK))
- #define pmd_page(pmd)         \
--      (mem_map + (__pa(pmd_val(pmd)) >> PAGE_SHIFT))
-+      pfn_to_page((__pa(pmd_val(pmd)) >> PAGE_SHIFT))
- #endif
- /* to find an entry in a kernel page-table-directory */
---- /dev/null
-+++ b/include/asm-powerpc/phyp_dump.h
-@@ -0,0 +1,47 @@
-+/*
-+ * Hypervisor-assisted dump
-+ *
-+ * Linas Vepstas, Manish Ahuja 2008
-+ * Copyright 2008 IBM Corp.
-+ *
-+ *      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.
-+ */
-+
-+#ifndef _PPC64_PHYP_DUMP_H
-+#define _PPC64_PHYP_DUMP_H
-+
-+#ifdef CONFIG_PHYP_DUMP
-+
-+/* The RMR region will be saved for later dumping
-+ * whenever the kernel crashes. Set this to 256MB. */
-+#define PHYP_DUMP_RMR_START 0x0
-+#define PHYP_DUMP_RMR_END   (1UL<<28)
-+
-+struct phyp_dump {
-+      /* Memory that is reserved during very early boot. */
-+      unsigned long init_reserve_start;
-+      unsigned long init_reserve_size;
-+      /* cmd line options during boot */
-+      unsigned long reserve_bootvar;
-+      unsigned long phyp_dump_at_boot;
-+      /* Check status during boot if dump supported, active & present*/
-+      unsigned long phyp_dump_configured;
-+      unsigned long phyp_dump_is_active;
-+      /* store cpu & hpte size */
-+      unsigned long cpu_state_size;
-+      unsigned long hpte_region_size;
-+      /* previous scratch area values */
-+      unsigned long reserved_scratch_addr;
-+      unsigned long reserved_scratch_size;
-+};
-+
-+extern struct phyp_dump *phyp_dump_info;
-+
-+int early_init_dt_scan_phyp_dump(unsigned long node,
-+              const char *uname, int depth, void *data);
-+
-+#endif /* CONFIG_PHYP_DUMP */
-+#endif /* _PPC64_PHYP_DUMP_H */
---- a/include/asm-powerpc/pmi.h
-+++ b/include/asm-powerpc/pmi.h
-@@ -29,8 +29,6 @@
- #ifdef __KERNEL__
--#include <asm/of_device.h>
--
- #define PMI_TYPE_FREQ_CHANGE  0x01
- #define PMI_READ_TYPE         0
- #define PMI_READ_DATA0                1
---- /dev/null
-+++ b/include/asm-powerpc/ppc4xx.h
-@@ -0,0 +1,18 @@
-+/*
-+ * PPC4xx Prototypes and definitions
-+ *
-+ * Copyright 2008 DENX Software Engineering, Stefan Roese <sr@denx.de>
-+ *
-+ * This 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.
-+ *
-+ */
-+
-+#ifndef __ASM_POWERPC_PPC4xx_H__
-+#define __ASM_POWERPC_PPC4xx_H__
-+
-+extern void ppc4xx_reset_system(char *cmd);
-+
-+#endif /* __ASM_POWERPC_PPC4xx_H__ */
---- a/include/asm-powerpc/ps3.h
-+++ b/include/asm-powerpc/ps3.h
-@@ -434,8 +434,11 @@ struct ps3_sys_manager_ops {
- };
- void ps3_sys_manager_register_ops(const struct ps3_sys_manager_ops *ops);
--void ps3_sys_manager_power_off(void);
--void ps3_sys_manager_restart(void);
-+void __noreturn ps3_sys_manager_power_off(void);
-+void __noreturn ps3_sys_manager_restart(void);
-+void __noreturn ps3_sys_manager_halt(void);
-+int ps3_sys_manager_get_wol(void);
-+void ps3_sys_manager_set_wol(int state);
- struct ps3_prealloc {
-     const char *name;
---- a/include/asm-powerpc/ptrace.h
-+++ b/include/asm-powerpc/ptrace.h
-@@ -58,6 +58,11 @@ struct pt_regs {
- #define __ARCH_WANT_COMPAT_SYS_PTRACE
- #define STACK_FRAME_OVERHEAD  112     /* size of minimum stack frame */
-+#define STACK_FRAME_LR_SAVE   2       /* Location of LR in stack frame */
-+#define STACK_FRAME_REGS_MARKER       ASM_CONST(0x7265677368657265)
-+#define STACK_INT_FRAME_SIZE  (sizeof(struct pt_regs) + \
-+                                      STACK_FRAME_OVERHEAD + 288)
-+#define STACK_FRAME_MARKER    12
- /* Size of dummy stack frame allocated when calling signal handler. */
- #define __SIGNAL_FRAMESIZE    128
-@@ -66,6 +71,10 @@ struct pt_regs {
- #else /* __powerpc64__ */
- #define STACK_FRAME_OVERHEAD  16      /* size of minimum stack frame */
-+#define STACK_FRAME_LR_SAVE   1       /* Location of LR in stack frame */
-+#define STACK_FRAME_REGS_MARKER       ASM_CONST(0x72656773)
-+#define STACK_INT_FRAME_SIZE  (sizeof(struct pt_regs) + STACK_FRAME_OVERHEAD)
-+#define STACK_FRAME_MARKER    2
- /* Size of stack frame allocated when calling signal handler. */
- #define __SIGNAL_FRAMESIZE    64
---- a/include/asm-powerpc/qe.h
-+++ b/include/asm-powerpc/qe.h
-@@ -85,6 +85,7 @@ extern int par_io_data_set(u8 port, u8 p
- /* QE internal API */
- int qe_issue_cmd(u32 cmd, u32 device, u8 mcn_protocol, u32 cmd_input);
- enum qe_clock qe_clock_source(const char *source);
-+unsigned int qe_get_brg_clk(void);
- int qe_setbrg(enum qe_clock brg, unsigned int rate, unsigned int multiplier);
- int qe_get_snum(void);
- void qe_put_snum(u8 snum);
-@@ -92,7 +93,16 @@ unsigned long qe_muram_alloc(int size, i
- int qe_muram_free(unsigned long offset);
- unsigned long qe_muram_alloc_fixed(unsigned long offset, int size);
- void qe_muram_dump(void);
--void *qe_muram_addr(unsigned long offset);
-+
-+static inline void __iomem *qe_muram_addr(unsigned long offset)
-+{
-+      return (void __iomem *)&qe_immr->muram[offset];
-+}
-+
-+static inline unsigned long qe_muram_offset(void __iomem *addr)
-+{
-+      return addr - (void __iomem *)qe_immr->muram;
-+}
- /* Structure that defines QE firmware binary files.
-  *
---- a/include/asm-powerpc/rwsem.h
-+++ b/include/asm-powerpc/rwsem.h
-@@ -32,11 +32,20 @@ struct rw_semaphore {
- #define RWSEM_ACTIVE_WRITE_BIAS               (RWSEM_WAITING_BIAS + RWSEM_ACTIVE_BIAS)
-       spinlock_t              wait_lock;
-       struct list_head        wait_list;
-+#ifdef CONFIG_DEBUG_LOCK_ALLOC
-+      struct lockdep_map      dep_map;
-+#endif
- };
-+#ifdef CONFIG_DEBUG_LOCK_ALLOC
-+# define __RWSEM_DEP_MAP_INIT(lockname) , .dep_map = { .name = #lockname }
-+#else
-+# define __RWSEM_DEP_MAP_INIT(lockname)
-+#endif
-+
- #define __RWSEM_INITIALIZER(name) \
--      { RWSEM_UNLOCKED_VALUE, SPIN_LOCK_UNLOCKED, \
--        LIST_HEAD_INIT((name).wait_list) }
-+      { RWSEM_UNLOCKED_VALUE, __SPIN_LOCK_UNLOCKED((name).wait_lock), \
-+        LIST_HEAD_INIT((name).wait_list) __RWSEM_DEP_MAP_INIT(name) }
- #define DECLARE_RWSEM(name)           \
-       struct rw_semaphore name = __RWSEM_INITIALIZER(name)
-@@ -46,12 +55,15 @@ extern struct rw_semaphore *rwsem_down_w
- extern struct rw_semaphore *rwsem_wake(struct rw_semaphore *sem);
- extern struct rw_semaphore *rwsem_downgrade_wake(struct rw_semaphore *sem);
--static inline void init_rwsem(struct rw_semaphore *sem)
--{
--      sem->count = RWSEM_UNLOCKED_VALUE;
--      spin_lock_init(&sem->wait_lock);
--      INIT_LIST_HEAD(&sem->wait_list);
--}
-+extern void __init_rwsem(struct rw_semaphore *sem, const char *name,
-+                       struct lock_class_key *key);
-+
-+#define init_rwsem(sem)                                       \
-+      do {                                            \
-+              static struct lock_class_key __key;     \
-+                                                      \
-+              __init_rwsem((sem), #sem, &__key);      \
-+      } while (0)
- /*
-  * lock for reading
-@@ -78,7 +90,7 @@ static inline int __down_read_trylock(st
- /*
-  * lock for writing
-  */
--static inline void __down_write(struct rw_semaphore *sem)
-+static inline void __down_write_nested(struct rw_semaphore *sem, int subclass)
- {
-       int tmp;
-@@ -88,6 +100,11 @@ static inline void __down_write(struct r
-               rwsem_down_write_failed(sem);
- }
-+static inline void __down_write(struct rw_semaphore *sem)
-+{
-+      __down_write_nested(sem, 0);
-+}
-+
- static inline int __down_write_trylock(struct rw_semaphore *sem)
- {
-       int tmp;
---- a/include/asm-powerpc/sparsemem.h
-+++ b/include/asm-powerpc/sparsemem.h
-@@ -15,6 +15,7 @@
- #ifdef CONFIG_MEMORY_HOTPLUG
- extern void create_section_mapping(unsigned long start, unsigned long end);
-+extern int remove_section_mapping(unsigned long start, unsigned long end);
- #ifdef CONFIG_NUMA
- extern int hot_add_scn_to_nid(unsigned long scn_addr);
- #else
---- a/include/asm-powerpc/spinlock.h
-+++ b/include/asm-powerpc/spinlock.h
-@@ -19,6 +19,7 @@
-  *
-  * (the type definitions are in asm/spinlock_types.h)
-  */
-+#include <linux/irqflags.h>
- #ifdef CONFIG_PPC64
- #include <asm/paca.h>
- #include <asm/hvcall.h>
---- a/include/asm-powerpc/string.h
-+++ b/include/asm-powerpc/string.h
-@@ -7,6 +7,7 @@
- #define __HAVE_ARCH_STRNCPY
- #define __HAVE_ARCH_STRLEN
- #define __HAVE_ARCH_STRCMP
-+#define __HAVE_ARCH_STRNCMP
- #define __HAVE_ARCH_STRCAT
- #define __HAVE_ARCH_MEMSET
- #define __HAVE_ARCH_MEMCPY
-@@ -18,6 +19,7 @@ extern char * strcpy(char *,const char *
- extern char * strncpy(char *,const char *, __kernel_size_t);
- extern __kernel_size_t strlen(const char *);
- extern int strcmp(const char *,const char *);
-+extern int strncmp(const char *, const char *, __kernel_size_t);
- extern char * strcat(char *, const char *);
- extern void * memset(void *,int,__kernel_size_t);
- extern void * memcpy(void *,const void *,__kernel_size_t);
---- a/include/asm-powerpc/types.h
-+++ b/include/asm-powerpc/types.h
-@@ -84,6 +84,13 @@ typedef unsigned long long u64;
- typedef __vector128 vector128;
-+/* Physical address used by some IO functions */
-+#if defined(CONFIG_PPC64) || defined(CONFIG_PHYS_64BIT)
-+typedef u64 phys_addr_t;
-+#else
-+typedef u32 phys_addr_t;
-+#endif
-+
- #ifdef __powerpc64__
- typedef u64 dma_addr_t;
- #else
---- /dev/null
-+++ b/include/asm-sparc64/lmb.h
-@@ -0,0 +1,10 @@
-+#ifndef _SPARC64_LMB_H
-+#define _SPARC64_LMB_H
-+
-+#include <asm/oplib.h>
-+
-+#define LMB_DBG(fmt...) prom_printf(fmt)
-+
-+#define LMB_REAL_LIMIT        0
-+
-+#endif /* !(_SPARC64_LMB_H) */
---- /dev/null
-+++ b/include/linux/lmb.h
-@@ -0,0 +1,85 @@
-+#ifndef _LINUX_LMB_H
-+#define _LINUX_LMB_H
-+#ifdef __KERNEL__
-+
-+/*
-+ * Logical memory blocks.
-+ *
-+ * Copyright (C) 2001 Peter Bergner, IBM Corp.
-+ *
-+ * 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 <linux/init.h>
-+#include <linux/mm.h>
-+
-+#define MAX_LMB_REGIONS 128
-+
-+struct lmb_property {
-+      u64 base;
-+      u64 size;
-+};
-+
-+struct lmb_region {
-+      unsigned long cnt;
-+      u64 size;
-+      struct lmb_property region[MAX_LMB_REGIONS+1];
-+};
-+
-+struct lmb {
-+      unsigned long debug;
-+      u64 rmo_size;
-+      struct lmb_region memory;
-+      struct lmb_region reserved;
-+};
-+
-+extern struct lmb lmb;
-+
-+extern void __init lmb_init(void);
-+extern void __init lmb_analyze(void);
-+extern long __init lmb_add(u64 base, u64 size);
-+extern long __init lmb_reserve(u64 base, u64 size);
-+extern u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
-+                              u64 (*nid_range)(u64, u64, int *));
-+extern u64 __init lmb_alloc(u64 size, u64 align);
-+extern u64 __init lmb_alloc_base(u64 size,
-+              u64, u64 max_addr);
-+extern u64 __init __lmb_alloc_base(u64 size,
-+              u64 align, u64 max_addr);
-+extern u64 __init lmb_phys_mem_size(void);
-+extern u64 __init lmb_end_of_DRAM(void);
-+extern void __init lmb_enforce_memory_limit(u64 memory_limit);
-+extern int __init lmb_is_reserved(u64 addr);
-+
-+extern void lmb_dump_all(void);
-+
-+static inline u64
-+lmb_size_bytes(struct lmb_region *type, unsigned long region_nr)
-+{
-+      return type->region[region_nr].size;
-+}
-+static inline u64
-+lmb_size_pages(struct lmb_region *type, unsigned long region_nr)
-+{
-+      return lmb_size_bytes(type, region_nr) >> PAGE_SHIFT;
-+}
-+static inline u64
-+lmb_start_pfn(struct lmb_region *type, unsigned long region_nr)
-+{
-+      return type->region[region_nr].base >> PAGE_SHIFT;
-+}
-+static inline u64
-+lmb_end_pfn(struct lmb_region *type, unsigned long region_nr)
-+{
-+      return lmb_start_pfn(type, region_nr) +
-+             lmb_size_pages(type, region_nr);
-+}
-+
-+#include <asm/lmb.h>
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _LINUX_LMB_H */
---- a/include/linux/of.h
-+++ b/include/linux/of.h
-@@ -62,6 +62,7 @@ extern struct property *of_find_property
-                                        int *lenp);
- extern int of_device_is_compatible(const struct device_node *device,
-                                  const char *);
-+extern int of_device_is_available(const struct device_node *device);
- extern const void *of_get_property(const struct device_node *node,
-                               const char *name,
-                               int *lenp);
---- /dev/null
-+++ b/include/linux/of_gpio.h
-@@ -0,0 +1,69 @@
-+/*
-+ * OF helpers for the GPIO API
-+ *
-+ * Copyright (c) 2007-2008  MontaVista Software, Inc.
-+ *
-+ * Author: Anton Vorontsov <avorontsov@ru.mvista.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.
-+ */
-+
-+#ifndef __LINUX_OF_GPIO_H
-+#define __LINUX_OF_GPIO_H
-+
-+#include <linux/errno.h>
-+#include <asm/gpio.h>
-+
-+#ifdef CONFIG_OF_GPIO
-+
-+/*
-+ * Generic OF GPIO chip
-+ */
-+struct of_gpio_chip {
-+      struct gpio_chip gc;
-+      int gpio_cells;
-+      int (*xlate)(struct of_gpio_chip *of_gc, struct device_node *np,
-+                   const void *gpio_spec);
-+};
-+
-+static inline struct of_gpio_chip *to_of_gpio_chip(struct gpio_chip *gc)
-+{
-+      return container_of(gc, struct of_gpio_chip, gc);
-+}
-+
-+/*
-+ * OF GPIO chip for memory mapped banks
-+ */
-+struct of_mm_gpio_chip {
-+      struct of_gpio_chip of_gc;
-+      void (*save_regs)(struct of_mm_gpio_chip *mm_gc);
-+      void __iomem *regs;
-+};
-+
-+static inline struct of_mm_gpio_chip *to_of_mm_gpio_chip(struct gpio_chip *gc)
-+{
-+      struct of_gpio_chip *of_gc = to_of_gpio_chip(gc);
-+
-+      return container_of(of_gc, struct of_mm_gpio_chip, of_gc);
-+}
-+
-+extern int of_get_gpio(struct device_node *np, int index);
-+extern int of_mm_gpiochip_add(struct device_node *np,
-+                            struct of_mm_gpio_chip *mm_gc);
-+extern int of_gpio_simple_xlate(struct of_gpio_chip *of_gc,
-+                              struct device_node *np,
-+                              const void *gpio_spec);
-+#else
-+
-+/* Drivers may not strictly depend on the GPIO support, so let them link. */
-+static inline int of_get_gpio(struct device_node *np, int index)
-+{
-+      return -ENOSYS;
-+}
-+
-+#endif /* CONFIG_OF_GPIO */
-+
-+#endif /* __LINUX_OF_GPIO_H */
---- /dev/null
-+++ b/include/linux/of_i2c.h
-@@ -0,0 +1,24 @@
-+/*
-+ * Generic I2C API implementation for PowerPC.
-+ *
-+ * Copyright (c) 2008 Jochen Friedrich <jochen@scram.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifndef __LINUX_OF_I2C_H
-+#define __LINUX_OF_I2C_H
-+
-+#include <linux/i2c.h>
-+
-+#ifdef CONFIG_OF_I2C
-+
-+void of_register_i2c_devices(struct i2c_adapter *adap,
-+                           struct device_node *adap_node);
-+
-+#endif /* CONFIG_OF_I2C */
-+
-+#endif /* __LINUX_OF_I2C_H */
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -141,4 +141,7 @@ config HAS_DMA
- config CHECK_SIGNATURE
-       bool
-+config HAVE_LMB
-+      boolean
-+
- endmenu
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -70,6 +70,8 @@ obj-$(CONFIG_FAULT_INJECTION) += fault-i
- lib-$(CONFIG_GENERIC_BUG) += bug.o
-+obj-$(CONFIG_HAVE_LMB) += lmb.o
-+
- hostprogs-y   := gen_crc32table
- clean-files   := crc32table.h
---- /dev/null
-+++ b/lib/lmb.c
-@@ -0,0 +1,428 @@
-+/*
-+ * Procedures for maintaining information about logical memory blocks.
-+ *
-+ * Peter Bergner, IBM Corp.   June 2001.
-+ * Copyright (C) 2001 Peter Bergner.
-+ *
-+ *      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 <linux/kernel.h>
-+#include <linux/init.h>
-+#include <linux/bitops.h>
-+#include <linux/lmb.h>
-+
-+#define LMB_ALLOC_ANYWHERE    0
-+
-+struct lmb lmb;
-+
-+void lmb_dump_all(void)
-+{
-+#ifdef DEBUG
-+      unsigned long i;
-+
-+      pr_debug("lmb_dump_all:\n");
-+      pr_debug("    memory.cnt                  = 0x%lx\n", lmb.memory.cnt);
-+      pr_debug("    memory.size                 = 0x%llx\n",
-+          (unsigned long long)lmb.memory.size);
-+      for (i=0; i < lmb.memory.cnt ;i++) {
-+              pr_debug("    memory.region[0x%x].base       = 0x%llx\n",
-+                  i, (unsigned long long)lmb.memory.region[i].base);
-+              pr_debug("                    .size     = 0x%llx\n",
-+                  (unsigned long long)lmb.memory.region[i].size);
-+      }
-+
-+      pr_debug("    reserved.cnt        = 0x%lx\n", lmb.reserved.cnt);
-+      pr_debug("    reserved.size       = 0x%lx\n", lmb.reserved.size);
-+      for (i=0; i < lmb.reserved.cnt ;i++) {
-+              pr_debug("    reserved.region[0x%x].base       = 0x%llx\n",
-+                  i, (unsigned long long)lmb.reserved.region[i].base);
-+              pr_debug("                    .size     = 0x%llx\n",
-+                  (unsigned long long)lmb.reserved.region[i].size);
-+      }
-+#endif /* DEBUG */
-+}
-+
-+static unsigned long __init lmb_addrs_overlap(u64 base1, u64 size1,
-+              u64 base2, u64 size2)
-+{
-+      return ((base1 < (base2 + size2)) && (base2 < (base1 + size1)));
-+}
-+
-+static long __init lmb_addrs_adjacent(u64 base1, u64 size1,
-+              u64 base2, u64 size2)
-+{
-+      if (base2 == base1 + size1)
-+              return 1;
-+      else if (base1 == base2 + size2)
-+              return -1;
-+
-+      return 0;
-+}
-+
-+static long __init lmb_regions_adjacent(struct lmb_region *rgn,
-+              unsigned long r1, unsigned long r2)
-+{
-+      u64 base1 = rgn->region[r1].base;
-+      u64 size1 = rgn->region[r1].size;
-+      u64 base2 = rgn->region[r2].base;
-+      u64 size2 = rgn->region[r2].size;
-+
-+      return lmb_addrs_adjacent(base1, size1, base2, size2);
-+}
-+
-+static void __init lmb_remove_region(struct lmb_region *rgn, unsigned long r)
-+{
-+      unsigned long i;
-+
-+      for (i = r; i < rgn->cnt - 1; i++) {
-+              rgn->region[i].base = rgn->region[i + 1].base;
-+              rgn->region[i].size = rgn->region[i + 1].size;
-+      }
-+      rgn->cnt--;
-+}
-+
-+/* Assumption: base addr of region 1 < base addr of region 2 */
-+static void __init lmb_coalesce_regions(struct lmb_region *rgn,
-+              unsigned long r1, unsigned long r2)
-+{
-+      rgn->region[r1].size += rgn->region[r2].size;
-+      lmb_remove_region(rgn, r2);
-+}
-+
-+void __init lmb_init(void)
-+{
-+      /* Create a dummy zero size LMB which will get coalesced away later.
-+       * This simplifies the lmb_add() code below...
-+       */
-+      lmb.memory.region[0].base = 0;
-+      lmb.memory.region[0].size = 0;
-+      lmb.memory.cnt = 1;
-+
-+      /* Ditto. */
-+      lmb.reserved.region[0].base = 0;
-+      lmb.reserved.region[0].size = 0;
-+      lmb.reserved.cnt = 1;
-+}
-+
-+void __init lmb_analyze(void)
-+{
-+      int i;
-+
-+      lmb.memory.size = 0;
-+
-+      for (i = 0; i < lmb.memory.cnt; i++)
-+              lmb.memory.size += lmb.memory.region[i].size;
-+}
-+
-+static long __init lmb_add_region(struct lmb_region *rgn, u64 base, u64 size)
-+{
-+      unsigned long coalesced = 0;
-+      long adjacent, i;
-+
-+      if ((rgn->cnt == 1) && (rgn->region[0].size == 0)) {
-+              rgn->region[0].base = base;
-+              rgn->region[0].size = size;
-+              return 0;
-+      }
-+
-+      /* First try and coalesce this LMB with another. */
-+      for (i = 0; i < rgn->cnt; i++) {
-+              u64 rgnbase = rgn->region[i].base;
-+              u64 rgnsize = rgn->region[i].size;
-+
-+              if ((rgnbase == base) && (rgnsize == size))
-+                      /* Already have this region, so we're done */
-+                      return 0;
-+
-+              adjacent = lmb_addrs_adjacent(base, size, rgnbase, rgnsize);
-+              if (adjacent > 0) {
-+                      rgn->region[i].base -= size;
-+                      rgn->region[i].size += size;
-+                      coalesced++;
-+                      break;
-+              } else if (adjacent < 0) {
-+                      rgn->region[i].size += size;
-+                      coalesced++;
-+                      break;
-+              }
-+      }
-+
-+      if ((i < rgn->cnt - 1) && lmb_regions_adjacent(rgn, i, i+1)) {
-+              lmb_coalesce_regions(rgn, i, i+1);
-+              coalesced++;
-+      }
-+
-+      if (coalesced)
-+              return coalesced;
-+      if (rgn->cnt >= MAX_LMB_REGIONS)
-+              return -1;
-+
-+      /* Couldn't coalesce the LMB, so add it to the sorted table. */
-+      for (i = rgn->cnt - 1; i >= 0; i--) {
-+              if (base < rgn->region[i].base) {
-+                      rgn->region[i+1].base = rgn->region[i].base;
-+                      rgn->region[i+1].size = rgn->region[i].size;
-+              } else {
-+                      rgn->region[i+1].base = base;
-+                      rgn->region[i+1].size = size;
-+                      break;
-+              }
-+      }
-+
-+      if (base < rgn->region[0].base) {
-+              rgn->region[0].base = base;
-+              rgn->region[0].size = size;
-+      }
-+      rgn->cnt++;
-+
-+      return 0;
-+}
-+
-+long __init lmb_add(u64 base, u64 size)
-+{
-+      struct lmb_region *_rgn = &lmb.memory;
-+
-+      /* On pSeries LPAR systems, the first LMB is our RMO region. */
-+      if (base == 0)
-+              lmb.rmo_size = size;
-+
-+      return lmb_add_region(_rgn, base, size);
-+
-+}
-+
-+long __init lmb_reserve(u64 base, u64 size)
-+{
-+      struct lmb_region *_rgn = &lmb.reserved;
-+
-+      BUG_ON(0 == size);
-+
-+      return lmb_add_region(_rgn, base, size);
-+}
-+
-+long __init lmb_overlaps_region(struct lmb_region *rgn, u64 base, u64 size)
-+{
-+      unsigned long i;
-+
-+      for (i = 0; i < rgn->cnt; i++) {
-+              u64 rgnbase = rgn->region[i].base;
-+              u64 rgnsize = rgn->region[i].size;
-+              if (lmb_addrs_overlap(base, size, rgnbase, rgnsize))
-+                      break;
-+      }
-+
-+      return (i < rgn->cnt) ? i : -1;
-+}
-+
-+static u64 lmb_align_down(u64 addr, u64 size)
-+{
-+      return addr & ~(size - 1);
-+}
-+
-+static u64 lmb_align_up(u64 addr, u64 size)
-+{
-+      return (addr + (size - 1)) & ~(size - 1);
-+}
-+
-+static u64 __init lmb_alloc_nid_unreserved(u64 start, u64 end,
-+                                         u64 size, u64 align)
-+{
-+      u64 base, res_base;
-+      long j;
-+
-+      base = lmb_align_down((end - size), align);
-+      while (start <= base) {
-+              j = lmb_overlaps_region(&lmb.reserved, base, size);
-+              if (j < 0) {
-+                      /* this area isn't reserved, take it */
-+                      if (lmb_add_region(&lmb.reserved, base,
-+                                         lmb_align_up(size, align)) < 0)
-+                              base = ~(u64)0;
-+                      return base;
-+              }
-+              res_base = lmb.reserved.region[j].base;
-+              if (res_base < size)
-+                      break;
-+              base = lmb_align_down(res_base - size, align);
-+      }
-+
-+      return ~(u64)0;
-+}
-+
-+static u64 __init lmb_alloc_nid_region(struct lmb_property *mp,
-+                                     u64 (*nid_range)(u64, u64, int *),
-+                                     u64 size, u64 align, int nid)
-+{
-+      u64 start, end;
-+
-+      start = mp->base;
-+      end = start + mp->size;
-+
-+      start = lmb_align_up(start, align);
-+      while (start < end) {
-+              u64 this_end;
-+              int this_nid;
-+
-+              this_end = nid_range(start, end, &this_nid);
-+              if (this_nid == nid) {
-+                      u64 ret = lmb_alloc_nid_unreserved(start, this_end,
-+                                                         size, align);
-+                      if (ret != ~(u64)0)
-+                              return ret;
-+              }
-+              start = this_end;
-+      }
-+
-+      return ~(u64)0;
-+}
-+
-+u64 __init lmb_alloc_nid(u64 size, u64 align, int nid,
-+                       u64 (*nid_range)(u64 start, u64 end, int *nid))
-+{
-+      struct lmb_region *mem = &lmb.memory;
-+      int i;
-+
-+      for (i = 0; i < mem->cnt; i++) {
-+              u64 ret = lmb_alloc_nid_region(&mem->region[i],
-+                                             nid_range,
-+                                             size, align, nid);
-+              if (ret != ~(u64)0)
-+                      return ret;
-+      }
-+
-+      return lmb_alloc(size, align);
-+}
-+
-+u64 __init lmb_alloc(u64 size, u64 align)
-+{
-+      return lmb_alloc_base(size, align, LMB_ALLOC_ANYWHERE);
-+}
-+
-+u64 __init lmb_alloc_base(u64 size, u64 align, u64 max_addr)
-+{
-+      u64 alloc;
-+
-+      alloc = __lmb_alloc_base(size, align, max_addr);
-+
-+      if (alloc == 0)
-+              panic("ERROR: Failed to allocate 0x%llx bytes below 0x%llx.\n",
-+                    (unsigned long long) size, (unsigned long long) max_addr);
-+
-+      return alloc;
-+}
-+
-+u64 __init __lmb_alloc_base(u64 size, u64 align, u64 max_addr)
-+{
-+      long i, j;
-+      u64 base = 0;
-+      u64 res_base;
-+
-+      BUG_ON(0 == size);
-+
-+      /* On some platforms, make sure we allocate lowmem */
-+      /* Note that LMB_REAL_LIMIT may be LMB_ALLOC_ANYWHERE */
-+      if (max_addr == LMB_ALLOC_ANYWHERE)
-+              max_addr = LMB_REAL_LIMIT;
-+
-+      for (i = lmb.memory.cnt - 1; i >= 0; i--) {
-+              u64 lmbbase = lmb.memory.region[i].base;
-+              u64 lmbsize = lmb.memory.region[i].size;
-+
-+              if (lmbsize < size)
-+                      continue;
-+              if (max_addr == LMB_ALLOC_ANYWHERE)
-+                      base = lmb_align_down(lmbbase + lmbsize - size, align);
-+              else if (lmbbase < max_addr) {
-+                      base = min(lmbbase + lmbsize, max_addr);
-+                      base = lmb_align_down(base - size, align);
-+              } else
-+                      continue;
-+
-+              while (base && lmbbase <= base) {
-+                      j = lmb_overlaps_region(&lmb.reserved, base, size);
-+                      if (j < 0) {
-+                              /* this area isn't reserved, take it */
-+                              if (lmb_add_region(&lmb.reserved, base,
-+                                                 size) < 0)
-+                                      return 0;
-+                              return base;
-+                      }
-+                      res_base = lmb.reserved.region[j].base;
-+                      if (res_base < size)
-+                              break;
-+                      base = lmb_align_down(res_base - size, align);
-+              }
-+      }
-+      return 0;
-+}
-+
-+/* You must call lmb_analyze() before this. */
-+u64 __init lmb_phys_mem_size(void)
-+{
-+      return lmb.memory.size;
-+}
-+
-+u64 __init lmb_end_of_DRAM(void)
-+{
-+      int idx = lmb.memory.cnt - 1;
-+
-+      return (lmb.memory.region[idx].base + lmb.memory.region[idx].size);
-+}
-+
-+/* You must call lmb_analyze() after this. */
-+void __init lmb_enforce_memory_limit(u64 memory_limit)
-+{
-+      unsigned long i;
-+      u64 limit;
-+      struct lmb_property *p;
-+
-+      if (!memory_limit)
-+              return;
-+
-+      /* Truncate the lmb regions to satisfy the memory limit. */
-+      limit = memory_limit;
-+      for (i = 0; i < lmb.memory.cnt; i++) {
-+              if (limit > lmb.memory.region[i].size) {
-+                      limit -= lmb.memory.region[i].size;
-+                      continue;
-+              }
-+
-+              lmb.memory.region[i].size = limit;
-+              lmb.memory.cnt = i + 1;
-+              break;
-+      }
-+
-+      if (lmb.memory.region[0].size < lmb.rmo_size)
-+              lmb.rmo_size = lmb.memory.region[0].size;
-+
-+      /* And truncate any reserves above the limit also. */
-+      for (i = 0; i < lmb.reserved.cnt; i++) {
-+              p = &lmb.reserved.region[i];
-+
-+              if (p->base > memory_limit)
-+                      p->size = 0;
-+              else if ((p->base + p->size) > memory_limit)
-+                      p->size = memory_limit - p->base;
-+
-+              if (p->size == 0) {
-+                      lmb_remove_region(&lmb.reserved, i);
-+                      i--;
-+              }
-+      }
-+}
-+
-+int __init lmb_is_reserved(u64 addr)
-+{
-+      int i;
-+
-+      for (i = 0; i < lmb.reserved.cnt; i++) {
-+              u64 upper = lmb.reserved.region[i].base +
-+                      lmb.reserved.region[i].size - 1;
-+              if ((addr >= lmb.reserved.region[i].base) && (addr <= upper))
-+                      return 1;
-+      }
-+      return 0;
-+}
diff --git a/target/linux/generic-2.6/patches-2.6.25/801-usb_serial_endpoint_size.patch b/target/linux/generic-2.6/patches-2.6.25/801-usb_serial_endpoint_size.patch
deleted file mode 100644 (file)
index 395495a..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -58,6 +58,7 @@ static struct usb_driver usb_serial_driv
-    drivers depend on it.
- */
-+static ushort maxSize = 0;
- static int debug;
- static struct usb_serial *serial_table[SERIAL_TTY_MINORS];    /* initially all NULL */
- static DEFINE_MUTEX(table_lock);
-@@ -903,7 +904,7 @@ int usb_serial_probe(struct usb_interfac
-                       dev_err(&interface->dev, "No free urbs available\n");
-                       goto probe_error;
-               }
--              buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
-+              buffer_size = (endpoint->wMaxPacketSize > maxSize) ? endpoint->wMaxPacketSize : maxSize;
-               port->bulk_in_size = buffer_size;
-               port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
-               port->bulk_in_buffer = kmalloc (buffer_size, GFP_KERNEL);
-@@ -1315,3 +1316,5 @@ MODULE_LICENSE("GPL");
- module_param(debug, bool, S_IRUGO | S_IWUSR);
- MODULE_PARM_DESC(debug, "Debug enabled or not");
-+module_param(maxSize, ushort,0);
-+MODULE_PARM_DESC(maxSize,"User specified USB endpoint size");
diff --git a/target/linux/generic-2.6/patches-2.6.25/840-unable_to_open_console.patch b/target/linux/generic-2.6/patches-2.6.25/840-unable_to_open_console.patch
deleted file mode 100644 (file)
index d1d162b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -775,7 +775,7 @@ static int noinline init_post(void)
-       numa_default_policy();
-       if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
--              printk(KERN_WARNING "Warning: unable to open an initial console.\n");
-+              printk(KERN_WARNING "Please be patient, while OpenWrt loads ...\n");
-       (void) sys_dup(0);
-       (void) sys_dup(0);
diff --git a/target/linux/generic-2.6/patches-2.6.25/850-jffs2_erase_progress_indicator.patch b/target/linux/generic-2.6/patches-2.6.25/850-jffs2_erase_progress_indicator.patch
deleted file mode 100644 (file)
index 20bf1ef..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/fs/jffs2/erase.c
-+++ b/fs/jffs2/erase.c
-@@ -35,6 +35,8 @@ static void jffs2_erase_block(struct jff
- {
-       int ret;
-       uint32_t bad_offset;
-+      static char s[]="|/-\\", *p=s;
-+
- #ifdef __ECOS
-        ret = jffs2_flash_erase(c, jeb);
-        if (!ret) {
-@@ -47,6 +49,11 @@ static void jffs2_erase_block(struct jff
-       D1(printk(KERN_DEBUG "jffs2_erase_block(): erase block %#08x (range %#08x-%#08x)\n",
-                               jeb->offset, jeb->offset, jeb->offset + c->sector_size));
-+
-+      printk("%c\b", *p);
-+      if (*++p==0)
-+      p=s;
-+
-       instr = kmalloc(sizeof(struct erase_info) + sizeof(struct erase_priv_struct), GFP_KERNEL);
-       if (!instr) {
-               printk(KERN_WARNING "kmalloc for struct erase_info in jffs2_erase_block failed. Refiling block for later\n");
diff --git a/target/linux/generic-2.6/patches-2.6.25/900-headers_type_and_time.patch b/target/linux/generic-2.6/patches-2.6.25/900-headers_type_and_time.patch
deleted file mode 100644 (file)
index cd5d686..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
---- a/include/linux/time.h
-+++ b/include/linux/time.h
-@@ -1,6 +1,10 @@
- #ifndef _LINUX_TIME_H
- #define _LINUX_TIME_H
-+#ifndef __KERNEL__
-+#include <time.h>
-+#else
-+
- #include <linux/types.h>
- #ifdef __KERNEL__
-@@ -232,4 +236,6 @@ struct itimerval {
-  */
- #define TIMER_ABSTIME                 0x01
-+#endif /* __KERNEL__ DEBIAN */
-+
- #endif
---- a/include/linux/types.h
-+++ b/include/linux/types.h
-@@ -1,6 +1,14 @@
- #ifndef _LINUX_TYPES_H
- #define _LINUX_TYPES_H
-+/* Debian: Use userland types instead.  */
-+#ifndef __KERNEL__
-+# include <sys/types.h>
-+/* For other kernel headers.  */
-+# include <linux/posix_types.h>
-+# include <asm/types.h>
-+#else
-+
- #ifdef        __KERNEL__
- #define DECLARE_BITMAP(name,bits) \
-@@ -161,6 +169,8 @@ typedef unsigned long blkcnt_t;
- #endif /* __KERNEL_STRICT_NAMES */
-+#endif /* __KERNEL__ DEBIAN */
-+
- /*
-  * Below are truly Linux-specific types that should never collide with
-  * any application/library that wants linux/types.h.
diff --git a/target/linux/generic-2.6/patches-2.6.25/902-darwin_scripts_include.patch b/target/linux/generic-2.6/patches-2.6.25/902-darwin_scripts_include.patch
deleted file mode 100644 (file)
index 88c0421..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/scripts/genksyms/parse.c_shipped
-+++ b/scripts/genksyms/parse.c_shipped
-@@ -160,7 +160,9 @@
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/genksyms/parse.y
-+++ b/scripts/genksyms/parse.y
-@@ -24,7 +24,9 @@
- %{
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/kallsyms.c
-+++ b/scripts/kallsyms.c
-@@ -28,6 +28,35 @@
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
-+#ifdef __APPLE__
-+/* Darwin has no memmem implementation, this one is ripped of the uClibc-0.9.28 source */
-+void *memmem (const void *haystack, size_t haystack_len,
-+                          const void *needle,  size_t needle_len)
-+{
-+  const char *begin;
-+  const char *const last_possible
-+    = (const char *) haystack + haystack_len - needle_len;
-+
-+  if (needle_len == 0)
-+    /* The first occurrence of the empty string is deemed to occur at
-+       the beginning of the string.  */
-+    return (void *) haystack;
-+
-+  /* Sanity check, otherwise the loop might search through the whole
-+     memory.  */
-+  if (__builtin_expect (haystack_len < needle_len, 0))
-+    return NULL;
-+
-+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
-+    if (begin[0] == ((const char *) needle)[0] &&
-+        !memcmp ((const void *) &begin[1],
-+                 (const void *) ((const char *) needle + 1),
-+                 needle_len - 1))
-+      return (void *) begin;
-+
-+  return NULL;
-+}
-+#endif
- #define KSYM_NAME_LEN         128
---- a/scripts/kconfig/Makefile
-+++ b/scripts/kconfig/Makefile
-@@ -93,6 +93,9 @@ check-lxdialog  := $(srctree)/$(src)/lxd
- # we really need to do so. (Do not call gcc as part of make mrproper)
- HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
- HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-+ifeq ($(shell uname -s),Darwin)
-+HOST_LOADLIBES  += -lncurses
-+endif
- HOST_EXTRACFLAGS += -DLOCALE
---- a/scripts/mod/mk_elfconfig.c
-+++ b/scripts/mod/mk_elfconfig.c
-@@ -1,7 +1,11 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#ifndef __APPLE__
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- int
- main(int argc, char **argv)
---- a/scripts/mod/modpost.h
-+++ b/scripts/mod/modpost.h
-@@ -7,7 +7,11 @@
- #include <sys/mman.h>
- #include <fcntl.h>
- #include <unistd.h>
-+#if !(defined(__APPLE__) || defined(__CYGWIN__))
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- #include "elfconfig.h"
diff --git a/target/linux/generic-2.6/patches-2.6.25/903-hostap_txpower.patch b/target/linux/generic-2.6/patches-2.6.25/903-hostap_txpower.patch
deleted file mode 100644 (file)
index c0bbf2c..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
---- a/drivers/net/wireless/hostap/hostap_ap.c
-+++ b/drivers/net/wireless/hostap/hostap_ap.c
-@@ -2397,13 +2397,13 @@ int prism2_ap_get_sta_qual(local_info_t 
-               addr[count].sa_family = ARPHRD_ETHER;
-               memcpy(addr[count].sa_data, sta->addr, ETH_ALEN);
-               if (sta->last_rx_silence == 0)
--                      qual[count].qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                        qual[count].qual = (sta->last_rx_signal - 156) == 0 ?
-+                                0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      qual[count].qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              qual[count].level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              qual[count].noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        qual[count].qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                qual[count].level = sta->last_rx_signal;
-+                qual[count].noise = sta->last_rx_silence;
-               qual[count].updated = sta->last_rx_updated;
-               sta->last_rx_updated = IW_QUAL_DBM;
-@@ -2468,13 +2468,13 @@ int prism2_ap_translate_scan(struct net_
-               memset(&iwe, 0, sizeof(iwe));
-               iwe.cmd = IWEVQUAL;
-               if (sta->last_rx_silence == 0)
--                      iwe.u.qual.qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                      iwe.u.qual.qual = (sta->last_rx_signal -156) == 0 ?
-+                              0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      iwe.u.qual.qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              iwe.u.qual.level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              iwe.u.qual.noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        iwe.u.qual.qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                iwe.u.qual.level = sta->last_rx_signal;
-+                iwe.u.qual.noise = sta->last_rx_silence;
-               iwe.u.qual.updated = sta->last_rx_updated;
-               iwe.len = IW_EV_QUAL_LEN;
-               current_ev = iwe_stream_add_event(current_ev, end_buf, &iwe,
---- a/drivers/net/wireless/hostap/hostap_config.h
-+++ b/drivers/net/wireless/hostap/hostap_config.h
-@@ -45,4 +45,9 @@
-  */
- /* #define PRISM2_NO_STATION_MODES */
-+/* Enable TX power Setting functions
-+ * (min att = -128 , max att =  127)
-+ */
-+#define RAW_TXPOWER_SETTING
-+
- #endif /* HOSTAP_CONFIG_H */
---- a/drivers/net/wireless/hostap/hostap.h
-+++ b/drivers/net/wireless/hostap/hostap.h
-@@ -89,6 +89,7 @@ extern const struct iw_handler_def hosta
- extern const struct ethtool_ops prism2_ethtool_ops;
- int hostap_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
-+int hostap_restore_power(struct net_device *dev);
- #endif /* HOSTAP_H */
---- a/drivers/net/wireless/hostap/hostap_hw.c
-+++ b/drivers/net/wireless/hostap/hostap_hw.c
-@@ -933,6 +933,7 @@ static int hfa384x_set_rid(struct net_de
-                       prism2_hw_reset(dev);
-       }
-+      hostap_restore_power(dev);
-       return res;
- }
---- a/drivers/net/wireless/hostap/hostap_info.c
-+++ b/drivers/net/wireless/hostap/hostap_info.c
-@@ -434,6 +434,11 @@ static void handle_info_queue_linkstatus
-       }
-       /* Get BSSID if we have a valid AP address */
-+
-+      if ( val == HFA384X_LINKSTATUS_CONNECTED ||
-+           val == HFA384X_LINKSTATUS_DISCONNECTED ) 
-+                      hostap_restore_power(local->dev);
-+
-       if (connected) {
-               netif_carrier_on(local->dev);
-               netif_carrier_on(local->ddev);
---- a/drivers/net/wireless/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
-@@ -1500,23 +1500,20 @@ static int prism2_txpower_hfa386x_to_dBm
-               val = 255;
-       tmp = val;
--      tmp >>= 2;
--      return -12 - tmp;
-+      return tmp;
- }
- static u16 prism2_txpower_dBm_to_hfa386x(int val)
- {
-       signed char tmp;
--      if (val > 20)
--              return 128;
--      else if (val < -43)
-+      if (val > 127)
-               return 127;
-+      else if (val < -128)
-+              return 128;
-       tmp = val;
--      tmp = -12 - tmp;
--      tmp <<= 2;
-       return (unsigned char) tmp;
- }
-@@ -4076,3 +4073,35 @@ int hostap_ioctl(struct net_device *dev,
-       return ret;
- }
-+
-+/* BUG FIX: Restore power setting value when lost due to F/W bug */
-+
-+int hostap_restore_power(struct net_device *dev)
-+{
-+        struct hostap_interface *iface = dev->priv;
-+       local_info_t *local = iface->local;
-+               
-+       u16 val;
-+       int ret = 0;
-+
-+       if (local->txpower_type == PRISM2_TXPOWER_OFF) {
-+                       val = 0xff; /* use all standby and sleep modes */
-+                       ret = local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                                              HFA386X_CR_A_D_TEST_MODES2,
-+                                              &val, NULL);
-+       }
-+
-+#ifdef RAW_TXPOWER_SETTING
-+       if (local->txpower_type == PRISM2_TXPOWER_FIXED) {
-+               val = HFA384X_TEST_CFG_BIT_ALC;
-+               local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-+                                (HFA384X_TEST_CFG_BITS << 8), 0, &val, NULL);
-+               val = prism2_txpower_dBm_to_hfa386x(local->txpower);
-+               ret = (local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                            HFA386X_CR_MANUAL_TX_POWER, &val, NULL));
-+       }
-+#endif /* RAW_TXPOWER_SETTING */
-+       return (ret ? -EOPNOTSUPP : 0);
-+}
-+
-+EXPORT_SYMBOL(hostap_restore_power);
diff --git a/target/linux/generic-2.6/patches-2.6.25/903-stddef_include.patch b/target/linux/generic-2.6/patches-2.6.25/903-stddef_include.patch
deleted file mode 100644 (file)
index 7fe248d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/linux/stddef.h
-+++ b/include/linux/stddef.h
-@@ -16,6 +16,7 @@ enum {
-       false   = 0,
-       true    = 1
- };
-+#endif /* __KERNEL__ */
- #undef offsetof
- #ifdef __compiler_offsetof
-@@ -23,6 +24,5 @@ enum {
- #else
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #endif
--#endif /* __KERNEL__ */
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.25/904-ls_time_locale.patch b/target/linux/generic-2.6/patches-2.6.25/904-ls_time_locale.patch
deleted file mode 100644 (file)
index 8fc9381..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/scripts/gen_initramfs_list.sh
-+++ b/scripts/gen_initramfs_list.sh
-@@ -125,7 +125,7 @@ parse() {
-                       str="${ftype} ${name} ${location} ${str}"
-                       ;;
-               "nod")
--                      local dev=`LC_ALL=C ls -l "${location}"`
-+                      local dev=`LC_ALL=C ls -l --time-style=locale "${location}"`
-                       local maj=`field 5 ${dev}`
-                       local min=`field 6 ${dev}`
-                       maj=${maj%,}
-@@ -135,7 +135,7 @@ parse() {
-                       str="${ftype} ${name} ${str} ${dev} ${maj} ${min}"
-                       ;;
-               "slink")
--                      local target=`field 11 $(LC_ALL=C ls -l "${location}")`
-+                      local target=`field 11 $(LC_ALL=C ls -l --time-style=locale "${location}")`
-                       str="${ftype} ${name} ${target} ${str}"
-                       ;;
-               *)
diff --git a/target/linux/generic-2.6/patches-2.6.25/905-i386_build.patch b/target/linux/generic-2.6/patches-2.6.25/905-i386_build.patch
deleted file mode 100644 (file)
index c701fda..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/x86/boot/tools/build.c
-+++ b/arch/x86/boot/tools/build.c
-@@ -29,7 +29,6 @@
- #include <stdarg.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <sys/sysmacros.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/mman.h>
diff --git a/target/linux/generic-2.6/patches-2.6.25/906-msdosfs_header.patch b/target/linux/generic-2.6/patches-2.6.25/906-msdosfs_header.patch
deleted file mode 100644 (file)
index 128e0db..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/include/linux/msdos_fs.h
-+++ b/include/linux/msdos_fs.h
-@@ -57,11 +57,13 @@
- #define MSDOS_DOT     ".          "   /* ".", padded to MSDOS_NAME chars */
- #define MSDOS_DOTDOT  "..         "   /* "..", padded to MSDOS_NAME chars */
-+#ifdef __KERNEL__
- /* media of boot sector */
- static inline int fat_valid_media(u8 media)
- {
-       return 0xf8 <= media || media == 0xf0;
- }
-+#endif
- #define FAT_FIRST_ENT(s, x)   ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \
-       MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x))
diff --git a/target/linux/generic-2.6/patches-2.6.25/910-m25p80_redboot_partitions.patch b/target/linux/generic-2.6/patches-2.6.25/910-m25p80_redboot_partitions.patch
deleted file mode 100644 (file)
index 2972514..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -627,12 +627,10 @@ static int __devinit m25p_probe(struct s
-               struct mtd_partition    *parts = NULL;
-               int                     nr_parts = 0;
--#ifdef CONFIG_MTD_CMDLINE_PARTS
--              static const char *part_probes[] = { "cmdlinepart", NULL, };
-+              static const char *part_probes[] = { "RedBoot", "cmdlinepart", NULL, };
-               nr_parts = parse_mtd_partitions(&flash->mtd,
-                               part_probes, &parts, 0);
--#endif
-               if (nr_parts <= 0 && data && data->parts) {
-                       parts = data->parts;
diff --git a/target/linux/generic-2.6/patches-2.6.25/921-gpio_spi_driver.patch b/target/linux/generic-2.6/patches-2.6.25/921-gpio_spi_driver.patch
deleted file mode 100644 (file)
index a804828..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
---- /dev/null
-+++ b/include/linux/spi/spi_gpio.h
-@@ -0,0 +1,72 @@
-+/*
-+ * spi_gpio interface to platform code
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ *
-+ * 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.
-+ */
-+#ifndef _LINUX_SPI_SPI_GPIO
-+#define _LINUX_SPI_SPI_GPIO
-+
-+#include <linux/types.h>
-+#include <linux/spi/spi.h>
-+
-+
-+/**
-+ * struct spi_gpio_platform_data - Data definitions for a SPI-GPIO device.
-+ *
-+ * This structure holds information about a GPIO-based SPI device.
-+ *
-+ * @pin_clk: The GPIO pin number of the CLOCK pin.
-+ *
-+ * @pin_miso: The GPIO pin number of the MISO pin.
-+ *
-+ * @pin_mosi: The GPIO pin number of the MOSI pin.
-+ *
-+ * @pin_cs: The GPIO pin number of the CHIPSELECT pin.
-+ *
-+ * @cs_activelow: If true, the chip is selected when the CS line is low.
-+ *
-+ * @no_spi_delay: If true, no delay is done in the lowlevel bitbanging.
-+ *                Note that doing no delay is not standards compliant,
-+ *                but it might be needed to speed up transfers on some
-+ *                slow embedded machines.
-+ *
-+ * @boardinfo_setup: This callback is called after the
-+ *                   SPI master device was registered, but before the
-+ *                   device is registered.
-+ * @boardinfo_setup_data: Data argument passed to boardinfo_setup().
-+ */
-+struct spi_gpio_platform_data {
-+      unsigned int pin_clk;
-+      unsigned int pin_miso;
-+      unsigned int pin_mosi;
-+      unsigned int pin_cs;
-+      bool cs_activelow;
-+      bool no_spi_delay;
-+      int (*boardinfo_setup)(struct spi_board_info *bi,
-+                             struct spi_master *master,
-+                             void *data);
-+      void *boardinfo_setup_data;
-+};
-+
-+/**
-+ * SPI_GPIO_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a spi-gpio device.
-+ */
-+#define SPI_GPIO_PLATDEV_NAME "spi-gpio"
-+
-+/**
-+ * spi_gpio_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int spi_gpio_next_id(void);
-+
-+#endif /* _LINUX_SPI_SPI_GPIO */
---- /dev/null
-+++ b/drivers/spi/spi_gpio.c
-@@ -0,0 +1,249 @@
-+/*
-+ * Bitbanging SPI bus driver using GPIO API
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ *
-+ * based on spi_s3c2410_gpio.c
-+ *   Copyright (c) 2006 Ben Dooks
-+ *   Copyright (c) 2006 Simtec Electronics
-+ * and on i2c-gpio.c
-+ *   Copyright (C) 2007 Atmel Corporation
-+ *
-+ * 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/init.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+#include <linux/workqueue.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/spi_bitbang.h>
-+#include <linux/spi/spi_gpio.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+struct spi_gpio {
-+      struct spi_bitbang bitbang;
-+      struct spi_gpio_platform_data *info;
-+      struct platform_device *pdev;
-+      struct spi_board_info bi;
-+};
-+
-+
-+static inline struct spi_gpio *spidev_to_sg(struct spi_device *dev)
-+{
-+      return dev->controller_data;
-+}
-+
-+static inline void setsck(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_clk, val ? 1 : 0);
-+}
-+
-+static inline void setmosi(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_mosi, val ? 1 : 0);
-+}
-+
-+static inline u32 getmiso(struct spi_device *dev)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      return gpio_get_value(sp->info->pin_miso) ? 1 : 0;
-+}
-+
-+static inline void do_spidelay(struct spi_device *dev, unsigned nsecs)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (!sp->info->no_spi_delay)
-+              ndelay(nsecs);
-+}
-+
-+#define spidelay(nsecs) do {                                  \
-+      /* Steal the spi_device pointer from our caller.        \
-+       * The bitbang-API should probably get fixed here... */ \
-+      do_spidelay(spi, nsecs);                                \
-+  } while (0)
-+
-+#define EXPAND_BITBANG_TXRX
-+#include <linux/spi/spi_bitbang.h>
-+
-+static u32 spi_gpio_txrx_mode0(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode1(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode2(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode3(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, bits);
-+}
-+
-+static void spi_gpio_chipselect(struct spi_device *dev, int on)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (sp->info->cs_activelow)
-+              on = !on;
-+      gpio_set_value(sp->info->pin_cs, on ? 1 : 0);
-+}
-+
-+static int spi_gpio_probe(struct platform_device *pdev)
-+{
-+      struct spi_master *master;
-+      struct spi_gpio_platform_data *pdata;
-+      struct spi_gpio *sp;
-+      struct spi_device *spidev;
-+      int err;
-+
-+      pdata = pdev->dev.platform_data;
-+      if (!pdata)
-+              return -ENXIO;
-+
-+      err = -ENOMEM;
-+      master = spi_alloc_master(&pdev->dev, sizeof(struct spi_gpio));
-+      if (!master)
-+              goto err_alloc_master;
-+
-+      sp = spi_master_get_devdata(master);
-+      platform_set_drvdata(pdev, sp);
-+      sp->info = pdata;
-+
-+      err = gpio_request(pdata->pin_clk, "spi_clock");
-+      if (err)
-+              goto err_request_clk;
-+      err = gpio_request(pdata->pin_mosi, "spi_mosi");
-+      if (err)
-+              goto err_request_mosi;
-+      err = gpio_request(pdata->pin_miso, "spi_miso");
-+      if (err)
-+              goto err_request_miso;
-+      err = gpio_request(pdata->pin_cs, "spi_cs");
-+      if (err)
-+              goto err_request_cs;
-+
-+      sp->bitbang.master = spi_master_get(master);
-+      sp->bitbang.master->bus_num = -1;
-+      sp->bitbang.master->num_chipselect = 1;
-+      sp->bitbang.chipselect = spi_gpio_chipselect;
-+      sp->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_mode0;
-+      sp->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_mode1;
-+      sp->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_mode2;
-+      sp->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_mode3;
-+
-+      gpio_direction_output(pdata->pin_clk, 0);
-+      gpio_direction_output(pdata->pin_mosi, 0);
-+      gpio_direction_output(pdata->pin_cs,
-+                            pdata->cs_activelow ? 1 : 0);
-+      gpio_direction_input(pdata->pin_miso);
-+
-+      err = spi_bitbang_start(&sp->bitbang);
-+      if (err)
-+              goto err_no_bitbang;
-+      err = pdata->boardinfo_setup(&sp->bi, master,
-+                                   pdata->boardinfo_setup_data);
-+      if (err)
-+              goto err_bi_setup;
-+      sp->bi.controller_data = sp;
-+      spidev = spi_new_device(master, &sp->bi);
-+      if (!spidev)
-+              goto err_new_dev;
-+
-+      return 0;
-+
-+err_new_dev:
-+err_bi_setup:
-+      spi_bitbang_stop(&sp->bitbang);
-+err_no_bitbang:
-+      spi_master_put(sp->bitbang.master);
-+      gpio_free(pdata->pin_cs);
-+err_request_cs:
-+      gpio_free(pdata->pin_miso);
-+err_request_miso:
-+      gpio_free(pdata->pin_mosi);
-+err_request_mosi:
-+      gpio_free(pdata->pin_clk);
-+err_request_clk:
-+      kfree(master);
-+
-+err_alloc_master:
-+      return err;
-+}
-+
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
-+{
-+      struct spi_gpio *sp;
-+      struct spi_gpio_platform_data *pdata;
-+
-+      pdata = pdev->dev.platform_data;
-+      sp = platform_get_drvdata(pdev);
-+
-+      gpio_free(pdata->pin_clk);
-+      gpio_free(pdata->pin_mosi);
-+      gpio_free(pdata->pin_miso);
-+      gpio_free(pdata->pin_cs);
-+      spi_bitbang_stop(&sp->bitbang);
-+      spi_master_put(sp->bitbang.master);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver spi_gpio_driver = {
-+      .driver         = {
-+              .name   = SPI_GPIO_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
-+};
-+
-+int spi_gpio_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(spi_gpio_next_id);
-+
-+static int __init spi_gpio_init(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&spi_gpio_driver);
-+      if (err)
-+              printk(KERN_ERR "spi-gpio: register failed: %d\n", err);
-+
-+      return err;
-+}
-+module_init(spi_gpio_init);
-+
-+static void __exit spi_gpio_exit(void)
-+{
-+      platform_driver_unregister(&spi_gpio_driver);
-+}
-+module_exit(spi_gpio_exit);
-+
-+MODULE_AUTHOR("Piot Skamruk <piotr.skamruk at gmail.com>");
-+MODULE_DESCRIPTION("Platform independent GPIO bitbanging SPI driver");
-+MODULE_LICENSE("GPL v2");
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -100,6 +100,19 @@ config SPI_BUTTERFLY
-         inexpensive battery powered microcontroller evaluation board.
-         This same cable can be used to flash new firmware.
-+config SPI_GPIO
-+      tristate "GPIO API based bitbanging SPI controller"
-+      depends on SPI_MASTER && GENERIC_GPIO
-+      select SPI_BITBANG
-+      help
-+        This is a platform driver that can be used for bitbanging
-+        an SPI bus over GPIO pins.
-+        Select this if you have any SPI device that is connected via
-+        GPIO pins.
-+        The module will be called spi_gpio.
-+
-+        If unsure, say N.
-+
- config SPI_IMX
-       tristate "Freescale iMX SPI controller"
-       depends on SPI_MASTER && ARCH_IMX && EXPERIMENTAL
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_SPI_BFIN)                       += spi_bfin5xx.
- obj-$(CONFIG_SPI_BITBANG)             += spi_bitbang.o
- obj-$(CONFIG_SPI_AU1550)              += au1550_spi.o
- obj-$(CONFIG_SPI_BUTTERFLY)           += spi_butterfly.o
-+obj-$(CONFIG_SPI_GPIO)                        += spi_gpio.o
- obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
- obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
- obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
diff --git a/target/linux/generic-2.6/patches-2.6.25/922-gpiommc.patch b/target/linux/generic-2.6/patches-2.6.25/922-gpiommc.patch
deleted file mode 100644 (file)
index b775a0e..0000000
+++ /dev/null
@@ -1,818 +0,0 @@
---- /dev/null
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -0,0 +1,605 @@
-+/*
-+ * Driver an MMC/SD card on a bitbanging GPIO SPI bus.
-+ * This module hooks up the mmc_spi and spi_gpio modules and also
-+ * provides a configfs interface.
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include <linux/mmc/gpiommc.h>
-+#include <linux/platform_device.h>
-+#include <linux/list.h>
-+#include <linux/mutex.h>
-+#include <linux/spi/spi_gpio.h>
-+#include <linux/configfs.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+#define PFX                           "gpio-mmc: "
-+
-+
-+struct gpiommc_device {
-+      struct platform_device *pdev;
-+      struct platform_device *spi_pdev;
-+      struct spi_board_info boardinfo;
-+};
-+
-+
-+MODULE_DESCRIPTION("GPIO based MMC driver");
-+MODULE_LICENSE("GPL");
-+
-+
-+static int gpiommc_boardinfo_setup(struct spi_board_info *bi,
-+                                 struct spi_master *master,
-+                                 void *data)
-+{
-+      struct gpiommc_device *d = data;
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      /* Bind the SPI master to the MMC-SPI host driver. */
-+      strlcpy(bi->modalias, "mmc_spi", sizeof(bi->modalias));
-+
-+      bi->max_speed_hz = pdata->max_bus_speed;
-+      bi->bus_num = master->bus_num;
-+      bi->mode = pdata->mode;
-+
-+      return 0;
-+}
-+
-+static int gpiommc_probe(struct platform_device *pdev)
-+{
-+      struct gpiommc_platform_data *mmc_pdata = pdev->dev.platform_data;
-+      struct spi_gpio_platform_data spi_pdata;
-+      struct gpiommc_device *d;
-+      int err;
-+
-+      err = -ENXIO;
-+      if (!mmc_pdata)
-+              goto error;
-+
-+#ifdef CONFIG_MMC_SPI_MODULE
-+      err = request_module("mmc_spi");
-+      if (err) {
-+              printk(KERN_WARNING PFX
-+                     "Failed to request mmc_spi module.\n");
-+      }
-+#endif /* CONFIG_MMC_SPI_MODULE */
-+
-+      /* Allocate the GPIO-MMC device */
-+      err = -ENOMEM;
-+      d = kzalloc(sizeof(*d), GFP_KERNEL);
-+      if (!d)
-+              goto error;
-+      d->pdev = pdev;
-+
-+      /* Create the SPI-GPIO device */
-+      d->spi_pdev = platform_device_alloc(SPI_GPIO_PLATDEV_NAME,
-+                                          spi_gpio_next_id());
-+      if (!d->spi_pdev)
-+              goto err_free_d;
-+
-+      memset(&spi_pdata, 0, sizeof(spi_pdata));
-+      spi_pdata.pin_clk = mmc_pdata->pins.gpio_clk;
-+      spi_pdata.pin_miso = mmc_pdata->pins.gpio_do;
-+      spi_pdata.pin_mosi = mmc_pdata->pins.gpio_di;
-+      spi_pdata.pin_cs = mmc_pdata->pins.gpio_cs;
-+      spi_pdata.cs_activelow = mmc_pdata->pins.cs_activelow;
-+      spi_pdata.no_spi_delay = mmc_pdata->no_spi_delay;
-+      spi_pdata.boardinfo_setup = gpiommc_boardinfo_setup;
-+      spi_pdata.boardinfo_setup_data = d;
-+
-+      err = platform_device_add_data(d->spi_pdev, &spi_pdata,
-+                                     sizeof(spi_pdata));
-+      if (err)
-+              goto err_free_pdev;
-+      err = platform_device_add(d->spi_pdev);
-+      if (err)
-+              goto err_free_pdata;
-+      platform_set_drvdata(pdev, d);
-+
-+      printk(KERN_INFO PFX "MMC-Card \"%s\" "
-+             "attached to GPIO pins di=%u, do=%u, clk=%u, cs=%u\n",
-+             mmc_pdata->name, mmc_pdata->pins.gpio_di,
-+             mmc_pdata->pins.gpio_do,
-+             mmc_pdata->pins.gpio_clk,
-+             mmc_pdata->pins.gpio_cs);
-+
-+      return 0;
-+
-+err_free_pdata:
-+      kfree(d->spi_pdev->dev.platform_data);
-+      d->spi_pdev->dev.platform_data = NULL;
-+err_free_pdev:
-+      platform_device_put(d->spi_pdev);
-+err_free_d:
-+      kfree(d);
-+error:
-+      return err;
-+}
-+
-+static int gpiommc_remove(struct platform_device *pdev)
-+{
-+      struct gpiommc_device *d = platform_get_drvdata(pdev);
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      platform_device_unregister(d->spi_pdev);
-+      printk(KERN_INFO PFX "GPIO based MMC-Card \"%s\" removed\n",
-+             pdata->name);
-+      platform_device_put(d->spi_pdev);
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+
-+/* A device that was created through configfs */
-+struct gpiommc_configfs_device {
-+      struct config_item item;
-+      /* The platform device, after registration. */
-+      struct platform_device *pdev;
-+      /* The configuration */
-+      struct gpiommc_platform_data pdata;
-+};
-+
-+#define GPIO_INVALID  -1
-+
-+static inline bool gpiommc_is_registered(struct gpiommc_configfs_device *dev)
-+{
-+      return (dev->pdev != NULL);
-+}
-+
-+static inline struct gpiommc_configfs_device *ci_to_gpiommc(struct config_item *item)
-+{
-+      return item ? container_of(item, struct gpiommc_configfs_device, item) : NULL;
-+}
-+
-+static struct configfs_attribute gpiommc_attr_DI = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_in",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_DO = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_out",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CLK = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_clock",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS_activelow = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect_activelow",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spimode = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_mode",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spidelay = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_delay",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_max_bus_speed = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "max_bus_speed",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_register = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "register",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute *gpiommc_config_attrs[] = {
-+      &gpiommc_attr_DI,
-+      &gpiommc_attr_DO,
-+      &gpiommc_attr_CLK,
-+      &gpiommc_attr_CS,
-+      &gpiommc_attr_CS_activelow,
-+      &gpiommc_attr_spimode,
-+      &gpiommc_attr_spidelay,
-+      &gpiommc_attr_max_bus_speed,
-+      &gpiommc_attr_register,
-+      NULL,
-+};
-+
-+static ssize_t gpiommc_config_attr_show(struct config_item *item,
-+                                      struct configfs_attribute *attr,
-+                                      char *page)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      ssize_t count = 0;
-+      unsigned int gpio;
-+      int err = 0;
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              gpio = dev->pdata.pins.gpio_di;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              gpio = dev->pdata.pins.gpio_do;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              gpio = dev->pdata.pins.gpio_clk;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              gpio = dev->pdata.pins.gpio_cs;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.pins.cs_activelow);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.mode);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               !dev->pdata.no_spi_delay);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.max_bus_speed);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_register) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               gpiommc_is_registered(dev));
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static int gpiommc_do_register(struct gpiommc_configfs_device *dev,
-+                             const char *name)
-+{
-+      int err;
-+
-+      if (gpiommc_is_registered(dev))
-+              return 0;
-+
-+      if (!gpio_is_valid(dev->pdata.pins.gpio_di) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_do) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_clk) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_cs)) {
-+              printk(KERN_ERR PFX
-+                     "configfs: Invalid GPIO pin number(s)\n");
-+              return -EINVAL;
-+      }
-+
-+      strlcpy(dev->pdata.name, name,
-+              sizeof(dev->pdata.name));
-+
-+      dev->pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME,
-+                                        gpiommc_next_id());
-+      if (!dev->pdev)
-+              return -ENOMEM;
-+      err = platform_device_add_data(dev->pdev, &dev->pdata,
-+                                     sizeof(dev->pdata));
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+      err = platform_device_add(dev->pdev);
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+
-+      return 0;
-+}
-+
-+static void gpiommc_do_unregister(struct gpiommc_configfs_device *dev)
-+{
-+      if (!gpiommc_is_registered(dev))
-+              return;
-+
-+      platform_device_unregister(dev->pdev);
-+      dev->pdev = NULL;
-+}
-+
-+static ssize_t gpiommc_config_attr_store(struct config_item *item,
-+                                       struct configfs_attribute *attr,
-+                                       const char *page, size_t count)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      int err = -EINVAL;
-+      unsigned long data;
-+
-+      if (attr == &gpiommc_attr_register) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data == 1)
-+                      err = gpiommc_do_register(dev, item->ci_name);
-+              if (data == 0) {
-+                      gpiommc_do_unregister(dev);
-+                      err = 0;
-+              }
-+              goto out;
-+      }
-+
-+      if (gpiommc_is_registered(dev)) {
-+              /* The rest of the config parameters can only be set
-+               * as long as the device is not registered, yet. */
-+              err = -EBUSY;
-+              goto out;
-+      }
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_di = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_do = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_clk = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_cs = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.pins.cs_activelow = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              switch (data) {
-+              case 0:
-+                      dev->pdata.mode = SPI_MODE_0;
-+                      break;
-+              case 1:
-+                      dev->pdata.mode = SPI_MODE_1;
-+                      break;
-+              case 2:
-+                      dev->pdata.mode = SPI_MODE_2;
-+                      break;
-+              case 3:
-+                      dev->pdata.mode = SPI_MODE_3;
-+                      break;
-+              default:
-+                      goto out;
-+              }
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.no_spi_delay = !data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data > UINT_MAX)
-+                      goto out;
-+              dev->pdata.max_bus_speed = data;
-+              err = 0;
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static void gpiommc_config_item_release(struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      kfree(dev);
-+}
-+
-+static struct configfs_item_operations gpiommc_config_item_ops = {
-+      .release                = gpiommc_config_item_release,
-+      .show_attribute         = gpiommc_config_attr_show,
-+      .store_attribute        = gpiommc_config_attr_store,
-+};
-+
-+static struct config_item_type gpiommc_dev_ci_type = {
-+      .ct_item_ops    = &gpiommc_config_item_ops,
-+      .ct_attrs       = gpiommc_config_attrs,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct config_item *gpiommc_make_item(struct config_group *group,
-+                                           const char *name)
-+{
-+      struct gpiommc_configfs_device *dev;
-+
-+      if (strlen(name) > GPIOMMC_MAX_NAMELEN) {
-+              printk(KERN_ERR PFX "configfs: device name too long\n");
-+              return NULL;
-+      }
-+
-+      dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      config_item_init_type_name(&dev->item, name,
-+                                 &gpiommc_dev_ci_type);
-+
-+      /* Assign default configuration */
-+      dev->pdata.pins.gpio_di = GPIO_INVALID;
-+      dev->pdata.pins.gpio_do = GPIO_INVALID;
-+      dev->pdata.pins.gpio_clk = GPIO_INVALID;
-+      dev->pdata.pins.gpio_cs = GPIO_INVALID;
-+      dev->pdata.pins.cs_activelow = 1;
-+      dev->pdata.mode = SPI_MODE_0;
-+      dev->pdata.no_spi_delay = 0;
-+      dev->pdata.max_bus_speed = 5000000; /* 5 MHz */
-+
-+      return &(dev->item);
-+}
-+
-+static void gpiommc_drop_item(struct config_group *group,
-+                            struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      gpiommc_do_unregister(dev);
-+      kfree(dev);
-+}
-+
-+static struct configfs_group_operations gpiommc_ct_group_ops = {
-+      .make_item      = gpiommc_make_item,
-+      .drop_item      = gpiommc_drop_item,
-+};
-+
-+static struct config_item_type gpiommc_ci_type = {
-+      .ct_group_ops   = &gpiommc_ct_group_ops,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct configfs_subsystem gpiommc_subsys = {
-+      .su_group = {
-+              .cg_item = {
-+                      .ci_namebuf = GPIOMMC_PLATDEV_NAME,
-+                      .ci_type = &gpiommc_ci_type,
-+              },
-+      },
-+      .su_mutex = __MUTEX_INITIALIZER(gpiommc_subsys.su_mutex),
-+};
-+
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+static struct platform_driver gpiommc_plat_driver = {
-+      .probe  = gpiommc_probe,
-+      .remove = gpiommc_remove,
-+      .driver = {
-+              .name   = GPIOMMC_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+int gpiommc_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(gpiommc_next_id);
-+
-+static int __init gpiommc_modinit(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&gpiommc_plat_driver);
-+      if (err)
-+              return err;
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      config_group_init(&gpiommc_subsys.su_group);
-+      err = configfs_register_subsystem(&gpiommc_subsys);
-+      if (err) {
-+              platform_driver_unregister(&gpiommc_plat_driver);
-+              return err;
-+      }
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+      return 0;
-+}
-+module_init(gpiommc_modinit);
-+
-+static void __exit gpiommc_modexit(void)
-+{
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      configfs_unregister_subsystem(&gpiommc_subsys);
-+#endif
-+      platform_driver_unregister(&gpiommc_plat_driver);
-+}
-+module_exit(gpiommc_modexit);
---- a/drivers/mmc/host/Kconfig
-+++ b/drivers/mmc/host/Kconfig
-@@ -130,3 +130,27 @@ config MMC_SPI
-         If unsure, or if your system has no SPI master driver, say N.
-+config GPIOMMC
-+      tristate "MMC/SD over GPIO-based SPI"
-+      depends on MMC && MMC_SPI && SPI_GPIO
-+      help
-+        This driver hooks up the mmc_spi and spi_gpio modules so that
-+        MMC/SD cards can be used on a GPIO based bus by bitbanging
-+        the SPI protocol in software.
-+
-+        This driver provides a configfs interface to dynamically create
-+        and destroy GPIO-based MMC/SD card devices. It also provides
-+        a platform device interface API.
-+        See Documentation/gpiommc.txt for details.
-+
-+        The module will be called gpiommc.
-+
-+        If unsure, say N.
-+
-+config GPIOMMC_CONFIGFS
-+      bool
-+      depends on GPIOMMC && CONFIGFS_FS
-+      default y
-+      help
-+        This option automatically enables configfs support for gpiommc
-+        if configfs is available.
---- a/drivers/mmc/host/Makefile
-+++ b/drivers/mmc/host/Makefile
-@@ -17,4 +17,4 @@ obj-$(CONFIG_MMC_OMAP)               += omap.o
- obj-$(CONFIG_MMC_AT91)                += at91_mci.o
- obj-$(CONFIG_MMC_TIFM_SD)     += tifm_sd.o
- obj-$(CONFIG_MMC_SPI)         += mmc_spi.o
--
-+obj-$(CONFIG_GPIOMMC)         += gpiommc.o
---- /dev/null
-+++ b/include/linux/mmc/gpiommc.h
-@@ -0,0 +1,69 @@
-+/*
-+ * Device driver for MMC/SD cards driven over a GPIO bus.
-+ *
-+ * Licensed under the GNU/GPL version 2.
-+ */
-+#ifndef LINUX_GPIOMMC_H_
-+#define LINUX_GPIOMMC_H_
-+
-+#include <linux/types.h>
-+
-+
-+#define GPIOMMC_MAX_NAMELEN           15
-+#define GPIOMMC_MAX_NAMELEN_STR               __stringify(GPIOMMC_MAX_NAMELEN)
-+
-+/**
-+ * struct gpiommc_pins - Hardware pin assignments
-+ *
-+ * @gpio_di: The GPIO number of the DATA IN pin
-+ * @gpio_do: The GPIO number of the DATA OUT pin
-+ * @gpio_clk: The GPIO number of the CLOCK pin
-+ * @gpio_cs: The GPIO number of the CHIPSELECT pin
-+ * @cs_activelow: If true, the chip is considered selected if @gpio_cs is low.
-+ */
-+struct gpiommc_pins {
-+      unsigned int gpio_di;
-+      unsigned int gpio_do;
-+      unsigned int gpio_clk;
-+      unsigned int gpio_cs;
-+      bool cs_activelow;
-+};
-+
-+/**
-+ * struct gpiommc_platform_data - Platform data for a MMC-over-SPI-GPIO device.
-+ *
-+ * @name: The unique name string of the device.
-+ * @pins: The hardware pin assignments.
-+ * @mode: The hardware mode. This is either SPI_MODE_0,
-+ *        SPI_MODE_1, SPI_MODE_2 or SPI_MODE_3. See the SPI documentation.
-+ * @no_spi_delay: Do not use delays in the lowlevel SPI bitbanging code.
-+ *                This is not standards compliant, but may be required for some
-+ *                embedded machines to gain reasonable speed.
-+ * @max_bus_speed: The maximum speed of the SPI bus, in Hertz.
-+ */
-+struct gpiommc_platform_data {
-+      char name[GPIOMMC_MAX_NAMELEN + 1];
-+      struct gpiommc_pins pins;
-+      u8 mode;
-+      bool no_spi_delay;
-+      unsigned int max_bus_speed;
-+};
-+
-+/**
-+ * GPIOMMC_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a gpiommc device.
-+ */
-+#define GPIOMMC_PLATDEV_NAME  "gpiommc"
-+
-+/**
-+ * gpiommc_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int gpiommc_next_id(void);
-+
-+#endif /* LINUX_GPIOMMC_H_ */
---- /dev/null
-+++ b/Documentation/gpiommc.txt
-@@ -0,0 +1,97 @@
-+GPIOMMC - Driver for an MMC/SD card on a bitbanging GPIO SPI bus
-+================================================================
-+
-+The gpiommc module hooks up the mmc_spi and spi_gpio modules for running an
-+MMC or SD card on GPIO pins.
-+
-+Two interfaces for registering a new MMC/SD card device are provided:
-+A static platform-device based mechanism and a dynamic configfs based interface.
-+
-+
-+Registering devices via platform-device
-+=======================================
-+
-+The platform-device interface is used for registering MMC/SD devices that are
-+part of the hardware platform. This is most useful only for embedded machines
-+with MMC/SD devices statically connected to the platform GPIO bus.
-+
-+The data structures are declared in <linux/mmc/gpiommc.h>.
-+
-+To register a new device, define an instance of struct gpiommc_platform_data.
-+This structure holds any information about how the device is hooked up to the
-+GPIO pins and what hardware modes the device supports. See the docbook-style
-+documentation in the header file for more information on the struct fields.
-+
-+Then allocate a new instance of a platform device by doing:
-+
-+      pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME, gpiommc_next_id());
-+
-+This will allocate the platform device data structures and hook it up to the
-+gpiommc driver.
-+Then add the gpiommc_platform_data to the platform device.
-+
-+      err = platform_device_add_data(pdev, pdata, sizeof(struct gpiommc_platform_data));
-+
-+You may free the local instance of struct gpiommc_platform_data now. (So the
-+struct may be allocated on the stack, too).
-+Now simply register the platform device.
-+
-+      err = platform_device_add(pdev);
-+
-+Done. The gpiommc probe routine will be invoked now and you should see a kernel
-+log message for the added device.
-+
-+
-+Registering devices via configfs
-+================================
-+
-+MMC/SD cards connected via GPIO often are a pretty dynamic thing, as for example
-+selfmade hacks for soldering an MMC/SD card to standard GPIO pins on embedded
-+hardware are a common situation.
-+So we provide a dynamic interface to conveniently handle adding and removing
-+devices from userspace, without the need to recompile the kernel.
-+
-+The "gpiommc" subdirectory at the configfs mountpoint is used for handling
-+the dynamic configuration.
-+
-+To create a new device, it must first be allocated with mkdir.
-+The following command will allocate a device named "my_mmc":
-+      mkdir /config/gpiommc/my_mmc
-+
-+There are several configuration files available in the new
-+/config/gpiommc/my_mmc/ directory:
-+
-+gpio_data_in                  = The SPI data-IN GPIO pin number.
-+gpio_data_out                 = The SPI data-OUT GPIO pin number.
-+gpio_clock                    = The SPI Clock GPIO pin number.
-+gpio_chipselect                       = The SPI Chipselect GPIO pin number.
-+gpio_chipselect_activelow     = Boolean. If 0, Chipselect is active-HIGH.
-+                                If 1, Chipselect is active-LOW.
-+spi_mode                      = The SPI data mode. Can be 0-3.
-+spi_delay                     = Enable all delays in the lowlevel bitbanging.
-+max_bus_speed                 = The maximum SPI bus speed. In Hertz.
-+
-+register                      = Not a configuration parameter.
-+                                Used to register the configured card
-+                                with the kernel.
-+
-+The device must first get configured and then registered by writing "1" to
-+the "register" file.
-+The configuration parameters "gpio_data_in", "gpio_data_out", "gpio_clock"
-+and "gpio_chipselect" are essential and _must_ be configured before writing
-+"1" to the "register" file. The registration will fail, otherwise.
-+
-+The default values for the other parameters are:
-+gpio_chipselect_activelow     = 1             (CS active-LOW)
-+spi_mode                      = 0             (SPI_MODE_0)
-+spi_delay                     = 1             (enabled)
-+max_bus_speed                 = 5000000       (5 Mhz)
-+
-+Configuration values can not be changed after registration. To unregister
-+the device, write a "0" to the "register" file. The configuration can be
-+changed again after unregistering.
-+
-+To completely remove the device, simply rmdir the directory
-+(/config/gpiommc/my_mmc in this example).
-+There's no need to first unregister the device before removing it. That will
-+be done automatically.
diff --git a/target/linux/generic-2.6/patches-2.6.25/923-gpiommc-configfs-locking.patch b/target/linux/generic-2.6/patches-2.6.25/923-gpiommc-configfs-locking.patch
deleted file mode 100644 (file)
index c84f62b..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-The gpiommc configfs context structure needs locking, as configfs
-does not lock access between files.
-
---- a/drivers/mmc/host/gpiommc.c
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -140,6 +140,8 @@ struct gpiommc_configfs_device {
-       struct platform_device *pdev;
-       /* The configuration */
-       struct gpiommc_platform_data pdata;
-+      /* Mutex to protect this structure */
-+      struct mutex mutex;
- };
- #define GPIO_INVALID  -1
-@@ -230,6 +232,8 @@ static ssize_t gpiommc_config_attr_show(
-       unsigned int gpio;
-       int err = 0;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_DI) {
-               gpio = dev->pdata.pins.gpio_di;
-               if (gpio == GPIO_INVALID)
-@@ -290,6 +294,8 @@ static ssize_t gpiommc_config_attr_show(
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -349,6 +355,8 @@ static ssize_t gpiommc_config_attr_store
-       int err = -EINVAL;
-       unsigned long data;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_register) {
-               err = strict_strtoul(page, 10, &data);
-               if (err)
-@@ -474,6 +482,8 @@ static ssize_t gpiommc_config_attr_store
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -510,6 +520,7 @@ static struct config_item *gpiommc_make_
-       if (!dev)
-               return NULL;
-+      mutex_init(&dev->mutex);
-       config_item_init_type_name(&dev->item, name,
-                                  &gpiommc_dev_ci_type);
diff --git a/target/linux/generic-2.6/patches-2.6.25/930-ppc_big_endian_io_memory_accessors.patch b/target/linux/generic-2.6/patches-2.6.25/930-ppc_big_endian_io_memory_accessors.patch
deleted file mode 100644 (file)
index 25abf82..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-From a.othieno@bluewin.ch Tue Oct 11 07:50:21 2005
-From: Arthur Othieno <a.othieno@bluewin.ch>
-Subject: Big-endian I/O memory accessors.
-Date: Tue, 11 Oct 2005 07:50:21 +1000
-X-Patchwork-ID: 2759
-
-From: Arthur Othieno <a.othieno@bluewin.ch>
-
-I/O memory accessors. Big endian version. For those busses/devices
-that do export big-endian I/O memory.
-
-Of notable relevance/reference:
-
-  http://lwn.net/Articles/132804/
-  http://ozlabs.org/pipermail/linuxppc-embedded/2005-August/019798.html
-  http://ozlabs.org/pipermail/linuxppc-embedded/2005-August/019752.html
-
-Signed-off-by: Arthur Othieno <a.othieno@bluewin.ch>
----
-
-Paulus, 
-
-A similar patch for ppc64 made it upstream with your big ppc64 merge.
-This one is still sitting in http://patchwork.ozlabs.org/linuxppc/
-and didn't make it with the ppc32 equivalent. Thanks.
-
-
- include/asm-ppc/io.h |   20 ++++++++++++++++++++
- 1 file changed, 20 insertions(+)
-
-
----
---- a/include/asm-ppc/io.h
-+++ b/include/asm-ppc/io.h
-@@ -413,11 +413,21 @@ static inline unsigned int ioread16(void
-       return readw(addr);
- }
-+static inline unsigned int ioread16be(void __iomem *addr)
-+{
-+      return in_be16(addr);
-+}
-+
- static inline unsigned int ioread32(void __iomem *addr)
- {
-       return readl(addr);
- }
-+static inline unsigned int ioread32be(void __iomem *addr)
-+{
-+      return in_be32(addr);
-+}
-+
- static inline void iowrite8(u8 val, void __iomem *addr)
- {
-       writeb(val, addr);
-@@ -428,11 +438,21 @@ static inline void iowrite16(u16 val, vo
-       writew(val, addr);
- }
-+static inline void iowrite16be(u16 val, void __iomem *addr)
-+{
-+      out_be16(addr, val);
-+}
-+
- static inline void iowrite32(u32 val, void __iomem *addr)
- {
-       writel(val, addr);
- }
-+static inline void iowrite32be(u32 val, void __iomem *addr)
-+{
-+      out_be32(addr, val);
-+}
-+
- static inline void ioread8_rep(void __iomem *addr, void *dst, unsigned long count)
- {
-       _insb(addr, dst, count);
diff --git a/target/linux/generic-2.6/patches-2.6.25/940-arm_mach_types.patch b/target/linux/generic-2.6/patches-2.6.25/940-arm_mach_types.patch
deleted file mode 100644 (file)
index 3fd9938..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
---- a/arch/arm/tools/mach-types
-+++ b/arch/arm/tools/mach-types
-@@ -12,7 +12,7 @@
- #
- #   http://www.arm.linux.org.uk/developer/machines/?action=new
- #
--# Last update: Sat Jan 26 14:45:34 2008
-+# Last update: Sat Apr 19 15:13:28 2008
- #
- # machine_is_xxx      CONFIG_xxxx             MACH_TYPE_xxx           number
- #
-@@ -381,13 +381,13 @@ ks8695p                  ARCH_KS8695P            KS8695P                 363
- se4000                        ARCH_SE4000             SE4000                  364
- quadriceps            ARCH_QUADRICEPS         QUADRICEPS              365
- bronco                        ARCH_BRONCO             BRONCO                  366
--esl_wireless_tab      ARCH_ESL_WIRELESS_TABLETESL_WIRELESS_TABLET     367
-+esl_wireless_tab      ARCH_ESL_WIRELESS_TAB   ESL_WIRELESS_TAB        367
- esl_sofcomp           ARCH_ESL_SOFCOMP        ESL_SOFCOMP             368
- s5c7375                       ARCH_S5C7375            S5C7375                 369
- spearhead             ARCH_SPEARHEAD          SPEARHEAD               370
- pantera                       ARCH_PANTERA            PANTERA                 371
- prayoglite            ARCH_PRAYOGLITE         PRAYOGLITE              372
--gumstix                       ARCH_GUMSTIK            GUMSTIK                 373
-+gumstix                       ARCH_GUMSTIX            GUMSTIX                 373
- rcube                 ARCH_RCUBE              RCUBE                   374
- rea_olv                       ARCH_REA_OLV            REA_OLV                 375
- pxa_iphone            ARCH_PXA_IPHONE         PXA_IPHONE              376
-@@ -1463,7 +1463,7 @@ artemis                  MACH_ARTEMIS            ARTEMIS                 1462
- htctitan              MACH_HTCTITAN           HTCTITAN                1463
- qranium                       MACH_QRANIUM            QRANIUM                 1464
- adx_wsc2              MACH_ADX_WSC2           ADX_WSC2                1465
--adx_medinet           MACH_ADX_MEDINET        ADX_MEDINET             1466
-+adx_medcom            MACH_ADX_MEDINET        ADX_MEDINET             1466
- bboard                        MACH_BBOARD             BBOARD                  1467
- cambria                       MACH_CAMBRIA            CAMBRIA                 1468
- mt7xxx                        MACH_MT7XXX             MT7XXX                  1469
-@@ -1611,3 +1611,112 @@ kb9263                 MACH_KB9263             KB9263                  1612
- mt7108                        MACH_MT7108             MT7108                  1613
- smtr2440              MACH_SMTR2440           SMTR2440                1614
- manao                 MACH_MANAO              MANAO                   1615
-+cm_x300                       MACH_CM_X300            CM_X300                 1616
-+gulfstream_kp         MACH_GULFSTREAM_KP      GULFSTREAM_KP           1617
-+lanreadyfn522         MACH_LANREADYFN522      LANREADYFN522           1618
-+arma37                        MACH_ARMA37             ARMA37                  1619
-+mendel                        MACH_MENDEL             MENDEL                  1620
-+pelco_iliad           MACH_PELCO_ILIAD        PELCO_ILIAD             1621
-+unit2p                        MACH_UNIT2P             UNIT2P                  1622
-+inc20otter            MACH_INC20OTTER         INC20OTTER              1623
-+at91sam9g20ek         MACH_AT91SAM9G20EK      AT91SAM9G20EK           1624
-+sc_ge2                        MACH_STORCENTER         STORCENTER              1625
-+smdk6410              MACH_SMDK6410           SMDK6410                1626
-+u300                  MACH_U300               U300                    1627
-+u500                  MACH_U500               U500                    1628
-+ds9260                        MACH_DS9260             DS9260                  1629
-+riverrock             MACH_RIVERROCK          RIVERROCK               1630
-+scibath                       MACH_SCIBATH            SCIBATH                 1631
-+at91sam7se            MACH_AT91SAM7SE512EK    AT91SAM7SE512EK         1632
-+wrt350n_v2            MACH_WRT350N_V2         WRT350N_V2              1633
-+multimedia            MACH_MULTIMEDIA         MULTIMEDIA              1634
-+marvin                        MACH_MARVIN             MARVIN                  1635
-+x500                  MACH_X500               X500                    1636
-+awlug4lcu             MACH_AWLUG4LCU          AWLUG4LCU               1637
-+palermoc              MACH_PALERMOC           PALERMOC                1638
-+omap_ldp              MACH_OMAP_LDP           OMAP_LDP                1639
-+ip500                 MACH_IP500              IP500                   1640
-+mx35ads                       MACH_MACH_MX35ADS       MACH_MX35ADS            1641
-+ase2                  MACH_ASE2               ASE2                    1642
-+mx35evb                       MACH_MX35EVB            MX35EVB                 1643
-+aml_m8050             MACH_AML_M8050          AML_M8050               1644
-+mx35_3ds              MACH_MX35_3DS           MX35_3DS                1645
-+mars                  MACH_MARS               MARS                    1646
-+ntosd_644xa           MACH_NTOSD_644XA        NTOSD_644XA             1647
-+badger                        MACH_BADGER             BADGER                  1648
-+trizeps4wl            MACH_TRIZEPS4WL         TRIZEPS4WL              1649
-+trizeps5              MACH_TRIZEPS5           TRIZEPS5                1650
-+marlin                        MACH_MARLIN             MARLIN                  1651
-+ts7800                        MACH_TS7800             TS7800                  1652
-+hpipaq214             MACH_HPIPAQ214          HPIPAQ214               1653
-+at572d940dcm          MACH_AT572D940DCM       AT572D940DCM            1654
-+ne1board              MACH_NE1BOARD           NE1BOARD                1655
-+zante                 MACH_ZANTE              ZANTE                   1656
-+sffsdr                        MACH_SFFSDR             SFFSDR                  1657
-+tw2662                        MACH_TW2662             TW2662                  1658
-+vf10xx                        MACH_VF10XX             VF10XX                  1659
-+zoran43xx             MACH_ZORAN43XX          ZORAN43XX               1660
-+sonix926              MACH_SONIX926           SONIX926                1661
-+celestialsemi         MACH_CELESTIALSEMI      CELESTIALSEMI           1662
-+cc9m2443              MACH_CC9M2443           CC9M2443                1663
-+tw5334                        MACH_TW5334             TW5334                  1664
-+omap_htcartemis               MACH_HTCARTEMIS         HTCARTEMIS              1665
-+nal_hlite             MACH_NAL_HLITE          NAL_HLITE               1666
-+htcvogue              MACH_HTCVOGUE           HTCVOGUE                1667
-+smartweb              MACH_SMARTWEB           SMARTWEB                1668
-+mv86xx                        MACH_MV86XX             MV86XX                  1669
-+mv87xx                        MACH_MV87XX             MV87XX                  1670
-+songyoungho           MACH_SONGYOUNGHO        SONGYOUNGHO             1671
-+younghotema           MACH_YOUNGHOTEMA        YOUNGHOTEMA             1672
-+pcm037                        MACH_PCM037             PCM037                  1673
-+mmvp                  MACH_MMVP               MMVP                    1674
-+mmap                  MACH_MMAP               MMAP                    1675
-+ptid2410              MACH_PTID2410           PTID2410                1676
-+james_926             MACH_JAMES_926          JAMES_926               1677
-+fm6000                        MACH_FM6000             FM6000                  1678
-+db88f6281_bp          MACH_DB88F6281_BP       DB88F6281_BP            1680
-+rd88f6192_nas         MACH_RD88F6192_NAS      RD88F6192_NAS           1681
-+rd88f6281             MACH_RD88F6281          RD88F6281               1682
-+db78x00_bp            MACH_DB78X00_BP         DB78X00_BP              1683
-+smdk2416              MACH_SMDK2416           SMDK2416                1685
-+oce_spider_si         MACH_OCE_SPIDER_SI      OCE_SPIDER_SI           1686
-+oce_spider_sk         MACH_OCE_SPIDER_SK      OCE_SPIDER_SK           1687
-+rovern6                       MACH_ROVERN6            ROVERN6                 1688
-+pelco_evolution               MACH_PELCO_EVOLUTION    PELCO_EVOLUTION         1689
-+wbd111                        MACH_WBD111             WBD111                  1690
-+elaracpe              MACH_ELARACPE           ELARACPE                1691
-+mabv3                 MACH_MABV3              MABV3                   1692
-+mv2120                        MACH_MV2120             MV2120                  1693
-+csb737                        MACH_CSB737             CSB737                  1695
-+mx51_3ds              MACH_MX51_3DS           MX51_3DS                1696
-+g900                  MACH_G900               G900                    1697
-+apf27                 MACH_APF27              APF27                   1698
-+ggus2000              MACH_GGUS2000           GGUS2000                1699
-+omap_2430_mimic               MACH_OMAP_2430_MIMIC    OMAP_2430_MIMIC         1700
-+imx27lite             MACH_IMX27LITE          IMX27LITE               1701
-+almex                 MACH_ALMEX              ALMEX                   1702
-+control                       MACH_CONTROL            CONTROL                 1703
-+mba2410                       MACH_MBA2410            MBA2410                 1704
-+volcano                       MACH_VOLCANO            VOLCANO                 1705
-+zenith                        MACH_ZENITH             ZENITH                  1706
-+muchip                        MACH_MUCHIP             MUCHIP                  1707
-+magellan              MACH_MAGELLAN           MAGELLAN                1708
-+usb_a9260             MACH_USB_A9260          USB_A9260               1709
-+usb_a9263             MACH_USB_A9263          USB_A9263               1710
-+qil_a9260             MACH_QIL_A9260          QIL_A9260               1711
-+cme9210                       MACH_CME9210            CME9210                 1712
-+hczh4                 MACH_HCZH4              HCZH4                   1713
-+spearbasic            MACH_SPEARBASIC         SPEARBASIC              1714
-+dep2440                       MACH_DEP2440            DEP2440                 1715
-+hdl_gxr                       MACH_HDL_GXR            HDL_GXR                 1716
-+hdl_gt                        MACH_HDL_GT             HDL_GT                  1717
-+hdl_4g                        MACH_HDL_4G             HDL_4G                  1718
-+s3c6000                       MACH_S3C6000            S3C6000                 1719
-+mmsp2_mdk             MACH_MMSP2_MDK          MMSP2_MDK               1720
-+mpx220                        MACH_MPX220             MPX220                  1721
-+kzm_arm11_01          MACH_KZM_ARM11_01       KZM_ARM11_01            1722
-+htc_polaris           MACH_HTC_POLARIS        HTC_POLARIS             1723
-+htc_kaiser            MACH_HTC_KAISER         HTC_KAISER              1724
-+lg_ks20                       MACH_LG_KS20            LG_KS20                 1725
-+hhgps                 MACH_HHGPS              HHGPS                   1726
-+nokia_n810_wimax      MACH_NOKIA_N810_WIMAX   NOKIA_N810_WIMAX        1727
diff --git a/target/linux/generic-2.6/patches-2.6.25/960-backport_gpiolib_better_rmmod_infrastructure.patch b/target/linux/generic-2.6/patches-2.6.25/960-backport_gpiolib_better_rmmod_infrastructure.patch
deleted file mode 100644 (file)
index 8da25da..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Date: Mon, 28 Apr 2008 09:14:44 +0000 (-0700)
-Subject: gpiolib: better rmmod infrastructure
-X-Git-Tag: v2.6.26-rc1~851
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=438d8908b379b6322fc3b28d45c9ebdddf58bc20
-
-gpiolib: better rmmod infrastructure
-
-As long as one or more GPIOs on a gpio chip are used its driver should not be
-unloaded.  The existing mechanism (gpiochip_remove failure) doesn't address
-that, since rmmod can no longer be made to fail by having the cleanup code
-report errors.  Module usecounts are the solution.
-
-Assuming standard "initialize struct to zero" policies, this change won't
-affect SOC platform drivers.  However, drivers for external chips (on I2C and
-SPI busses) should be updated if they can be built as modules.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-[ gpio_ensure_requested() needs to update module usecounts too ]
-Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -68,6 +68,9 @@ static void gpio_ensure_requested(struct
-       if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
-               pr_warning("GPIO-%d autorequested\n", (int)(desc - gpio_desc));
-               desc_set_label(desc, "[auto]");
-+              if (!try_module_get(desc->chip->owner))
-+                      pr_err("GPIO-%d: module can't be gotten \n",
-+                                      (int)(desc - gpio_desc));
-       }
- }
-@@ -177,6 +180,9 @@ int gpio_request(unsigned gpio, const ch
-       if (desc->chip == NULL)
-               goto done;
-+      if (!try_module_get(desc->chip->owner))
-+              goto done;
-+
-       /* NOTE:  gpio_request() can be called in early boot,
-        * before IRQs are enabled.
-        */
-@@ -184,8 +190,10 @@ int gpio_request(unsigned gpio, const ch
-       if (test_and_set_bit(FLAG_REQUESTED, &desc->flags) == 0) {
-               desc_set_label(desc, label ? : "?");
-               status = 0;
--      } else
-+      } else {
-               status = -EBUSY;
-+              module_put(desc->chip->owner);
-+      }
- done:
-       if (status)
-@@ -209,9 +217,10 @@ void gpio_free(unsigned gpio)
-       spin_lock_irqsave(&gpio_lock, flags);
-       desc = &gpio_desc[gpio];
--      if (desc->chip && test_and_clear_bit(FLAG_REQUESTED, &desc->flags))
-+      if (desc->chip && test_and_clear_bit(FLAG_REQUESTED, &desc->flags)) {
-               desc_set_label(desc, NULL);
--      else
-+              module_put(desc->chip->owner);
-+      } else
-               WARN_ON(extra_checks);
-       spin_unlock_irqrestore(&gpio_lock, flags);
---- a/include/asm-generic/gpio.h
-+++ b/include/asm-generic/gpio.h
-@@ -17,6 +17,7 @@
- #endif
- struct seq_file;
-+struct module;
- /**
-  * struct gpio_chip - abstract a GPIO controller
-@@ -48,6 +49,7 @@ struct seq_file;
-  */
- struct gpio_chip {
-       char                    *label;
-+      struct module           *owner;
-       int                     (*direction_input)(struct gpio_chip *chip,
-                                               unsigned offset);
diff --git a/target/linux/generic-2.6/patches-2.6.25/961-backport_gpio_define_gpio_valid.patch b/target/linux/generic-2.6/patches-2.6.25/961-backport_gpio_define_gpio_valid.patch
deleted file mode 100644 (file)
index 771b743..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-From: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-Date: Mon, 28 Apr 2008 09:14:46 +0000 (-0700)
-Subject: gpio: define gpio_is_valid()
-X-Git-Tag: v2.6.26-rc1~849
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=e6de1808f8ebfeb7e49f3c5a30cb8f2032beb287
-
-gpio: define gpio_is_valid()
-
-Introduce a gpio_is_valid() predicate; use it in gpiolib.
-
-Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@pengutronix.de>
-    [ use inline function; follow the gpio_* naming convention;
-      work without gpiolib; all programming interfaces need docs ]
-Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
---- a/Documentation/gpio.txt
-+++ b/Documentation/gpio.txt
-@@ -107,6 +107,16 @@ type of GPIO controller, and on one part
- The numbers need not be contiguous; either of those platforms could also
- use numbers 2000-2063 to identify GPIOs in a bank of I2C GPIO expanders.
-+If you want to initialize a structure with an invalid GPIO number, use
-+some negative number (perhaps "-EINVAL"); that will never be valid.  To
-+test if a number could reference a GPIO, you may use this predicate:
-+
-+      int gpio_is_valid(int number);
-+
-+A number that's not valid will be rejected by calls which may request
-+or free GPIOs (see below).  Other numbers may also be rejected; for
-+example, a number might be valid but unused on a given board.
-+
- Whether a platform supports multiple GPIO controllers is currently a
- platform-specific implementation issue.
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -99,7 +99,7 @@ int gpiochip_add(struct gpio_chip *chip)
-        * dynamic allocation.  We don't currently support that.
-        */
--      if (chip->base < 0 || (chip->base  + chip->ngpio) >= ARCH_NR_GPIOS) {
-+      if (chip->base < 0 || !gpio_is_valid(chip->base  + chip->ngpio)) {
-               status = -EINVAL;
-               goto fail;
-       }
-@@ -174,7 +174,7 @@ int gpio_request(unsigned gpio, const ch
-       spin_lock_irqsave(&gpio_lock, flags);
--      if (gpio >= ARCH_NR_GPIOS)
-+      if (!gpio_is_valid(gpio))
-               goto done;
-       desc = &gpio_desc[gpio];
-       if (desc->chip == NULL)
-@@ -209,7 +209,7 @@ void gpio_free(unsigned gpio)
-       unsigned long           flags;
-       struct gpio_desc        *desc;
--      if (gpio >= ARCH_NR_GPIOS) {
-+      if (!gpio_is_valid(gpio)) {
-               WARN_ON(extra_checks);
-               return;
-       }
-@@ -245,7 +245,7 @@ const char *gpiochip_is_requested(struct
- {
-       unsigned gpio = chip->base + offset;
--      if (gpio >= ARCH_NR_GPIOS || gpio_desc[gpio].chip != chip)
-+      if (!gpio_is_valid(gpio) || gpio_desc[gpio].chip != chip)
-               return NULL;
-       if (test_bit(FLAG_REQUESTED, &gpio_desc[gpio].flags) == 0)
-               return NULL;
-@@ -276,7 +276,7 @@ int gpio_direction_input(unsigned gpio)
-       spin_lock_irqsave(&gpio_lock, flags);
--      if (gpio >= ARCH_NR_GPIOS)
-+      if (!gpio_is_valid(gpio))
-               goto fail;
-       chip = desc->chip;
-       if (!chip || !chip->get || !chip->direction_input)
-@@ -314,7 +314,7 @@ int gpio_direction_output(unsigned gpio,
-       spin_lock_irqsave(&gpio_lock, flags);
--      if (gpio >= ARCH_NR_GPIOS)
-+      if (!gpio_is_valid(gpio))
-               goto fail;
-       chip = desc->chip;
-       if (!chip || !chip->set || !chip->direction_output)
-@@ -531,7 +531,7 @@ static int gpiolib_show(struct seq_file 
-       /* REVISIT this isn't locked against gpio_chip removal ... */
--      for (gpio = 0; gpio < ARCH_NR_GPIOS; gpio++) {
-+      for (gpio = 0; gpio_is_valid(gpio); gpio++) {
-               if (chip == gpio_desc[gpio].chip)
-                       continue;
-               chip = gpio_desc[gpio].chip;
---- a/include/asm-generic/gpio.h
-+++ b/include/asm-generic/gpio.h
-@@ -16,6 +16,12 @@
- #define ARCH_NR_GPIOS         256
- #endif
-+static inline int gpio_is_valid(int number)
-+{
-+      /* only some non-negative numbers are valid */
-+      return ((unsigned)number) < ARCH_NR_GPIOS;
-+}
-+
- struct seq_file;
- struct module;
-@@ -99,6 +105,16 @@ extern int __gpio_cansleep(unsigned gpio
- #else
-+static inline int __gpio_is_valid(int number)
-+{
-+      /* only non-negative numbers are valid */
-+      return number >= 0;
-+}
-+
-+#ifndef gpio_is_valid
-+#define gpio_is_valid __gpio_is_valid
-+#endif
-+
- /* platforms that don't directly support access to GPIOs through I2C, SPI,
-  * or other blocking infrastructure can use these wrappers.
-  */
diff --git a/target/linux/generic-2.6/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch b/target/linux/generic-2.6/patches-2.6.25/962-backport_gpiolib_dynamic_gpio_number_allocation.patch
deleted file mode 100644 (file)
index 0960f67..0000000
+++ /dev/null
@@ -1,116 +0,0 @@
-From: Anton Vorontsov <avorontsov@ru.mvista.com>
-Date: Mon, 28 Apr 2008 09:14:46 +0000 (-0700)
-Subject: gpiolib: dynamic gpio number allocation
-X-Git-Tag: v2.6.26-rc1~848
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=8d0aab2f16c4fa170f32e7a74a52cd0122bbafef
-
-gpiolib: dynamic gpio number allocation
-
-If gpio_chip->base is negative during registration, gpiolib performs dynamic
-base allocation.  This is useful for devices that aren't always present, such
-as GPIOs on hotplugged devices rather than mainboards.  (This behavior was
-previously specified but not implemented.)
-
-To avoid using any numbers that may have been explicitly assigned but not yet
-registered, this dynamic allocation assigns GPIO numbers from the biggest
-number on down, instead of from the smallest on up.
-
-Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
-Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -80,6 +80,33 @@ static inline struct gpio_chip *gpio_to_
-       return gpio_desc[gpio].chip;
- }
-+/* dynamic allocation of GPIOs, e.g. on a hotplugged device */
-+static int gpiochip_find_base(int ngpio)
-+{
-+      int i;
-+      int spare = 0;
-+      int base = -ENOSPC;
-+
-+      for (i = ARCH_NR_GPIOS - 1; i >= 0 ; i--) {
-+              struct gpio_chip *chip = gpio_desc[i].chip;
-+
-+              if (!chip) {
-+                      spare++;
-+                      if (spare == ngpio) {
-+                              base = i;
-+                              break;
-+                      }
-+              } else {
-+                      spare = 0;
-+                      i -= chip->ngpio - 1;
-+              }
-+      }
-+
-+      if (gpio_is_valid(base))
-+              pr_debug("%s: found new base at %d\n", __func__, base);
-+      return base;
-+}
-+
- /**
-  * gpiochip_add() - register a gpio_chip
-  * @chip: the chip to register, with chip->base initialized
-@@ -88,38 +115,49 @@ static inline struct gpio_chip *gpio_to_
-  * Returns a negative errno if the chip can't be registered, such as
-  * because the chip->base is invalid or already associated with a
-  * different chip.  Otherwise it returns zero as a success code.
-+ *
-+ * If chip->base is negative, this requests dynamic assignment of
-+ * a range of valid GPIOs.
-  */
- int gpiochip_add(struct gpio_chip *chip)
- {
-       unsigned long   flags;
-       int             status = 0;
-       unsigned        id;
-+      int             base = chip->base;
--      /* NOTE chip->base negative is reserved to mean a request for
--       * dynamic allocation.  We don't currently support that.
--       */
--
--      if (chip->base < 0 || !gpio_is_valid(chip->base  + chip->ngpio)) {
-+      if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio))
-+                      && base >= 0) {
-               status = -EINVAL;
-               goto fail;
-       }
-       spin_lock_irqsave(&gpio_lock, flags);
-+      if (base < 0) {
-+              base = gpiochip_find_base(chip->ngpio);
-+              if (base < 0) {
-+                      status = base;
-+                      goto fail_unlock;
-+              }
-+              chip->base = base;
-+      }
-+
-       /* these GPIO numbers must not be managed by another gpio_chip */
--      for (id = chip->base; id < chip->base + chip->ngpio; id++) {
-+      for (id = base; id < base + chip->ngpio; id++) {
-               if (gpio_desc[id].chip != NULL) {
-                       status = -EBUSY;
-                       break;
-               }
-       }
-       if (status == 0) {
--              for (id = chip->base; id < chip->base + chip->ngpio; id++) {
-+              for (id = base; id < base + chip->ngpio; id++) {
-                       gpio_desc[id].chip = chip;
-                       gpio_desc[id].flags = 0;
-               }
-       }
-+fail_unlock:
-       spin_unlock_irqrestore(&gpio_lock, flags);
- fail:
-       /* failures here can mean systems won't boot... */
diff --git a/target/linux/generic-2.6/patches-2.6.25/963-backport_gpio_chip_reserve.patch b/target/linux/generic-2.6/patches-2.6.25/963-backport_gpio_chip_reserve.patch
deleted file mode 100644 (file)
index abf77c3..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-From: Anton Vorontsov <avorontsov@ru.mvista.com>
-Date: Mon, 28 Apr 2008 09:14:47 +0000 (-0700)
-Subject: gpiochip_reserve()
-X-Git-Tag: v2.6.26-rc1~847
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=169b6a7a6e91e1ea32136681b475cbaf2074bf35
-
-gpiochip_reserve()
-
-Add a new function gpiochip_reserve() to reserve ranges of gpios that platform
-code has pre-allocated.  That is, this marks gpio numbers which will be
-claimed by drivers that haven't yet been loaded, and thus are not available
-for dynamic gpio number allocation.
-
-[akpm@linux-foundation.org: remove unneeded __must_check]
-[david-b@pacbell.net: don't export gpiochip_reserve (section fix)]
-Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
-Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -43,6 +43,7 @@ struct gpio_desc {
- /* flag symbols are bit numbers */
- #define FLAG_REQUESTED        0
- #define FLAG_IS_OUT   1
-+#define FLAG_RESERVED 2
- #ifdef CONFIG_DEBUG_FS
-       const char              *label;
-@@ -88,9 +89,10 @@ static int gpiochip_find_base(int ngpio)
-       int base = -ENOSPC;
-       for (i = ARCH_NR_GPIOS - 1; i >= 0 ; i--) {
--              struct gpio_chip *chip = gpio_desc[i].chip;
-+              struct gpio_desc *desc = &gpio_desc[i];
-+              struct gpio_chip *chip = desc->chip;
--              if (!chip) {
-+              if (!chip && !test_bit(FLAG_RESERVED, &desc->flags)) {
-                       spare++;
-                       if (spare == ngpio) {
-                               base = i;
-@@ -98,7 +100,8 @@ static int gpiochip_find_base(int ngpio)
-                       }
-               } else {
-                       spare = 0;
--                      i -= chip->ngpio - 1;
-+                      if (chip)
-+                              i -= chip->ngpio - 1;
-               }
-       }
-@@ -108,6 +111,47 @@ static int gpiochip_find_base(int ngpio)
- }
- /**
-+ * gpiochip_reserve() - reserve range of gpios to use with platform code only
-+ * @start: starting gpio number
-+ * @ngpio: number of gpios to reserve
-+ * Context: platform init, potentially before irqs or kmalloc will work
-+ *
-+ * Returns a negative errno if any gpio within the range is already reserved
-+ * or registered, else returns zero as a success code.  Use this function
-+ * to mark a range of gpios as unavailable for dynamic gpio number allocation,
-+ * for example because its driver support is not yet loaded.
-+ */
-+int __init gpiochip_reserve(int start, int ngpio)
-+{
-+      int ret = 0;
-+      unsigned long flags;
-+      int i;
-+
-+      if (!gpio_is_valid(start) || !gpio_is_valid(start + ngpio))
-+              return -EINVAL;
-+
-+      spin_lock_irqsave(&gpio_lock, flags);
-+
-+      for (i = start; i < start + ngpio; i++) {
-+              struct gpio_desc *desc = &gpio_desc[i];
-+
-+              if (desc->chip || test_bit(FLAG_RESERVED, &desc->flags)) {
-+                      ret = -EBUSY;
-+                      goto err;
-+              }
-+
-+              set_bit(FLAG_RESERVED, &desc->flags);
-+      }
-+
-+      pr_debug("%s: reserved gpios from %d to %d\n",
-+               __func__, start, start + ngpio - 1);
-+err:
-+      spin_unlock_irqrestore(&gpio_lock, flags);
-+
-+      return ret;
-+}
-+
-+/**
-  * gpiochip_add() - register a gpio_chip
-  * @chip: the chip to register, with chip->base initialized
-  * Context: potentially before irqs or kmalloc will work
---- a/include/asm-generic/gpio.h
-+++ b/include/asm-generic/gpio.h
-@@ -74,6 +74,7 @@ struct gpio_chip {
- extern const char *gpiochip_is_requested(struct gpio_chip *chip,
-                       unsigned offset);
-+extern int __init __must_check gpiochip_reserve(int start, int ngpio);
- /* add/remove chips */
- extern int gpiochip_add(struct gpio_chip *chip);
diff --git a/target/linux/generic-2.6/patches-2.6.25/964-backport_gpiolib_fix_off_by_one_errors.patch b/target/linux/generic-2.6/patches-2.6.25/964-backport_gpiolib_fix_off_by_one_errors.patch
deleted file mode 100644 (file)
index c875a0d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-From: Trent Piepho <xyzzy@speakeasy.org>
-Date: Fri, 23 May 2008 20:04:44 +0000 (-0700)
-Subject: gpiolib: fix off by one errors
-X-Git-Tag: v2.6.26-rc4~31
-X-Git-Url: http://git.kernel.org/?p=linux%2Fkernel%2Fgit%2Ftorvalds%2Flinux-2.6.git;a=commitdiff_plain;h=bff5fda972dc23bd1806a47c2098ae173585d013
-
-gpiolib: fix off by one errors
-
-The last gpio belonging to a chip is chip->base + chip->ngpios - 1.  Some
-places in the code, but not all, forgot the critical minus one.
-
-Signed-off-by: Trent Piepho <xyzzy@speakeasy.org>
-Acked-by: David Brownell <dbrownell@users.sourceforge.net>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
-
---- a/drivers/gpio/gpiolib.c
-+++ b/drivers/gpio/gpiolib.c
-@@ -127,7 +127,7 @@ int __init gpiochip_reserve(int start, i
-       unsigned long flags;
-       int i;
--      if (!gpio_is_valid(start) || !gpio_is_valid(start + ngpio))
-+      if (!gpio_is_valid(start) || !gpio_is_valid(start + ngpio - 1))
-               return -EINVAL;
-       spin_lock_irqsave(&gpio_lock, flags);
-@@ -170,7 +170,7 @@ int gpiochip_add(struct gpio_chip *chip)
-       unsigned        id;
-       int             base = chip->base;
--      if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio))
-+      if ((!gpio_is_valid(base) || !gpio_is_valid(base + chip->ngpio - 1))
-                       && base >= 0) {
-               status = -EINVAL;
-               goto fail;
-@@ -207,7 +207,7 @@ fail:
-       /* failures here can mean systems won't boot... */
-       if (status)
-               pr_err("gpiochip_add: gpios %d..%d (%s) not registered\n",
--                      chip->base, chip->base + chip->ngpio,
-+                      chip->base, chip->base + chip->ngpio - 1,
-                       chip->label ? : "generic");
-       return status;
- }
diff --git a/target/linux/generic-2.6/patches-2.6.25/971-ocf_20080917.patch b/target/linux/generic-2.6/patches-2.6.25/971-ocf_20080917.patch
deleted file mode 100644 (file)
index 4661bad..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -593,3 +593,6 @@ config CRYPTO_LZO
- source "drivers/crypto/Kconfig"
- endif # if CRYPTO
-+
-+source "crypto/ocf/Kconfig"
-+
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -65,6 +65,8 @@ obj-$(CONFIG_CRYPTO_LZO) += lzo.o
- obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
-+obj-$(CONFIG_OCF_OCF) += ocf/
-+
- #
- # generic algorithms and the async_tx api
- #
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -129,6 +129,9 @@
-  *                                unsigned int value);
-  *    void add_interrupt_randomness(int irq);
-  *
-+ *      void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+ *      int random_input_wait(void);
-+ *
-  * add_input_randomness() uses the input layer interrupt timing, as well as
-  * the event type information from the hardware.
-  *
-@@ -140,6 +143,13 @@
-  * a better measure, since the timing of the disk interrupts are more
-  * unpredictable.
-  *
-+ * random_input_words() just provides a raw block of entropy to the input
-+ * pool, such as from a hardware entropy generator.
-+ *
-+ * random_input_wait() suspends the caller until such time as the
-+ * entropy pool falls below the write threshold, and returns a count of how
-+ * much entropy (in bits) is needed to sustain the pool.
-+ *
-  * All of these routines try to estimate how many bits of randomness a
-  * particular randomness source.  They do this by keeping track of the
-  * first and second order deltas of the event timings.
-@@ -669,6 +679,61 @@ void add_disk_randomness(struct gendisk 
- }
- #endif
-+/*
-+ * random_input_words - add bulk entropy to pool
-+ *
-+ * @buf: buffer to add
-+ * @wordcount: number of __u32 words to add
-+ * @ent_count: total amount of entropy (in bits) to credit
-+ *
-+ * this provides bulk input of entropy to the input pool
-+ *
-+ */
-+void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+{
-+      add_entropy_words(&input_pool, buf, wordcount);
-+
-+      credit_entropy_store(&input_pool, ent_count);
-+
-+      DEBUG_ENT("crediting %d bits => %d\n",
-+                ent_count, input_pool.entropy_count);
-+      /*
-+       * Wake up waiting processes if we have enough
-+       * entropy.
-+       */
-+      if (input_pool.entropy_count >= random_read_wakeup_thresh)
-+              wake_up_interruptible(&random_read_wait);
-+}
-+EXPORT_SYMBOL(random_input_words);
-+
-+/*
-+ * random_input_wait - wait until random needs entropy
-+ *
-+ * this function sleeps until the /dev/random subsystem actually
-+ * needs more entropy, and then return the amount of entropy
-+ * that it would be nice to have added to the system.
-+ */
-+int random_input_wait(void)
-+{
-+      int count;
-+
-+      wait_event_interruptible(random_write_wait, 
-+                       input_pool.entropy_count < random_write_wakeup_thresh);
-+
-+      count = random_write_wakeup_thresh - input_pool.entropy_count;
-+
-+        /* likely we got woken up due to a signal */
-+      if (count <= 0) count = random_read_wakeup_thresh; 
-+
-+      DEBUG_ENT("requesting %d bits from input_wait()er %d<%d\n",
-+                count,
-+                input_pool.entropy_count, random_write_wakeup_thresh);
-+
-+      return count;
-+}
-+EXPORT_SYMBOL(random_input_wait);
-+
-+
- #define EXTRACT_SIZE 10
- /*********************************************************************
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -202,6 +202,7 @@ asmlinkage long sys_dup(unsigned int fil
-               ret = dupfd(file, 0, 0);
-       return ret;
- }
-+EXPORT_SYMBOL(sys_dup);
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | FASYNC | O_DIRECT | O_NOATIME)
---- a/include/linux/miscdevice.h
-+++ b/include/linux/miscdevice.h
-@@ -12,6 +12,7 @@
- #define APOLLO_MOUSE_MINOR 7
- #define PC110PAD_MINOR 9
- /*#define ADB_MOUSE_MINOR 10  FIXME OBSOLETE */
-+#define CRYPTODEV_MINOR               70      /* /dev/crypto */
- #define WATCHDOG_MINOR                130     /* Watchdog timer     */
- #define TEMP_MINOR            131     /* Temperature Sensor */
- #define RTC_MINOR 135
---- a/include/linux/random.h
-+++ b/include/linux/random.h
-@@ -8,6 +8,7 @@
- #define _LINUX_RANDOM_H
- #include <linux/ioctl.h>
-+#include <linux/types.h> /* for __u32 in user space */
- /* ioctl()'s for the random number generator */
-@@ -32,6 +33,30 @@
- /* Clear the entropy pool and associated counters.  (Superuser only.) */
- #define RNDCLEARPOOL  _IO( 'R', 0x06 )
-+#ifdef CONFIG_FIPS_RNG
-+
-+/* Size of seed value - equal to AES blocksize */
-+#define AES_BLOCK_SIZE_BYTES  16
-+#define SEED_SIZE_BYTES                       AES_BLOCK_SIZE_BYTES
-+/* Size of AES key */
-+#define KEY_SIZE_BYTES                16
-+
-+/* ioctl() structure used by FIPS 140-2 Tests */
-+struct rand_fips_test {
-+      unsigned char key[KEY_SIZE_BYTES];                      /* Input */
-+      unsigned char datetime[SEED_SIZE_BYTES];        /* Input */
-+      unsigned char seed[SEED_SIZE_BYTES];            /* Input */
-+      unsigned char result[SEED_SIZE_BYTES];          /* Output */
-+};
-+
-+/* FIPS 140-2 RNG Variable Seed Test. (Superuser only.) */
-+#define RNDFIPSVST    _IOWR('R', 0x10, struct rand_fips_test)
-+
-+/* FIPS 140-2 RNG Monte Carlo Test. (Superuser only.) */
-+#define RNDFIPSMCT    _IOWR('R', 0x11, struct rand_fips_test)
-+
-+#endif /* #ifdef CONFIG_FIPS_RNG */
-+
- struct rand_pool_info {
-       int     entropy_count;
-       int     buf_size;
-@@ -48,6 +73,10 @@ extern void add_input_randomness(unsigne
-                                unsigned int value);
- extern void add_interrupt_randomness(int irq);
-+extern void random_input_words(__u32 *buf, size_t wordcount, int ent_count);
-+extern int random_input_wait(void);
-+#define HAS_RANDOM_INPUT_WAIT 1
-+
- extern void get_random_bytes(void *buf, int nbytes);
- void generate_random_uuid(unsigned char uuid_out[16]);
diff --git a/target/linux/generic-2.6/patches-2.6.25/972-ocf_compile_fix.patch b/target/linux/generic-2.6/patches-2.6.25/972-ocf_compile_fix.patch
deleted file mode 100644 (file)
index a3fa226..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/crypto/ocf/cryptosoft.c
-+++ b/crypto/ocf/cryptosoft.c
-@@ -47,7 +47,7 @@
- #include <linux/mm.h>
- #include <linux/skbuff.h>
- #include <linux/random.h>
--#include <asm/scatterlist.h>
-+#include <linux/scatterlist.h>
- #include <cryptodev.h>
- #include <uio.h>
diff --git a/target/linux/generic-2.6/patches-2.6.25/981-backport_usb_serial_sierrawireless_ids.patch b/target/linux/generic-2.6/patches-2.6.25/981-backport_usb_serial_sierrawireless_ids.patch
deleted file mode 100644 (file)
index d5bb40f..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/usb/serial/sierra.c
-+++ b/drivers/usb/serial/sierra.c
-@@ -166,14 +166,19 @@ static struct usb_device_id id_table [] 
-       { USB_DEVICE(0x1199, 0x6815) }, /* Sierra Wireless MC8775 */
-       { USB_DEVICE(0x03f0, 0x1e1d) }, /* HP hs2300 a.k.a MC8775 */
-       { USB_DEVICE(0x1199, 0x6820) }, /* Sierra Wireless AirCard 875 */
-+      { USB_DEVICE(0x1199, 0x6821) }, /* Sierra Wireless AirCard 875U */
-       { USB_DEVICE(0x1199, 0x6832) }, /* Sierra Wireless MC8780*/
-       { USB_DEVICE(0x1199, 0x6833) }, /* Sierra Wireless MC8781*/
-+      { USB_DEVICE(0x1199, 0x683B), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless MC8785 Composite*/
-+      { USB_DEVICE(0x1199, 0x683C), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless MC8790 Composite*/
-       { USB_DEVICE(0x1199, 0x6850) }, /* Sierra Wireless AirCard 880 */
-       { USB_DEVICE(0x1199, 0x6851) }, /* Sierra Wireless AirCard 881 */
-       { USB_DEVICE(0x1199, 0x6852) }, /* Sierra Wireless AirCard 880 E */
-       { USB_DEVICE(0x1199, 0x6853) }, /* Sierra Wireless AirCard 881 E */
-       { USB_DEVICE(0x1199, 0x6855) }, /* Sierra Wireless AirCard 880 U */
-       { USB_DEVICE(0x1199, 0x6856) }, /* Sierra Wireless AirCard 881 U */
-+      { USB_DEVICE(0x1199, 0x6859), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless AirCard 885 E */
-+      { USB_DEVICE(0x1199, 0x685A), .driver_info = DEVICE_1_PORT }, /* Sierra Wireless AirCard 885 E */
-       { USB_DEVICE(0x1199, 0x6468) }, /* Sierra Wireless MP3G - EVDO */
-       { USB_DEVICE(0x1199, 0x6469) }, /* Sierra Wireless MP3G - UMTS/HSPA */
diff --git a/target/linux/generic-2.6/patches-2.6.25/999-use_preinit_as_init.patch b/target/linux/generic-2.6/patches-2.6.25/999-use_preinit_as_init.patch
deleted file mode 100644 (file)
index d61546d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -797,10 +797,7 @@ static int noinline init_post(void)
-               printk(KERN_WARNING "Failed to execute %s.  Attempting "
-                                       "defaults...\n", execute_command);
-       }
--      run_init_process("/sbin/init");
--      run_init_process("/etc/init");
--      run_init_process("/bin/init");
--      run_init_process("/bin/sh");
-+      run_init_process("/etc/preinit");
-       panic("No init found.  Try passing init= option to kernel.");
- }
diff --git a/target/linux/generic-2.6/patches-2.6.31/001-squashfs_move_zlib_decomp.patch b/target/linux/generic-2.6/patches-2.6.31/001-squashfs_move_zlib_decomp.patch
deleted file mode 100644 (file)
index 9409679..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-From 6c4419d997d4431bb62e73475cd6b084e83efbd1 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 22 Sep 2009 19:25:24 +0100
-Subject: [PATCH] Squashfs: move zlib decompression wrapper code into a separate file
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Makefile       |    2 +-
- fs/squashfs/block.c        |   74 ++----------------------------
- fs/squashfs/squashfs.h     |    4 ++
- fs/squashfs/zlib_wrapper.c |  109 ++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 118 insertions(+), 71 deletions(-)
- create mode 100644 fs/squashfs/zlib_wrapper.c
-
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -4,4 +4,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
--squashfs-y += namei.o super.o symlink.o
-+squashfs-y += namei.o super.o symlink.o zlib_wrapper.o
---- a/fs/squashfs/block.c
-+++ b/fs/squashfs/block.c
-@@ -29,7 +29,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/mutex.h>
- #include <linux/string.h>
- #include <linux/buffer_head.h>
- #include <linux/zlib.h>
-@@ -153,72 +152,10 @@ int squashfs_read_data(struct super_bloc
-       }
-       if (compressed) {
--              int zlib_err = 0, zlib_init = 0;
--
--              /*
--               * Uncompress block.
--               */
--
--              mutex_lock(&msblk->read_data_mutex);
--
--              msblk->stream.avail_out = 0;
--              msblk->stream.avail_in = 0;
--
--              bytes = length;
--              do {
--                      if (msblk->stream.avail_in == 0 && k < b) {
--                              avail = min(bytes, msblk->devblksize - offset);
--                              bytes -= avail;
--                              wait_on_buffer(bh[k]);
--                              if (!buffer_uptodate(bh[k]))
--                                      goto release_mutex;
--
--                              if (avail == 0) {
--                                      offset = 0;
--                                      put_bh(bh[k++]);
--                                      continue;
--                              }
--
--                              msblk->stream.next_in = bh[k]->b_data + offset;
--                              msblk->stream.avail_in = avail;
--                              offset = 0;
--                      }
--
--                      if (msblk->stream.avail_out == 0 && page < pages) {
--                              msblk->stream.next_out = buffer[page++];
--                              msblk->stream.avail_out = PAGE_CACHE_SIZE;
--                      }
--
--                      if (!zlib_init) {
--                              zlib_err = zlib_inflateInit(&msblk->stream);
--                              if (zlib_err != Z_OK) {
--                                      ERROR("zlib_inflateInit returned"
--                                              " unexpected result 0x%x,"
--                                              " srclength %d\n", zlib_err,
--                                              srclength);
--                                      goto release_mutex;
--                              }
--                              zlib_init = 1;
--                      }
--
--                      zlib_err = zlib_inflate(&msblk->stream, Z_SYNC_FLUSH);
--
--                      if (msblk->stream.avail_in == 0 && k < b)
--                              put_bh(bh[k++]);
--              } while (zlib_err == Z_OK);
--
--              if (zlib_err != Z_STREAM_END) {
--                      ERROR("zlib_inflate error, data probably corrupt\n");
--                      goto release_mutex;
--              }
--
--              zlib_err = zlib_inflateEnd(&msblk->stream);
--              if (zlib_err != Z_OK) {
--                      ERROR("zlib_inflate error, data probably corrupt\n");
--                      goto release_mutex;
--              }
--              length = msblk->stream.total_out;
--              mutex_unlock(&msblk->read_data_mutex);
-+              length = zlib_uncompress(msblk, buffer, bh, b, offset, length,
-+                      srclength, pages);
-+              if (length < 0)
-+                      goto read_failure;
-       } else {
-               /*
-                * Block is uncompressed.
-@@ -255,9 +192,6 @@ int squashfs_read_data(struct super_bloc
-       kfree(bh);
-       return length;
--release_mutex:
--      mutex_unlock(&msblk->read_data_mutex);
--
- block_release:
-       for (; k < b; k++)
-               put_bh(bh[k]);
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -70,6 +70,10 @@ extern struct inode *squashfs_iget(struc
-                               unsigned int);
- extern int squashfs_read_inode(struct inode *, long long);
-+/* zlib_wrapper.c */
-+extern int zlib_uncompress(struct squashfs_sb_info *, void **,
-+                              struct buffer_head **, int, int, int, int, int);
-+
- /*
-  * Inodes and files operations
-  */
---- /dev/null
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -0,0 +1,109 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * zlib_wrapper.c
-+ */
-+
-+
-+#include <linux/mutex.h>
-+#include <linux/buffer_head.h>
-+#include <linux/zlib.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "squashfs.h"
-+
-+int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+      struct buffer_head **bh, int b, int offset, int length, int srclength,
-+      int pages)
-+{
-+      int zlib_err = 0, zlib_init = 0;
-+      int avail, bytes, k = 0, page = 0;
-+
-+      mutex_lock(&msblk->read_data_mutex);
-+
-+      msblk->stream.avail_out = 0;
-+      msblk->stream.avail_in = 0;
-+
-+      bytes = length;
-+      do {
-+              if (msblk->stream.avail_in == 0 && k < b) {
-+                      avail = min(bytes, msblk->devblksize - offset);
-+                      bytes -= avail;
-+                      wait_on_buffer(bh[k]);
-+                      if (!buffer_uptodate(bh[k]))
-+                              goto release_mutex;
-+
-+                      if (avail == 0) {
-+                              offset = 0;
-+                              put_bh(bh[k++]);
-+                              continue;
-+                      }
-+
-+                      msblk->stream.next_in = bh[k]->b_data + offset;
-+                      msblk->stream.avail_in = avail;
-+                      offset = 0;
-+              }
-+
-+              if (msblk->stream.avail_out == 0 && page < pages) {
-+                      msblk->stream.next_out = buffer[page++];
-+                      msblk->stream.avail_out = PAGE_CACHE_SIZE;
-+              }
-+
-+              if (!zlib_init) {
-+                      zlib_err = zlib_inflateInit(&msblk->stream);
-+                      if (zlib_err != Z_OK) {
-+                              ERROR("zlib_inflateInit returned unexpected "
-+                                      "result 0x%x, srclength %d\n",
-+                                      zlib_err, srclength);
-+                              goto release_mutex;
-+                      }
-+                      zlib_init = 1;
-+              }
-+
-+              zlib_err = zlib_inflate(&msblk->stream, Z_SYNC_FLUSH);
-+
-+              if (msblk->stream.avail_in == 0 && k < b)
-+                      put_bh(bh[k++]);
-+      } while (zlib_err == Z_OK);
-+
-+      if (zlib_err != Z_STREAM_END) {
-+              ERROR("zlib_inflate error, data probably corrupt\n");
-+              goto release_mutex;
-+      }
-+
-+      zlib_err = zlib_inflateEnd(&msblk->stream);
-+      if (zlib_err != Z_OK) {
-+              ERROR("zlib_inflate error, data probably corrupt\n");
-+              goto release_mutex;
-+      }
-+
-+      mutex_unlock(&msblk->read_data_mutex);
-+      return msblk->stream.total_out;
-+
-+release_mutex:
-+      mutex_unlock(&msblk->read_data_mutex);
-+
-+      for (; k < b; k++)
-+              put_bh(bh[k]);
-+
-+      return -EIO;
-+}
diff --git a/target/linux/generic-2.6/patches-2.6.31/002-squashfs_factor_out_remaining_zlib.patch b/target/linux/generic-2.6/patches-2.6.31/002-squashfs_factor_out_remaining_zlib.patch
deleted file mode 100644 (file)
index eacbb97..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-From 37c44e85fd49676ec15ccaeea065662c1fbcda7d Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Wed, 23 Sep 2009 19:04:49 +0100
-Subject: [PATCH] Squashfs: Factor out remaining zlib dependencies into separate wrapper file
-
-Move zlib buffer init/destroy code into separate wrapper file.  Also
-make zlib z_stream field a void * removing the need to include zlib.h
-for most files.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/block.c          |    1 -
- fs/squashfs/cache.c          |    1 -
- fs/squashfs/dir.c            |    1 -
- fs/squashfs/export.c         |    1 -
- fs/squashfs/file.c           |    1 -
- fs/squashfs/fragment.c       |    1 -
- fs/squashfs/id.c             |    1 -
- fs/squashfs/inode.c          |    1 -
- fs/squashfs/namei.c          |    1 -
- fs/squashfs/squashfs.h       |    2 +
- fs/squashfs/squashfs_fs_sb.h |    2 +-
- fs/squashfs/super.c          |   14 +++------
- fs/squashfs/symlink.c        |    1 -
- fs/squashfs/zlib_wrapper.c   |   56 ++++++++++++++++++++++++++++++++---------
- 14 files changed, 51 insertions(+), 33 deletions(-)
-
---- a/fs/squashfs/block.c
-+++ b/fs/squashfs/block.c
-@@ -31,7 +31,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/buffer_head.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/cache.c
-+++ b/fs/squashfs/cache.c
-@@ -51,7 +51,6 @@
- #include <linux/sched.h>
- #include <linux/spinlock.h>
- #include <linux/wait.h>
--#include <linux/zlib.h>
- #include <linux/pagemap.h>
- #include "squashfs_fs.h"
---- a/fs/squashfs/dir.c
-+++ b/fs/squashfs/dir.c
-@@ -30,7 +30,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/export.c
-+++ b/fs/squashfs/export.c
-@@ -39,7 +39,6 @@
- #include <linux/vfs.h>
- #include <linux/dcache.h>
- #include <linux/exportfs.h>
--#include <linux/zlib.h>
- #include <linux/slab.h>
- #include "squashfs_fs.h"
---- a/fs/squashfs/file.c
-+++ b/fs/squashfs/file.c
-@@ -47,7 +47,6 @@
- #include <linux/string.h>
- #include <linux/pagemap.h>
- #include <linux/mutex.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/fragment.c
-+++ b/fs/squashfs/fragment.c
-@@ -36,7 +36,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/id.c
-+++ b/fs/squashfs/id.c
-@@ -34,7 +34,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/inode.c
-+++ b/fs/squashfs/inode.c
-@@ -40,7 +40,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/namei.c
-+++ b/fs/squashfs/namei.c
-@@ -57,7 +57,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/dcache.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -71,6 +71,8 @@ extern struct inode *squashfs_iget(struc
- extern int squashfs_read_inode(struct inode *, long long);
- /* zlib_wrapper.c */
-+extern void *zlib_init(void);
-+extern void zlib_free(void *);
- extern int zlib_uncompress(struct squashfs_sb_info *, void **,
-                               struct buffer_head **, int, int, int, int, int);
---- a/fs/squashfs/squashfs_fs_sb.h
-+++ b/fs/squashfs/squashfs_fs_sb.h
-@@ -64,7 +64,7 @@ struct squashfs_sb_info {
-       struct mutex            read_data_mutex;
-       struct mutex            meta_index_mutex;
-       struct meta_index       *meta_index;
--      z_stream                stream;
-+      void                    *stream;
-       __le64                  *inode_lookup_table;
-       u64                     inode_table;
-       u64                     directory_table;
---- a/fs/squashfs/super.c
-+++ b/fs/squashfs/super.c
-@@ -35,7 +35,6 @@
- #include <linux/pagemap.h>
- #include <linux/init.h>
- #include <linux/module.h>
--#include <linux/zlib.h>
- #include <linux/magic.h>
- #include "squashfs_fs.h"
-@@ -87,12 +86,9 @@ static int squashfs_fill_super(struct su
-       }
-       msblk = sb->s_fs_info;
--      msblk->stream.workspace = kmalloc(zlib_inflate_workspacesize(),
--              GFP_KERNEL);
--      if (msblk->stream.workspace == NULL) {
--              ERROR("Failed to allocate zlib workspace\n");
-+      msblk->stream = zlib_init();
-+      if (msblk->stream == NULL)
-               goto failure;
--      }
-       sblk = kzalloc(sizeof(*sblk), GFP_KERNEL);
-       if (sblk == NULL) {
-@@ -292,17 +288,17 @@ failed_mount:
-       squashfs_cache_delete(msblk->block_cache);
-       squashfs_cache_delete(msblk->fragment_cache);
-       squashfs_cache_delete(msblk->read_page);
-+      zlib_free(msblk->stream);
-       kfree(msblk->inode_lookup_table);
-       kfree(msblk->fragment_index);
-       kfree(msblk->id_table);
--      kfree(msblk->stream.workspace);
-       kfree(sb->s_fs_info);
-       sb->s_fs_info = NULL;
-       kfree(sblk);
-       return err;
- failure:
--      kfree(msblk->stream.workspace);
-+      zlib_free(msblk->stream);
-       kfree(sb->s_fs_info);
-       sb->s_fs_info = NULL;
-       return -ENOMEM;
-@@ -346,10 +342,10 @@ static void squashfs_put_super(struct su
-               squashfs_cache_delete(sbi->block_cache);
-               squashfs_cache_delete(sbi->fragment_cache);
-               squashfs_cache_delete(sbi->read_page);
-+              zlib_free(sbi->stream);
-               kfree(sbi->id_table);
-               kfree(sbi->fragment_index);
-               kfree(sbi->meta_index);
--              kfree(sbi->stream.workspace);
-               kfree(sb->s_fs_info);
-               sb->s_fs_info = NULL;
-       }
---- a/fs/squashfs/symlink.c
-+++ b/fs/squashfs/symlink.c
-@@ -36,7 +36,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/pagemap.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/zlib_wrapper.c
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -31,21 +31,51 @@
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
-+void *zlib_init()
-+{
-+      z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
-+      if (stream == NULL)
-+              goto failed;
-+      stream->workspace = kmalloc(zlib_inflate_workspacesize(),
-+              GFP_KERNEL);
-+      if (stream->workspace == NULL)
-+              goto failed;
-+
-+      return stream;
-+
-+failed:
-+      ERROR("Failed to allocate zlib workspace\n");
-+      kfree(stream);
-+      return NULL;
-+}
-+
-+
-+void zlib_free(void *strm)
-+{
-+      z_stream *stream = strm;
-+
-+      if (stream)
-+              kfree(stream->workspace);
-+      kfree(stream);
-+}
-+
-+
- int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-       struct buffer_head **bh, int b, int offset, int length, int srclength,
-       int pages)
- {
-       int zlib_err = 0, zlib_init = 0;
-       int avail, bytes, k = 0, page = 0;
-+      z_stream *stream = msblk->stream;
-       mutex_lock(&msblk->read_data_mutex);
--      msblk->stream.avail_out = 0;
--      msblk->stream.avail_in = 0;
-+      stream->avail_out = 0;
-+      stream->avail_in = 0;
-       bytes = length;
-       do {
--              if (msblk->stream.avail_in == 0 && k < b) {
-+              if (stream->avail_in == 0 && k < b) {
-                       avail = min(bytes, msblk->devblksize - offset);
-                       bytes -= avail;
-                       wait_on_buffer(bh[k]);
-@@ -58,18 +88,18 @@ int zlib_uncompress(struct squashfs_sb_i
-                               continue;
-                       }
--                      msblk->stream.next_in = bh[k]->b_data + offset;
--                      msblk->stream.avail_in = avail;
-+                      stream->next_in = bh[k]->b_data + offset;
-+                      stream->avail_in = avail;
-                       offset = 0;
-               }
--              if (msblk->stream.avail_out == 0 && page < pages) {
--                      msblk->stream.next_out = buffer[page++];
--                      msblk->stream.avail_out = PAGE_CACHE_SIZE;
-+              if (stream->avail_out == 0 && page < pages) {
-+                      stream->next_out = buffer[page++];
-+                      stream->avail_out = PAGE_CACHE_SIZE;
-               }
-               if (!zlib_init) {
--                      zlib_err = zlib_inflateInit(&msblk->stream);
-+                      zlib_err = zlib_inflateInit(stream);
-                       if (zlib_err != Z_OK) {
-                               ERROR("zlib_inflateInit returned unexpected "
-                                       "result 0x%x, srclength %d\n",
-@@ -79,9 +109,9 @@ int zlib_uncompress(struct squashfs_sb_i
-                       zlib_init = 1;
-               }
--              zlib_err = zlib_inflate(&msblk->stream, Z_SYNC_FLUSH);
-+              zlib_err = zlib_inflate(stream, Z_SYNC_FLUSH);
--              if (msblk->stream.avail_in == 0 && k < b)
-+              if (stream->avail_in == 0 && k < b)
-                       put_bh(bh[k++]);
-       } while (zlib_err == Z_OK);
-@@ -90,14 +120,14 @@ int zlib_uncompress(struct squashfs_sb_i
-               goto release_mutex;
-       }
--      zlib_err = zlib_inflateEnd(&msblk->stream);
-+      zlib_err = zlib_inflateEnd(stream);
-       if (zlib_err != Z_OK) {
-               ERROR("zlib_inflate error, data probably corrupt\n");
-               goto release_mutex;
-       }
-       mutex_unlock(&msblk->read_data_mutex);
--      return msblk->stream.total_out;
-+      return stream->total_out;
- release_mutex:
-       mutex_unlock(&msblk->read_data_mutex);
diff --git a/target/linux/generic-2.6/patches-2.6.31/003-squashfs_add_decompressor_framework.patch b/target/linux/generic-2.6/patches-2.6.31/003-squashfs_add_decompressor_framework.patch
deleted file mode 100644 (file)
index cbfbf53..0000000
+++ /dev/null
@@ -1,426 +0,0 @@
-From 327fbf47a419befc6bff74f3ca42d2b6f0841903 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 6 Oct 2009 04:04:15 +0100
-Subject: [PATCH] Squashfs: add a decompressor framework
-
-This adds a decompressor framework which allows multiple compression
-algorithms to be cleanly supported.
-
-Also update zlib wrapper and other code to use the new framework.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Makefile         |    2 +-
- fs/squashfs/block.c          |    6 ++--
- fs/squashfs/decompressor.c   |   58 ++++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/decompressor.h   |   55 +++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h       |   14 +++++-----
- fs/squashfs/squashfs_fs_sb.h |   41 +++++++++++++++--------------
- fs/squashfs/super.c          |   45 ++++++++++++++++++-------------
- fs/squashfs/zlib_wrapper.c   |   17 ++++++++++--
- 8 files changed, 185 insertions(+), 53 deletions(-)
- create mode 100644 fs/squashfs/decompressor.c
- create mode 100644 fs/squashfs/decompressor.h
-
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -4,4 +4,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
--squashfs-y += namei.o super.o symlink.o zlib_wrapper.o
-+squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
---- a/fs/squashfs/block.c
-+++ b/fs/squashfs/block.c
-@@ -36,7 +36,7 @@
- #include "squashfs_fs_sb.h"
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
--
-+#include "decompressor.h"
- /*
-  * Read the metadata block length, this is stored in the first two
-  * bytes of the metadata block.
-@@ -151,8 +151,8 @@ int squashfs_read_data(struct super_bloc
-       }
-       if (compressed) {
--              length = zlib_uncompress(msblk, buffer, bh, b, offset, length,
--                      srclength, pages);
-+              length = squashfs_decompress(msblk, buffer, bh, b, offset,
-+                      length, srclength, pages);
-               if (length < 0)
-                       goto read_failure;
-       } else {
---- /dev/null
-+++ b/fs/squashfs/decompressor.c
-@@ -0,0 +1,58 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * decompressor.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/mutex.h>
-+#include <linux/buffer_head.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "decompressor.h"
-+#include "squashfs.h"
-+
-+/*
-+ * This file (and decompressor.h) implements a decompressor framework for
-+ * Squashfs, allowing multiple decompressors to be easily supported
-+ */
-+
-+static const struct squashfs_decompressor squashfs_unknown_comp_ops = {
-+      NULL, NULL, NULL, 0, "unknown", 0
-+};
-+
-+static const struct squashfs_decompressor *decompressor[] = {
-+      &squashfs_zlib_comp_ops,
-+      &squashfs_unknown_comp_ops
-+};
-+
-+
-+const struct squashfs_decompressor *squashfs_lookup_decompressor(int id)
-+{
-+      int i;
-+
-+      for (i = 0; decompressor[i]->id; i++)
-+              if (id == decompressor[i]->id)
-+                      break;
-+
-+      return decompressor[i];
-+}
---- /dev/null
-+++ b/fs/squashfs/decompressor.h
-@@ -0,0 +1,55 @@
-+#ifndef DECOMPRESSOR_H
-+#define DECOMPRESSOR_H
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * decompressor.h
-+ */
-+
-+struct squashfs_decompressor {
-+      void    *(*init)(void);
-+      void    (*free)(void *);
-+      int     (*decompress)(struct squashfs_sb_info *, void **,
-+              struct buffer_head **, int, int, int, int, int);
-+      int     id;
-+      char    *name;
-+      int     supported;
-+};
-+
-+static inline void *squashfs_decompressor_init(struct squashfs_sb_info *msblk)
-+{
-+      return msblk->decompressor->init();
-+}
-+
-+static inline void squashfs_decompressor_free(struct squashfs_sb_info *msblk,
-+      void *s)
-+{
-+      if (msblk->decompressor)
-+              msblk->decompressor->free(s);
-+}
-+
-+static inline int squashfs_decompress(struct squashfs_sb_info *msblk,
-+      void **buffer, struct buffer_head **bh, int b, int offset, int length,
-+      int srclength, int pages)
-+{
-+      return msblk->decompressor->decompress(msblk, buffer, bh, b, offset,
-+              length, srclength, pages);
-+}
-+#endif
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -51,6 +51,9 @@ extern struct squashfs_cache_entry *squa
-                               u64, int);
- extern int squashfs_read_table(struct super_block *, void *, u64, int);
-+/* decompressor.c */
-+extern const struct squashfs_decompressor *squashfs_lookup_decompressor(int);
-+
- /* export.c */
- extern __le64 *squashfs_read_inode_lookup_table(struct super_block *, u64,
-                               unsigned int);
-@@ -70,14 +73,8 @@ extern struct inode *squashfs_iget(struc
-                               unsigned int);
- extern int squashfs_read_inode(struct inode *, long long);
--/* zlib_wrapper.c */
--extern void *zlib_init(void);
--extern void zlib_free(void *);
--extern int zlib_uncompress(struct squashfs_sb_info *, void **,
--                              struct buffer_head **, int, int, int, int, int);
--
- /*
-- * Inodes and files operations
-+ * Inodes, files and decompressor operations
-  */
- /* dir.c */
-@@ -94,3 +91,6 @@ extern const struct inode_operations squ
- /* symlink.c */
- extern const struct address_space_operations squashfs_symlink_aops;
-+
-+/* zlib_wrapper.c */
-+extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
---- a/fs/squashfs/squashfs_fs_sb.h
-+++ b/fs/squashfs/squashfs_fs_sb.h
-@@ -52,25 +52,26 @@ struct squashfs_cache_entry {
- };
- struct squashfs_sb_info {
--      int                     devblksize;
--      int                     devblksize_log2;
--      struct squashfs_cache   *block_cache;
--      struct squashfs_cache   *fragment_cache;
--      struct squashfs_cache   *read_page;
--      int                     next_meta_index;
--      __le64                  *id_table;
--      __le64                  *fragment_index;
--      unsigned int            *fragment_index_2;
--      struct mutex            read_data_mutex;
--      struct mutex            meta_index_mutex;
--      struct meta_index       *meta_index;
--      void                    *stream;
--      __le64                  *inode_lookup_table;
--      u64                     inode_table;
--      u64                     directory_table;
--      unsigned int            block_size;
--      unsigned short          block_log;
--      long long               bytes_used;
--      unsigned int            inodes;
-+      const struct squashfs_decompressor      *decompressor;
-+      int                                     devblksize;
-+      int                                     devblksize_log2;
-+      struct squashfs_cache                   *block_cache;
-+      struct squashfs_cache                   *fragment_cache;
-+      struct squashfs_cache                   *read_page;
-+      int                                     next_meta_index;
-+      __le64                                  *id_table;
-+      __le64                                  *fragment_index;
-+      unsigned int                            *fragment_index_2;
-+      struct mutex                            read_data_mutex;
-+      struct mutex                            meta_index_mutex;
-+      struct meta_index                       *meta_index;
-+      void                                    *stream;
-+      __le64                                  *inode_lookup_table;
-+      u64                                     inode_table;
-+      u64                                     directory_table;
-+      unsigned int                            block_size;
-+      unsigned short                          block_log;
-+      long long                               bytes_used;
-+      unsigned int                            inodes;
- };
- #endif
---- a/fs/squashfs/super.c
-+++ b/fs/squashfs/super.c
-@@ -41,27 +41,35 @@
- #include "squashfs_fs_sb.h"
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
-+#include "decompressor.h"
- static struct file_system_type squashfs_fs_type;
- static struct super_operations squashfs_super_ops;
--static int supported_squashfs_filesystem(short major, short minor, short comp)
-+static const struct squashfs_decompressor *supported_squashfs_filesystem(short
-+      major, short minor, short id)
- {
-+      const struct squashfs_decompressor *decompressor;
-+
-       if (major < SQUASHFS_MAJOR) {
-               ERROR("Major/Minor mismatch, older Squashfs %d.%d "
-                       "filesystems are unsupported\n", major, minor);
--              return -EINVAL;
-+              return NULL;
-       } else if (major > SQUASHFS_MAJOR || minor > SQUASHFS_MINOR) {
-               ERROR("Major/Minor mismatch, trying to mount newer "
-                       "%d.%d filesystem\n", major, minor);
-               ERROR("Please update your kernel\n");
--              return -EINVAL;
-+              return NULL;
-       }
--      if (comp != ZLIB_COMPRESSION)
--              return -EINVAL;
-+      decompressor = squashfs_lookup_decompressor(id);
-+      if (!decompressor->supported) {
-+              ERROR("Filesystem uses \"%s\" compression. This is not "
-+                      "supported\n", decompressor->name);
-+              return NULL;
-+      }
--      return 0;
-+      return decompressor;
- }
-@@ -86,10 +94,6 @@ static int squashfs_fill_super(struct su
-       }
-       msblk = sb->s_fs_info;
--      msblk->stream = zlib_init();
--      if (msblk->stream == NULL)
--              goto failure;
--
-       sblk = kzalloc(sizeof(*sblk), GFP_KERNEL);
-       if (sblk == NULL) {
-               ERROR("Failed to allocate squashfs_super_block\n");
-@@ -116,25 +120,25 @@ static int squashfs_fill_super(struct su
-               goto failed_mount;
-       }
-+      err = -EINVAL;
-+
-       /* Check it is a SQUASHFS superblock */
-       sb->s_magic = le32_to_cpu(sblk->s_magic);
-       if (sb->s_magic != SQUASHFS_MAGIC) {
-               if (!silent)
-                       ERROR("Can't find a SQUASHFS superblock on %s\n",
-                                               bdevname(sb->s_bdev, b));
--              err = -EINVAL;
-               goto failed_mount;
-       }
--      /* Check the MAJOR & MINOR versions and compression type */
--      err = supported_squashfs_filesystem(le16_to_cpu(sblk->s_major),
-+      /* Check the MAJOR & MINOR versions and lookup compression type */
-+      msblk->decompressor = supported_squashfs_filesystem(
-+                      le16_to_cpu(sblk->s_major),
-                       le16_to_cpu(sblk->s_minor),
-                       le16_to_cpu(sblk->compression));
--      if (err < 0)
-+      if (msblk->decompressor == NULL)
-               goto failed_mount;
--      err = -EINVAL;
--
-       /*
-        * Check if there's xattrs in the filesystem.  These are not
-        * supported in this version, so warn that they will be ignored.
-@@ -201,6 +205,10 @@ static int squashfs_fill_super(struct su
-       err = -ENOMEM;
-+      msblk->stream = squashfs_decompressor_init(msblk);
-+      if (msblk->stream == NULL)
-+              goto failed_mount;
-+
-       msblk->block_cache = squashfs_cache_init("metadata",
-                       SQUASHFS_CACHED_BLKS, SQUASHFS_METADATA_SIZE);
-       if (msblk->block_cache == NULL)
-@@ -288,7 +296,7 @@ failed_mount:
-       squashfs_cache_delete(msblk->block_cache);
-       squashfs_cache_delete(msblk->fragment_cache);
-       squashfs_cache_delete(msblk->read_page);
--      zlib_free(msblk->stream);
-+      squashfs_decompressor_free(msblk, msblk->stream);
-       kfree(msblk->inode_lookup_table);
-       kfree(msblk->fragment_index);
-       kfree(msblk->id_table);
-@@ -298,7 +306,6 @@ failed_mount:
-       return err;
- failure:
--      zlib_free(msblk->stream);
-       kfree(sb->s_fs_info);
-       sb->s_fs_info = NULL;
-       return -ENOMEM;
-@@ -342,7 +349,7 @@ static void squashfs_put_super(struct su
-               squashfs_cache_delete(sbi->block_cache);
-               squashfs_cache_delete(sbi->fragment_cache);
-               squashfs_cache_delete(sbi->read_page);
--              zlib_free(sbi->stream);
-+              squashfs_decompressor_free(sbi, sbi->stream);
-               kfree(sbi->id_table);
-               kfree(sbi->fragment_index);
-               kfree(sbi->meta_index);
---- a/fs/squashfs/zlib_wrapper.c
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -30,8 +30,9 @@
- #include "squashfs_fs_sb.h"
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
-+#include "decompressor.h"
--void *zlib_init()
-+static void *zlib_init(void)
- {
-       z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
-       if (stream == NULL)
-@@ -50,7 +51,7 @@ failed:
- }
--void zlib_free(void *strm)
-+static void zlib_free(void *strm)
- {
-       z_stream *stream = strm;
-@@ -60,7 +61,7 @@ void zlib_free(void *strm)
- }
--int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+static int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-       struct buffer_head **bh, int b, int offset, int length, int srclength,
-       int pages)
- {
-@@ -137,3 +138,13 @@ release_mutex:
-       return -EIO;
- }
-+
-+const struct squashfs_decompressor squashfs_zlib_comp_ops = {
-+      .init = zlib_init,
-+      .free = zlib_free,
-+      .decompress = zlib_uncompress,
-+      .id = ZLIB_COMPRESSION,
-+      .name = "zlib",
-+      .supported = 1
-+};
-+
diff --git a/target/linux/generic-2.6/patches-2.6.31/004-squashfs_add_decompressor_lzma_lzo.patch b/target/linux/generic-2.6/patches-2.6.31/004-squashfs_add_decompressor_lzma_lzo.patch
deleted file mode 100644 (file)
index a378c00..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-From 1885ca0a1973944684f252094a703b7c80dfc974 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Wed, 14 Oct 2009 03:58:11 +0100
-Subject: [PATCH] Squashfs: add decompressor entries for lzma and lzo
-
-Add knowledge of lzma/lzo compression formats to the decompressor
-framework.  For now these are added as unsupported.  Without
-these entries lzma/lzo compressed filesystems will be flagged as
-having unknown compression which is undesirable.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/decompressor.c |   10 ++++++++++
- fs/squashfs/squashfs_fs.h  |    4 +++-
- 2 files changed, 13 insertions(+), 1 deletions(-)
-
---- a/fs/squashfs/decompressor.c
-+++ b/fs/squashfs/decompressor.c
-@@ -36,12 +36,22 @@
-  * Squashfs, allowing multiple decompressors to be easily supported
-  */
-+static const struct squashfs_decompressor squashfs_lzma_unsupported_comp_ops = {
-+      NULL, NULL, NULL, LZMA_COMPRESSION, "lzma", 0
-+};
-+
-+static const struct squashfs_decompressor squashfs_lzo_unsupported_comp_ops = {
-+      NULL, NULL, NULL, LZO_COMPRESSION, "lzo", 0
-+};
-+
- static const struct squashfs_decompressor squashfs_unknown_comp_ops = {
-       NULL, NULL, NULL, 0, "unknown", 0
- };
- static const struct squashfs_decompressor *decompressor[] = {
-       &squashfs_zlib_comp_ops,
-+      &squashfs_lzma_unsupported_comp_ops,
-+      &squashfs_lzo_unsupported_comp_ops,
-       &squashfs_unknown_comp_ops
- };
---- a/fs/squashfs/squashfs_fs.h
-+++ b/fs/squashfs/squashfs_fs.h
-@@ -211,7 +211,9 @@ struct meta_index {
- /*
-  * definitions for structures on disk
-  */
--#define ZLIB_COMPRESSION       1
-+#define ZLIB_COMPRESSION      1
-+#define LZMA_COMPRESSION      2
-+#define LZO_COMPRESSION               3
- struct squashfs_super_block {
-       __le32                  s_magic;
diff --git a/target/linux/generic-2.6/patches-2.6.31/005-squashfs_extra_parameter.patch b/target/linux/generic-2.6/patches-2.6.31/005-squashfs_extra_parameter.patch
deleted file mode 100644 (file)
index 0991681..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-From 5f393ede3ddb5dd4cc2a9f243182fac45f1ce10b Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Wed, 14 Oct 2009 04:07:54 +0100
-Subject: [PATCH] Squashfs: add an extra parameter to the decompressor init function
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/decompressor.h |    4 ++--
- fs/squashfs/zlib_wrapper.c |    2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
---- a/fs/squashfs/decompressor.h
-+++ b/fs/squashfs/decompressor.h
-@@ -24,7 +24,7 @@
-  */
- struct squashfs_decompressor {
--      void    *(*init)(void);
-+      void    *(*init)(struct squashfs_sb_info *);
-       void    (*free)(void *);
-       int     (*decompress)(struct squashfs_sb_info *, void **,
-               struct buffer_head **, int, int, int, int, int);
-@@ -35,7 +35,7 @@ struct squashfs_decompressor {
- static inline void *squashfs_decompressor_init(struct squashfs_sb_info *msblk)
- {
--      return msblk->decompressor->init();
-+      return msblk->decompressor->init(msblk);
- }
- static inline void squashfs_decompressor_free(struct squashfs_sb_info *msblk,
---- a/fs/squashfs/zlib_wrapper.c
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -32,7 +32,7 @@
- #include "squashfs.h"
- #include "decompressor.h"
--static void *zlib_init(void)
-+static void *zlib_init(struct squashfs_sb_info *dummy)
- {
-       z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
-       if (stream == NULL)
diff --git a/target/linux/generic-2.6/patches-2.6.31/006-squashfs_add_lzma.patch b/target/linux/generic-2.6/patches-2.6.31/006-squashfs_add_lzma.patch
deleted file mode 100644 (file)
index 9fd5797..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-From f49e1efdd179d54e814ff2a8e8f469496583062c Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 20 Oct 2009 10:54:36 +0100
-Subject: [PATCH] Squashfs: add LZMA compression
-
-Add support for LZMA compressed filesystems.  This is an initial
-implementation.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Kconfig        |    5 ++
- fs/squashfs/Makefile       |    1 +
- fs/squashfs/decompressor.c |    4 +
- fs/squashfs/lzma_wrapper.c |  151 ++++++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h     |    3 +
- 5 files changed, 164 insertions(+), 0 deletions(-)
- create mode 100644 fs/squashfs/lzma_wrapper.c
-
---- a/fs/squashfs/Kconfig
-+++ b/fs/squashfs/Kconfig
-@@ -26,6 +26,11 @@ config SQUASHFS
-         If unsure, say N.
-+config SQUASHFS_LZMA
-+      bool "Include support for LZMA compressed file systems"
-+      depends on SQUASHFS
-+      select DECOMPRESS_LZMA
-+
- config SQUASHFS_EMBEDDED
-       bool "Additional option for memory-constrained systems" 
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -5,3 +5,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
- squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
-+squashfs-$(CONFIG_SQUASHFS_LZMA) += lzma_wrapper.o
---- a/fs/squashfs/decompressor.c
-+++ b/fs/squashfs/decompressor.c
-@@ -50,7 +50,11 @@ static const struct squashfs_decompresso
- static const struct squashfs_decompressor *decompressor[] = {
-       &squashfs_zlib_comp_ops,
-+#ifdef CONFIG_SQUASHFS_LZMA
-+      &squashfs_lzma_comp_ops,
-+#else
-       &squashfs_lzma_unsupported_comp_ops,
-+#endif
-       &squashfs_lzo_unsupported_comp_ops,
-       &squashfs_unknown_comp_ops
- };
---- /dev/null
-+++ b/fs/squashfs/lzma_wrapper.c
-@@ -0,0 +1,151 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * lzma_wrapper.c
-+ */
-+
-+#include <asm/unaligned.h>
-+#include <linux/buffer_head.h>
-+#include <linux/mutex.h>
-+#include <linux/vmalloc.h>
-+#include <linux/decompress/unlzma.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "squashfs.h"
-+#include "decompressor.h"
-+
-+struct squashfs_lzma {
-+      void    *input;
-+      void    *output;
-+};
-+
-+/* decompress_unlzma.c is currently non re-entrant... */
-+DEFINE_MUTEX(lzma_mutex);
-+
-+/* decompress_unlzma.c doesn't provide any context in its callbacks... */
-+static int lzma_error;
-+
-+static void error(char *m)
-+{
-+      ERROR("unlzma error: %s\n", m);
-+      lzma_error = 1;
-+}
-+
-+      
-+static void *lzma_init(struct squashfs_sb_info *msblk)
-+{
-+      struct squashfs_lzma *stream = kzalloc(sizeof(*stream), GFP_KERNEL);
-+      if (stream == NULL)
-+              goto failed;
-+      stream->input = vmalloc(msblk->block_size);
-+      if (stream->input == NULL)
-+              goto failed;
-+      stream->output = vmalloc(msblk->block_size);
-+      if (stream->output == NULL)
-+              goto failed2;
-+
-+      return stream;
-+
-+failed2:
-+      vfree(stream->input);
-+failed:
-+      ERROR("failed to allocate lzma workspace\n");
-+      kfree(stream);
-+      return NULL;
-+}
-+
-+
-+static void lzma_free(void *strm)
-+{
-+      struct squashfs_lzma *stream = strm;
-+
-+      if (stream) {
-+              vfree(stream->input);
-+              vfree(stream->output);
-+      }
-+      kfree(stream);
-+}
-+
-+
-+static int lzma_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+      struct buffer_head **bh, int b, int offset, int length, int srclength,
-+      int pages)
-+{
-+      struct squashfs_lzma *stream = msblk->stream;
-+      void *buff = stream->input;
-+      int avail, i, bytes = length, res;
-+
-+      mutex_lock(&lzma_mutex);
-+
-+      for (i = 0; i < b; i++) {
-+              wait_on_buffer(bh[i]);
-+              if (!buffer_uptodate(bh[i]))
-+                      goto block_release;
-+
-+              avail = min(bytes, msblk->devblksize - offset);
-+              memcpy(buff, bh[i]->b_data + offset, avail);
-+              buff += avail;
-+              bytes -= avail;
-+              offset = 0;
-+              put_bh(bh[i]);
-+      }
-+
-+      lzma_error = 0;
-+      res = unlzma(stream->input, length, NULL, NULL, stream->output, NULL,
-+                                                      error);
-+      if (res || lzma_error)
-+              goto failed;
-+
-+      /* uncompressed size is stored in the LZMA header (5 byte offset) */
-+      res = bytes = get_unaligned_le32(stream->input + 5);
-+      for (i = 0, buff = stream->output; bytes && i < pages; i++) {
-+              avail = min_t(int, bytes, PAGE_CACHE_SIZE);
-+              memcpy(buffer[i], buff, avail);
-+              buff += avail;
-+              bytes -= avail;
-+      }
-+      if (bytes)
-+              goto failed;
-+
-+      mutex_unlock(&lzma_mutex);
-+      return res;
-+
-+block_release:
-+      for (; i < b; i++)
-+              put_bh(bh[i]);
-+
-+failed:
-+      mutex_unlock(&lzma_mutex);
-+
-+      ERROR("lzma decompression failed, data probably corrupt\n");
-+      return -EIO;
-+}
-+
-+const struct squashfs_decompressor squashfs_lzma_comp_ops = {
-+      .init = lzma_init,
-+      .free = lzma_free,
-+      .decompress = lzma_uncompress,
-+      .id = LZMA_COMPRESSION,
-+      .name = "lzma",
-+      .supported = 1
-+};
-+
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -94,3 +94,6 @@ extern const struct address_space_operat
- /* zlib_wrapper.c */
- extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
-+
-+/* lzma wrapper.c */
-+extern const struct squashfs_decompressor squashfs_lzma_comp_ops;
diff --git a/target/linux/generic-2.6/patches-2.6.31/007-squashfs_make_lzma_available.patch b/target/linux/generic-2.6/patches-2.6.31/007-squashfs_make_lzma_available.patch
deleted file mode 100644 (file)
index aa6c110..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-From fdf23ed283bc6ef5c25076ce2065f892120ff556 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Thu, 22 Oct 2009 04:57:38 +0100
-Subject: [PATCH] Squashfs: Make unlzma available to non initramfs/initrd code
-
-Add a config option DECOMPRESS_LZMA_NEEDED which allows subsystems to
-specify they need the unlzma code.  Normally decompress_unlzma.c is
-compiled with __init and unlzma is not exported to modules.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Kconfig                   |    1 +
- include/linux/decompress/bunzip2_mm.h |   12 ++++++++++++
- include/linux/decompress/inflate_mm.h |   12 ++++++++++++
- include/linux/decompress/mm.h         |    3 ---
- include/linux/decompress/unlzma_mm.h  |   20 ++++++++++++++++++++
- lib/Kconfig                           |    3 +++
- lib/decompress_bunzip2.c              |    1 +
- lib/decompress_inflate.c              |    1 +
- lib/decompress_unlzma.c               |    5 ++++-
- 9 files changed, 54 insertions(+), 4 deletions(-)
- create mode 100644 include/linux/decompress/bunzip2_mm.h
- create mode 100644 include/linux/decompress/inflate_mm.h
- create mode 100644 include/linux/decompress/unlzma_mm.h
-
---- a/fs/squashfs/Kconfig
-+++ b/fs/squashfs/Kconfig
-@@ -30,6 +30,7 @@ config SQUASHFS_LZMA
-       bool "Include support for LZMA compressed file systems"
-       depends on SQUASHFS
-       select DECOMPRESS_LZMA
-+      select DECOMPRESS_LZMA_NEEDED
- config SQUASHFS_EMBEDDED
---- /dev/null
-+++ b/include/linux/decompress/bunzip2_mm.h
-@@ -0,0 +1,12 @@
-+#ifndef BUNZIP2_MM_H
-+#define BUNZIP2_MM_H
-+
-+#ifdef STATIC
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+#else
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- /dev/null
-+++ b/include/linux/decompress/inflate_mm.h
-@@ -0,0 +1,12 @@
-+#ifndef INFLATE_MM_H
-+#define INFLATE_MM_H
-+
-+#ifdef STATIC
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+#else
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- a/include/linux/decompress/mm.h
-+++ b/include/linux/decompress/mm.h
-@@ -53,8 +53,6 @@ static void free(void *where)
- #define set_error_fn(x)
--#define INIT
--
- #else /* STATIC */
- /* Code active when compiled standalone for use when loading ramdisk: */
-@@ -77,7 +75,6 @@ static void free(void *where)
- static void(*error)(char *m);
- #define set_error_fn(x) error = x;
--#define INIT __init
- #define STATIC
- #include <linux/init.h>
---- /dev/null
-+++ b/include/linux/decompress/unlzma_mm.h
-@@ -0,0 +1,20 @@
-+#ifndef UNLZMA_MM_H
-+#define UNLZMA_MM_H
-+
-+#ifdef STATIC
-+
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+
-+#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
-+
-+/* Make it available to non initramfs/initrd code */
-+#define INIT
-+#include <linux/module.h>
-+#else
-+
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -117,6 +117,9 @@ config DECOMPRESS_BZIP2
- config DECOMPRESS_LZMA
-       tristate
-+config DECOMPRESS_LZMA_NEEDED
-+       boolean
-+
- #
- # Generic allocator support is selected if needed
- #
---- a/lib/decompress_bunzip2.c
-+++ b/lib/decompress_bunzip2.c
-@@ -52,6 +52,7 @@
- #include <linux/slab.h>
- #endif /* STATIC */
-+#include <linux/decompress/bunzip2_mm.h>
- #include <linux/decompress/mm.h>
- #ifndef INT_MAX
---- a/lib/decompress_inflate.c
-+++ b/lib/decompress_inflate.c
-@@ -23,6 +23,7 @@
- #endif /* STATIC */
-+#include <linux/decompress/inflate_mm.h>
- #include <linux/decompress/mm.h>
- #define GZIP_IOBUF_SIZE (16*1024)
---- a/lib/decompress_unlzma.c
-+++ b/lib/decompress_unlzma.c
-@@ -36,6 +36,7 @@
- #include <linux/slab.h>
- #endif /* STATIC */
-+#include <linux/decompress/unlzma_mm.h>
- #include <linux/decompress/mm.h>
- #define       MIN(a, b) (((a) < (b)) ? (a) : (b))
-@@ -523,7 +524,7 @@ static inline void INIT process_bit1(str
--STATIC inline int INIT unlzma(unsigned char *buf, int in_len,
-+STATIC int INIT unlzma(unsigned char *buf, int in_len,
-                             int(*fill)(void*, unsigned int),
-                             int(*flush)(void*, unsigned int),
-                             unsigned char *output,
-@@ -656,4 +657,6 @@ STATIC int INIT decompress(unsigned char
- {
-       return unlzma(buf, in_len - 4, fill, flush, output, posp, error_fn);
- }
-+#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
-+EXPORT_SYMBOL(unlzma);
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.31/011-mips_boot.patch b/target/linux/generic-2.6/patches-2.6.31/011-mips_boot.patch
deleted file mode 100644 (file)
index c2a043a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -121,6 +121,8 @@
- #endif
-       .endm
-+      j kernel_entry
-+      nop
- #ifndef CONFIG_NO_EXCEPT_FILL
-       /*
-        * Reserved space for exception handlers.
diff --git a/target/linux/generic-2.6/patches-2.6.31/012-extra_optimization.patch b/target/linux/generic-2.6/patches-2.6.31/012-extra_optimization.patch
deleted file mode 100644 (file)
index e0ba515..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/Makefile
-+++ b/Makefile
-@@ -521,7 +521,7 @@ all: vmlinux
- ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- KBUILD_CFLAGS += -Os
- else
--KBUILD_CFLAGS += -O2
-+KBUILD_CFLAGS += -O2 -fno-reorder-blocks -fno-tree-ch
- endif
- include $(srctree)/arch/$(SRCARCH)/Makefile
-@@ -559,6 +559,9 @@ endif
- NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
- CHECKFLAGS     += $(NOSTDINC_FLAGS)
-+# improve gcc optimization
-+CFLAGS += $(call cc-option,-funit-at-a-time,)
-+
- # warn about C99 declaration after statement
- KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
diff --git a/target/linux/generic-2.6/patches-2.6.31/013-gcc4_inline_fix.patch b/target/linux/generic-2.6/patches-2.6.31/013-gcc4_inline_fix.patch
deleted file mode 100644 (file)
index 642f11b..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/include/asm/system.h
-+++ b/arch/mips/include/asm/system.h
-@@ -187,7 +187,7 @@ extern __u64 __xchg_u64_unsupported_on_3
-    if something tries to do an invalid xchg().  */
- extern void __xchg_called_with_bad_pointer(void);
--static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
-+static __always_inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
- {
-       switch (size) {
-       case 4:
diff --git a/target/linux/generic-2.6/patches-2.6.31/014-samsung_flash b/target/linux/generic-2.6/patches-2.6.31/014-samsung_flash
deleted file mode 100644 (file)
index 1faeb41..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -51,6 +51,7 @@
- #define SST49LF040B           0x0050
- #define SST49LF008A           0x005a
- #define AT49BV6416            0x00d6
-+#define MANUFACTURER_SAMSUNG  0x00ec
- static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
- static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-@@ -375,12 +376,19 @@ struct mtd_info *cfi_cmdset_0002(struct 
-               if (extp->MajorVersion != '1' ||
-                   (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
--                      printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
--                             "version %c.%c.\n",  extp->MajorVersion,
--                             extp->MinorVersion);
--                      kfree(extp);
--                      kfree(mtd);
--                      return NULL;
-+                      if (cfi->mfr == MANUFACTURER_SAMSUNG &&
-+                          (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
-+                          printk(KERN_NOTICE "  Newer Samsung flash detected, "
-+                                 "should be compatibile with Amd/Fujitsu.\n");
-+                      }
-+                      else {
-+                          printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
-+                                 "version %c.%c.\n",  extp->MajorVersion,
-+                                 extp->MinorVersion);
-+                          kfree(extp);
-+                          kfree(mtd);
-+                          return NULL;
-+                      }
-               }
-               /* Install our own private info structure */
diff --git a/target/linux/generic-2.6/patches-2.6.31/020-mips_multi_machine_support.patch b/target/linux/generic-2.6/patches-2.6.31/020-mips_multi_machine_support.patch
deleted file mode 100644 (file)
index 24cef8c..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
---- /dev/null
-+++ b/arch/mips/include/asm/mips_machine.h
-@@ -0,0 +1,47 @@
-+/*
-+ *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  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.
-+ *
-+ */
-+
-+#ifndef __ASM_MIPS_MACHINE_H
-+#define __ASM_MIPS_MACHINE_H
-+
-+#include <linux/init.h>
-+#include <linux/list.h>
-+
-+struct mips_machine {
-+      unsigned long           mach_type;
-+      void                    (*mach_setup)(void);
-+      char                    *mach_name;
-+      struct list_head        list;
-+};
-+
-+void mips_machine_register(struct mips_machine *) __init;
-+void mips_machine_setup(unsigned long machtype) __init;
-+void mips_machine_set_name(char *name) __init;
-+
-+extern char *mips_machine_name;
-+
-+#define MIPS_MACHINE(_type, _name, _setup)                    \
-+static char machine_name_##_type[] __initdata = _name;                \
-+static struct mips_machine machine_##_type __initdata =               \
-+{                                                             \
-+      .mach_type      = _type,                                \
-+      .mach_name      = machine_name_##_type,                 \
-+      .mach_setup     = _setup,                               \
-+};                                                            \
-+                                                              \
-+static int __init register_machine_##_type(void)              \
-+{                                                             \
-+      mips_machine_register(&machine_##_type);                \
-+      return 0;                                               \
-+}                                                             \
-+                                                              \
-+pure_initcall(register_machine_##_type)
-+
-+#endif /* __ASM_MIPS_MACHINE_H */
-+
---- /dev/null
-+++ b/arch/mips/kernel/mips_machine.c
-@@ -0,0 +1,74 @@
-+/*
-+ *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  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/mm.h>
-+
-+#include <asm/mips_machine.h>
-+#include <asm/bootinfo.h>
-+
-+static struct list_head mips_machines __initdata =
-+              LIST_HEAD_INIT(mips_machines);
-+
-+char *mips_machine_name = "Unknown";
-+
-+static struct mips_machine * __init mips_machine_find(unsigned long machtype)
-+{
-+      struct list_head *this;
-+
-+      list_for_each(this, &mips_machines) {
-+              struct mips_machine *mach;
-+
-+              mach = list_entry(this, struct mips_machine, list);
-+              if (mach->mach_type == machtype)
-+                      return mach;
-+      }
-+
-+      return NULL;
-+}
-+
-+void __init mips_machine_register(struct mips_machine *mach)
-+{
-+      list_add_tail(&mach->list, &mips_machines);
-+}
-+
-+void __init mips_machine_set_name(char *name)
-+{
-+      unsigned int len;
-+      char *p;
-+
-+      if (name == NULL)
-+              return;
-+
-+      len = strlen(name);
-+      p = kmalloc(len + 1, GFP_KERNEL);
-+      if (p) {
-+              strncpy(p, name, len);
-+              p[len] = '\0';
-+              mips_machine_name = p;
-+      } else {
-+              printk(KERN_WARNING "MIPS: no memory for machine_name\n");
-+      }
-+}
-+
-+void __init mips_machine_setup(unsigned long machtype)
-+{
-+      struct mips_machine *mach;
-+
-+      mach = mips_machine_find(machtype);
-+      if (!mach) {
-+              printk(KERN_ALERT "MIPS: no machine registered for "
-+                      "machtype %lu\n", machtype);
-+              return;
-+      }
-+
-+      mips_machine_set_name(mach->mach_name);
-+      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
-+
-+      if (mach->mach_setup)
-+              mach->mach_setup();
-+}
---- a/arch/mips/kernel/Makefile
-+++ b/arch/mips/kernel/Makefile
-@@ -87,6 +87,7 @@ obj-$(CONFIG_GPIO_TXX9)              += gpio_txx9.o
- obj-$(CONFIG_KEXEC)           += machine_kexec.o relocate_kernel.o
- obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
-+obj-$(CONFIG_MIPS_MACHINE)    += mips_machine.o
- CFLAGS_cpu-bugs64.o   = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -837,6 +837,9 @@ config MIPS_DISABLE_OBSOLETE_IDE
- config SYNC_R4K
-       bool
-+config MIPS_MACHINE
-+      def_bool n
-+
- config NO_IOPORT
-       def_bool n
---- a/arch/mips/kernel/proc.c
-+++ b/arch/mips/kernel/proc.c
-@@ -12,6 +12,7 @@
- #include <asm/cpu-features.h>
- #include <asm/mipsregs.h>
- #include <asm/processor.h>
-+#include <asm/mips_machine.h>
- unsigned int vced_count, vcei_count;
-@@ -31,8 +32,12 @@ static int show_cpuinfo(struct seq_file 
-       /*
-        * For the first processor also print the system type
-        */
--      if (n == 0)
-+      if (n == 0) {
-               seq_printf(m, "system type\t\t: %s\n", get_system_type());
-+#ifdef CONFIG_MIPS_MACHINE
-+              seq_printf(m, "machine\t\t\t: %s\n", mips_machine_name);
-+#endif
-+      }
-       seq_printf(m, "processor\t\t: %ld\n", n);
-       sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n",
diff --git a/target/linux/generic-2.6/patches-2.6.31/021-mips_image_cmdline_hack.patch b/target/linux/generic-2.6/patches-2.6.31/021-mips_image_cmdline_hack.patch
deleted file mode 100644 (file)
index 026a84b..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -840,6 +840,10 @@ config SYNC_R4K
- config MIPS_MACHINE
-       def_bool n
-+config IMAGE_CMDLINE_HACK
-+      bool "OpenWrt specific image command line hack"
-+      default n
-+
- config NO_IOPORT
-       def_bool n
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -143,6 +143,12 @@ FEXPORT(__kernel_entry)
-       j       kernel_entry
- #endif
-+#ifdef CONFIG_IMAGE_CMDLINE_HACK
-+      .ascii  "CMDLINE:"
-+EXPORT(__image_cmdline)
-+      .fill   0x400
-+#endif /* CONFIG_IMAGE_CMDLINE_HACK */
-+
-       __REF
- NESTED(kernel_entry, 16, sp)                  # kernel entry point
diff --git a/target/linux/generic-2.6/patches-2.6.31/022-mips_use_generic_thread_info_allocator.patch b/target/linux/generic-2.6/patches-2.6.31/022-mips_use_generic_thread_info_allocator.patch
deleted file mode 100644 (file)
index 737e51b..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/arch/mips/include/asm/thread_info.h
-+++ b/arch/mips/include/asm/thread_info.h
-@@ -83,6 +83,7 @@ register struct thread_info *__current_t
- #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
- #define THREAD_MASK (THREAD_SIZE - 1UL)
-+#if 0
- #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
- #ifdef CONFIG_DEBUG_STACK_USAGE
-@@ -99,6 +100,7 @@ register struct thread_info *__current_t
- #endif
- #define free_thread_info(info) kfree(info)
-+#endif
- #endif /* !__ASSEMBLY__ */
diff --git a/target/linux/generic-2.6/patches-2.6.31/025-mips_disable_fpu.patch b/target/linux/generic-2.6/patches-2.6.31/025-mips_disable_fpu.patch
deleted file mode 100644 (file)
index 37d64a9..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-MIPS: allow disabling the kernel FPU emulator
-
-This patch allows turning off the in-kernel Algorithmics
-FPU emulator support, which allows one to save a couple of
-precious blocks on an embedded system.
-
-Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -825,6 +825,17 @@ config I8259
- config MIPS_BONITO64
-       bool
-+config MIPS_FPU_EMU
-+      bool "Enable FPU emulation"
-+      default y
-+      help
-+         This option allows building a kernel with or without the Algorithmics
-+         FPU emulator enabled. Turning off this option results in a kernel which
-+         does not catch floating operations exceptions. Make sure that your toolchain
-+         is configured to enable software floating point emulation in that case.
-+              
-+         If unsure say Y here.
-+
- config MIPS_MSC
-       bool
---- a/arch/mips/math-emu/Makefile
-+++ b/arch/mips/math-emu/Makefile
-@@ -2,12 +2,14 @@
- # Makefile for the Linux/MIPS kernel FPU emulation.
- #
--obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-+obj-y :=      kernel_linkage.o dsemul.o cp1emu.o
-+
-+obj-$(CONFIG_MIPS_FPU_EMU)    += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-          ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \
-          dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \
-          dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \
-          sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \
-          sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \
--         dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o
-+         dp_sqrt.o sp_sqrt.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/math-emu/cp1emu.c
-+++ b/arch/mips/math-emu/cp1emu.c
-@@ -56,6 +56,12 @@
- #endif
- #define __mips 4
-+/* Further private data for which no space exists in mips_fpu_struct */
-+
-+struct mips_fpu_emulator_stats fpuemustats;
-+
-+#ifdef CONFIG_MIPS_FPU_EMU
-+
- /* Function which emulates a floating point instruction. */
- static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *,
-@@ -66,10 +72,6 @@ static int fpux_emu(struct pt_regs *,
-       struct mips_fpu_struct *, mips_instruction);
- #endif
--/* Further private data for which no space exists in mips_fpu_struct */
--
--struct mips_fpu_emulator_stats fpuemustats;
--
- /* Control registers */
- #define FPCREG_RID    0       /* $0  = revision id */
-@@ -1273,6 +1275,13 @@ int fpu_emulator_cop1Handler(struct pt_r
-       return sig;
- }
-+#else
-+int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
-+        int has_fpu)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
- #ifdef CONFIG_DEBUG_FS
- extern struct dentry *mips_debugfs_dir;
---- a/arch/mips/math-emu/dsemul.c
-+++ b/arch/mips/math-emu/dsemul.c
-@@ -109,6 +109,7 @@ int mips_dsemul(struct pt_regs *regs, mi
-       return SIGILL;          /* force out of emulation loop */
- }
-+#ifdef CONFIG_MIPS_FPU_EMU
- int do_dsemulret(struct pt_regs *xcp)
- {
-       struct emuframe __user *fr;
-@@ -165,3 +166,9 @@ int do_dsemulret(struct pt_regs *xcp)
-       return 1;
- }
-+#else
-+int do_dsemulret(struct pt_regs *xcp)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
---- a/arch/mips/math-emu/kernel_linkage.c
-+++ b/arch/mips/math-emu/kernel_linkage.c
-@@ -29,6 +29,7 @@
- #define SIGNALLING_NAN 0x7ff800007ff80000LL
-+#ifdef CONFIG_MIPS_FPU_EMU
- void fpu_emulator_init_fpu(void)
- {
-       static int first = 1;
-@@ -112,4 +113,36 @@ int fpu_emulator_restore_context32(struc
-       return err;
- }
--#endif
-+#endif        /* CONFIG_64BIT */
-+#else
-+
-+void fpu_emulator_init_fpu(void)
-+{
-+      printk(KERN_INFO "FPU emulator disabled, make sure your toolchain"
-+              "was compiled with software floating point support (soft-float)\n");
-+      return;
-+}
-+
-+int fpu_emulator_save_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+#ifdef CONFIG_64BIT
-+#endif        /* CONFIG_64BIT */
-+#endif /* CONFIG_MIPS_FPU_EMU */
diff --git a/target/linux/generic-2.6/patches-2.6.31/027-mips_module_reloc.patch b/target/linux/generic-2.6/patches-2.6.31/027-mips_module_reloc.patch
deleted file mode 100644 (file)
index c0dc64e..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -83,7 +83,7 @@ all-$(CONFIG_BOOT_ELF64)     := $(vmlinux-64
- cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe
- cflags-y                      += -msoft-float
- LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib
--MODFLAGS                      += -mlong-calls
-+MODFLAGS                      += -mno-long-calls
- cflags-y += -ffreestanding
---- a/arch/mips/include/asm/module.h
-+++ b/arch/mips/include/asm/module.h
-@@ -9,6 +9,11 @@ struct mod_arch_specific {
-       struct list_head dbe_list;
-       const struct exception_table_entry *dbe_start;
-       const struct exception_table_entry *dbe_end;
-+
-+      void *phys_plt_tbl;
-+      void *virt_plt_tbl;
-+      unsigned int phys_plt_offset;
-+      unsigned int virt_plt_offset;
- };
- typedef uint8_t Elf64_Byte;           /* Type for a 8-bit quantity.  */
---- a/arch/mips/kernel/module.c
-+++ b/arch/mips/kernel/module.c
-@@ -43,6 +43,117 @@ static struct mips_hi16 *mips_hi16_list;
- static LIST_HEAD(dbe_list);
- static DEFINE_SPINLOCK(dbe_lock);
-+/*
-+ * Get the potential max trampolines size required of the init and
-+ * non-init sections. Only used if we cannot find enough contiguous
-+ * physically mapped memory to put the module into.
-+ */
-+static unsigned int
-+get_plt_size(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,
-+             const char *secstrings, unsigned int symindex, bool is_init)
-+{
-+      unsigned long ret = 0;
-+      unsigned int i, j;
-+      Elf_Sym *syms;
-+
-+      /* Everything marked ALLOC (this includes the exported symbols) */
-+      for (i = 1; i < hdr->e_shnum; ++i) {
-+              unsigned int info = sechdrs[i].sh_info;
-+
-+              if (sechdrs[i].sh_type != SHT_REL
-+                  && sechdrs[i].sh_type != SHT_RELA)
-+                      continue;
-+
-+              /* Not a valid relocation section? */
-+              if (info >= hdr->e_shnum)
-+                      continue;
-+
-+              /* Don't bother with non-allocated sections */
-+              if (!(sechdrs[info].sh_flags & SHF_ALLOC))
-+                      continue;
-+
-+              /* If it's called *.init*, and we're not init, we're
-+                   not interested */
-+              if ((strstr(secstrings + sechdrs[i].sh_name, ".init") != 0)
-+                  != is_init)
-+                      continue;
-+
-+              syms = (Elf_Sym *) sechdrs[symindex].sh_addr;
-+              if (sechdrs[i].sh_type == SHT_REL) {
-+                      Elf_Mips_Rel *rel = (void *) sechdrs[i].sh_addr;
-+                      unsigned int size = sechdrs[i].sh_size / sizeof(*rel);
-+
-+                      for (j = 0; j < size; ++j) {
-+                              Elf_Sym *sym;
-+
-+                              if (ELF_MIPS_R_TYPE(rel[j]) != R_MIPS_26)
-+                                      continue;
-+
-+                              sym = syms + ELF_MIPS_R_SYM(rel[j]);
-+                              if (!is_init && sym->st_shndx != SHN_UNDEF)
-+                                      continue;
-+
-+                              ret += 4 * sizeof(int);
-+                      }
-+              } else {
-+                      Elf_Mips_Rela *rela = (void *) sechdrs[i].sh_addr;
-+                      unsigned int size = sechdrs[i].sh_size / sizeof(*rela);
-+
-+                      for (j = 0; j < size; ++j) {
-+                              Elf_Sym *sym;
-+
-+                              if (ELF_MIPS_R_TYPE(rela[j]) != R_MIPS_26)
-+                                      continue;
-+
-+                              sym = syms + ELF_MIPS_R_SYM(rela[j]);
-+                              if (!is_init && sym->st_shndx != SHN_UNDEF)
-+                                      continue;
-+
-+                              ret += 4 * sizeof(int);
-+                      }
-+              }
-+      }
-+
-+      return ret;
-+}
-+
-+#ifndef MODULE_START
-+static void *alloc_phys(unsigned long size)
-+{
-+      unsigned order;
-+      struct page *page;
-+      struct page *p;
-+
-+      size = PAGE_ALIGN(size);
-+      order = get_order(size);
-+
-+      page = alloc_pages(GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN |
-+                      __GFP_THISNODE, order);
-+      if (!page)
-+              return NULL;
-+
-+      split_page(page, order);
-+
-+      for (p = page + (size >> PAGE_SHIFT); p < page + (1 << order); ++p)
-+              __free_page(p);
-+
-+      return page_address(page);
-+}
-+#endif
-+
-+static void free_phys(void *ptr, unsigned long size)
-+{
-+      struct page *page;
-+      struct page *end;
-+
-+      page = virt_to_page(ptr);
-+      end = page + (PAGE_ALIGN(size) >> PAGE_SHIFT);
-+
-+      for (; page < end; ++page)
-+              __free_page(page);
-+}
-+
-+
- void *module_alloc(unsigned long size)
- {
- #ifdef MODULE_START
-@@ -58,21 +169,99 @@ void *module_alloc(unsigned long size)
-       return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
- #else
-+      void *ptr;
-+
-       if (size == 0)
-               return NULL;
--      return vmalloc(size);
-+
-+      ptr = alloc_phys(size);
-+
-+      /* If we failed to allocate physically contiguous memory,
-+       * fall back to regular vmalloc. The module loader code will
-+       * create jump tables to handle long jumps */
-+      if (!ptr)
-+              return vmalloc(size);
-+
-+      return ptr;
-+#endif
-+}
-+
-+static inline bool is_phys_addr(void *ptr)
-+{
-+#ifdef CONFIG_64BIT
-+      return (KSEGX((unsigned long)ptr) == CKSEG0);
-+#else
-+      return (KSEGX(ptr) == KSEG0);
- #endif
- }
- /* Free memory returned from module_alloc */
- void module_free(struct module *mod, void *module_region)
- {
--      vfree(module_region);
-+      if (is_phys_addr(module_region)) {
-+              if (mod->module_init == module_region)
-+                      free_phys(module_region, mod->init_size);
-+              else if (mod->module_core == module_region)
-+                      free_phys(module_region, mod->core_size);
-+              else
-+                      BUG();
-+      } else {
-+              vfree(module_region);
-+      }
-+}
-+
-+static void *__module_alloc(int size, bool phys)
-+{
-+      void *ptr;
-+
-+      if (phys)
-+              ptr = kmalloc(size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc(size);
-+      return ptr;
-+}
-+
-+static void __module_free(void *ptr)
-+{
-+      if (is_phys_addr(ptr))
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
- }
- int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
-                             char *secstrings, struct module *mod)
- {
-+      unsigned int symindex = 0;
-+      unsigned int core_size, init_size;
-+      int i;
-+
-+      for (i = 1; i < hdr->e_shnum; i++)
-+              if (sechdrs[i].sh_type == SHT_SYMTAB)
-+                      symindex = i;
-+
-+      core_size = get_plt_size(hdr, sechdrs, secstrings, symindex, false);
-+      init_size = get_plt_size(hdr, sechdrs, secstrings, symindex, true);
-+
-+      mod->arch.phys_plt_offset = 0;
-+      mod->arch.virt_plt_offset = 0;
-+      mod->arch.phys_plt_tbl = NULL;
-+      mod->arch.virt_plt_tbl = NULL;
-+
-+      if ((core_size + init_size) == 0)
-+              return 0;
-+
-+      mod->arch.phys_plt_tbl = __module_alloc(core_size + init_size, 1);
-+      if (!mod->arch.phys_plt_tbl)
-+              return -ENOMEM;
-+
-+      mod->arch.virt_plt_tbl = __module_alloc(core_size + init_size, 0);
-+      if (!mod->arch.virt_plt_tbl) {
-+              __module_free(mod->arch.phys_plt_tbl);
-+              mod->arch.phys_plt_tbl = NULL;
-+              return -ENOMEM;
-+      }
-+
-       return 0;
- }
-@@ -95,28 +284,36 @@ static int apply_r_mips_32_rela(struct m
-       return 0;
- }
--static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
-+static Elf_Addr add_plt_entry_to(unsigned *plt_offset,
-+                               void *start, Elf_Addr v)
- {
--      if (v % 4) {
--              pr_err("module %s: dangerous R_MIPS_26 REL relocation\n",
--                     me->name);
--              return -ENOEXEC;
--      }
-+      unsigned *tramp = start + *plt_offset;
-+      *plt_offset += 4 * sizeof(int);
--      if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
--              printk(KERN_ERR
--                     "module %s: relocation overflow\n",
--                     me->name);
--              return -ENOEXEC;
--      }
-+      /* adjust carry for addiu */
-+      if (v & 0x00008000)
-+              v += 0x10000;
--      *location = (*location & ~0x03ffffff) |
--                  ((*location + (v >> 2)) & 0x03ffffff);
-+      tramp[0] = 0x3c190000 | (v >> 16);      /* lui t9, hi16 */
-+      tramp[1] = 0x27390000 | (v & 0xffff);   /* addiu t9, t9, lo16 */
-+      tramp[2] = 0x03200008;                  /* jr t9 */
-+      tramp[3] = 0x00000000;                  /* nop */
--      return 0;
-+      return (Elf_Addr) tramp;
- }
--static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
-+static Elf_Addr add_plt_entry(struct module *me, void *location, Elf_Addr v)
-+{
-+      if (is_phys_addr(location))
-+              return add_plt_entry_to(&me->arch.phys_plt_offset,
-+                              me->arch.phys_plt_tbl, v);
-+      else
-+              return add_plt_entry_to(&me->arch.virt_plt_offset,
-+                              me->arch.virt_plt_tbl, v);
-+
-+}
-+
-+static int set_r_mips_26(struct module *me, u32 *location, u32 ofs, Elf_Addr v)
- {
-       if (v % 4) {
-               pr_err("module %s: dangerous R_MIPS_26 RELArelocation\n",
-@@ -125,17 +322,31 @@ static int apply_r_mips_26_rela(struct m
-       }
-       if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
--              printk(KERN_ERR
-+          v = add_plt_entry(me, location, v + (ofs << 2));
-+              if (!v) {
-+                      printk(KERN_ERR
-                      "module %s: relocation overflow\n",
-                      me->name);
--              return -ENOEXEC;
-+                      return -ENOEXEC;
-+              }
-+              ofs = 0;
-       }
--      *location = (*location & ~0x03ffffff) | ((v >> 2) & 0x03ffffff);
-+      *location = (*location & ~0x03ffffff) | ((ofs + (v >> 2)) & 0x03ffffff);
-       return 0;
- }
-+static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
-+{
-+      return set_r_mips_26(me, location, *location & 0x03ffffff, v);
-+}
-+
-+static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
-+{
-+      return set_r_mips_26(me, location, 0, v);
-+}
-+
- static int apply_r_mips_hi16_rel(struct module *me, u32 *location, Elf_Addr v)
- {
-       struct mips_hi16 *n;
-@@ -400,11 +611,32 @@ int module_finalize(const Elf_Ehdr *hdr,
-               list_add(&me->arch.dbe_list, &dbe_list);
-               spin_unlock_irq(&dbe_lock);
-       }
-+
-+      /* Get rid of the fixup trampoline if we're running the module
-+       * from physically mapped address space */
-+      if (me->arch.phys_plt_offset == 0) {
-+              __module_free(me->arch.phys_plt_tbl);
-+              me->arch.phys_plt_tbl = NULL;
-+      }
-+      if (me->arch.virt_plt_offset == 0) {
-+              __module_free(me->arch.virt_plt_tbl);
-+              me->arch.virt_plt_tbl = NULL;
-+      }
-+
-       return 0;
- }
- void module_arch_cleanup(struct module *mod)
- {
-+      if (mod->arch.phys_plt_tbl) {
-+              __module_free(mod->arch.phys_plt_tbl);
-+              mod->arch.phys_plt_tbl = NULL;
-+      }
-+      if (mod->arch.virt_plt_tbl) {
-+              __module_free(mod->arch.virt_plt_tbl);
-+              mod->arch.virt_plt_tbl = NULL;
-+      }
-+
-       spin_lock_irq(&dbe_lock);
-       list_del(&mod->arch.dbe_list);
-       spin_unlock_irq(&dbe_lock);
diff --git a/target/linux/generic-2.6/patches-2.6.31/028-module_exports.patch b/target/linux/generic-2.6/patches-2.6.31/028-module_exports.patch
deleted file mode 100644 (file)
index 3d73a02..0000000
+++ /dev/null
@@ -1,201 +0,0 @@
---- a/include/asm-generic/vmlinux.lds.h
-+++ b/include/asm-generic/vmlinux.lds.h
-@@ -55,6 +55,27 @@
- #define LOAD_OFFSET 0
- #endif
-+#ifndef SYMTAB_KEEP_STR
-+#define SYMTAB_KEEP_STR *(__ksymtab_strings.*)
-+#define SYMTAB_DISCARD_STR
-+#else
-+#define SYMTAB_DISCARD_STR *(__ksymtab_strings.*)
-+#endif
-+
-+#ifndef SYMTAB_KEEP
-+#define SYMTAB_KEEP *(__ksymtab.*)
-+#define SYMTAB_DISCARD
-+#else
-+#define SYMTAB_DISCARD *(__ksymtab.*)
-+#endif
-+
-+#ifndef SYMTAB_KEEP_GPL
-+#define SYMTAB_KEEP_GPL *(__ksymtab_gpl.*)
-+#define SYMTAB_DISCARD_GPL
-+#else
-+#define SYMTAB_DISCARD_GPL *(__ksymtab_gpl.*)
-+#endif
-+
- #ifndef VMLINUX_SYMBOL
- #define VMLINUX_SYMBOL(_sym_) _sym_
- #endif
-@@ -256,35 +277,35 @@
-       /* Kernel symbol table: Normal symbols */                       \
-       __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
-               VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
--              *(__ksymtab)                                            \
-+              SYMTAB_KEEP                                             \
-               VMLINUX_SYMBOL(__stop___ksymtab) = .;                   \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only symbols */                     \
-       __ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {     \
-               VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;              \
--              *(__ksymtab_gpl)                                        \
-+              SYMTAB_KEEP_GPL                                         \
-               VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;               \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: Normal unused symbols */                \
-       __ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {  \
-               VMLINUX_SYMBOL(__start___ksymtab_unused) = .;           \
--              *(__ksymtab_unused)                                     \
-+              *(__ksymtab_unused.*)                                   \
-               VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;            \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only unused symbols */              \
-       __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
-               VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;       \
--              *(__ksymtab_unused_gpl)                                 \
-+              *(__ksymtab_unused_gpl.*)                               \
-               VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;        \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-future-only symbols */              \
-       __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
-               VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;       \
--              *(__ksymtab_gpl_future)                                 \
-+              *(__ksymtab_gpl_future.*)                               \
-               VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;        \
-       }                                                               \
-                                                                       \
-@@ -325,7 +346,13 @@
-                                                                       \
-       /* Kernel symbol table: strings */                              \
-         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {       \
--              *(__ksymtab_strings)                                    \
-+              SYMTAB_KEEP_STR                                         \
-+      }                                                               \
-+                                                                      \
-+      /DISCARD/ : {                                                   \
-+              SYMTAB_DISCARD                                          \
-+              SYMTAB_DISCARD_GPL                                      \
-+              SYMTAB_DISCARD_STR                                      \
-       }                                                               \
-                                                                       \
-       /* __*init sections */                                          \
---- a/include/linux/module.h
-+++ b/include/linux/module.h
-@@ -188,16 +188,24 @@ void *__symbol_get_gpl(const char *symbo
- #define __CRC_SYMBOL(sym, sec)
- #endif
-+#ifdef MODULE
-+#define __EXPORT_SUFFIX(sym)
-+#else
-+#define __EXPORT_SUFFIX(sym) "." #sym
-+#endif
-+
- /* For every exported symbol, place a struct in the __ksymtab section */
- #define __EXPORT_SYMBOL(sym, sec)                             \
-       extern typeof(sym) sym;                                 \
-       __CRC_SYMBOL(sym, sec)                                  \
-       static const char __kstrtab_##sym[]                     \
--      __attribute__((section("__ksymtab_strings"), aligned(1))) \
-+      __attribute__((section("__ksymtab_strings"              \
-+        __EXPORT_SUFFIX(sym)), aligned(1)))                   \
-       = MODULE_SYMBOL_PREFIX #sym;                            \
-       static const struct kernel_symbol __ksymtab_##sym       \
-       __used                                                  \
--      __attribute__((section("__ksymtab" sec), unused))       \
-+      __attribute__((section("__ksymtab" sec                  \
-+        __EXPORT_SUFFIX(sym)), unused))                       \
-       = { (unsigned long)&sym, __kstrtab_##sym }
- #define EXPORT_SYMBOL(sym)                                    \
---- a/arch/arm/kernel/vmlinux.lds.S
-+++ b/arch/arm/kernel/vmlinux.lds.S
-@@ -79,26 +79,6 @@ SECTIONS
- #endif
-       }
--      /DISCARD/ : {                   /* Exit code and data           */
--              EXIT_TEXT
--              EXIT_DATA
--              *(.exitcall.exit)
--              *(.ARM.exidx.exit.text)
--              *(.ARM.extab.exit.text)
--#ifndef CONFIG_HOTPLUG_CPU
--              *(.ARM.exidx.cpuexit.text)
--              *(.ARM.extab.cpuexit.text)
--#endif
--#ifndef CONFIG_HOTPLUG
--              *(.ARM.exidx.devexit.text)
--              *(.ARM.extab.devexit.text)
--#endif
--#ifndef CONFIG_MMU
--              *(.fixup)
--              *(__ex_table)
--#endif
--      }
--
-       .text : {                       /* Real text segment            */
-               _text = .;              /* Text and read-only data      */
-                       __exception_text_start = .;
-@@ -205,6 +185,28 @@ SECTIONS
-               __bss_stop = .;
-               _end = .;
-       }
-+
-+      /DISCARD/ : {                   /* Exit code and data           */
-+              EXIT_TEXT
-+              EXIT_DATA
-+              *(.discard)
-+              *(.exitcall.exit)
-+              *(.ARM.exidx.exit.text)
-+              *(.ARM.extab.exit.text)
-+#ifndef CONFIG_HOTPLUG_CPU
-+              *(.ARM.exidx.cpuexit.text)
-+              *(.ARM.extab.cpuexit.text)
-+#endif
-+#ifndef CONFIG_HOTPLUG
-+              *(.ARM.exidx.devexit.text)
-+              *(.ARM.extab.devexit.text)
-+#endif
-+#ifndef CONFIG_MMU
-+              *(.fixup)
-+              *(__ex_table)
-+#endif
-+      }
-+
-                                       /* Stabs debugging sections.    */
-       .stab 0 : { *(.stab) }
-       .stabstr 0 : { *(.stabstr) }
---- a/arch/powerpc/kernel/vmlinux.lds.S
-+++ b/arch/powerpc/kernel/vmlinux.lds.S
-@@ -37,12 +37,6 @@ jiffies = jiffies_64 + 4;
- #endif
- SECTIONS
- {
--      /* Sections to be discarded. */
--      /DISCARD/ : {
--      *(.exitcall.exit)
--      EXIT_DATA
--      }
--
-       . = KERNELBASE;
- /*
-@@ -295,6 +289,12 @@ SECTIONS
-               __bss_stop = .;
-       }
-+      /* Sections to be discarded. */
-+      /DISCARD/ : {
-+      *(.exitcall.exit)
-+      EXIT_DATA
-+      }
-+
-       . = ALIGN(PAGE_SIZE);
-       _end = . ;
-       PROVIDE32 (end = .);
diff --git a/target/linux/generic-2.6/patches-2.6.31/029-arm_module_unresolved_weak_sym.patch b/target/linux/generic-2.6/patches-2.6.31/029-arm_module_unresolved_weak_sym.patch
deleted file mode 100644 (file)
index 42d2dbd..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/arch/arm/kernel/module.c
-+++ b/arch/arm/kernel/module.c
-@@ -120,6 +120,10 @@ apply_relocate(Elf32_Shdr *sechdrs, cons
-                       return -ENOEXEC;
-               }
-+              if ((IS_ERR_VALUE(sym->st_value) || !sym->st_value) &&
-+                  ELF_ST_BIND(sym->st_info) == STB_WEAK)
-+                      continue;
-+
-               loc = dstsec->sh_addr + rel->r_offset;
-               switch (ELF32_R_TYPE(rel->r_info)) {
diff --git a/target/linux/generic-2.6/patches-2.6.31/030-pci_disable_common_quirks.patch b/target/linux/generic-2.6/patches-2.6.31/030-pci_disable_common_quirks.patch
deleted file mode 100644 (file)
index c99ff1d..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
---- a/drivers/pci/Kconfig
-+++ b/drivers/pci/Kconfig
-@@ -51,6 +51,12 @@ config PCI_STUB
-         When in doubt, say N.
-+config PCI_DISABLE_COMMON_QUIRKS
-+      bool "PCI disable common quirks"
-+      depends on PCI
-+      help
-+        If you don't know what to do here, say N.
-+
- config HT_IRQ
-       bool "Interrupts on hypertransport devices"
-       default y
---- a/drivers/pci/quirks.c
-+++ b/drivers/pci/quirks.c
-@@ -98,6 +98,7 @@ static void __devinit quirk_resource_ali
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_resource_alignment);
-+#ifndef CONFIG_PCI_DISABLE_COMMON_QUIRKS
- /* The Mellanox Tavor device gives false positive parity errors
-  * Mark this device with a broken_parity_status, to allow
-  * PCI scanning code to "skip" this now blacklisted device.
-@@ -1867,7 +1868,9 @@ static void __devinit fixup_rev1_53c810(
-       }
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810);
-+#endif /* !CONFIG_PCI_DISABLE_COMMON_QUIRKS */
-+#ifndef CONFIG_PCI_DISABLE_COMMON_QUIRKS
- /* Enable 1k I/O space granularity on the Intel P64H2 */
- static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
- {
-@@ -2498,6 +2501,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150d, quirk_i82576_sriov);
- #endif        /* CONFIG_PCI_IOV */
-+#endif /* !CONFIG_PCI_DISABLE_COMMON_QUIRKS */
- static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
-                         struct pci_fixup *end)
diff --git a/target/linux/generic-2.6/patches-2.6.31/031-ppc_gcc_build_fix.patch b/target/linux/generic-2.6/patches-2.6.31/031-ppc_gcc_build_fix.patch
deleted file mode 100644 (file)
index 3151eee..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-GCC 4.4.x looks to be adding support for generating out-of-line register
-saves/restores based on:
-
-http://gcc.gnu.org/ml/gcc-patches/2008-04/msg01678.html
-
-This breaks the kernel build as we'd have to link with libgcc to get the
-implementation of the register save/restores.
-
-To workaround this issue, we just stole the save/restore code from gcc
-and simplified it down for our needs (integer only).  We only do this if
-PPC32 as gcc makes believe the linker on ppc64 will deal with this and
-only if CONFIG_CC_OPTIMIZE_FOR_SIZE is set (thus -Os).
-
-Signed-off-by: Kumar Gala <[EMAIL PROTECTED]>
----
-
-If someone using cutting edge toolchains for ppc64 could test and make
-sure if we enable CONFIG_CC_OPTIMIZE_FOR_SIZE things work that would be
-nice.
-
-- k
-
- arch/powerpc/kernel/misc_32.S   |   77 +++++++++++++++++++++++++++
- arch/powerpc/kernel/ppc_ksyms.c |  111 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 188 insertions(+), 0 deletions(-)
-
---- a/arch/powerpc/kernel/misc_32.S
-+++ b/arch/powerpc/kernel/misc_32.S
-@@ -813,3 +813,80 @@ relocate_new_kernel_end:
- relocate_new_kernel_size:
-       .long relocate_new_kernel_end - relocate_new_kernel
- #endif
-+
-+#if defined(CONFIG_PPC32) && defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
-+/* Routines for saving integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer save area.  */
-+
-+_GLOBAL(_savegpr_14)   stw     14,-72(11)      /* save gp registers */
-+_GLOBAL(_savegpr_15)   stw     15,-68(11)
-+_GLOBAL(_savegpr_16)   stw     16,-64(11)
-+_GLOBAL(_savegpr_17)   stw     17,-60(11)
-+_GLOBAL(_savegpr_18)   stw     18,-56(11)
-+_GLOBAL(_savegpr_19)   stw     19,-52(11)
-+_GLOBAL(_savegpr_20)   stw     20,-48(11)
-+_GLOBAL(_savegpr_21)   stw     21,-44(11)
-+_GLOBAL(_savegpr_22)   stw     22,-40(11)
-+_GLOBAL(_savegpr_23)   stw     23,-36(11)
-+_GLOBAL(_savegpr_24)   stw     24,-32(11)
-+_GLOBAL(_savegpr_25)   stw     25,-28(11)
-+_GLOBAL(_savegpr_26)   stw     26,-24(11)
-+_GLOBAL(_savegpr_27)   stw     27,-20(11)
-+_GLOBAL(_savegpr_28)   stw     28,-16(11)
-+_GLOBAL(_savegpr_29)   stw     29,-12(11)
-+_GLOBAL(_savegpr_30)   stw     30,-8(11)
-+_GLOBAL(_savegpr_31)   stw     31,-4(11)
-+                       blr
-+
-+/* Routines for restoring integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer restore area.  */
-+
-+_GLOBAL(_restgpr_14)   lwz     14,-72(11)      /* restore gp registers */
-+_GLOBAL(_restgpr_15)   lwz     15,-68(11)
-+_GLOBAL(_restgpr_16)   lwz     16,-64(11)
-+_GLOBAL(_restgpr_17)   lwz     17,-60(11)
-+_GLOBAL(_restgpr_18)   lwz     18,-56(11)
-+_GLOBAL(_restgpr_19)   lwz     19,-52(11)
-+_GLOBAL(_restgpr_20)   lwz     20,-48(11)
-+_GLOBAL(_restgpr_21)   lwz     21,-44(11)
-+_GLOBAL(_restgpr_22)   lwz     22,-40(11)
-+_GLOBAL(_restgpr_23)   lwz     23,-36(11)
-+_GLOBAL(_restgpr_24)   lwz     24,-32(11)
-+_GLOBAL(_restgpr_25)   lwz     25,-28(11)
-+_GLOBAL(_restgpr_26)   lwz     26,-24(11)
-+_GLOBAL(_restgpr_27)   lwz     27,-20(11)
-+_GLOBAL(_restgpr_28)   lwz     28,-16(11)
-+_GLOBAL(_restgpr_29)   lwz     29,-12(11)
-+_GLOBAL(_restgpr_30)   lwz     30,-8(11)
-+_GLOBAL(_restgpr_31)   lwz     31,-4(11)
-+                       blr
-+
-+/* Routines for restoring integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer restore area.  */
-+
-+_GLOBAL(_restgpr_14_x) lwz     14,-72(11)      /* restore gp registers */
-+_GLOBAL(_restgpr_15_x) lwz     15,-68(11)
-+_GLOBAL(_restgpr_16_x) lwz     16,-64(11)
-+_GLOBAL(_restgpr_17_x) lwz     17,-60(11)
-+_GLOBAL(_restgpr_18_x) lwz     18,-56(11)
-+_GLOBAL(_restgpr_19_x) lwz     19,-52(11)
-+_GLOBAL(_restgpr_20_x) lwz     20,-48(11)
-+_GLOBAL(_restgpr_21_x) lwz     21,-44(11)
-+_GLOBAL(_restgpr_22_x) lwz     22,-40(11)
-+_GLOBAL(_restgpr_23_x) lwz     23,-36(11)
-+_GLOBAL(_restgpr_24_x) lwz     24,-32(11)
-+_GLOBAL(_restgpr_25_x) lwz     25,-28(11)
-+_GLOBAL(_restgpr_26_x) lwz     26,-24(11)
-+_GLOBAL(_restgpr_27_x) lwz     27,-20(11)
-+_GLOBAL(_restgpr_28_x) lwz     28,-16(11)
-+_GLOBAL(_restgpr_29_x) lwz     29,-12(11)
-+_GLOBAL(_restgpr_30_x) lwz     30,-8(11)
-+_GLOBAL(_restgpr_31_x) lwz     0,4(11)
-+                       lwz     31,-4(11)
-+                       mtlr    0
-+                       mr      1,11
-+                       blr
-+#endif
---- a/arch/powerpc/kernel/ppc_ksyms.c
-+++ b/arch/powerpc/kernel/ppc_ksyms.c
-@@ -188,3 +188,114 @@ EXPORT_SYMBOL(__mtdcr);
- EXPORT_SYMBOL(__mfdcr);
- #endif
- EXPORT_SYMBOL(empty_zero_page);
-+
-+#if defined(CONFIG_PPC32) && defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
-+void _savegpr_14(void);
-+void _savegpr_15(void);
-+void _savegpr_16(void);
-+void _savegpr_17(void);
-+void _savegpr_18(void);
-+void _savegpr_19(void);
-+void _savegpr_20(void);
-+void _savegpr_21(void);
-+void _savegpr_22(void);
-+void _savegpr_23(void);
-+void _savegpr_24(void);
-+void _savegpr_25(void);
-+void _savegpr_26(void);
-+void _savegpr_27(void);
-+void _savegpr_28(void);
-+void _savegpr_29(void);
-+void _savegpr_30(void);
-+void _savegpr_31(void);
-+void _restgpr_14(void);
-+void _restgpr_15(void);
-+void _restgpr_16(void);
-+void _restgpr_17(void);
-+void _restgpr_18(void);
-+void _restgpr_19(void);
-+void _restgpr_20(void);
-+void _restgpr_21(void);
-+void _restgpr_22(void);
-+void _restgpr_23(void);
-+void _restgpr_24(void);
-+void _restgpr_25(void);
-+void _restgpr_26(void);
-+void _restgpr_27(void);
-+void _restgpr_28(void);
-+void _restgpr_29(void);
-+void _restgpr_30(void);
-+void _restgpr_31(void);
-+void _restgpr_14_x(void);
-+void _restgpr_15_x(void);
-+void _restgpr_16_x(void);
-+void _restgpr_17_x(void);
-+void _restgpr_18_x(void);
-+void _restgpr_19_x(void);
-+void _restgpr_20_x(void);
-+void _restgpr_21_x(void);
-+void _restgpr_22_x(void);
-+void _restgpr_23_x(void);
-+void _restgpr_24_x(void);
-+void _restgpr_25_x(void);
-+void _restgpr_26_x(void);
-+void _restgpr_27_x(void);
-+void _restgpr_28_x(void);
-+void _restgpr_29_x(void);
-+void _restgpr_30_x(void);
-+void _restgpr_31_x(void);
-+EXPORT_SYMBOL(_savegpr_14);
-+EXPORT_SYMBOL(_savegpr_15);
-+EXPORT_SYMBOL(_savegpr_16);
-+EXPORT_SYMBOL(_savegpr_17);
-+EXPORT_SYMBOL(_savegpr_18);
-+EXPORT_SYMBOL(_savegpr_19);
-+EXPORT_SYMBOL(_savegpr_20);
-+EXPORT_SYMBOL(_savegpr_21);
-+EXPORT_SYMBOL(_savegpr_22);
-+EXPORT_SYMBOL(_savegpr_23);
-+EXPORT_SYMBOL(_savegpr_24);
-+EXPORT_SYMBOL(_savegpr_25);
-+EXPORT_SYMBOL(_savegpr_26);
-+EXPORT_SYMBOL(_savegpr_27);
-+EXPORT_SYMBOL(_savegpr_28);
-+EXPORT_SYMBOL(_savegpr_29);
-+EXPORT_SYMBOL(_savegpr_30);
-+EXPORT_SYMBOL(_savegpr_31);
-+EXPORT_SYMBOL(_restgpr_14);
-+EXPORT_SYMBOL(_restgpr_15);
-+EXPORT_SYMBOL(_restgpr_16);
-+EXPORT_SYMBOL(_restgpr_17);
-+EXPORT_SYMBOL(_restgpr_18);
-+EXPORT_SYMBOL(_restgpr_19);
-+EXPORT_SYMBOL(_restgpr_20);
-+EXPORT_SYMBOL(_restgpr_21);
-+EXPORT_SYMBOL(_restgpr_22);
-+EXPORT_SYMBOL(_restgpr_23);
-+EXPORT_SYMBOL(_restgpr_24);
-+EXPORT_SYMBOL(_restgpr_25);
-+EXPORT_SYMBOL(_restgpr_26);
-+EXPORT_SYMBOL(_restgpr_27);
-+EXPORT_SYMBOL(_restgpr_28);
-+EXPORT_SYMBOL(_restgpr_29);
-+EXPORT_SYMBOL(_restgpr_30);
-+EXPORT_SYMBOL(_restgpr_31);
-+EXPORT_SYMBOL(_restgpr_14_x);
-+EXPORT_SYMBOL(_restgpr_15_x);
-+EXPORT_SYMBOL(_restgpr_16_x);
-+EXPORT_SYMBOL(_restgpr_17_x);
-+EXPORT_SYMBOL(_restgpr_18_x);
-+EXPORT_SYMBOL(_restgpr_19_x);
-+EXPORT_SYMBOL(_restgpr_20_x);
-+EXPORT_SYMBOL(_restgpr_21_x);
-+EXPORT_SYMBOL(_restgpr_22_x);
-+EXPORT_SYMBOL(_restgpr_23_x);
-+EXPORT_SYMBOL(_restgpr_24_x);
-+EXPORT_SYMBOL(_restgpr_25_x);
-+EXPORT_SYMBOL(_restgpr_26_x);
-+EXPORT_SYMBOL(_restgpr_27_x);
-+EXPORT_SYMBOL(_restgpr_28_x);
-+EXPORT_SYMBOL(_restgpr_29_x);
-+EXPORT_SYMBOL(_restgpr_30_x);
-+EXPORT_SYMBOL(_restgpr_31_x);
-+#endif /* CONFIG_PPC32 && CONFIG_CC_OPTIMIZE_FOR_SIZE */
diff --git a/target/linux/generic-2.6/patches-2.6.31/032-mips_vmlinux_lds.patch b/target/linux/generic-2.6/patches-2.6.31/032-mips_vmlinux_lds.patch
deleted file mode 100644 (file)
index 807a944..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/kernel/Makefile
-+++ b/arch/mips/kernel/Makefile
-@@ -4,6 +4,8 @@
- CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS)
-+CPPFLAGS_vmlinux.lds := $(KBUILD_CFLAGS) $(EXTRA_LDSFLAGS)
-+
- extra-y               := head.o init_task.o vmlinux.lds
- obj-y         += cpu-probe.o branch.o entry.o genex.o irq.o process.o \
diff --git a/target/linux/generic-2.6/patches-2.6.31/049-byteshift_h_fix_usage_for_compressed_kernels.patch b/target/linux/generic-2.6/patches-2.6.31/049-byteshift_h_fix_usage_for_compressed_kernels.patch
deleted file mode 100644 (file)
index 5cd8107..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-From 2fa4341074cd02fb39aa23410740764948755635 Mon Sep 17 00:00:00 2001
-From: Albin Tonnerre <albin.tonnerre@free-electrons.com>
-Date: Wed, 23 Sep 2009 15:57:38 -0700
-Subject: [PATCH] include/linux/unaligned/{l,b}e_byteshift.h: fix usage for compressed kernels
-
-When unaligned accesses are required for uncompressing a kernel (such as
-for LZO decompression on ARM in a patch that follows), including
-<linux/kernel.h> causes issues as it brings in a lot of things that are
-not available in the decompression environment.
-
-linux/kernel.h brings at least:
-extern int console_printk[];
-extern const char hex_asc[];
-which causes errors at link-time as they are not available when
-compiling the pre-boot environement. There are also a few others:
-
-  arch/arm/boot/compressed/misc.o: In function `valid_user_regs':
-   arch/arm/include/asm/ptrace.h:158: undefined reference to `elf_hwcap'
-  arch/arm/boot/compressed/misc.o: In function `console_silent':
-   include/linux/kernel.h:292: undefined reference to `console_printk'
-  arch/arm/boot/compressed/misc.o: In function `console_verbose':
-   include/linux/kernel.h:297: undefined reference to `console_printk'
-  arch/arm/boot/compressed/misc.o: In function `pack_hex_byte':
-   include/linux/kernel.h:360: undefined reference to `hex_asc'
-  arch/arm/boot/compressed/misc.o: In function `hweight_long':
-   include/linux/bitops.h:45: undefined reference to `hweight32'
-  arch/arm/boot/compressed/misc.o: In function `__cmpxchg_local_generic':
-   include/asm-generic/cmpxchg-local.h:21: undefined reference to `wrong_size_cmpxchg'
-   include/asm-generic/cmpxchg-local.h:42: undefined reference to `wrong_size_cmpxchg'
-  arch/arm/boot/compressed/misc.o: In function `__xchg':
-   arch/arm/include/asm/system.h:309: undefined reference to `__bad_xchg'
-
-However, those files apparently use nothing from <linux/kernel.h>, all
-they need is the declaration of types such as u32 or u64, so
-<linux/types.h> should be enough
-
-Signed-off-by: Albin Tonnerre <albin.tonnerre@free-electrons.com>
-Cc: Sam Ravnborg <sam@ravnborg.org>
-Cc: Russell King <rmk@arm.linux.org.uk>
-Cc: Ingo Molnar <mingo@elte.hu>
-Cc: Thomas Gleixner <tglx@linutronix.de>
-Cc: "H. Peter Anvin" <hpa@zytor.com>
-Cc: Phillip Lougher <phillip@lougher.demon.co.uk>
-Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
----
- include/linux/unaligned/be_byteshift.h |    2 +-
- include/linux/unaligned/le_byteshift.h |    2 +-
- 2 files changed, 2 insertions(+), 2 deletions(-)
-
---- a/include/linux/unaligned/be_byteshift.h
-+++ b/include/linux/unaligned/be_byteshift.h
-@@ -1,7 +1,7 @@
- #ifndef _LINUX_UNALIGNED_BE_BYTESHIFT_H
- #define _LINUX_UNALIGNED_BE_BYTESHIFT_H
--#include <linux/kernel.h>
-+#include <linux/types.h>
- static inline u16 __get_unaligned_be16(const u8 *p)
- {
---- a/include/linux/unaligned/le_byteshift.h
-+++ b/include/linux/unaligned/le_byteshift.h
-@@ -1,7 +1,7 @@
- #ifndef _LINUX_UNALIGNED_LE_BYTESHIFT_H
- #define _LINUX_UNALIGNED_LE_BYTESHIFT_H
--#include <linux/kernel.h>
-+#include <linux/types.h>
- static inline u16 __get_unaligned_le16(const u8 *p)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.31/050-lzo_compressed_kernels.patch b/target/linux/generic-2.6/patches-2.6.31/050-lzo_compressed_kernels.patch
deleted file mode 100644 (file)
index 733d175..0000000
+++ /dev/null
@@ -1,309 +0,0 @@
---- /dev/null
-+++ b/include/linux/decompress/unlzo.h
-@@ -0,0 +1,10 @@
-+#ifndef DECOMPRESS_UNLZO_H
-+#define DECOMPRESS_UNLZO_H
-+
-+int unlzo(unsigned char *inbuf, int len,
-+      int(*fill)(void*, unsigned int),
-+      int(*flush)(void*, unsigned int),
-+      unsigned char *output,
-+      int *pos,
-+      void(*error)(char *x));
-+#endif
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -115,10 +115,13 @@ config HAVE_KERNEL_BZIP2
- config HAVE_KERNEL_LZMA
-       bool
-+config HAVE_KERNEL_LZO
-+      bool
-+
- choice
-       prompt "Kernel compression mode"
-       default KERNEL_GZIP
--      depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA
-+      depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_LZO
-       help
-         The linux kernel is a kind of self-extracting executable.
-         Several compression algorithms are available, which differ
-@@ -141,9 +144,8 @@ config KERNEL_GZIP
-       bool "Gzip"
-       depends on HAVE_KERNEL_GZIP
-       help
--        The old and tried gzip compression. Its compression ratio is
--        the poorest among the 3 choices; however its speed (both
--        compression and decompression) is the fastest.
-+        The old and tried gzip compression. It provides a good balance
-+        between compression ratio and decompression speed.
- config KERNEL_BZIP2
-       bool "Bzip2"
-@@ -164,6 +166,14 @@ config KERNEL_LZMA
-         two. Compression is slowest.  The kernel size is about 33%
-         smaller with LZMA in comparison to gzip.
-+config KERNEL_LZO
-+      bool "LZO"
-+      depends on HAVE_KERNEL_LZO
-+      help
-+        Its compression ratio is the poorest among the 4. The kernel
-+        size is about about 10% bigger than gzip; however its speed
-+        (both compression and decompression) is the fastest.
-+
- endchoice
- config SWAP
---- /dev/null
-+++ b/lib/decompress_unlzo.c
-@@ -0,0 +1,208 @@
-+/*
-+ * LZO decompressor for the Linux kernel. Code borrowed from the lzo
-+ * implementation by Markus Franz Xaver Johannes Oberhumer.
-+ *
-+ * Linux kernel adaptation:
-+ * Copyright (C) 2009
-+ * Albin Tonnerre, Free Electrons <albin.tonnerre@free-electrons.com>
-+ *
-+ * Original code:
-+ * Copyright (C) 1996-2005 Markus Franz Xaver Johannes Oberhumer
-+ * All Rights Reserved.
-+ *
-+ * lzop and the LZO library are free software; you can redistribute them
-+ * and/or modify them 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; see the file COPYING.
-+ * If not, write to the Free Software Foundation, Inc.,
-+ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+ *
-+ * Markus F.X.J. Oberhumer
-+ * <markus@oberhumer.com>
-+ * http://www.oberhumer.com/opensource/lzop/
-+ */
-+
-+#ifdef STATIC
-+#include "lzo/lzo1x_decompress.c"
-+#else
-+#include <linux/slab.h>
-+#include <linux/decompress/unlzo.h>
-+#endif
-+
-+#include <linux/types.h>
-+#include <linux/lzo.h>
-+#include <linux/decompress/mm.h>
-+
-+#include <linux/compiler.h>
-+#include <asm/unaligned.h>
-+
-+static const unsigned char lzop_magic[] =
-+      { 0x89, 0x4c, 0x5a, 0x4f, 0x00, 0x0d, 0x0a, 0x1a, 0x0a };
-+
-+#define LZO_BLOCK_SIZE        (256*1024l)
-+#define HEADER_HAS_FILTER      0x00000800L
-+
-+STATIC inline int INIT parse_header(u8 *input, u8 *skip)
-+{
-+      int l;
-+      u8 *parse = input;
-+      u8 level = 0;
-+      u16 version;
-+
-+      /* read magic: 9 first bits */
-+      for (l = 0; l < 9; l++) {
-+              if (*parse++ != lzop_magic[l])
-+                      return 0;
-+      }
-+      /* get version (2bytes), skip library version (2),
-+       * 'need to be extracted' version (2) and
-+       * method (1) */
-+      version = get_unaligned_be16(parse);
-+      parse += 7;
-+      if (version >= 0x0940)
-+              level = *parse++;
-+      if (get_unaligned_be32(parse) & HEADER_HAS_FILTER)
-+              parse += 8; /* flags + filter info */
-+      else
-+              parse += 4; /* flags */
-+
-+      /* skip mode and mtime_low */
-+      parse += 8;
-+      if (version >= 0x0940)
-+              parse += 4;     /* skip mtime_high */
-+
-+      l = *parse++;
-+      /* don't care about the file name, and skip checksum */
-+      parse += l + 4;
-+
-+      *skip = parse - input;
-+      return 1;
-+}
-+
-+STATIC inline int INIT unlzo(u8 *input, int in_len,
-+                              int (*fill) (void *, unsigned int),
-+                              int (*flush) (void *, unsigned int),
-+                              u8 *output, int *posp,
-+                              void (*error_fn) (char *x))
-+{
-+      u8 skip = 0, r = 0;
-+      u32 src_len, dst_len;
-+      size_t tmp;
-+      u8 *in_buf, *in_buf_save, *out_buf;
-+      int obytes_processed = 0;
-+
-+      set_error_fn(error_fn);
-+
-+      if (output)
-+              out_buf = output;
-+      else if (!flush) {
-+              error("NULL output pointer and no flush function provided");
-+              goto exit;
-+      } else {
-+              out_buf = malloc(LZO_BLOCK_SIZE);
-+              if (!out_buf) {
-+                      error("Could not allocate output buffer");
-+                      goto exit;
-+              }
-+      }
-+
-+      if (input && fill) {
-+              error("Both input pointer and fill function provided, don't know what to do");
-+              goto exit_1;
-+      } else if (input)
-+              in_buf = input;
-+      else if (!fill || !posp) {
-+              error("NULL input pointer and missing position pointer or fill function");
-+              goto exit_1;
-+      } else {
-+              in_buf = malloc(lzo1x_worst_compress(LZO_BLOCK_SIZE));
-+              if (!in_buf) {
-+                      error("Could not allocate input buffer");
-+                      goto exit_1;
-+              }
-+      }
-+      in_buf_save = in_buf;
-+
-+      if (posp)
-+              *posp = 0;
-+
-+      if (fill)
-+              fill(in_buf, lzo1x_worst_compress(LZO_BLOCK_SIZE));
-+
-+      if (!parse_header(input, &skip)) {
-+              error("invalid header");
-+              goto exit_2;
-+      }
-+      in_buf += skip;
-+
-+      if (posp)
-+              *posp = skip;
-+
-+      for (;;) {
-+              /* read uncompressed block size */
-+              dst_len = get_unaligned_be32(in_buf);
-+              in_buf += 4;
-+
-+              /* exit if last block */
-+              if (dst_len == 0) {
-+                      if (posp)
-+                              *posp += 4;
-+                      break;
-+              }
-+
-+              if (dst_len > LZO_BLOCK_SIZE) {
-+                      error("dest len longer than block size");
-+                      goto exit_2;
-+              }
-+
-+              /* read compressed block size, and skip block checksum info */
-+              src_len = get_unaligned_be32(in_buf);
-+              in_buf += 8;
-+
-+              if (src_len <= 0 || src_len > dst_len) {
-+                      error("file corrupted");
-+                      goto exit_2;
-+              }
-+
-+              /* decompress */
-+              tmp = dst_len;
-+              r = lzo1x_decompress_safe((u8 *) in_buf, src_len, out_buf, &tmp);
-+
-+              if (r != LZO_E_OK || dst_len != tmp) {
-+                      error("Compressed data violation");
-+                      goto exit_2;
-+              }
-+
-+              obytes_processed += dst_len;
-+              if (flush)
-+                      flush(out_buf, dst_len);
-+              if (output)
-+                      out_buf += dst_len;
-+              if (posp)
-+                      *posp += src_len + 12;
-+              if (fill) {
-+                      in_buf = in_buf_save;
-+                      fill(in_buf, lzo1x_worst_compress(LZO_BLOCK_SIZE));
-+              } else
-+                      in_buf += src_len;
-+      }
-+
-+exit_2:
-+      if (!input)
-+              free(in_buf);
-+exit_1:
-+      if (!output)
-+              free(out_buf);
-+exit:
-+      return obytes_processed;
-+}
-+
-+#define decompress unlzo
---- a/lib/lzo/lzo1x_decompress.c
-+++ b/lib/lzo/lzo1x_decompress.c
-@@ -11,11 +11,13 @@
-  *  Richard Purdie <rpurdie@openedhand.com>
-  */
-+#ifndef STATIC
- #include <linux/module.h>
- #include <linux/kernel.h>
--#include <linux/lzo.h>
--#include <asm/byteorder.h>
-+#endif
-+
- #include <asm/unaligned.h>
-+#include <linux/lzo.h>
- #include "lzodefs.h"
- #define HAVE_IP(x, ip_end, ip) ((size_t)(ip_end - ip) < (x))
-@@ -244,9 +246,10 @@ lookbehind_overrun:
-       *out_len = op - out;
-       return LZO_E_LOOKBEHIND_OVERRUN;
- }
--
-+#ifndef STATIC
- EXPORT_SYMBOL_GPL(lzo1x_decompress_safe);
- MODULE_LICENSE("GPL");
- MODULE_DESCRIPTION("LZO1X Decompressor");
-+#endif
---- a/scripts/Makefile.lib
-+++ b/scripts/Makefile.lib
-@@ -230,3 +230,8 @@ quiet_cmd_lzma = LZMA    $@
- cmd_lzma = (cat $(filter-out FORCE,$^) | \
-       lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-       (rm -f $@ ; false)
-+
-+quiet_cmd_lzo = LZO    $@
-+cmd_lzo = (cat $(filter-out FORCE,$^) | \
-+      lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-+      (rm -f $@ ; false)
diff --git a/target/linux/generic-2.6/patches-2.6.31/051-lzo_compressed_kernel_for_arm.patch b/target/linux/generic-2.6/patches-2.6.31/051-lzo_compressed_kernel_for_arm.patch
deleted file mode 100644 (file)
index 49512bb..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -18,6 +18,8 @@ config ARM
-       select HAVE_KRETPROBES if (HAVE_KPROBES)
-       select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
-       select HAVE_GENERIC_DMA_COHERENT
-+      select HAVE_KERNEL_GZIP
-+      select HAVE_KERNEL_LZO
-       help
-         The ARM series is a line of low-power-consumption RISC chip designs
-         licensed by ARM Ltd and targeted at embedded applications and
---- a/arch/arm/boot/compressed/Makefile
-+++ b/arch/arm/boot/compressed/Makefile
-@@ -63,8 +63,12 @@ endif
- SEDFLAGS      = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
--targets       := vmlinux vmlinux.lds piggy.gz piggy.o font.o font.c \
--               head.o misc.o $(OBJS)
-+suffix_$(CONFIG_KERNEL_GZIP) = gzip
-+suffix_$(CONFIG_KERNEL_LZO)  = lzo
-+
-+targets       := vmlinux vmlinux.lds \
-+               piggy.$(suffix_y) piggy.$(suffix_y).o \
-+               font.o font.c head.o misc.o $(OBJS)
- ifeq ($(CONFIG_FUNCTION_TRACER),y)
- ORIG_CFLAGS := $(KBUILD_CFLAGS)
-@@ -87,22 +91,31 @@ endif
- ifneq ($(PARAMS_PHYS),)
- LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS)
- endif
--LDFLAGS_vmlinux += -p --no-undefined -X \
--      $(shell $(CC) $(KBUILD_CFLAGS) --print-libgcc-file-name) -T
-+# ?
-+LDFLAGS_vmlinux += -p
-+# Report unresolved symbol references
-+LDFLAGS_vmlinux += --no-undefined
-+# Delete all temporary local symbols
-+LDFLAGS_vmlinux += -X
-+# Next argument is a linker script
-+LDFLAGS_vmlinux += -T
-+
-+# For __aeabi_uidivmod
-+lib1funcs = $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.o
- # Don't allow any static data in misc.o, which
- # would otherwise mess up our GOT table
- CFLAGS_misc.o := -Dstatic=
--$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \
--              $(addprefix $(obj)/, $(OBJS)) FORCE
-+$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
-+              $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
-       $(call if_changed,ld)
-       @:
--$(obj)/piggy.gz: $(obj)/../Image FORCE
--      $(call if_changed,gzip)
-+$(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE
-+      $(call if_changed,$(suffix_y))
--$(obj)/piggy.o:  $(obj)/piggy.gz FORCE
-+$(obj)/piggy.$(suffix_y).o:  $(obj)/piggy.$(suffix_y) FORCE
- CFLAGS_font.o := -Dstatic=
---- a/arch/arm/boot/compressed/misc.c
-+++ b/arch/arm/boot/compressed/misc.c
-@@ -18,10 +18,15 @@
- unsigned int __machine_arch_type;
-+#define _LINUX_STRING_H_
-+
- #include <linux/compiler.h>   /* for inline */
- #include <linux/types.h>      /* for size_t */
- #include <linux/stddef.h>     /* for NULL */
- #include <asm/string.h>
-+#include <linux/linkage.h>
-+
-+#include <asm/unaligned.h>
- #ifdef STANDALONE_DEBUG
- #define putstr printf
-@@ -188,34 +193,8 @@ static inline __ptr_t memcpy(__ptr_t __d
- /*
-  * gzip delarations
-  */
--#define OF(args)  args
- #define STATIC static
--typedef unsigned char  uch;
--typedef unsigned short ush;
--typedef unsigned long  ulg;
--
--#define WSIZE 0x8000          /* Window size must be at least 32k, */
--                              /* and a power of two */
--
--static uch *inbuf;            /* input buffer */
--static uch window[WSIZE];     /* Sliding window buffer */
--
--static unsigned insize;               /* valid bytes in inbuf */
--static unsigned inptr;                /* index of next byte to be processed in inbuf */
--static unsigned outcnt;               /* bytes in output buffer */
--
--/* gzip flag byte */
--#define ASCII_FLAG   0x01 /* bit 0 set: file probably ascii text */
--#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
--#define EXTRA_FIELD  0x04 /* bit 2 set: extra field present */
--#define ORIG_NAME    0x08 /* bit 3 set: original file name present */
--#define COMMENT      0x10 /* bit 4 set: file comment present */
--#define ENCRYPTED    0x20 /* bit 5 set: file is encrypted */
--#define RESERVED     0xC0 /* bit 6,7:   reserved */
--
--#define get_byte()  (inptr < insize ? inbuf[inptr++] : fill_inbuf())
--
- /* Diagnostic functions */
- #ifdef DEBUG
- #  define Assert(cond,msg) {if(!(cond)) error(msg);}
-@@ -233,24 +212,20 @@ static unsigned outcnt;          /* bytes in out
- #  define Tracecv(c,x)
- #endif
--static int  fill_inbuf(void);
--static void flush_window(void);
- static void error(char *m);
- extern char input_data[];
- extern char input_data_end[];
--static uch *output_data;
--static ulg output_ptr;
--static ulg bytes_out;
-+static unsigned char *output_data;
-+static unsigned long output_ptr;
- static void error(char *m);
- static void putstr(const char *);
--extern int end;
--static ulg free_mem_ptr;
--static ulg free_mem_end_ptr;
-+static unsigned long free_mem_ptr;
-+static unsigned long free_mem_end_ptr;
- #ifdef STANDALONE_DEBUG
- #define NO_INFLATE_MALLOC
-@@ -258,46 +233,13 @@ static ulg free_mem_end_ptr;
- #define ARCH_HAS_DECOMP_WDOG
--#include "../../../../lib/inflate.c"
--
--/* ===========================================================================
-- * Fill the input buffer. This is called only when the buffer is empty
-- * and at least one byte is really needed.
-- */
--int fill_inbuf(void)
--{
--      if (insize != 0)
--              error("ran out of input data");
--
--      inbuf = input_data;
--      insize = &input_data_end[0] - &input_data[0];
--
--      inptr = 1;
--      return inbuf[0];
--}
-+#ifdef CONFIG_KERNEL_GZIP
-+#include "../../../../lib/decompress_inflate.c"
-+#endif
--/* ===========================================================================
-- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
-- * (Used for the decompressed data only.)
-- */
--void flush_window(void)
--{
--      ulg c = crc;
--      unsigned n;
--      uch *in, *out, ch;
--
--      in = window;
--      out = &output_data[output_ptr];
--      for (n = 0; n < outcnt; n++) {
--              ch = *out++ = *in++;
--              c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
--      }
--      crc = c;
--      bytes_out += (ulg)outcnt;
--      output_ptr += (ulg)outcnt;
--      outcnt = 0;
--      putstr(".");
--}
-+#ifdef CONFIG_KERNEL_LZO
-+#include "../../../../lib/decompress_unlzo.c"
-+#endif
- #ifndef arch_error
- #define arch_error(x)
-@@ -314,22 +256,33 @@ static void error(char *x)
-       while(1);       /* Halt */
- }
-+asmlinkage void __div0(void)
-+{
-+      error("Attempting division by 0!");
-+}
-+
- #ifndef STANDALONE_DEBUG
--ulg
--decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
--                int arch_id)
-+unsigned long
-+decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
-+              unsigned long free_mem_ptr_end_p,
-+              int arch_id)
- {
--      output_data             = (uch *)output_start;  /* Points to kernel start */
-+      unsigned char *tmp;
-+
-+      output_data             = (unsigned char *)output_start;
-       free_mem_ptr            = free_mem_ptr_p;
-       free_mem_end_ptr        = free_mem_ptr_end_p;
-       __machine_arch_type     = arch_id;
-       arch_decomp_setup();
--      makecrc();
-+      tmp = (unsigned char *) (((unsigned long)input_data_end) - 4);
-+      output_ptr = get_unaligned_le32(tmp);
-+
-       putstr("Uncompressing Linux...");
--      gunzip();
-+      decompress(input_data, input_data_end - input_data,
-+                      NULL, NULL, output_data, NULL, error);
-       putstr(" done, booting the kernel.\n");
-       return output_ptr;
- }
-@@ -341,11 +294,10 @@ int main()
- {
-       output_data = output_buffer;
--      makecrc();
-       putstr("Uncompressing Linux...");
--      gunzip();
-+      decompress(input_data, input_data_end - input_data,
-+                      NULL, NULL, output_data, NULL, error);
-       putstr("done.\n");
-       return 0;
- }
- #endif
--      
---- a/arch/arm/boot/compressed/piggy.S
-+++ /dev/null
-@@ -1,6 +0,0 @@
--      .section .piggydata,#alloc
--      .globl  input_data
--input_data:
--      .incbin "arch/arm/boot/compressed/piggy.gz"
--      .globl  input_data_end
--input_data_end:
---- /dev/null
-+++ b/arch/arm/boot/compressed/piggy.gzip.S
-@@ -0,0 +1,6 @@
-+      .section .piggydata,#alloc
-+      .globl  input_data
-+input_data:
-+      .incbin "arch/arm/boot/compressed/piggy.gzip"
-+      .globl  input_data_end
-+input_data_end:
---- /dev/null
-+++ b/arch/arm/boot/compressed/piggy.lzo.S
-@@ -0,0 +1,6 @@
-+      .section .piggydata,#alloc
-+      .globl  input_data
-+input_data:
-+      .incbin "arch/arm/boot/compressed/piggy.lzo"
-+      .globl  input_data_end
-+input_data_end:
diff --git a/target/linux/generic-2.6/patches-2.6.31/052-lzo_compressed_kernel_for_x86.patch b/target/linux/generic-2.6/patches-2.6.31/052-lzo_compressed_kernel_for_x86.patch
deleted file mode 100644 (file)
index ea7d240..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/arch/x86/Kconfig
-+++ b/arch/x86/Kconfig
-@@ -49,6 +49,7 @@ config X86
-       select HAVE_KERNEL_GZIP
-       select HAVE_KERNEL_BZIP2
-       select HAVE_KERNEL_LZMA
-+      select HAVE_KERNEL_LZO
-       select HAVE_ARCH_KMEMCHECK
- config OUTPUT_FORMAT
---- a/arch/x86/boot/compressed/Makefile
-+++ b/arch/x86/boot/compressed/Makefile
-@@ -4,7 +4,7 @@
- # create a compressed vmlinux image from the original vmlinux
- #
--targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma head_$(BITS).o misc.o piggy.o
-+targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o piggy.o
- KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2
- KBUILD_CFLAGS += -fno-strict-aliasing -fPIC
-@@ -48,10 +48,13 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.al
-       $(call if_changed,bzip2)
- $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
-       $(call if_changed,lzma)
-+$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
-+      $(call if_changed,lzo)
- suffix-$(CONFIG_KERNEL_GZIP)  := gz
- suffix-$(CONFIG_KERNEL_BZIP2) := bz2
- suffix-$(CONFIG_KERNEL_LZMA)  := lzma
-+suffix-$(CONFIG_KERNEL_LZO)   := lzo
- quiet_cmd_mkpiggy = MKPIGGY $@
-       cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false )
---- a/arch/x86/boot/compressed/misc.c
-+++ b/arch/x86/boot/compressed/misc.c
-@@ -162,6 +162,10 @@ static int lines, cols;
- #include "../../../../lib/decompress_unlzma.c"
- #endif
-+#ifdef CONFIG_KERNEL_LZO
-+#include "../../../../lib/decompress_unlzo.c"
-+#endif
-+
- static void scroll(void)
- {
-       int i;
diff --git a/target/linux/generic-2.6/patches-2.6.31/053-lzo_compression_for_initramfs.patch b/target/linux/generic-2.6/patches-2.6.31/053-lzo_compression_for_initramfs.patch
deleted file mode 100644 (file)
index c05c383..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -120,6 +120,10 @@ config DECOMPRESS_LZMA
- config DECOMPRESS_LZMA_NEEDED
-        boolean
-+config DECOMPRESS_LZO
-+      select LZO_DECOMPRESS
-+      tristate
-+
- #
- # Generic allocator support is selected if needed
- #
---- a/lib/Makefile
-+++ b/lib/Makefile
-@@ -69,6 +69,7 @@ obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
- lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
- lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o
- lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
-+lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o
- obj-$(CONFIG_TEXTSEARCH) += textsearch.o
- obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o
---- a/lib/decompress.c
-+++ b/lib/decompress.c
-@@ -9,6 +9,7 @@
- #include <linux/decompress/bunzip2.h>
- #include <linux/decompress/unlzma.h>
- #include <linux/decompress/inflate.h>
-+#include <linux/decompress/unlzo.h>
- #include <linux/types.h>
- #include <linux/string.h>
-@@ -22,6 +23,9 @@
- #ifndef CONFIG_DECOMPRESS_LZMA
- # define unlzma NULL
- #endif
-+#ifndef CONFIG_DECOMPRESS_LZO
-+# define unlzo NULL
-+#endif
- static const struct compress_format {
-       unsigned char magic[2];
-@@ -32,6 +36,7 @@ static const struct compress_format {
-       { {037, 0236}, "gzip", gunzip },
-       { {0x42, 0x5a}, "bzip2", bunzip2 },
-       { {0x5d, 0x00}, "lzma", unlzma },
-+      { {0x89, 0x4c}, "lzo", unlzo },
-       { {0, 0}, NULL, NULL }
- };
---- a/usr/Kconfig
-+++ b/usr/Kconfig
-@@ -72,6 +72,15 @@ config RD_LZMA
-         Support loading of a LZMA encoded initial ramdisk or cpio buffer
-         If unsure, say N.
-+config RD_LZO
-+      bool "Support initial ramdisks compressed using LZO" if EMBEDDED
-+      default !EMBEDDED
-+      depends on BLK_DEV_INITRD && HAVE_KERNEL_LZO
-+      select DECOMPRESS_LZO
-+      help
-+        Support loading of a LZO encoded initial ramdisk or cpio buffer
-+        If unsure, say N.
-+
- choice
-       prompt "Built-in initramfs compression mode" if INITRAMFS_SOURCE!=""
-       help
-@@ -108,16 +117,15 @@ config INITRAMFS_COMPRESSION_GZIP
-       bool "Gzip"
-       depends on RD_GZIP
-       help
--        The old and tried gzip compression. Its compression ratio is
--        the poorest among the 3 choices; however its speed (both
--        compression and decompression) is the fastest.
-+        The old and tried gzip compression. It provides a good balance
-+        between compression ratio and decompression speed.
- config INITRAMFS_COMPRESSION_BZIP2
-       bool "Bzip2"
-       depends on RD_BZIP2
-       help
-         Its compression ratio and speed is intermediate.
--        Decompression speed is slowest among the three.  The initramfs
-+        Decompression speed is slowest among the four.  The initramfs
-         size is about 10% smaller with bzip2, in comparison to gzip.
-         Bzip2 uses a large amount of memory. For modern kernels you
-         will need at least 8MB RAM or more for booting.
-@@ -128,7 +136,15 @@ config INITRAMFS_COMPRESSION_LZMA
-       help
-         The most recent compression algorithm.
-         Its ratio is best, decompression speed is between the other
--        two. Compression is slowest.  The initramfs size is about 33%
-+        three. Compression is slowest. The initramfs size is about 33%
-         smaller with LZMA in comparison to gzip.
-+config INITRAMFS_COMPRESSION_LZO
-+      bool "LZO"
-+      depends on RD_LZO
-+      help
-+        Its compression ratio is the poorest among the four. The kernel
-+        size is about about 10% bigger than gzip; however its speed
-+        (both compression and decompression) is the fastest.
-+
- endchoice
diff --git a/target/linux/generic-2.6/patches-2.6.31/055-lzma_arm_kernel.patch b/target/linux/generic-2.6/patches-2.6.31/055-lzma_arm_kernel.patch
deleted file mode 100644 (file)
index a0111bd..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-From d0f226a0f104c7d1da1d215b8013359273e39e18 Mon Sep 17 00:00:00 2001
-From: Albin Tonnerre <albin.tonnerre@free-electrons.com>
-Date: Fri, 16 Oct 2009 16:17:22 +0200
-Subject: [PATCH] Add LZMA decompression on ARM
-
-
-Signed-off-by: Albin Tonnerre <albin.tonnerre@free-electrons.com>
----
- arch/arm/Kconfig                      |    1 +
- arch/arm/boot/compressed/Makefile     |    1 +
- arch/arm/boot/compressed/misc.c       |    4 ++++
- arch/arm/boot/compressed/piggy.lzma.S |    6 ++++++
- 4 files changed, 12 insertions(+), 0 deletions(-)
- create mode 100644 arch/arm/boot/compressed/piggy.lzma.S
-
---- a/arch/arm/Kconfig
-+++ b/arch/arm/Kconfig
-@@ -20,6 +20,7 @@ config ARM
-       select HAVE_GENERIC_DMA_COHERENT
-       select HAVE_KERNEL_GZIP
-       select HAVE_KERNEL_LZO
-+      select HAVE_KERNEL_LZMA
-       help
-         The ARM series is a line of low-power-consumption RISC chip designs
-         licensed by ARM Ltd and targeted at embedded applications and
---- a/arch/arm/boot/compressed/Makefile
-+++ b/arch/arm/boot/compressed/Makefile
-@@ -65,6 +65,7 @@ SEDFLAGS     = s/TEXT_START/$(ZTEXTADDR)/;s/
- suffix_$(CONFIG_KERNEL_GZIP) = gzip
- suffix_$(CONFIG_KERNEL_LZO)  = lzo
-+suffix_$(CONFIG_KERNEL_LZMA)  = lzma
- targets       := vmlinux vmlinux.lds \
-                piggy.$(suffix_y) piggy.$(suffix_y).o \
---- a/arch/arm/boot/compressed/misc.c
-+++ b/arch/arm/boot/compressed/misc.c
-@@ -237,6 +237,10 @@ static unsigned long free_mem_end_ptr;
- #include "../../../../lib/decompress_inflate.c"
- #endif
-+#ifdef CONFIG_KERNEL_LZMA
-+#include "../../../../lib/decompress_unlzma.c"
-+#endif
-+
- #ifdef CONFIG_KERNEL_LZO
- #include "../../../../lib/decompress_unlzo.c"
- #endif
---- /dev/null
-+++ b/arch/arm/boot/compressed/piggy.lzma.S
-@@ -0,0 +1,6 @@
-+      .section .piggydata,#alloc
-+      .globl  input_data
-+input_data:
-+      .incbin "arch/arm/boot/compressed/piggy.lzma"
-+      .globl  input_data_end
-+input_data_end:
diff --git a/target/linux/generic-2.6/patches-2.6.31/060-block2mtd_init.patch b/target/linux/generic-2.6/patches-2.6.31/060-block2mtd_init.patch
deleted file mode 100644 (file)
index 50df4aa..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -14,6 +14,7 @@
- #include <linux/list.h>
- #include <linux/init.h>
- #include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
- #include <linux/buffer_head.h>
- #include <linux/mutex.h>
- #include <linux/mount.h>
-@@ -232,10 +233,11 @@ static void block2mtd_free_device(struct
- /* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size)
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
- {
-       struct block_device *bdev;
-       struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-       char *name;
-       if (!devname)
-@@ -273,17 +275,17 @@ static struct block2mtd_dev *add_device(
-       mutex_init(&dev->write_mutex);
--      /* Setup the MTD structure */
--      /* make the name contain the block device in */
--      name = kmalloc(sizeof("block2mtd: ") + strlen(devname) + 1,
--                      GFP_KERNEL);
-+      if (!mtdname)
-+              mtdname = devname;
-+
-+      name = kmalloc(strlen(mtdname) + 1, GFP_KERNEL);
-       if (!name)
-               goto devinit_err;
--      sprintf(name, "block2mtd: %s", devname);
-+      strcpy(name, mtdname);
-       dev->mtd.name = name;
--      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK;
-+      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK & ~(erase_size - 1);
-       dev->mtd.erasesize = erase_size;
-       dev->mtd.writesize = 1;
-       dev->mtd.type = MTD_RAM;
-@@ -296,14 +298,17 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
--      if (add_mtd_device(&dev->mtd)) {
-+      part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-+      part->name = dev->mtd.name;
-+      part->offset = 0;
-+      part->size = dev->mtd.size;
-+      if (add_mtd_partitions(&dev->mtd, part, 1)) {
-               /* Device didnt get added, so free the entry */
-               goto devinit_err;
-       }
-       list_add(&dev->list, &blkmtd_device_list);
-       INFO("mtd%d: [%s] erase_size = %dKiB [%d]", dev->mtd.index,
--                      dev->mtd.name + strlen("block2mtd: "),
--                      dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-+                      mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-       return dev;
- devinit_err:
-@@ -376,9 +381,9 @@ static char block2mtd_paramline[80 + 12]
- static int block2mtd_setup2(const char *val)
- {
--      char buf[80 + 12]; /* 80 for device, 12 for erase size */
-+      char buf[80 + 12 + 80]; /* 80 for device, 12 for erase size, 80 for name */
-       char *str = buf;
--      char *token[2];
-+      char *token[3];
-       char *name;
-       size_t erase_size = PAGE_SIZE;
-       int i, ret;
-@@ -389,7 +394,7 @@ static int block2mtd_setup2(const char *
-       strcpy(str, val);
-       kill_final_newline(str);
--      for (i = 0; i < 2; i++)
-+      for (i = 0; i < 3; i++)
-               token[i] = strsep(&str, ",");
-       if (str)
-@@ -408,8 +413,10 @@ static int block2mtd_setup2(const char *
-                       parse_err("illegal erase size");
-               }
-       }
-+      if (token[2] && (strlen(token[2]) + 1 > 80))
-+              parse_err("mtd device name too long");
--      add_device(name, erase_size);
-+      add_device(name, erase_size, token[2]);
-       return 0;
- }
-@@ -443,7 +450,7 @@ static int block2mtd_setup(const char *v
- module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
--MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
-+MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>[,<name>]]\"");
- static int __init block2mtd_init(void)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.31/065-rootfs_split.patch b/target/linux/generic-2.6/patches-2.6.31/065-rootfs_split.patch
deleted file mode 100644 (file)
index 7956baf..0000000
+++ /dev/null
@@ -1,625 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -53,6 +53,16 @@ config MTD_TESTS
-         should normally be compiled as kernel modules. The modules perform
-         various checks and verifications when loaded.
-+config MTD_ROOTFS_ROOT_DEV
-+      bool "Automatically set 'rootfs' partition to be root filesystem"
-+      depends on MTD_PARTITIONS
-+      default y
-+
-+config MTD_ROOTFS_SPLIT
-+      bool "Automatically split 'rootfs' partition for squashfs"
-+      depends on MTD_PARTITIONS
-+      default y
-+
- config MTD_REDBOOT_PARTS
-       tristate "RedBoot partition table parsing"
-       depends on MTD_PARTITIONS
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -18,6 +18,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/root_dev.h>
-+#include <linux/magic.h>
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -35,7 +37,7 @@ struct mtd_part {
-  * the pointer to that structure with this macro.
-  */
- #define PART(x)  ((struct mtd_part *)(x))
--
-+#define IS_PART(mtd) (mtd->read == part_read)
- /*
-  * MTD methods which simply translate the effective address and pass through
-@@ -502,6 +504,150 @@ out_register:
-       return slave;
- }
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+#define ROOTFS_SPLIT_NAME "rootfs_data"
-+#define ROOTFS_REMOVED_NAME "<removed>"
-+
-+struct squashfs_super_block {
-+      __le32 s_magic;
-+      __le32 pad0[9];
-+      __le64 bytes_used;
-+};
-+
-+
-+static int split_squashfs(struct mtd_info *master, int offset, int *split_offset)
-+{
-+      struct squashfs_super_block sb;
-+      int len, ret;
-+
-+      ret = master->read(master, offset, sizeof(sb), &len, (void *) &sb);
-+      if (ret || (len != sizeof(sb))) {
-+              printk(KERN_ALERT "split_squashfs: error occured while reading "
-+                      "from \"%s\"\n", master->name);
-+              return -EINVAL;
-+      }
-+
-+      if (SQUASHFS_MAGIC != le32_to_cpu(sb.s_magic) ) {
-+              printk(KERN_ALERT "split_squashfs: no squashfs found in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      if (le64_to_cpu((sb.bytes_used)) <= 0) {
-+              printk(KERN_ALERT "split_squashfs: squashfs is empty in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      len = (u32) le64_to_cpu(sb.bytes_used);
-+      len += (offset & 0x000fffff);
-+      len +=  (master->erasesize - 1);
-+      len &= ~(master->erasesize - 1);
-+      len -= (offset & 0x000fffff);
-+      *split_offset = offset + len;
-+
-+      return 0;
-+}
-+
-+static int split_rootfs_data(struct mtd_info *master, struct mtd_info *rpart, const struct mtd_partition *part)
-+{
-+      struct mtd_partition *dpart;
-+      struct mtd_part *slave = NULL;
-+      int split_offset = 0;
-+      int ret;
-+
-+      ret = split_squashfs(master, part->offset, &split_offset);
-+      if (ret)
-+              return ret;
-+
-+      if (split_offset <= 0)
-+              return 0;
-+
-+      dpart = kmalloc(sizeof(*part)+sizeof(ROOTFS_SPLIT_NAME)+1, GFP_KERNEL);
-+      if (dpart == NULL) {
-+              printk(KERN_INFO "split_squashfs: no memory for partition \"%s\"\n",
-+                      ROOTFS_SPLIT_NAME);
-+              return -ENOMEM;
-+      }
-+
-+      memcpy(dpart, part, sizeof(*part));
-+      dpart->name = (unsigned char *)&dpart[1];
-+      strcpy(dpart->name, ROOTFS_SPLIT_NAME);
-+
-+      dpart->size -= split_offset - dpart->offset;
-+      dpart->offset = split_offset;
-+
-+      if (dpart == NULL)
-+              return 1;
-+
-+      printk(KERN_INFO "mtd: partition \"%s\" created automatically, ofs=%llX, len=%llX \n",
-+              ROOTFS_SPLIT_NAME, dpart->offset, dpart->size);
-+
-+      slave = add_one_partition(master, dpart, 0, split_offset);
-+      if (!slave) {
-+              kfree(dpart);
-+              return -ENOMEM;
-+      }
-+      rpart->split = &slave->mtd;
-+
-+      return 0;
-+}
-+
-+static int refresh_rootfs_split(struct mtd_info *mtd)
-+{
-+      struct mtd_partition tpart;
-+      struct mtd_part *part;
-+      char *name;
-+      //int index = 0;
-+      int offset, size;
-+      int ret;
-+
-+      part = PART(mtd);
-+
-+      /* check for the new squashfs offset first */
-+      ret = split_squashfs(part->master, part->offset, &offset);
-+      if (ret)
-+              return ret;
-+
-+      if ((offset > 0) && !mtd->split) {
-+              printk(KERN_INFO "%s: creating new split partition for \"%s\"\n", __func__, mtd->name);
-+              /* if we don't have a rootfs split partition, create a new one */
-+              tpart.name = (char *) mtd->name;
-+              tpart.size = mtd->size;
-+              tpart.offset = part->offset;
-+
-+              return split_rootfs_data(part->master, &part->mtd, &tpart);
-+      } else if ((offset > 0) && mtd->split) {
-+              /* update the offsets of the existing partition */
-+              size = mtd->size + part->offset - offset;
-+
-+              part = PART(mtd->split);
-+              part->offset = offset;
-+              part->mtd.size = size;
-+              printk(KERN_INFO "%s: %s partition \"" ROOTFS_SPLIT_NAME "\", offset: 0x%06x (0x%06x)\n",
-+                      __func__, (!strcmp(part->mtd.name, ROOTFS_SPLIT_NAME) ? "updating" : "creating"),
-+                      (u32) part->offset, (u32) part->mtd.size);
-+              name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
-+              strcpy(name, ROOTFS_SPLIT_NAME);
-+              part->mtd.name = name;
-+      } else if ((offset <= 0) && mtd->split) {
-+              printk(KERN_INFO "%s: removing partition \"%s\"\n", __func__, mtd->split->name);
-+
-+              /* mark existing partition as removed */
-+              part = PART(mtd->split);
-+              name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
-+              strcpy(name, ROOTFS_REMOVED_NAME);
-+              part->mtd.name = name;
-+              part->offset = 0;
-+              part->mtd.size = 0;
-+      }
-+
-+      return 0;
-+}
-+#endif /* CONFIG_MTD_ROOTFS_SPLIT */
-+
- /*
-  * This function, given a master MTD object and a partition table, creates
-  * and registers slave MTD objects which are bound to the master according to
-@@ -517,7 +663,7 @@ int add_mtd_partitions(struct mtd_info *
- {
-       struct mtd_part *slave;
-       uint64_t cur_offset = 0;
--      int i;
-+      int i, ret;
-       printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
-@@ -525,6 +671,21 @@ int add_mtd_partitions(struct mtd_info *
-               slave = add_one_partition(master, parts + i, i, cur_offset);
-               if (!slave)
-                       return -ENOMEM;
-+
-+              if (!strcmp(parts[i].name, "rootfs")) {
-+#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV
-+                      if (ROOT_DEV == 0) {
-+                              printk(KERN_NOTICE "mtd: partition \"rootfs\" "
-+                                      "set to be root filesystem\n");
-+                              ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, slave->mtd.index);
-+                      }
-+#endif
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+                      ret = split_rootfs_data(master, &slave->mtd, &parts[i]);
-+                      /* if (ret == 0)
-+                              j++; */
-+#endif
-+              }
-               cur_offset = slave->offset + slave->mtd.size;
-       }
-@@ -532,6 +693,32 @@ int add_mtd_partitions(struct mtd_info *
- }
- EXPORT_SYMBOL(add_mtd_partitions);
-+int refresh_mtd_partitions(struct mtd_info *mtd)
-+{
-+      int ret = 0;
-+
-+      if (IS_PART(mtd)) {
-+              struct mtd_part *part;
-+              struct mtd_info *master;
-+
-+              part = PART(mtd);
-+              master = part->master;
-+              if (master->refresh_device)
-+                      ret = master->refresh_device(master);
-+      }
-+
-+      if (!ret && mtd->refresh_device)
-+              ret = mtd->refresh_device(mtd);
-+
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+      if (!ret && IS_PART(mtd) && !strcmp(mtd->name, "rootfs"))
-+              refresh_rootfs_split(mtd);
-+#endif
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL_GPL(refresh_mtd_partitions);
-+
- static DEFINE_SPINLOCK(part_parser_lock);
- static LIST_HEAD(part_parsers);
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -29,6 +29,8 @@ struct block2mtd_dev {
-       struct block_device *blkdev;
-       struct mtd_info mtd;
-       struct mutex write_mutex;
-+      rwlock_t bdev_mutex;
-+      char devname[0];
- };
-@@ -81,6 +83,12 @@ static int block2mtd_erase(struct mtd_in
-       size_t len = instr->len;
-       int err;
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-+
-       instr->state = MTD_ERASING;
-       mutex_lock(&dev->write_mutex);
-       err = _block2mtd_erase(dev, from, len);
-@@ -93,6 +101,10 @@ static int block2mtd_erase(struct mtd_in
-       instr->state = MTD_ERASE_DONE;
-       mtd_erase_callback(instr);
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+
-       return err;
- }
-@@ -104,10 +116,14 @@ static int block2mtd_read(struct mtd_inf
-       struct page *page;
-       int index = from >> PAGE_SHIFT;
-       int offset = from & (PAGE_SIZE-1);
--      int cpylen;
-+      int cpylen, err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev || (from > mtd->size)) {
-+              err = -EINVAL;
-+              goto done;
-+      }
--      if (from > mtd->size)
--              return -EINVAL;
-       if (from + len > mtd->size)
-               len = mtd->size - from;
-@@ -122,10 +138,14 @@ static int block2mtd_read(struct mtd_inf
-               len = len - cpylen;
-               page = page_read(dev->blkdev->bd_inode->i_mapping, index);
--              if (!page)
--                      return -ENOMEM;
--              if (IS_ERR(page))
--                      return PTR_ERR(page);
-+              if (!page) {
-+                      err = -ENOMEM;
-+                      goto done;
-+              }
-+              if (IS_ERR(page)) {
-+                      err = PTR_ERR(page);
-+                      goto done;
-+              }
-               memcpy(buf, page_address(page) + offset, cpylen);
-               page_cache_release(page);
-@@ -136,7 +156,10 @@ static int block2mtd_read(struct mtd_inf
-               offset = 0;
-               index++;
-       }
--      return 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+      return err;
- }
-@@ -188,12 +211,22 @@ static int block2mtd_write(struct mtd_in
-               size_t *retlen, const u_char *buf)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      int err;
-+      int err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-       if (!len)
--              return 0;
--      if (to >= mtd->size)
--              return -ENOSPC;
-+              goto done;
-+
-+      if (to >= mtd->size) {
-+              err = -ENOSPC;
-+              goto done;
-+      }
-+
-       if (to + len > mtd->size)
-               len = mtd->size - to;
-@@ -202,6 +235,9 @@ static int block2mtd_write(struct mtd_in
-       mutex_unlock(&dev->write_mutex);
-       if (err > 0)
-               err = 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-       return err;
- }
-@@ -210,52 +246,29 @@ static int block2mtd_write(struct mtd_in
- static void block2mtd_sync(struct mtd_info *mtd)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      sync_blockdev(dev->blkdev);
--      return;
--}
--
--
--static void block2mtd_free_device(struct block2mtd_dev *dev)
--{
--      if (!dev)
--              return;
--
--      kfree(dev->mtd.name);
--      if (dev->blkdev) {
--              invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping,
--                                      0, -1);
--              close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);
--      }
-+      read_lock(&dev->bdev_mutex);
-+      if (dev->blkdev)
-+              sync_blockdev(dev->blkdev);
-+      read_unlock(&dev->bdev_mutex);
--      kfree(dev);
-+      return;
- }
--/* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
-+static int _open_bdev(struct block2mtd_dev *dev)
- {
-       struct block_device *bdev;
--      struct block2mtd_dev *dev;
--      struct mtd_partition *part;
--      char *name;
--
--      if (!devname)
--              return NULL;
--
--      dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
--      if (!dev)
--              return NULL;
-       /* Get a handle on the device */
--      bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, NULL);
-+      bdev = open_bdev_exclusive(dev->devname, FMODE_READ|FMODE_WRITE, NULL);
- #ifndef MODULE
-       if (IS_ERR(bdev)) {
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
--              dev_t devt = name_to_dev_t(devname);
-+              dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-               }
-@@ -263,17 +276,98 @@ static struct block2mtd_dev *add_device(
- #endif
-       if (IS_ERR(bdev)) {
--              ERROR("error: cannot open device %s", devname);
--              goto devinit_err;
-+              ERROR("error: cannot open device %s", dev->devname);
-+              return 1;
-       }
-       dev->blkdev = bdev;
-       if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
-               ERROR("attempting to use an MTD device as a block device");
--              goto devinit_err;
-+              return 1;
-       }
-+      return 0;
-+}
-+
-+static void _close_bdev(struct block2mtd_dev *dev)
-+{
-+      struct block_device *bdev;
-+
-+      if (!dev->blkdev)
-+              return;
-+
-+      bdev = dev->blkdev;
-+      invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping, 0, -1);
-+      close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);
-+      dev->blkdev = NULL;
-+}
-+
-+static void block2mtd_free_device(struct block2mtd_dev *dev)
-+{
-+      if (!dev)
-+              return;
-+
-+      kfree(dev->mtd.name);
-+      _close_bdev(dev);
-+      kfree(dev);
-+}
-+
-+
-+static int block2mtd_refresh(struct mtd_info *mtd)
-+{
-+      struct block2mtd_dev *dev = mtd->priv;
-+      struct block_device *bdev;
-+      dev_t devt;
-+      int err = 0;
-+
-+      /* no other mtd function can run at this point */
-+      write_lock(&dev->bdev_mutex);
-+
-+      /* get the device number for the whole disk */
-+      devt = MKDEV(MAJOR(dev->blkdev->bd_dev), 0);
-+
-+      /* close the old block device */
-+      _close_bdev(dev);
-+
-+      /* open the whole disk, issue a partition rescan, then */
-+      bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-+      if (!bdev || !bdev->bd_disk)
-+              err = -EINVAL;
-+#ifndef CONFIG_MTD_BLOCK2MTD_MODULE
-+      else
-+              err = rescan_partitions(bdev->bd_disk, bdev);
-+#endif
-+      if (bdev)
-+              close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE);
-+
-+      /* try to open the partition block device again */
-+      _open_bdev(dev);
-+      write_unlock(&dev->bdev_mutex);
-+
-+      return err;
-+}
-+
-+/* FIXME: ensure that mtd->size % erase_size == 0 */
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
-+{
-+      struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-+      char *name;
-+
-+      if (!devname)
-+              return NULL;
-+
-+      dev = kzalloc(sizeof(struct block2mtd_dev) + strlen(devname) + 1, GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      strcpy(dev->devname, devname);
-+
-+      if (_open_bdev(dev))
-+              goto devinit_err;
-+
-       mutex_init(&dev->write_mutex);
-+      rwlock_init(&dev->bdev_mutex);
-       if (!mtdname)
-               mtdname = devname;
-@@ -297,6 +391,7 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.read = block2mtd_read;
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
-+      dev->mtd.refresh_device = block2mtd_refresh;
-       part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-       part->name = dev->mtd.name;
---- a/drivers/mtd/mtdchar.c
-+++ b/drivers/mtd/mtdchar.c
-@@ -18,6 +18,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/mtd/partitions.h>
- #include <asm/uaccess.h>
-@@ -814,6 +815,13 @@ static int mtd_ioctl(struct inode *inode
-               file->f_pos = 0;
-               break;
-       }
-+#ifdef CONFIG_MTD_PARTITIONS
-+      case MTDREFRESH:
-+      {
-+              ret = refresh_mtd_partitions(mtd);
-+              break;
-+      }
-+#endif
-       default:
-               ret = -ENOTTY;
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -101,6 +101,7 @@ struct mtd_oob_ops {
-       uint8_t         *oobbuf;
- };
-+struct mtd_info;
- struct mtd_info {
-       u_char type;
-       uint32_t flags;
-@@ -241,6 +242,9 @@ struct mtd_info {
-       struct device dev;
-       int usecount;
-+      int (*refresh_device)(struct mtd_info *mtd);
-+      struct mtd_info *split;
-+
-       /* If the driver is something smart, like UBI, it may need to maintain
-        * its own reference counting. The below functions are only for driver.
-        * The driver may register its callbacks. These callbacks are not
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -34,12 +34,14 @@
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_partition;
- struct mtd_partition {
-       char *name;                     /* identifier string */
-       uint64_t size;                  /* partition size */
-       uint64_t offset;                /* offset within the master MTD space */
-       uint32_t mask_flags;            /* master MTD flags to mask out for this partition */
-       struct nand_ecclayout *ecclayout;       /* out of band layout for this partition (NAND only)*/
-+      int (*refresh_partition)(struct mtd_info *);
- };
- #define MTDPART_OFS_NXTBLK    (-2)
-@@ -51,6 +53,7 @@ struct mtd_info;
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
-+int refresh_mtd_partitions(struct mtd_info *);
- /*
-  * Functions dealing with the various ways of partitioning the space
---- a/include/mtd/mtd-abi.h
-+++ b/include/mtd/mtd-abi.h
-@@ -110,6 +110,7 @@ struct otp_info {
- #define MEMERASE64            _IOW('M', 20, struct erase_info_user64)
- #define MEMWRITEOOB64         _IOWR('M', 21, struct mtd_oob_buf64)
- #define MEMREADOOB64          _IOWR('M', 22, struct mtd_oob_buf64)
-+#define MTDREFRESH            _IO('M', 23)
- /*
-  * Obsolete legacy interface. Keep it in order not to break userspace
diff --git a/target/linux/generic-2.6/patches-2.6.31/066-block2mtd_probe.patch b/target/linux/generic-2.6/patches-2.6.31/066-block2mtd_probe.patch
deleted file mode 100644 (file)
index b2b1a34..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -268,6 +268,7 @@ static int _open_bdev(struct block2mtd_d
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
-+              wait_for_device_probe();
-               dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
diff --git a/target/linux/generic-2.6/patches-2.6.31/070-redboot_space.patch b/target/linux/generic-2.6/patches-2.6.31/070-redboot_space.patch
deleted file mode 100644 (file)
index 6ace83c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -249,14 +249,21 @@ static int parse_redboot_partitions(stru
- #endif
-               names += strlen(names)+1;
--#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-               if(fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_base) {
--                      i++;
--                      parts[i].offset = parts[i-1].size + parts[i-1].offset;
--                      parts[i].size = fl->next->img->flash_base - parts[i].offset;
--                      parts[i].name = nullname;
--              }
-+                      if (!strcmp(parts[i].name, "rootfs")) {
-+                              parts[i].size = fl->next->img->flash_base;
-+                              parts[i].size &= ~(master->erasesize - 1);
-+                              parts[i].size -= parts[i].offset;
-+#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-+                              nrparts--;
-+                      } else {
-+                              i++;
-+                              parts[i].offset = parts[i-1].size + parts[i-1].offset;
-+                              parts[i].size = fl->next->img->flash_base - parts[i].offset;
-+                              parts[i].name = nullname;
- #endif
-+                      }
-+              }
-               tmp_fl = fl;
-               fl = fl->next;
-               kfree(tmp_fl);
diff --git a/target/linux/generic-2.6/patches-2.6.31/071-redboot_boardconfig.patch b/target/linux/generic-2.6/patches-2.6.31/071-redboot_boardconfig.patch
deleted file mode 100644 (file)
index f9bc4fe..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -11,6 +11,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
-+#define BOARD_CONFIG_PART             "boardconfig"
-+
- struct fis_image_desc {
-     unsigned char name[16];      // Null terminated name
-     uint32_t    flash_base;    // Address within FLASH of image
-@@ -41,6 +43,7 @@ static int parse_redboot_partitions(stru
-                              struct mtd_partition **pparts,
-                              unsigned long fis_origin)
- {
-+      unsigned long max_offset = 0;
-       int nrparts = 0;
-       struct fis_image_desc *buf;
-       struct mtd_partition *parts;
-@@ -209,14 +212,14 @@ static int parse_redboot_partitions(stru
-               }
-       }
- #endif
--      parts = kzalloc(sizeof(*parts)*nrparts + nulllen + namelen, GFP_KERNEL);
-+      parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + sizeof(BOARD_CONFIG_PART), GFP_KERNEL);
-       if (!parts) {
-               ret = -ENOMEM;
-               goto out;
-       }
--      nullname = (char *)&parts[nrparts];
-+      nullname = (char *)&parts[nrparts + 1];
- #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-       if (nulllen > 0) {
-               strcpy(nullname, nullstring);
-@@ -235,6 +238,8 @@ static int parse_redboot_partitions(stru
-       }
- #endif
-       for ( ; i<nrparts; i++) {
-+              if(max_offset < buf[i].flash_base + buf[i].size)
-+                      max_offset = buf[i].flash_base + buf[i].size;
-               parts[i].size = fl->img->size;
-               parts[i].offset = fl->img->flash_base;
-               parts[i].name = names;
-@@ -268,6 +273,14 @@ static int parse_redboot_partitions(stru
-               fl = fl->next;
-               kfree(tmp_fl);
-       }
-+      if(master->size - max_offset >= master->erasesize)
-+      {
-+              parts[nrparts].size = master->size - max_offset;
-+              parts[nrparts].offset = max_offset;
-+              parts[nrparts].name = names;
-+              strcpy(names, BOARD_CONFIG_PART);
-+              nrparts++;
-+      }
-       ret = nrparts;
-       *pparts = parts;
-  out:
diff --git a/target/linux/generic-2.6/patches-2.6.31/080-mtd_plat_nand_chip_fixup.patch b/target/linux/generic-2.6/patches-2.6.31/080-mtd_plat_nand_chip_fixup.patch
deleted file mode 100644 (file)
index 2566151..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/include/linux/mtd/nand.h
-+++ b/include/linux/mtd/nand.h
-@@ -575,6 +575,7 @@ struct platform_nand_chip {
-       int                     chip_delay;
-       unsigned int            options;
-       const char              **part_probe_types;
-+      int                     (*chip_fixup)(struct mtd_info *mtd);
-       void                    (*set_parts)(uint64_t size,
-                                       struct platform_nand_chip *chip);
-       void                    *priv;
---- a/drivers/mtd/nand/plat_nand.c
-+++ b/drivers/mtd/nand/plat_nand.c
-@@ -80,7 +80,18 @@ static int __devinit plat_nand_probe(str
-       }
-       /* Scan to find existance of the device */
--      if (nand_scan(&data->mtd, 1)) {
-+      if (nand_scan_ident(&data->mtd, 1)) {
-+              res = -ENXIO;
-+              goto out;
-+      }
-+
-+      if (pdata->chip.chip_fixup) {
-+              res = pdata->chip.chip_fixup(&data->mtd);
-+              if (res)
-+                      goto out;
-+      }
-+
-+      if (nand_scan_tail(&data->mtd)) {
-               res = -ENXIO;
-               goto out;
-       }
diff --git a/target/linux/generic-2.6/patches-2.6.31/081-mtd_myloader_partition_parser.patch b/target/linux/generic-2.6/patches-2.6.31/081-mtd_myloader_partition_parser.patch
deleted file mode 100644 (file)
index 61b822e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -181,6 +181,22 @@ config MTD_AR7_PARTS
-       ---help---
-         TI AR7 partitioning support
-+config MTD_MYLOADER_PARTS
-+      tristate "MyLoader partition parsing"
-+      depends on MTD_PARTITIONS && (ADM5120 || ATHEROS_AR231X || ATHEROS_AR71XX)
-+      ---help---
-+        MyLoader is a bootloader which allows the user to define partitions
-+        in flash devices, by putting a table in the second erase block
-+        on the device, similar to a partition table. This table gives the 
-+        offsets and lengths of the user defined partitions.
-+
-+        If you need code which can detect and parse these tables, and
-+        register MTD 'partitions' corresponding to each image detected,
-+        enable this option.
-+
-+        You will still need the parsing functions to be called by the driver
-+        for your particular device. It won't happen automatically.
-+
- comment "User Modules And Translation Layers"
- config MTD_CHAR
---- a/drivers/mtd/Makefile
-+++ b/drivers/mtd/Makefile
-@@ -13,6 +13,7 @@ obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdli
- obj-$(CONFIG_MTD_AFS_PARTS)   += afs.o
- obj-$(CONFIG_MTD_AR7_PARTS)   += ar7part.o
- obj-$(CONFIG_MTD_OF_PARTS)      += ofpart.o
-+obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
- # 'Users' - code which presents functionality to userspace.
- obj-$(CONFIG_MTD_CHAR)                += mtdchar.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/082-mtd_info_move_forward_decl.patch b/target/linux/generic-2.6/patches-2.6.31/082-mtd_info_move_forward_decl.patch
deleted file mode 100644 (file)
index 13f0a21..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -33,6 +33,7 @@
-  * Note: writeable partitions require their size and offset be
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_info;
- struct mtd_partition;
- struct mtd_partition {
-@@ -49,7 +50,6 @@ struct mtd_partition {
- #define MTDPART_SIZ_FULL      (0)
--struct mtd_info;
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
diff --git a/target/linux/generic-2.6/patches-2.6.31/090-mtd_fix_nand_correct_data_return_code.patch b/target/linux/generic-2.6/patches-2.6.31/090-mtd_fix_nand_correct_data_return_code.patch
deleted file mode 100644 (file)
index be2c7d7..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/drivers/mtd/nand/nand_ecc.c
-+++ b/drivers/mtd/nand/nand_ecc.c
-@@ -492,8 +492,7 @@ int nand_correct_data(struct mtd_info *m
-       if ((bitsperbyte[b0] + bitsperbyte[b1] + bitsperbyte[b2]) == 1)
-               return 1;       /* error in ecc data; no action needed */
--      printk(KERN_ERR "uncorrectable error : ");
--      return -1;
-+      return -EBADMSG;
- }
- EXPORT_SYMBOL(nand_correct_data);
diff --git a/target/linux/generic-2.6/patches-2.6.31/100-netfilter_layer7_2.21.patch b/target/linux/generic-2.6/patches-2.6.31/100-netfilter_layer7_2.21.patch
deleted file mode 100644 (file)
index b846f78..0000000
+++ /dev/null
@@ -1,2132 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -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 */
---- a/include/net/netfilter/nf_conntrack.h
-+++ b/include/net/netfilter/nf_conntrack.h
-@@ -116,6 +116,22 @@ struct nf_conn {
-       u_int32_t secmark;
- #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: */
-       union nf_conntrack_proto proto;
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -858,6 +858,27 @@ config NETFILTER_XT_MATCH_STATE
-         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)
-+       depends on NF_CT_ACCT
-+      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
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -89,6 +89,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) 
- 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
---- a/net/netfilter/nf_conntrack_core.c
-+++ b/net/netfilter/nf_conntrack_core.c
-@@ -200,6 +200,14 @@ destroy_conntrack(struct nf_conntrack *n
-        * 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));
---- a/net/netfilter/nf_conntrack_standalone.c
-+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -171,6 +171,12 @@ static int ct_seq_show(struct seq_file *
-               goto release;
- #endif
-+#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;
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.c
-@@ -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
-+
-+
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regmagic.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regsub.c
-@@ -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';
-+}
---- /dev/null
-+++ b/net/netfilter/xt_layer7.c
-@@ -0,0 +1,666 @@
-+/*
-+  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.21");
-+
-+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("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, 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, 28)
-+static bool 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
-+static bool 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
-+                return 0;
-+        }
-+      return 1;
-+}
-+
-+
-+#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();
-+
-+      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/target/linux/generic-2.6/patches-2.6.31/101-netfilter_layer7_pktmatch.patch b/target/linux/generic-2.6/patches-2.6.31/101-netfilter_layer7_pktmatch.patch
deleted file mode 100644 (file)
index f65e301..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
---- a/include/linux/netfilter/xt_layer7.h
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -8,6 +8,7 @@ struct xt_layer7_info {
-     char protocol[MAX_PROTOCOL_LEN];
-     char pattern[MAX_PATTERN_LEN];
-     u_int8_t invert;
-+    u_int8_t pkt;
- };
- #endif /* _XT_LAYER7_H */
---- a/net/netfilter/xt_layer7.c
-+++ b/net/netfilter/xt_layer7.c
-@@ -314,33 +314,35 @@ static int match_no_append(struct nf_con
- }
- /* 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)
-+static int add_datastr(char *target, int offset, char *app_data, int len)
- {
-       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;
-+      if (!target) 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++) {
-+      for(i = 0; i < maxdatalen-offset-1 && i < len; i++) {
-               if(app_data[i] != '\0') {
-                       /* the kernel version of tolower mungs 'upper ascii' */
--                      master_conntrack->layer7.app_data[length+oldlength] =
-+                      target[length+offset] =
-                               isascii(app_data[i])? 
-                                       tolower(app_data[i]) : app_data[i];
-                       length++;
-               }
-       }
-+      target[length+offset] = '\0';
-+
-+      return length;
-+}
-+
-+/* 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;
--      master_conntrack->layer7.app_data[length+oldlength] = '\0';
--      master_conntrack->layer7.app_data_len = length + oldlength;
-+      length = add_datastr(master_conntrack->layer7.app_data, master_conntrack->layer7.app_data_len, app_data, appdatalen);
-+      master_conntrack->layer7.app_data_len += length;
-       return length;
- }
-@@ -438,7 +440,7 @@ match(const struct sk_buff *skbin,
-       enum ip_conntrack_info master_ctinfo, ctinfo;
-       struct nf_conn *master_conntrack, *conntrack;
--      unsigned char * app_data;
-+      unsigned char *app_data, *tmp_data;
-       unsigned int pattern_result, appdatalen;
-       regexp * comppattern;
-@@ -466,8 +468,8 @@ match(const struct sk_buff *skbin,
-               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) {
-+      if(!info->pkt && (total_acct_packets(master_conntrack) > num_packets ||
-+         master_conntrack->layer7.app_proto)) {
-               pattern_result = match_no_append(conntrack, master_conntrack, 
-                                                ctinfo, master_ctinfo, info);
-@@ -500,6 +502,25 @@ match(const struct sk_buff *skbin,
-       /* the return value gets checked later, when we're ready to use it */
-       comppattern = compile_and_cache(info->pattern, info->protocol);
-+      if (info->pkt) {
-+              tmp_data = kmalloc(maxdatalen, GFP_ATOMIC);
-+              if(!tmp_data){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
-+                      return info->invert;
-+              }
-+
-+              tmp_data[0] = '\0';
-+              add_datastr(tmp_data, 0, app_data, appdatalen);
-+              pattern_result = ((comppattern && regexec(comppattern, tmp_data)) ? 1 : 0);
-+
-+              kfree(tmp_data);
-+              tmp_data = NULL;
-+              spin_unlock_bh(&l7_lock);
-+
-+              return (pattern_result ^ info->invert);
-+      }
-+
-       /* 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){
diff --git a/target/linux/generic-2.6/patches-2.6.31/110-netfilter_match_speedup.patch b/target/linux/generic-2.6/patches-2.6.31/110-netfilter_match_speedup.patch
deleted file mode 100644 (file)
index d6c113a..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
---- a/include/linux/netfilter_ipv4/ip_tables.h
-+++ b/include/linux/netfilter_ipv4/ip_tables.h
-@@ -62,6 +62,7 @@ struct ipt_ip {
- #define IPT_F_FRAG            0x01    /* Set if rule is a fragment rule */
- #define IPT_F_GOTO            0x02    /* Set if jump is a goto */
- #define IPT_F_MASK            0x03    /* All possible flag bits mask. */
-+#define IPT_F_NO_DEF_MATCH    0x80    /* Internal: no default match rules present */
- /* Values for "inv" field in struct ipt_ip. */
- #define IPT_INV_VIA_IN                0x01    /* Invert the sense of IN IFACE. */
---- a/net/ipv4/netfilter/ip_tables.c
-+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -87,6 +87,9 @@ ip_packet_match(const struct iphdr *ip,
- #define FWINV(bool, invflg) ((bool) ^ !!(ipinfo->invflags & (invflg)))
-+      if (ipinfo->flags & IPT_F_NO_DEF_MATCH)
-+              return true;
-+
-       if (FWINV((ip->saddr&ipinfo->smsk.s_addr) != ipinfo->src.s_addr,
-                 IPT_INV_SRCIP)
-           || FWINV((ip->daddr&ipinfo->dmsk.s_addr) != ipinfo->dst.s_addr,
-@@ -137,13 +140,35 @@ ip_packet_match(const struct iphdr *ip,
-               return false;
-       }
-+#undef FWINV
-       return true;
- }
- static bool
--ip_checkentry(const struct ipt_ip *ip)
-+ip_checkentry(struct ipt_ip *ip)
- {
--      if (ip->flags & ~IPT_F_MASK) {
-+#define FWINV(bool, invflg) ((bool) || (ip->invflags & (invflg)))
-+
-+      if (FWINV(ip->smsk.s_addr, IPT_INV_SRCIP) ||
-+              FWINV(ip->dmsk.s_addr, IPT_INV_DSTIP))
-+              goto has_match_rules;
-+
-+      if (FWINV(!!((const unsigned long *)ip->iniface_mask)[0],
-+              IPT_INV_VIA_IN) ||
-+          FWINV(!!((const unsigned long *)ip->outiface_mask)[0],
-+              IPT_INV_VIA_OUT))
-+              goto has_match_rules;
-+
-+      if (FWINV(ip->proto, IPT_INV_PROTO))
-+              goto has_match_rules;
-+
-+      if (FWINV(ip->flags&IPT_F_FRAG, IPT_INV_FRAG))
-+              goto has_match_rules;
-+
-+      ip->flags |= IPT_F_NO_DEF_MATCH;
-+
-+has_match_rules:
-+      if (ip->flags & ~(IPT_F_MASK|IPT_F_NO_DEF_MATCH)) {
-               duprintf("Unknown flag bits set: %08X\n",
-                        ip->flags & ~IPT_F_MASK);
-               return false;
-@@ -153,6 +178,8 @@ ip_checkentry(const struct ipt_ip *ip)
-                        ip->invflags & ~IPT_INV_MASK);
-               return false;
-       }
-+
-+#undef FWINV
-       return true;
- }
-@@ -200,7 +227,6 @@ unconditional(const struct ipt_ip *ip)
-                       return 0;
-       return 1;
--#undef FWINV
- }
- #if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \
-@@ -326,8 +352,28 @@ ipt_do_table(struct sk_buff *skb,
-       struct xt_match_param mtpar;
-       struct xt_target_param tgpar;
--      /* Initialization */
-       ip = ip_hdr(skb);
-+
-+      IP_NF_ASSERT(table->valid_hooks & (1 << hook));
-+      xt_info_rdlock_bh();
-+      private = table->private;
-+      table_base = private->entries[smp_processor_id()];
-+      e = get_entry(table_base, private->hook_entry[hook]);
-+
-+      if (e->target_offset <= sizeof(struct ipt_entry) &&
-+              (e->ip.flags & IPT_F_NO_DEF_MATCH)) {
-+                      struct ipt_entry_target *t = ipt_get_target(e);
-+                      if (!t->u.kernel.target->target) {
-+                              int v = ((struct ipt_standard_target *)t)->verdict;
-+                              if ((v < 0) && (v != IPT_RETURN)) {
-+                                      ADD_COUNTER(e->counters, ntohs(ip->tot_len), 1);
-+                                      xt_info_rdunlock_bh();
-+                                      return (unsigned)(-v) - 1;
-+                              }
-+                      }
-+      }
-+
-+      /* Initialization */
-       datalen = skb->len - ip->ihl * 4;
-       indev = in ? in->name : nulldevname;
-       outdev = out ? out->name : nulldevname;
-@@ -345,13 +391,6 @@ ipt_do_table(struct sk_buff *skb,
-       mtpar.family  = tgpar.family = NFPROTO_IPV4;
-       mtpar.hooknum = tgpar.hooknum = hook;
--      IP_NF_ASSERT(table->valid_hooks & (1 << hook));
--      xt_info_rdlock_bh();
--      private = table->private;
--      table_base = private->entries[smp_processor_id()];
--
--      e = get_entry(table_base, private->hook_entry[hook]);
--
-       /* For return from builtin chain */
-       back = get_entry(table_base, private->underflow[hook]);
-@@ -978,6 +1017,7 @@ copy_entries_to_user(unsigned int total_
-               unsigned int i;
-               const struct ipt_entry_match *m;
-               const struct ipt_entry_target *t;
-+              u8 flags;
-               e = (struct ipt_entry *)(loc_cpu_entry + off);
-               if (copy_to_user(userptr + off
-@@ -988,6 +1028,14 @@ copy_entries_to_user(unsigned int total_
-                       goto free_counters;
-               }
-+              flags = e->ip.flags & ~IPT_F_NO_DEF_MATCH;
-+              if (copy_to_user(userptr + off
-+                               + offsetof(struct ipt_entry, ip.flags),
-+                               &flags, sizeof(flags)) != 0) {
-+                      ret = -EFAULT;
-+                      goto free_counters;
-+              }
-+
-               for (i = sizeof(struct ipt_entry);
-                    i < e->target_offset;
-                    i += m->u.match_size) {
diff --git a/target/linux/generic-2.6/patches-2.6.31/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.31/150-netfilter_imq.patch
deleted file mode 100644 (file)
index 026e9bd..0000000
+++ /dev/null
@@ -1,1260 +0,0 @@
---- /dev/null
-+++ b/drivers/net/imq.c
-@@ -0,0 +1,571 @@
-+/*
-+ *             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.
-+ *
-+ *           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;
-+
-+      if (entry) {
-+              nf_queue_entry_release_refs(entry);
-+              kfree(entry);
-+      }
-+
-+      skb_restore_cb(skb); /* kfree backup */
-+}
-+
-+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 int imq_dev_xmit(struct sk_buff *skb, struct net_device *dev)
-+{
-+      dev->stats.tx_bytes += skb->len;
-+      dev->stats.tx_packets++;
-+
-+      skb->imq_flags = 0;
-+      skb->destructor = NULL;
-+
-+      skb_restore_cb(skb); /* restore skb->cb */
-+
-+      dev->trans_start = jiffies;
-+      imq_nf_reinject(skb->nf_queue_entry, NF_ACCEPT);
-+      return 0;
-+}
-+
-+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(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 */
-+              /* 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;
-+}
-+
-+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");
-+
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -109,6 +109,129 @@ config EQUALIZER
-         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
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -160,6 +160,7 @@ 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
---- /dev/null
-+++ b/include/linux/imq.h
-@@ -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 */
-+
---- /dev/null
-+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
-@@ -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 */
-+
---- /dev/null
-+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
-@@ -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 */
-+
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -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
-@@ -331,6 +334,9 @@ struct sk_buff {
-        * 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;
-@@ -363,6 +369,9 @@ struct sk_buff {
-       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
-@@ -386,6 +395,9 @@ struct sk_buff {
-       kmemcheck_bitfield_end(flags2);
-       /* 0/13/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;
-@@ -441,6 +453,12 @@ static inline struct rtable *skb_rtable(
-       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);
-@@ -1976,6 +1994,10 @@ static inline void __nf_copy(struct sk_b
-       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);
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -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>
-@@ -1687,7 +1690,11 @@ int dev_hard_start_xmit(struct sk_buff *
-       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)) {
-@@ -1772,8 +1779,7 @@ u16 skb_tx_hash(const struct net_device 
- }
- 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;
-@@ -1786,6 +1792,7 @@ static struct netdev_queue *dev_pick_tx(
-       skb_set_queue_mapping(skb, queue_index);
-       return netdev_get_tx_queue(dev, queue_index);
- }
-+EXPORT_SYMBOL(dev_pick_tx);
- /**
-  *    dev_queue_xmit - transmit a buffer
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -1102,6 +1102,7 @@ extern int               dev_alloc_name(struct net_de
- 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);
---- /dev/null
-+++ b/include/linux/netfilter/xt_IMQ.h
-@@ -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 */
-+
---- a/include/net/netfilter/nf_queue.h
-+++ b/include/net/netfilter/nf_queue.h
-@@ -13,6 +13,12 @@ struct nf_queue_entry {
-       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 @@ extern int nf_unregister_queue_handler(u
-                                      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 */
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -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,80 @@ static int sock_pipe_buf_steal(struct pi
-       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, struct sk_buff *old)
-+{
-+      struct skb_cb_table *next;
-+
-+      if (!old->cb_next) {
-+              new->cb_next = 0;
-+              return;
-+      }
-+
-+      spin_lock(&skb_cb_store_lock);
-+
-+      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 = {
-@@ -398,6 +475,15 @@ static void skb_release_head_state(struc
-               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) {
-+              printk(KERN_WARNING "kfree_skb: skb->cb_next: %08x\n",
-+                      skb->cb_next);
-+              skb_restore_cb(skb);
-+      }
-+#endif
- #if defined(CONFIG_NF_CONNTRACK) || defined(CONFIG_NF_CONNTRACK_MODULE)
-       nf_conntrack_put(skb->nfct);
-       nf_conntrack_put_reasm(skb->nfct_reasm);
-@@ -535,6 +621,9 @@ static void __copy_skb_header(struct sk_
-       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;
-@@ -2779,6 +2868,13 @@ void __init skb_init(void)
-                                               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
- }
- /**
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -396,6 +396,18 @@ config NETFILTER_XT_TARGET_LED
-         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
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -46,6 +46,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CONNMAR
- 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
---- a/net/netfilter/nf_queue.c
-+++ b/net/netfilter/nf_queue.c
-@@ -20,6 +20,26 @@ static const struct nf_queue_handler *qu
- 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 @@ void nf_unregister_queue_handlers(const 
- }
- 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 @@ static void nf_queue_entry_release_refs(
-       /* 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 @@ static int __nf_queue(struct sk_buff *sk
- #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 @@ static int __nf_queue(struct sk_buff *sk
-               .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 @@ static int __nf_queue(struct sk_buff *sk
-       }
- #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) {
---- /dev/null
-+++ b/net/netfilter/xt_IMQ.c
-@@ -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/target/linux/generic-2.6/patches-2.6.31/180-netfilter_depends.patch b/target/linux/generic-2.6/patches-2.6.31/180-netfilter_depends.patch
deleted file mode 100644 (file)
index fc00d15..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -160,7 +160,6 @@ config NF_CONNTRACK_FTP
- config NF_CONNTRACK_H323
-       tristate "H.323 protocol support"
--      depends on (IPV6 || IPV6=n)
-       depends on NETFILTER_ADVANCED
-       help
-         H.323 is a VoIP signalling protocol from ITU-T. As one of the most
-@@ -505,7 +504,6 @@ config NETFILTER_XT_TARGET_SECMARK
- config NETFILTER_XT_TARGET_TCPMSS
-       tristate '"TCPMSS" target support'
--      depends on (IPV6 || IPV6=n)
-       default m if NETFILTER_ADVANCED=n
-       ---help---
-         This option adds a `TCPMSS' target, which allows you to alter the
diff --git a/target/linux/generic-2.6/patches-2.6.31/190-netfilter_rtsp.patch b/target/linux/generic-2.6/patches-2.6.31/190-netfilter_rtsp.patch
deleted file mode 100644 (file)
index 29e8208..0000000
+++ /dev/null
@@ -1,1366 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/nf_conntrack_rtsp.h
-@@ -0,0 +1,63 @@
-+/*
-+ * RTSP extension for IP connection tracking.
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.h
-+ *
-+ *      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.
-+ */
-+#ifndef _IP_CONNTRACK_RTSP_H
-+#define _IP_CONNTRACK_RTSP_H
-+
-+//#define IP_NF_RTSP_DEBUG 1
-+#define IP_NF_RTSP_VERSION "0.6.21"
-+
-+#ifdef __KERNEL__
-+/* port block types */
-+typedef enum {
-+    pb_single,  /* client_port=x */
-+    pb_range,   /* client_port=x-y */
-+    pb_discon   /* client_port=x/y (rtspbis) */
-+} portblock_t;
-+
-+/* We record seq number and length of rtsp headers here, all in host order. */
-+
-+/*
-+ * This structure is per expected connection.  It is a member of struct
-+ * ip_conntrack_expect.  The TCP SEQ for the conntrack expect is stored
-+ * there and we are expected to only store the length of the data which
-+ * needs replaced.  If a packet contains multiple RTSP messages, we create
-+ * one expected connection per message.
-+ *
-+ * We use these variables to mark the entire header block.  This may seem
-+ * like overkill, but the nature of RTSP requires it.  A header may appear
-+ * multiple times in a message.  We must treat two Transport headers the
-+ * same as one Transport header with two entries.
-+ */
-+struct ip_ct_rtsp_expect
-+{
-+    u_int32_t   len;        /* length of header block */
-+    portblock_t pbtype;     /* Type of port block that was requested */
-+    u_int16_t   loport;     /* Port that was requested, low or first */
-+    u_int16_t   hiport;     /* Port that was requested, high or second */
-+#if 0
-+    uint        method;     /* RTSP method */
-+    uint        cseq;       /* CSeq from request */
-+#endif
-+};
-+
-+extern unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,
-+                               struct ip_ct_rtsp_expect *prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+
-+extern void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+#define RTSP_PORT   554
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _IP_CONNTRACK_RTSP_H */
---- /dev/null
-+++ b/include/linux/netfilter_helpers.h
-@@ -0,0 +1,133 @@
-+/*
-+ * Helpers for netfiler modules.  This file provides implementations for basic
-+ * functions such as strncasecmp(), etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_STRNCASECMP        nf_strncasecmp()
-+ *   NF_NEED_STRTOU16           nf_strtou16()
-+ *   NF_NEED_STRTOU32           nf_strtou32()
-+ */
-+#ifndef _NETFILTER_HELPERS_H
-+#define _NETFILTER_HELPERS_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+#define iseol(c) ( (c) == '\r' || (c) == '\n' )
-+
-+/*
-+ * The standard strncasecmp()
-+ */
-+#ifdef NF_NEED_STRNCASECMP
-+static int
-+nf_strncasecmp(const char* s1, const char* s2, u_int32_t len)
-+{
-+    if (s1 == NULL || s2 == NULL)
-+    {
-+        if (s1 == NULL && s2 == NULL)
-+        {
-+            return 0;
-+        }
-+        return (s1 == NULL) ? -1 : 1;
-+    }
-+    while (len > 0 && tolower(*s1) == tolower(*s2))
-+    {
-+        len--;
-+        s1++;
-+        s2++;
-+    }
-+    return ( (len == 0) ? 0 : (tolower(*s1) - tolower(*s2)) );
-+}
-+#endif /* NF_NEED_STRNCASECMP */
-+
-+/*
-+ * Parse a string containing a 16-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU16
-+static int
-+nf_strtou16(const char* pbuf, u_int16_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (isdigit(pbuf[n]))
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU16 */
-+
-+/*
-+ * Parse a string containing a 32-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU32
-+static int
-+nf_strtou32(const char* pbuf, u_int32_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (pbuf[n] >= '0' && pbuf[n] <= '9')
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU32 */
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.
-+ */
-+#ifdef NF_NEED_NEXTLINE
-+static int
-+nf_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    while (p[off] != '\n')
-+    {
-+        if (len-off <= 1)
-+        {
-+            return 0;
-+        }
-+
-+        physlen++;
-+        off++;
-+    }
-+
-+    /* if we saw a crlf, physlen needs adjusted */
-+    if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+    {
-+        physlen--;
-+    }
-+
-+    /* advance past the newline */
-+    off++;
-+
-+    *plineoff = *poff;
-+    *plinelen = physlen;
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_HELPERS_H */
---- /dev/null
-+++ b/include/linux/netfilter_mime.h
-@@ -0,0 +1,89 @@
-+/*
-+ * MIME functions for netfilter modules.  This file provides implementations
-+ * for basic MIME parsing.  MIME headers are used in many protocols, such as
-+ * HTTP, RTSP, SIP, etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_MIME_NEXTLINE      nf_mime_nextline()
-+ */
-+#ifndef _NETFILTER_MIME_H
-+#define _NETFILTER_MIME_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.  If the current line is empty, *plinelen will be set to zero.  If
-+ * not, it will be set to the actual line length (including CRLF).
-+ *
-+ * 'line' in this context means logical line (includes LWS continuations).
-+ * Returns 1 on success, 0 on failure.
-+ */
-+#ifdef NF_NEED_MIME_NEXTLINE
-+static int
-+nf_mime_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+    int     is_first_line = 1;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    do
-+    {
-+        while (p[off] != '\n')
-+        {
-+            if (len-off <= 1)
-+            {
-+                return 0;
-+            }
-+
-+            physlen++;
-+            off++;
-+        }
-+
-+        /* if we saw a crlf, physlen needs adjusted */
-+        if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+        {
-+            physlen--;
-+        }
-+
-+        /* advance past the newline */
-+        off++;
-+
-+        /* check for an empty line */
-+        if (physlen == 0)
-+        {
-+            break;
-+        }
-+
-+        /* check for colon on the first physical line */
-+        if (is_first_line)
-+        {
-+            is_first_line = 0;
-+            if (memchr(p+(*poff), ':', physlen) == NULL)
-+            {
-+                return 0;
-+            }
-+        }
-+    }
-+    while (p[off] == ' ' || p[off] == '\t');
-+
-+    *plineoff = *poff;
-+    *plinelen = (physlen == 0) ? 0 : (off - *poff);
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_MIME_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_MIME_H */
---- a/net/ipv4/netfilter/Makefile
-+++ b/net/ipv4/netfilter/Makefile
-@@ -26,6 +26,7 @@ obj-$(CONFIG_NF_NAT_AMANDA) += nf_nat_am
- obj-$(CONFIG_NF_NAT_FTP) += nf_nat_ftp.o
- obj-$(CONFIG_NF_NAT_H323) += nf_nat_h323.o
- obj-$(CONFIG_NF_NAT_IRC) += nf_nat_irc.o
-+obj-$(CONFIG_NF_NAT_RTSP) += nf_nat_rtsp.o
- obj-$(CONFIG_NF_NAT_PPTP) += nf_nat_pptp.o
- obj-$(CONFIG_NF_NAT_SIP) += nf_nat_sip.o
- obj-$(CONFIG_NF_NAT_SNMP_BASIC) += nf_nat_snmp_basic.o
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -267,6 +267,16 @@ config NF_CONNTRACK_TFTP
-         To compile it as a module, choose M here.  If unsure, say N.
-+config NF_CONNTRACK_RTSP
-+      tristate "RTSP protocol support"
-+      depends on NF_CONNTRACK
-+      help
-+              Support the RTSP protocol.  This allows UDP transports to be setup
-+              properly, including RTP and RDT.
-+
-+              If you want to compile it as a module, say 'M' here and read
-+              Documentation/modules.txt.  If unsure, say 'Y'.
-+
- config NF_CT_NETLINK
-       tristate 'Connection tracking netlink interface'
-       select NETFILTER_NETLINK
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -33,6 +33,7 @@ obj-$(CONFIG_NF_CONNTRACK_PPTP) += nf_co
- obj-$(CONFIG_NF_CONNTRACK_SANE) += nf_conntrack_sane.o
- obj-$(CONFIG_NF_CONNTRACK_SIP) += nf_conntrack_sip.o
- obj-$(CONFIG_NF_CONNTRACK_TFTP) += nf_conntrack_tftp.o
-+obj-$(CONFIG_NF_CONNTRACK_RTSP) += nf_conntrack_rtsp.o
- # transparent proxy support
- obj-$(CONFIG_NETFILTER_TPROXY) += nf_tproxy_core.o
---- a/net/ipv4/netfilter/Kconfig
-+++ b/net/ipv4/netfilter/Kconfig
-@@ -257,6 +257,11 @@ config NF_NAT_IRC
-       depends on NF_CONNTRACK && NF_NAT
-       default NF_NAT && NF_CONNTRACK_IRC
-+config NF_NAT_RTSP
-+      tristate
-+      depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
-+      default NF_NAT && NF_CONNTRACK_RTSP
-+
- config NF_NAT_TFTP
-       tristate
-       depends on NF_CONNTRACK && NF_NAT
---- /dev/null
-+++ b/net/netfilter/nf_conntrack_rtsp.c
-@@ -0,0 +1,517 @@
-+/*
-+ * RTSP extension for IP connection tracking
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.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.
-+ *
-+ * Module load syntax:
-+ *   insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                              max_outstanding=n setup_timeout=secs
-+ *
-+ * If no ports are specified, the default will be port 554.
-+ *
-+ * With max_outstanding you can define the maximum number of not yet
-+ * answered SETUP requests per RTSP session (default 8).
-+ * With setup_timeout you can specify how long the system waits for
-+ * an expected data channel (default 300 seconds).
-+ *
-+ * 2005-02-13: Harald Welte <laforge at netfilter.org>
-+ *    - port to 2.6
-+ *    - update to recent post-2.6.11 api changes
-+ * 2006-09-14: Steven Van Acker <deepstar at singularity.be>
-+ *      - removed calls to NAT code from conntrack helper: NAT no longer needed to use rtsp-conntrack
-+ * 2007-04-18: Michael Guntsche <mike at it-loops.com>
-+ *                    - Port to new NF API
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/netfilter.h>
-+#include <linux/ip.h>
-+#include <linux/inet.h>
-+#include <net/tcp.h>
-+
-+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+#include <net/netfilter/nf_conntrack_helper.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#define NF_NEED_STRTOU32
-+#define NF_NEED_NEXTLINE
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#include <linux/ctype.h>
-+#define MAX_SIMUL_SETUP 8 /* XXX: use max_outstanding */
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS 8
-+static int ports[MAX_PORTS];
-+static int num_ports = 0;
-+static int max_outstanding = 8;
-+static unsigned int setup_timeout = 300;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP connection tracking module");
-+MODULE_LICENSE("GPL");
-+module_param_array(ports, int, &num_ports, 0400);
-+MODULE_PARM_DESC(ports, "port numbers of RTSP servers");
-+module_param(max_outstanding, int, 0400);
-+MODULE_PARM_DESC(max_outstanding, "max number of outstanding SETUP requests per RTSP session");
-+module_param(setup_timeout, int, 0400);
-+MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels");
-+
-+static char *rtsp_buffer;
-+static DEFINE_SPINLOCK(rtsp_buffer_lock);
-+
-+unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,struct ip_ct_rtsp_expect* prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+EXPORT_SYMBOL_GPL(nf_nat_rtsp_hook);
-+
-+/*
-+ * Max mappings we will allow for one RTSP connection (for RTP, the number
-+ * of allocated ports is twice this value).  Note that SMIL burns a lot of
-+ * ports so keep this reasonably high.  If this is too low, you will see a
-+ * lot of "no free client map entries" messages.
-+ */
-+#define MAX_PORT_MAPS 16
-+
-+/*** default port list was here in the masq code: 554, 3030, 4040 ***/
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*
-+ * Parse an RTSP packet.
-+ *
-+ * Returns zero if parsing failed.
-+ *
-+ * Parameters:
-+ *  IN      ptcp        tcp data pointer
-+ *  IN      tcplen      tcp data len
-+ *  IN/OUT  ptcpoff     points to current tcp offset
-+ *  OUT     phdrsoff    set to offset of rtsp headers
-+ *  OUT     phdrslen    set to length of rtsp headers
-+ *  OUT     pcseqoff    set to offset of CSeq header
-+ *  OUT     pcseqlen    set to length of CSeq header
-+ */
-+static int
-+rtsp_parse_message(char* ptcp, uint tcplen, uint* ptcpoff,
-+                   uint* phdrsoff, uint* phdrslen,
-+                   uint* pcseqoff, uint* pcseqlen,
-+                   uint* transoff, uint* translen)
-+{
-+      uint    entitylen = 0;
-+      uint    lineoff;
-+      uint    linelen;
-+
-+      if (!nf_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen))
-+              return 0;
-+
-+      *phdrsoff = *ptcpoff;
-+      while (nf_mime_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen)) {
-+              if (linelen == 0) {
-+                      if (entitylen > 0)
-+                              *ptcpoff += min(entitylen, tcplen - *ptcpoff);
-+                      break;
-+              }
-+              if (lineoff+linelen > tcplen) {
-+                      INFOP("!! overrun !!\n");
-+                      break;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "CSeq:", 5) == 0) {
-+                      *pcseqoff = lineoff;
-+                      *pcseqlen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0) {
-+                      *transoff = lineoff;
-+                      *translen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Content-Length:", 15) == 0) {
-+                      uint off = lineoff+15;
-+                      SKIP_WSPACE(ptcp+lineoff, linelen, off);
-+                      nf_strtou32(ptcp+off, &entitylen);
-+              }
-+      }
-+      *phdrslen = (*ptcpoff) - (*phdrsoff);
-+
-+      return 1;
-+}
-+
-+/*
-+ * Find lo/hi client ports (if any) in transport header
-+ * In:
-+ *   ptcp, tcplen = packet
-+ *   tranoff, tranlen = buffer to search
-+ *
-+ * Out:
-+ *   pport_lo, pport_hi = lo/hi ports (host endian)
-+ *
-+ * Returns nonzero if any client ports found
-+ *
-+ * Note: it is valid (and expected) for the client to request multiple
-+ * transports, so we need to parse the entire line.
-+ */
-+static int
-+rtsp_parse_transport(char* ptran, uint tranlen,
-+                     struct ip_ct_rtsp_expect* prtspexp)
-+{
-+      int     rc = 0;
-+      uint    off = 0;
-+
-+      if (tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+          nf_strncasecmp(ptran, "Transport:", 10) != 0) {
-+              INFOP("sanity check failed\n");
-+              return 0;
-+      }
-+
-+      DEBUGP("tran='%.*s'\n", (int)tranlen, ptran);
-+      off += 10;
-+      SKIP_WSPACE(ptran, tranlen, off);
-+
-+      /* Transport: tran;field;field=val,tran;field;field=val,... */
-+      while (off < tranlen) {
-+              const char* pparamend;
-+              uint        nextparamoff;
-+
-+              pparamend = memchr(ptran+off, ',', tranlen-off);
-+              pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+              nextparamoff = pparamend-ptran;
-+
-+              while (off < nextparamoff) {
-+                      const char* pfieldend;
-+                      uint        nextfieldoff;
-+
-+                      pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+                      nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+                      if (strncmp(ptran+off, "client_port=", 12) == 0) {
-+                              u_int16_t   port;
-+                              uint        numlen;
-+
-+                              off += 12;
-+                              numlen = nf_strtou16(ptran+off, &port);
-+                              off += numlen;
-+                              if (prtspexp->loport != 0 && prtspexp->loport != port)
-+                                      DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                              else {
-+                                      DEBUGP("lo port found : %hu\n", port);
-+                                      prtspexp->loport = prtspexp->hiport = port;
-+                                      if (ptran[off] == '-') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_range;
-+                                              prtspexp->hiport = port;
-+
-+                                              // If we have a range, assume rtp:
-+                                              // loport must be even, hiport must be loport+1
-+                                              if ((prtspexp->loport & 0x0001) != 0 ||
-+                                                  prtspexp->hiport != prtspexp->loport+1) {
-+                                                      DEBUGP("incorrect range: %hu-%hu, correcting\n",
-+                                                             prtspexp->loport, prtspexp->hiport);
-+                                                      prtspexp->loport &= 0xfffe;
-+                                                      prtspexp->hiport = prtspexp->loport+1;
-+                                              }
-+                                      } else if (ptran[off] == '/') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_discon;
-+                                              prtspexp->hiport = port;
-+                                      }
-+                                      rc = 1;
-+                              }
-+                      }
-+
-+                      /*
-+                       * Note we don't look for the destination parameter here.
-+                       * If we are using NAT, the NAT module will handle it.  If not,
-+                       * and the client is sending packets elsewhere, the expectation
-+                       * will quietly time out.
-+                       */
-+
-+                      off = nextfieldoff;
-+              }
-+
-+              off = nextparamoff;
-+      }
-+
-+      return rc;
-+}
-+
-+void expected(struct nf_conn *ct, struct nf_conntrack_expect *exp)
-+{
-+    if(nf_nat_rtsp_hook_expectfn) {
-+        nf_nat_rtsp_hook_expectfn(ct,exp);
-+    }
-+}
-+
-+/*** conntrack functions ***/
-+
-+/* outbound packet: client->server */
-+
-+static inline int
-+help_out(struct sk_buff *skb, unsigned char *rb_ptr, unsigned int datalen,
-+                struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct ip_ct_rtsp_expect expinfo;
-+
-+      int dir = CTINFO2DIR(ctinfo);   /* = IP_CT_DIR_ORIGINAL */
-+      //struct  tcphdr* tcph = (void*)iph + iph->ihl * 4;
-+      //uint    tcplen = pktlen - iph->ihl * 4;
-+      char*   pdata = rb_ptr;
-+      //uint    datalen = tcplen - tcph->doff * 4;
-+      uint    dataoff = 0;
-+      int ret = NF_ACCEPT;
-+
-+      struct nf_conntrack_expect *exp;
-+
-+      __be16 be_loport;
-+
-+      memset(&expinfo, 0, sizeof(expinfo));
-+
-+      while (dataoff < datalen) {
-+              uint    cmdoff = dataoff;
-+              uint    hdrsoff = 0;
-+              uint    hdrslen = 0;
-+              uint    cseqoff = 0;
-+              uint    cseqlen = 0;
-+              uint    transoff = 0;
-+              uint    translen = 0;
-+              uint    off;
-+
-+              if (!rtsp_parse_message(pdata, datalen, &dataoff,
-+                                      &hdrsoff, &hdrslen,
-+                                      &cseqoff, &cseqlen,
-+                                      &transoff, &translen))
-+                      break;      /* not a valid message */
-+
-+              if (strncmp(pdata+cmdoff, "SETUP ", 6) != 0)
-+                      continue;   /* not a SETUP message */
-+              DEBUGP("found a setup message\n");
-+
-+              off = 0;
-+              if(translen) {
-+                      rtsp_parse_transport(pdata+transoff, translen, &expinfo);
-+              }
-+
-+              if (expinfo.loport == 0) {
-+                      DEBUGP("no udp transports found\n");
-+                      continue;   /* no udp transports found */
-+              }
-+
-+              DEBUGP("udp transport found, ports=(%d,%hu,%hu)\n",
-+                     (int)expinfo.pbtype, expinfo.loport, expinfo.hiport);
-+
-+              exp = nf_ct_expect_alloc(ct);
-+              if (!exp) {
-+                      ret = NF_DROP;
-+                      goto out;
-+              }
-+
-+              be_loport = htons(expinfo.loport);
-+
-+              nf_ct_expect_init(exp, NF_CT_EXPECT_CLASS_DEFAULT,
-+                      ct->tuplehash[!dir].tuple.src.l3num,
-+                      &ct->tuplehash[!dir].tuple.src.u3, &ct->tuplehash[!dir].tuple.dst.u3,
-+                      IPPROTO_UDP, NULL, &be_loport);
-+
-+              exp->master = ct;
-+
-+              exp->expectfn = expected;
-+              exp->flags = 0;
-+
-+              if (expinfo.pbtype == pb_range) {
-+                      DEBUGP("Changing expectation mask to handle multiple ports\n");
-+                      exp->mask.src.u.udp.port  = 0xfffe;
-+              }
-+
-+              DEBUGP("expect_related %u.%u.%u.%u:%u-%u.%u.%u.%u:%u\n",
-+                     NIPQUAD(exp->tuple.src.u3.ip),
-+                     ntohs(exp->tuple.src.u.udp.port),
-+                     NIPQUAD(exp->tuple.dst.u3.ip),
-+                     ntohs(exp->tuple.dst.u.udp.port));
-+
-+              if (nf_nat_rtsp_hook)
-+                      /* pass the request off to the nat helper */
-+                      ret = nf_nat_rtsp_hook(skb, ctinfo, hdrsoff, hdrslen, &expinfo, exp);
-+              else if (nf_ct_expect_related(exp) != 0) {
-+                      INFOP("nf_ct_expect_related failed\n");
-+                      ret  = NF_DROP;
-+              }
-+              nf_ct_expect_put(exp);
-+              goto out;
-+      }
-+out:
-+
-+      return ret;
-+}
-+
-+
-+static inline int
-+help_in(struct sk_buff *skb, size_t pktlen,
-+ struct nf_conn* ct, enum ip_conntrack_info ctinfo)
-+{
-+ return NF_ACCEPT;
-+}
-+
-+static int help(struct sk_buff *skb, unsigned int protoff,
-+              struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct tcphdr _tcph, *th;
-+      unsigned int dataoff, datalen;
-+      char *rb_ptr;
-+      int ret = NF_DROP;
-+
-+      /* Until there's been traffic both ways, don't look in packets. */
-+      if (ctinfo != IP_CT_ESTABLISHED &&
-+          ctinfo != IP_CT_ESTABLISHED + IP_CT_IS_REPLY) {
-+              DEBUGP("conntrackinfo = %u\n", ctinfo);
-+              return NF_ACCEPT;
-+      }
-+
-+      /* Not whole TCP header? */
-+      th = skb_header_pointer(skb, protoff, sizeof(_tcph), &_tcph);
-+
-+      if (!th)
-+              return NF_ACCEPT;
-+
-+      /* No data ? */
-+      dataoff = protoff + th->doff*4;
-+      datalen = skb->len - dataoff;
-+      if (dataoff >= skb->len)
-+              return NF_ACCEPT;
-+
-+      spin_lock_bh(&rtsp_buffer_lock);
-+      rb_ptr = skb_header_pointer(skb, dataoff,
-+                                  skb->len - dataoff, rtsp_buffer);
-+      BUG_ON(rb_ptr == NULL);
-+
-+#if 0
-+      /* Checksum invalid?  Ignore. */
-+      /* FIXME: Source route IP option packets --RR */
-+      if (tcp_v4_check(tcph, tcplen, iph->saddr, iph->daddr,
-+                       csum_partial((char*)tcph, tcplen, 0)))
-+      {
-+              DEBUGP("bad csum: %p %u %u.%u.%u.%u %u.%u.%u.%u\n",
-+                     tcph, tcplen, NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));
-+              return NF_ACCEPT;
-+      }
-+#endif
-+
-+      switch (CTINFO2DIR(ctinfo)) {
-+      case IP_CT_DIR_ORIGINAL:
-+              ret = help_out(skb, rb_ptr, datalen, ct, ctinfo);
-+              break;
-+      case IP_CT_DIR_REPLY:
-+              DEBUGP("IP_CT_DIR_REPLY\n");
-+              /* inbound packet: server->client */
-+              ret = NF_ACCEPT;
-+              break;
-+      }
-+
-+      spin_unlock_bh(&rtsp_buffer_lock);
-+
-+      return ret;
-+}
-+
-+static struct nf_conntrack_helper rtsp_helpers[MAX_PORTS];
-+static char rtsp_names[MAX_PORTS][10];
-+static struct nf_conntrack_expect_policy rtsp_expect_policy;
-+
-+/* This function is intentionally _NOT_ defined as __exit */
-+static void
-+fini(void)
-+{
-+      int i;
-+      for (i = 0; i < num_ports; i++) {
-+              DEBUGP("unregistering port %d\n", ports[i]);
-+              nf_conntrack_helper_unregister(&rtsp_helpers[i]);
-+      }
-+      kfree(rtsp_buffer);
-+}
-+
-+static int __init
-+init(void)
-+{
-+      int i, ret;
-+      struct nf_conntrack_helper *hlpr;
-+      char *tmpname;
-+
-+      printk("nf_conntrack_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      if (max_outstanding < 1) {
-+              printk("nf_conntrack_rtsp: max_outstanding must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+      if (setup_timeout < 0) {
-+              printk("nf_conntrack_rtsp: setup_timeout must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+
-+      rtsp_expect_policy.max_expected = max_outstanding;
-+      rtsp_expect_policy.timeout = setup_timeout;
-+
-+      rtsp_buffer = kmalloc(65536, GFP_KERNEL);
-+      if (!rtsp_buffer)
-+              return -ENOMEM;
-+
-+      /* If no port given, default to standard rtsp port */
-+      if (ports[0] == 0) {
-+              ports[0] = RTSP_PORT;
-+      }
-+
-+      for (i = 0; (i < MAX_PORTS) && ports[i]; i++) {
-+              hlpr = &rtsp_helpers[i];
-+              memset(hlpr, 0, sizeof(struct nf_conntrack_helper));
-+              hlpr->tuple.src.u.tcp.port = htons(ports[i]);
-+              hlpr->tuple.dst.protonum = IPPROTO_TCP;
-+              hlpr->expect_policy = &rtsp_expect_policy;
-+              hlpr->me = THIS_MODULE;
-+              hlpr->help = help;
-+
-+              tmpname = &rtsp_names[i][0];
-+              if (ports[i] == RTSP_PORT) {
-+                      sprintf(tmpname, "rtsp");
-+              } else {
-+                      sprintf(tmpname, "rtsp-%d", i);
-+              }
-+              hlpr->name = tmpname;
-+
-+              DEBUGP("port #%d: %d\n", i, ports[i]);
-+
-+              ret = nf_conntrack_helper_register(hlpr);
-+
-+              if (ret) {
-+                      printk("nf_conntrack_rtsp: ERROR registering port %d\n", ports[i]);
-+                      fini();
-+                      return -EBUSY;
-+              }
-+              num_ports++;
-+      }
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+EXPORT_SYMBOL(nf_nat_rtsp_hook_expectfn);
-+
---- /dev/null
-+++ b/net/ipv4/netfilter/nf_nat_rtsp.c
-@@ -0,0 +1,496 @@
-+/*
-+ * RTSP extension for TCP NAT alteration
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_nat_irc.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.
-+ *
-+ * Module load syntax:
-+ *      insmod nf_nat_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                           stunaddr=<address>
-+ *                           destaction=[auto|strip|none]
-+ *
-+ * If no ports are specified, the default will be port 554 only.
-+ *
-+ * stunaddr specifies the address used to detect that a client is using STUN.
-+ * If this address is seen in the destination parameter, it is assumed that
-+ * the client has already punched a UDP hole in the firewall, so we don't
-+ * mangle the client_port.  If none is specified, it is autodetected.  It
-+ * only needs to be set if you have multiple levels of NAT.  It should be
-+ * set to the external address that the STUN clients detect.  Note that in
-+ * this case, it will not be possible for clients to use UDP with servers
-+ * between the NATs.
-+ *
-+ * If no destaction is specified, auto is used.
-+ *   destaction=auto:  strip destination parameter if it is not stunaddr.
-+ *   destaction=strip: always strip destination parameter (not recommended).
-+ *   destaction=none:  do not touch destination parameter (not recommended).
-+ */
-+
-+#include <linux/module.h>
-+#include <net/tcp.h>
-+#include <net/netfilter/nf_nat_helper.h>
-+#include <net/netfilter/nf_nat_rule.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+
-+#include <linux/inet.h>
-+#include <linux/ctype.h>
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS       8
-+#define DSTACT_AUTO     0
-+#define DSTACT_STRIP    1
-+#define DSTACT_NONE     2
-+
-+static char*    stunaddr = NULL;
-+static char*    destaction = NULL;
-+
-+static u_int32_t extip = 0;
-+static int       dstact = 0;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP network address translation module");
-+MODULE_LICENSE("GPL");
-+module_param(stunaddr, charp, 0644);
-+MODULE_PARM_DESC(stunaddr, "Address for detecting STUN");
-+module_param(destaction, charp, 0644);
-+MODULE_PARM_DESC(destaction, "Action for destination parameter (auto/strip/none)");
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*** helper functions ***/
-+
-+static void
-+get_skb_tcpdata(struct sk_buff* skb, char** pptcpdata, uint* ptcpdatalen)
-+{
-+    struct iphdr*   iph  = ip_hdr(skb);
-+    struct tcphdr*  tcph = (void *)iph + ip_hdrlen(skb);
-+
-+    *pptcpdata = (char*)tcph +  tcph->doff*4;
-+    *ptcpdatalen = ((char*)skb_transport_header(skb) + skb->len) - *pptcpdata;
-+}
-+
-+/*** nat functions ***/
-+
-+/*
-+ * Mangle the "Transport:" header:
-+ *   - Replace all occurences of "client_port=<spec>"
-+ *   - Handle destination parameter
-+ *
-+ * In:
-+ *   ct, ctinfo = conntrack context
-+ *   skb        = packet
-+ *   tranoff    = Transport header offset from TCP data
-+ *   tranlen    = Transport header length (incl. CRLF)
-+ *   rport_lo   = replacement low  port (host endian)
-+ *   rport_hi   = replacement high port (host endian)
-+ *
-+ * Returns packet size difference.
-+ *
-+ * Assumes that a complete transport header is present, ending with CR or LF
-+ */
-+static int
-+rtsp_mangle_tran(enum ip_conntrack_info ctinfo,
-+                 struct nf_conntrack_expect* exp,
-+                                                               struct ip_ct_rtsp_expect* prtspexp,
-+                 struct sk_buff* skb, uint tranoff, uint tranlen)
-+{
-+    char*       ptcp;
-+    uint        tcplen;
-+    char*       ptran;
-+    char        rbuf1[16];      /* Replacement buffer (one port) */
-+    uint        rbuf1len;       /* Replacement len (one port) */
-+    char        rbufa[16];      /* Replacement buffer (all ports) */
-+    uint        rbufalen;       /* Replacement len (all ports) */
-+    u_int32_t   newip;
-+    u_int16_t   loport, hiport;
-+    uint        off = 0;
-+    uint        diff;           /* Number of bytes we removed */
-+
-+    struct nf_conn *ct = exp->master;
-+    struct nf_conntrack_tuple *t;
-+
-+    char    szextaddr[15+1];
-+    uint    extaddrlen;
-+    int     is_stun;
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    ptran = ptcp+tranoff;
-+
-+    if (tranoff+tranlen > tcplen || tcplen-tranoff < tranlen ||
-+        tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+        nf_strncasecmp(ptran, "Transport:", 10) != 0)
-+    {
-+        INFOP("sanity check failed\n");
-+        return 0;
-+    }
-+    off += 10;
-+    SKIP_WSPACE(ptcp+tranoff, tranlen, off);
-+
-+    newip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+    t = &exp->tuple;
-+    t->dst.u3.ip = newip;
-+
-+    extaddrlen = extip ? sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(extip))
-+                       : sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(newip));
-+    DEBUGP("stunaddr=%s (%s)\n", szextaddr, (extip?"forced":"auto"));
-+
-+    rbuf1len = rbufalen = 0;
-+    switch (prtspexp->pbtype)
-+    {
-+    case pb_single:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu\n", loport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu", loport);
-+        }
-+        break;
-+    case pb_range:
-+        for (loport = prtspexp->loport; loport != 0; loport += 2) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                hiport = loport + ~exp->mask.src.u.udp.port;
-+                DEBUGP("using ports %hu-%hu\n", loport, hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu-%hu", loport, loport+1);
-+        }
-+        break;
-+    case pb_discon:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (1 of 2)\n", loport);
-+                break;
-+            }
-+        }
-+        for (hiport = prtspexp->hiport; hiport != 0; hiport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(hiport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (2 of 2)\n", hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0 && hiport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            if (hiport == loport+1)
-+            {
-+                rbufalen = sprintf(rbufa, "%hu-%hu", loport, hiport);
-+            }
-+            else
-+            {
-+                rbufalen = sprintf(rbufa, "%hu/%hu", loport, hiport);
-+            }
-+        }
-+        break;
-+    }
-+
-+    if (rbuf1len == 0)
-+    {
-+        return 0;   /* cannot get replacement port(s) */
-+    }
-+
-+    /* Transport: tran;field;field=val,tran;field;field=val,... */
-+    while (off < tranlen)
-+    {
-+        uint        saveoff;
-+        const char* pparamend;
-+        uint        nextparamoff;
-+
-+        pparamend = memchr(ptran+off, ',', tranlen-off);
-+        pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+        nextparamoff = pparamend-ptcp;
-+
-+        /*
-+         * We pass over each param twice.  On the first pass, we look for a
-+         * destination= field.  It is handled by the security policy.  If it
-+         * is present, allowed, and equal to our external address, we assume
-+         * that STUN is being used and we leave the client_port= field alone.
-+         */
-+        is_stun = 0;
-+        saveoff = off;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (dstact != DSTACT_NONE && strncmp(ptran+off, "destination=", 12) == 0)
-+            {
-+                if (strncmp(ptran+off+12, szextaddr, extaddrlen) == 0)
-+                {
-+                    is_stun = 1;
-+                }
-+                if (dstact == DSTACT_STRIP || (dstact == DSTACT_AUTO && !is_stun))
-+                {
-+                    diff = nextfieldoff-off;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                                         off, diff, NULL, 0))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+        if (is_stun)
-+        {
-+            continue;
-+        }
-+        off = saveoff;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (strncmp(ptran+off, "client_port=", 12) == 0)
-+            {
-+                u_int16_t   port;
-+                uint        numlen;
-+                uint        origoff;
-+                uint        origlen;
-+                char*       rbuf    = rbuf1;
-+                uint        rbuflen = rbuf1len;
-+
-+                off += 12;
-+                origoff = (ptran-ptcp)+off;
-+                origlen = 0;
-+                numlen = nf_strtou16(ptran+off, &port);
-+                off += numlen;
-+                origlen += numlen;
-+                if (port != prtspexp->loport)
-+                {
-+                    DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                }
-+                else
-+                {
-+                    if (ptran[off] == '-' || ptran[off] == '/')
-+                    {
-+                        off++;
-+                        origlen++;
-+                        numlen = nf_strtou16(ptran+off, &port);
-+                        off += numlen;
-+                        origlen += numlen;
-+                        rbuf = rbufa;
-+                        rbuflen = rbufalen;
-+                    }
-+
-+                    /*
-+                     * note we cannot just memcpy() if the sizes are the same.
-+                     * the mangle function does skb resizing, checks for a
-+                     * cloned skb, and updates the checksums.
-+                     *
-+                     * parameter 4 below is offset from start of tcp data.
-+                     */
-+                    diff = origlen-rbuflen;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                              origoff, origlen, rbuf, rbuflen))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+
-+        off = nextparamoff;
-+    }
-+
-+    return 1;
-+}
-+
-+static uint
-+help_out(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+       unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+       struct nf_conntrack_expect* exp)
-+{
-+    char*   ptcp;
-+    uint    tcplen;
-+    uint    hdrsoff;
-+    uint    hdrslen;
-+    uint    lineoff;
-+    uint    linelen;
-+    uint    off;
-+
-+    //struct iphdr* iph = (struct iphdr*)skb->nh.iph;
-+    //struct tcphdr* tcph = (struct tcphdr*)((void*)iph + iph->ihl*4);
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    hdrsoff = matchoff;//exp->seq - ntohl(tcph->seq);
-+    hdrslen = matchlen;
-+    off = hdrsoff;
-+    DEBUGP("NAT rtsp help_out\n");
-+
-+    while (nf_mime_nextline(ptcp, hdrsoff+hdrslen, &off, &lineoff, &linelen))
-+    {
-+        if (linelen == 0)
-+        {
-+            break;
-+        }
-+        if (off > hdrsoff+hdrslen)
-+        {
-+            INFOP("!! overrun !!");
-+            break;
-+        }
-+        DEBUGP("hdr: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+
-+        if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0)
-+        {
-+            uint oldtcplen = tcplen;
-+          DEBUGP("hdr: Transport\n");
-+            if (!rtsp_mangle_tran(ctinfo, exp, prtspexp, skb, lineoff, linelen))
-+            {
-+              DEBUGP("hdr: Transport mangle failed");
-+                break;
-+            }
-+            get_skb_tcpdata(skb, &ptcp, &tcplen);
-+            hdrslen -= (oldtcplen-tcplen);
-+            off -= (oldtcplen-tcplen);
-+            lineoff -= (oldtcplen-tcplen);
-+            linelen -= (oldtcplen-tcplen);
-+            DEBUGP("rep: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+        }
-+    }
-+
-+    return NF_ACCEPT;
-+}
-+
-+static unsigned int
-+help(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+     unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+     struct nf_conntrack_expect* exp)
-+{
-+    int dir = CTINFO2DIR(ctinfo);
-+    int rc = NF_ACCEPT;
-+
-+    switch (dir)
-+    {
-+    case IP_CT_DIR_ORIGINAL:
-+        rc = help_out(skb, ctinfo, matchoff, matchlen, prtspexp, exp);
-+        break;
-+    case IP_CT_DIR_REPLY:
-+      DEBUGP("unmangle ! %u\n", ctinfo);
-+      /* XXX: unmangle */
-+      rc = NF_ACCEPT;
-+        break;
-+    }
-+    //UNLOCK_BH(&ip_rtsp_lock);
-+
-+    return rc;
-+}
-+
-+static void expected(struct nf_conn* ct, struct nf_conntrack_expect *exp)
-+{
-+    struct nf_nat_multi_range_compat mr;
-+    u_int32_t newdstip, newsrcip, newip;
-+
-+    struct nf_conn *master = ct->master;
-+
-+    newdstip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    newsrcip = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    //FIXME (how to port that ?)
-+    //code from 2.4 : newip = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC) ? newsrcip : newdstip;
-+    newip = newdstip;
-+
-+    DEBUGP("newsrcip=%u.%u.%u.%u, newdstip=%u.%u.%u.%u, newip=%u.%u.%u.%u\n",
-+           NIPQUAD(newsrcip), NIPQUAD(newdstip), NIPQUAD(newip));
-+
-+    mr.rangesize = 1;
-+    // We don't want to manip the per-protocol, just the IPs.
-+    mr.range[0].flags = IP_NAT_RANGE_MAP_IPS;
-+    mr.range[0].min_ip = mr.range[0].max_ip = newip;
-+
-+    nf_nat_setup_info(ct, &mr.range[0], IP_NAT_MANIP_DST);
-+}
-+
-+
-+static void __exit fini(void)
-+{
-+      nf_nat_rtsp_hook = NULL;
-+        nf_nat_rtsp_hook_expectfn = NULL;
-+      synchronize_net();
-+}
-+
-+static int __init init(void)
-+{
-+      printk("nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      BUG_ON(nf_nat_rtsp_hook);
-+      nf_nat_rtsp_hook = help;
-+        nf_nat_rtsp_hook_expectfn = &expected;
-+
-+      if (stunaddr != NULL)
-+              extip = in_aton(stunaddr);
-+
-+      if (destaction != NULL) {
-+              if (strcmp(destaction, "auto") == 0)
-+                      dstact = DSTACT_AUTO;
-+
-+              if (strcmp(destaction, "strip") == 0)
-+                      dstact = DSTACT_STRIP;
-+
-+              if (strcmp(destaction, "none") == 0)
-+                      dstact = DSTACT_NONE;
-+      }
-+
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
diff --git a/target/linux/generic-2.6/patches-2.6.31/200-sched_esfq.patch b/target/linux/generic-2.6/patches-2.6.31/200-sched_esfq.patch
deleted file mode 100644 (file)
index f3636e6..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
---- a/include/linux/pkt_sched.h
-+++ b/include/linux/pkt_sched.h
-@@ -182,8 +182,37 @@ struct tc_sfq_xstats
-  *
-  *    The only reason for this is efficiency, it is possible
-  *    to change these parameters in compile time.
-+ *
-+ *    If you need to play with these values, use esfq instead.
-  */
-+/* ESFQ section */
-+
-+enum
-+{
-+        /* traditional */
-+      TCA_SFQ_HASH_CLASSIC,
-+      TCA_SFQ_HASH_DST,
-+      TCA_SFQ_HASH_SRC,
-+      TCA_SFQ_HASH_FWMARK,
-+      /* conntrack */
-+      TCA_SFQ_HASH_CTORIGDST,
-+      TCA_SFQ_HASH_CTORIGSRC,
-+      TCA_SFQ_HASH_CTREPLDST,
-+      TCA_SFQ_HASH_CTREPLSRC,
-+      TCA_SFQ_HASH_CTNATCHG,
-+};
-+
-+struct tc_esfq_qopt
-+{
-+      unsigned        quantum;        /* Bytes per round allocated to flow */
-+      int             perturb_period; /* Period of hash perturbation */
-+      __u32           limit;          /* Maximal packets in queue */
-+      unsigned        divisor;        /* Hash divisor  */
-+      unsigned        flows;          /* Maximal number of flows  */
-+      unsigned        hash_kind;      /* Hash function to use for flow identification */
-+};
-+
- /* RED section */
- enum
---- a/net/sched/Kconfig
-+++ b/net/sched/Kconfig
-@@ -137,6 +137,37 @@ config NET_SCH_SFQ
-         To compile this code as a module, choose M here: the
-         module will be called sch_sfq.
-+config NET_SCH_ESFQ
-+      tristate "Enhanced Stochastic Fairness Queueing (ESFQ)"
-+      ---help---
-+        Say Y here if you want to use the Enhanced Stochastic Fairness
-+        Queueing (ESFQ) packet scheduling algorithm for some of your network
-+        devices or as a leaf discipline for a classful qdisc such as HTB or
-+        CBQ (see the top of <file:net/sched/sch_esfq.c> for details and
-+        references to the SFQ algorithm).
-+
-+        This is an enchanced SFQ version which allows you to control some
-+        hardcoded values in the SFQ scheduler.
-+
-+        ESFQ also adds control of the hash function used to identify packet
-+        flows. The original SFQ discipline hashes by connection; ESFQ add
-+        several other hashing methods, such as by src IP or by dst IP, which
-+        can be more fair to users in some networking situations.
-+
-+        To compile this code as a module, choose M here: the
-+        module will be called sch_esfq.
-+
-+config NET_SCH_ESFQ_NFCT
-+      bool "Connection Tracking Hash Types"
-+      depends on NET_SCH_ESFQ && NF_CONNTRACK
-+      ---help---
-+        Say Y here to enable support for hashing based on netfilter connection
-+        tracking information. This is useful for a router that is also using
-+        NAT to connect privately-addressed hosts to the Internet. If you want
-+        to provide fair distribution of upstream bandwidth, ESFQ must use
-+        connection tracking information, since all outgoing packets will share
-+        the same source address.
-+
- config NET_SCH_TEQL
-       tristate "True Link Equalizer (TEQL)"
-       ---help---
---- a/net/sched/Makefile
-+++ b/net/sched/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_NET_SCH_GRED)   += sch_gred.o
- obj-$(CONFIG_NET_SCH_INGRESS) += sch_ingress.o 
- obj-$(CONFIG_NET_SCH_DSMARK)  += sch_dsmark.o
- obj-$(CONFIG_NET_SCH_SFQ)     += sch_sfq.o
-+obj-$(CONFIG_NET_SCH_ESFQ)    += sch_esfq.o
- obj-$(CONFIG_NET_SCH_TBF)     += sch_tbf.o
- obj-$(CONFIG_NET_SCH_TEQL)    += sch_teql.o
- obj-$(CONFIG_NET_SCH_PRIO)    += sch_prio.o
---- /dev/null
-+++ b/net/sched/sch_esfq.c
-@@ -0,0 +1,702 @@
-+/*
-+ * net/sched/sch_esfq.c       Extended Stochastic Fairness Queueing discipline.
-+ *
-+ *            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:   Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
-+ *
-+ * Changes:   Alexander Atanasov, <alex@ssi.bg>
-+ *            Added dynamic depth,limit,divisor,hash_kind options.
-+ *            Added dst and src hashes.
-+ *
-+ *            Alexander Clouter, <alex@digriz.org.uk>
-+ *            Ported ESFQ to Linux 2.6.
-+ *
-+ *            Corey Hickey, <bugfood-c@fatooh.org>
-+ *            Maintenance of the Linux 2.6 port.
-+ *            Added fwmark hash (thanks to Robert Kurjata).
-+ *            Added usage of jhash.
-+ *            Added conntrack support.
-+ *            Added ctnatchg hash (thanks to Ben Pfountz).
-+ */
-+
-+#include <linux/module.h>
-+#include <asm/uaccess.h>
-+#include <asm/system.h>
-+#include <linux/bitops.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/jiffies.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/socket.h>
-+#include <linux/sockios.h>
-+#include <linux/in.h>
-+#include <linux/errno.h>
-+#include <linux/interrupt.h>
-+#include <linux/if_ether.h>
-+#include <linux/inet.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/notifier.h>
-+#include <linux/init.h>
-+#include <net/ip.h>
-+#include <net/netlink.h>
-+#include <linux/ipv6.h>
-+#include <net/route.h>
-+#include <linux/skbuff.h>
-+#include <net/sock.h>
-+#include <net/pkt_sched.h>
-+#include <linux/jhash.h>
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+#include <net/netfilter/nf_conntrack.h>
-+#endif
-+
-+/*    Stochastic Fairness Queuing algorithm.
-+      For more comments look at sch_sfq.c.
-+      The difference is that you can change limit, depth,
-+      hash table size and choose alternate hash types.
-+
-+      classic:        same as in sch_sfq.c
-+      dst:            destination IP address
-+      src:            source IP address
-+      fwmark:         netfilter mark value
-+      ctorigdst:      original destination IP address
-+      ctorigsrc:      original source IP address
-+      ctrepldst:      reply destination IP address
-+      ctreplsrc:      reply source IP
-+
-+*/
-+
-+#define ESFQ_HEAD 0
-+#define ESFQ_TAIL 1
-+
-+/* This type should contain at least SFQ_DEPTH*2 values */
-+typedef unsigned int esfq_index;
-+
-+struct esfq_head
-+{
-+      esfq_index      next;
-+      esfq_index      prev;
-+};
-+
-+struct esfq_sched_data
-+{
-+/* Parameters */
-+      int             perturb_period;
-+      unsigned        quantum;        /* Allotment per round: MUST BE >= MTU */
-+      int             limit;
-+      unsigned        depth;
-+      unsigned        hash_divisor;
-+      unsigned        hash_kind;
-+/* Variables */
-+      struct timer_list perturb_timer;
-+      int             perturbation;
-+      esfq_index      tail;           /* Index of current slot in round */
-+      esfq_index      max_depth;      /* Maximal depth */
-+
-+      esfq_index      *ht;                    /* Hash table */
-+      esfq_index      *next;                  /* Active slots link */
-+      short           *allot;                 /* Current allotment per slot */
-+      unsigned short  *hash;                  /* Hash value indexed by slots */
-+      struct sk_buff_head     *qs;            /* Slot queue */
-+      struct esfq_head        *dep;           /* Linked list of slots, indexed by depth */
-+};
-+
-+/* This contains the info we will hash. */
-+struct esfq_packet_info
-+{
-+      u32     proto;          /* protocol or port */
-+      u32     src;            /* source from packet header */
-+      u32     dst;            /* destination from packet header */
-+      u32     ctorigsrc;      /* original source from conntrack */
-+      u32     ctorigdst;      /* original destination from conntrack */
-+      u32     ctreplsrc;      /* reply source from conntrack */
-+      u32     ctrepldst;      /* reply destination from conntrack */
-+      u32     mark;           /* netfilter mark (fwmark) */
-+};
-+
-+static __inline__ unsigned esfq_jhash_1word(struct esfq_sched_data *q,u32 a)
-+{
-+      return jhash_1word(a, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_2words(struct esfq_sched_data *q, u32 a, u32 b)
-+{
-+      return jhash_2words(a, b, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_3words(struct esfq_sched_data *q, u32 a, u32 b, u32 c)
-+{
-+      return jhash_3words(a, b, c, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static unsigned esfq_hash(struct esfq_sched_data *q, struct sk_buff *skb)
-+{
-+      struct esfq_packet_info info;
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      enum ip_conntrack_info ctinfo;
-+      struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
-+#endif
-+
-+      switch (skb->protocol) {
-+      case __constant_htons(ETH_P_IP):
-+      {
-+              struct iphdr *iph = ip_hdr(skb);
-+              info.dst = iph->daddr;
-+              info.src = iph->saddr;
-+              if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) &&
-+                  (iph->protocol == IPPROTO_TCP ||
-+                   iph->protocol == IPPROTO_UDP ||
-+                   iph->protocol == IPPROTO_SCTP ||
-+                   iph->protocol == IPPROTO_DCCP ||
-+                   iph->protocol == IPPROTO_ESP))
-+                      info.proto = *(((u32*)iph) + iph->ihl);
-+              else
-+                      info.proto = iph->protocol;
-+              break;
-+      }
-+      case __constant_htons(ETH_P_IPV6):
-+      {
-+              struct ipv6hdr *iph = ipv6_hdr(skb);
-+              /* Hash ipv6 addresses into a u32. This isn't ideal,
-+               * but the code is simple. */
-+              info.dst = jhash2(iph->daddr.s6_addr32, 4, q->perturbation);
-+              info.src = jhash2(iph->saddr.s6_addr32, 4, q->perturbation);
-+              if (iph->nexthdr == IPPROTO_TCP ||
-+                  iph->nexthdr == IPPROTO_UDP ||
-+                  iph->nexthdr == IPPROTO_SCTP ||
-+                  iph->nexthdr == IPPROTO_DCCP ||
-+                  iph->nexthdr == IPPROTO_ESP)
-+                      info.proto = *(u32*)&iph[1];
-+              else
-+                      info.proto = iph->nexthdr;
-+              break;
-+      }
-+      default:
-+              info.dst   = (u32)(unsigned long)skb_dst(skb);
-+              info.src   = (u32)(unsigned long)skb->sk;
-+              info.proto = skb->protocol;
-+      }
-+
-+      info.mark = skb->mark;
-+
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      /* defaults if there is no conntrack info */
-+      info.ctorigsrc = info.src;
-+      info.ctorigdst = info.dst;
-+      info.ctreplsrc = info.dst;
-+      info.ctrepldst = info.src;
-+      /* collect conntrack info */
-+      if (ct && ct != &nf_conntrack_untracked) {
-+              if (skb->protocol == __constant_htons(ETH_P_IP)) {
-+                      info.ctorigsrc = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+                      info.ctorigdst = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip;
-+                      info.ctreplsrc = ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip;
-+                      info.ctrepldst = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+              }
-+              else if (skb->protocol == __constant_htons(ETH_P_IPV6)) {
-+                      /* Again, hash ipv6 addresses into a single u32. */
-+                      info.ctorigsrc = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctorigdst = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip6, 4, q->perturbation);
-+                      info.ctreplsrc = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctrepldst = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip6, 4, q->perturbation);
-+              }
-+
-+      }
-+#endif
-+
-+      switch(q->hash_kind) {
-+      case TCA_SFQ_HASH_CLASSIC:
-+              return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+      case TCA_SFQ_HASH_DST:
-+              return esfq_jhash_1word(q, info.dst);
-+      case TCA_SFQ_HASH_SRC:
-+              return esfq_jhash_1word(q, info.src);
-+      case TCA_SFQ_HASH_FWMARK:
-+              return esfq_jhash_1word(q, info.mark);
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      case TCA_SFQ_HASH_CTORIGDST:
-+              return esfq_jhash_1word(q, info.ctorigdst);
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+              return esfq_jhash_1word(q, info.ctorigsrc);
-+      case TCA_SFQ_HASH_CTREPLDST:
-+              return esfq_jhash_1word(q, info.ctrepldst);
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      case TCA_SFQ_HASH_CTNATCHG:
-+      {
-+              if (info.ctorigdst == info.ctreplsrc)
-+                      return esfq_jhash_1word(q, info.ctorigsrc);
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      }
-+#endif
-+      default:
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash method. Falling back to classic.\n");
-+      }
-+      return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+}
-+
-+static inline void esfq_link(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d = q->qs[x].qlen + q->depth;
-+
-+      p = d;
-+      n = q->dep[d].next;
-+      q->dep[x].next = n;
-+      q->dep[x].prev = p;
-+      q->dep[p].next = q->dep[n].prev = x;
-+}
-+
-+static inline void esfq_dec(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+
-+      if (n == p && q->max_depth == q->qs[x].qlen + 1)
-+              q->max_depth--;
-+
-+      esfq_link(q, x);
-+}
-+
-+static inline void esfq_inc(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+      d = q->qs[x].qlen;
-+      if (q->max_depth < d)
-+              q->max_depth = d;
-+
-+      esfq_link(q, x);
-+}
-+
-+static unsigned int esfq_drop(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index d = q->max_depth;
-+      struct sk_buff *skb;
-+      unsigned int len;
-+
-+      /* Queue is full! Find the longest slot and
-+         drop a packet from it */
-+
-+      if (d > 1) {
-+              esfq_index x = q->dep[d+q->depth].next;
-+              skb = q->qs[x].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[x]);
-+              kfree_skb(skb);
-+              esfq_dec(q, x);
-+              sch->q.qlen--;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      if (d == 1) {
-+              /* It is difficult to believe, but ALL THE SLOTS HAVE LENGTH 1. */
-+              d = q->next[q->tail];
-+              q->next[q->tail] = q->next[d];
-+              q->allot[q->next[d]] += q->quantum;
-+              skb = q->qs[d].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[d]);
-+              kfree_skb(skb);
-+              esfq_dec(q, d);
-+              sch->q.qlen--;
-+              q->ht[q->hash[d]] = q->depth;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      return 0;
-+}
-+
-+static void esfq_q_enqueue(struct sk_buff *skb, struct esfq_sched_data *q, unsigned int end)
-+{
-+      unsigned hash = esfq_hash(q, skb);
-+      unsigned depth = q->depth;
-+      esfq_index x;
-+
-+      x = q->ht[hash];
-+      if (x == depth) {
-+              q->ht[hash] = x = q->dep[depth].next;
-+              q->hash[x] = hash;
-+      }
-+
-+      if (end == ESFQ_TAIL)
-+              __skb_queue_tail(&q->qs[x], skb);
-+      else
-+              __skb_queue_head(&q->qs[x], skb);
-+
-+      esfq_inc(q, x);
-+      if (q->qs[x].qlen == 1) {               /* The flow is new */
-+              if (q->tail == depth) { /* It is the first flow */
-+                      q->tail = x;
-+                      q->next[x] = x;
-+                      q->allot[x] = q->quantum;
-+              } else {
-+                      q->next[x] = q->next[q->tail];
-+                      q->next[q->tail] = x;
-+                      q->tail = x;
-+              }
-+      }
-+}
-+
-+static int esfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_enqueue(skb, q, ESFQ_TAIL);
-+      sch->qstats.backlog += skb->len;
-+      if (++sch->q.qlen < q->limit-1) {
-+              sch->bstats.bytes += skb->len;
-+              sch->bstats.packets++;
-+              return 0;
-+      }
-+
-+      sch->qstats.drops++;
-+      esfq_drop(sch);
-+      return NET_XMIT_CN;
-+}
-+
-+static struct sk_buff *esfq_peek(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index a;
-+
-+      /* No active slots */
-+      if (q->tail == q->depth)
-+              return NULL;
-+
-+      a = q->next[q->tail];
-+      return skb_peek(&q->qs[a]);
-+}
-+
-+static struct sk_buff *esfq_q_dequeue(struct esfq_sched_data *q)
-+{
-+      struct sk_buff *skb;
-+      unsigned depth = q->depth;
-+      esfq_index a, old_a;
-+
-+      /* No active slots */
-+      if (q->tail == depth)
-+              return NULL;
-+
-+      a = old_a = q->next[q->tail];
-+
-+      /* Grab packet */
-+      skb = __skb_dequeue(&q->qs[a]);
-+      esfq_dec(q, a);
-+
-+      /* Is the slot empty? */
-+      if (q->qs[a].qlen == 0) {
-+              q->ht[q->hash[a]] = depth;
-+              a = q->next[a];
-+              if (a == old_a) {
-+                      q->tail = depth;
-+                      return skb;
-+              }
-+              q->next[q->tail] = a;
-+              q->allot[a] += q->quantum;
-+      } else if ((q->allot[a] -= skb->len) <= 0) {
-+              q->tail = a;
-+              a = q->next[a];
-+              q->allot[a] += q->quantum;
-+      }
-+
-+      return skb;
-+}
-+
-+static struct sk_buff *esfq_dequeue(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct sk_buff *skb;
-+
-+      skb = esfq_q_dequeue(q);
-+      if (skb == NULL)
-+              return NULL;
-+      sch->q.qlen--;
-+      sch->qstats.backlog -= skb->len;
-+      return skb;
-+}
-+
-+static void esfq_q_destroy(struct esfq_sched_data *q)
-+{
-+      del_timer(&q->perturb_timer);
-+      if(q->ht)
-+              kfree(q->ht);
-+      if(q->dep)
-+              kfree(q->dep);
-+      if(q->next)
-+              kfree(q->next);
-+      if(q->allot)
-+              kfree(q->allot);
-+      if(q->hash)
-+              kfree(q->hash);
-+      if(q->qs)
-+              kfree(q->qs);
-+}
-+
-+static void esfq_destroy(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_destroy(q);
-+}
-+
-+
-+static void esfq_reset(struct Qdisc* sch)
-+{
-+      struct sk_buff *skb;
-+
-+      while ((skb = esfq_dequeue(sch)) != NULL)
-+              kfree_skb(skb);
-+}
-+
-+static void esfq_perturbation(unsigned long arg)
-+{
-+      struct Qdisc *sch = (struct Qdisc*)arg;
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+
-+      q->perturbation = net_random()&0x1F;
-+
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+}
-+
-+static unsigned int esfq_check_hash(unsigned int kind)
-+{
-+      switch (kind) {
-+      case TCA_SFQ_HASH_CTORIGDST:
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+      case TCA_SFQ_HASH_CTREPLDST:
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+      case TCA_SFQ_HASH_CTNATCHG:
-+#ifndef CONFIG_NET_SCH_ESFQ_NFCT
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Conntrack hash types disabled in kernel config. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+#endif
-+      case TCA_SFQ_HASH_CLASSIC:
-+      case TCA_SFQ_HASH_DST:
-+      case TCA_SFQ_HASH_SRC:
-+      case TCA_SFQ_HASH_FWMARK:
-+              return kind;
-+      default:
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash type. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+      }
-+}
-+
-+static int esfq_q_init(struct esfq_sched_data *q, struct nlattr *opt)
-+{
-+      struct tc_esfq_qopt *ctl = nla_data(opt);
-+      esfq_index p = ~0U/2;
-+      int i;
-+
-+      if (opt && opt->nla_len < nla_attr_size(sizeof(*ctl)))
-+              return -EINVAL;
-+
-+      q->perturbation = 0;
-+      q->hash_kind = TCA_SFQ_HASH_CLASSIC;
-+      q->max_depth = 0;
-+      if (opt == NULL) {
-+              q->perturb_period = 0;
-+              q->hash_divisor = 1024;
-+              q->tail = q->limit = q->depth = 128;
-+
-+      } else {
-+              struct tc_esfq_qopt *ctl = nla_data(opt);
-+              if (ctl->quantum)
-+                      q->quantum = ctl->quantum;
-+              q->perturb_period = ctl->perturb_period*HZ;
-+              q->hash_divisor = ctl->divisor ? : 1024;
-+              q->tail = q->limit = q->depth = ctl->flows ? : 128;
-+
-+              if ( q->depth > p - 1 )
-+                      return -EINVAL;
-+
-+              if (ctl->limit)
-+                      q->limit = min_t(u32, ctl->limit, q->depth);
-+
-+              if (ctl->hash_kind) {
-+                      q->hash_kind = esfq_check_hash(ctl->hash_kind);
-+              }
-+      }
-+
-+      q->ht = kmalloc(q->hash_divisor*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->ht)
-+              goto err_case;
-+      q->dep = kmalloc((1+q->depth*2)*sizeof(struct esfq_head), GFP_KERNEL);
-+      if (!q->dep)
-+              goto err_case;
-+      q->next = kmalloc(q->depth*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->next)
-+              goto err_case;
-+      q->allot = kmalloc(q->depth*sizeof(short), GFP_KERNEL);
-+      if (!q->allot)
-+              goto err_case;
-+      q->hash = kmalloc(q->depth*sizeof(unsigned short), GFP_KERNEL);
-+      if (!q->hash)
-+              goto err_case;
-+      q->qs = kmalloc(q->depth*sizeof(struct sk_buff_head), GFP_KERNEL);
-+      if (!q->qs)
-+              goto err_case;
-+
-+      for (i=0; i< q->hash_divisor; i++)
-+              q->ht[i] = q->depth;
-+      for (i=0; i<q->depth; i++) {
-+              skb_queue_head_init(&q->qs[i]);
-+              q->dep[i+q->depth].next = i+q->depth;
-+              q->dep[i+q->depth].prev = i+q->depth;
-+      }
-+
-+      for (i=0; i<q->depth; i++)
-+              esfq_link(q, i);
-+      return 0;
-+err_case:
-+      esfq_q_destroy(q);
-+      return -ENOBUFS;
-+}
-+
-+static int esfq_init(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      int err;
-+
-+      q->quantum = psched_mtu(qdisc_dev(sch)); /* default */
-+      if ((err = esfq_q_init(q, opt)))
-+              return err;
-+
-+      init_timer(&q->perturb_timer);
-+      q->perturb_timer.data = (unsigned long)sch;
-+      q->perturb_timer.function = esfq_perturbation;
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+
-+      return 0;
-+}
-+
-+static int esfq_change(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct esfq_sched_data new;
-+      struct sk_buff *skb;
-+      int err;
-+
-+      /* set up new queue */
-+      memset(&new, 0, sizeof(struct esfq_sched_data));
-+      new.quantum = psched_mtu(qdisc_dev(sch)); /* default */
-+      if ((err = esfq_q_init(&new, opt)))
-+              return err;
-+
-+      /* copy all packets from the old queue to the new queue */
-+      sch_tree_lock(sch);
-+      while ((skb = esfq_q_dequeue(q)) != NULL)
-+              esfq_q_enqueue(skb, &new, ESFQ_TAIL);
-+
-+      /* clean up the old queue */
-+      esfq_q_destroy(q);
-+
-+      /* copy elements of the new queue into the old queue */
-+      q->perturb_period = new.perturb_period;
-+      q->quantum        = new.quantum;
-+      q->limit          = new.limit;
-+      q->depth          = new.depth;
-+      q->hash_divisor   = new.hash_divisor;
-+      q->hash_kind      = new.hash_kind;
-+      q->tail           = new.tail;
-+      q->max_depth      = new.max_depth;
-+      q->ht    = new.ht;
-+      q->dep   = new.dep;
-+      q->next  = new.next;
-+      q->allot = new.allot;
-+      q->hash  = new.hash;
-+      q->qs    = new.qs;
-+
-+      /* finish up */
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      } else {
-+              q->perturbation = 0;
-+      }
-+      sch_tree_unlock(sch);
-+      return 0;
-+}
-+
-+static int esfq_dump(struct Qdisc *sch, struct sk_buff *skb)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      unsigned char *b = skb_tail_pointer(skb);
-+      struct tc_esfq_qopt opt;
-+
-+      opt.quantum = q->quantum;
-+      opt.perturb_period = q->perturb_period/HZ;
-+
-+      opt.limit = q->limit;
-+      opt.divisor = q->hash_divisor;
-+      opt.flows = q->depth;
-+      opt.hash_kind = q->hash_kind;
-+
-+      NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
-+
-+      return skb->len;
-+
-+nla_put_failure:
-+      nlmsg_trim(skb, b);
-+      return -1;
-+}
-+
-+static struct Qdisc_ops esfq_qdisc_ops =
-+{
-+      .next           =       NULL,
-+      .cl_ops         =       NULL,
-+      .id             =       "esfq",
-+      .priv_size      =       sizeof(struct esfq_sched_data),
-+      .enqueue        =       esfq_enqueue,
-+      .dequeue        =       esfq_dequeue,
-+      .peek           =       esfq_peek,
-+      .drop           =       esfq_drop,
-+      .init           =       esfq_init,
-+      .reset          =       esfq_reset,
-+      .destroy        =       esfq_destroy,
-+      .change         =       esfq_change,
-+      .dump           =       esfq_dump,
-+      .owner          =       THIS_MODULE,
-+};
-+
-+static int __init esfq_module_init(void)
-+{
-+      return register_qdisc(&esfq_qdisc_ops);
-+}
-+static void __exit esfq_module_exit(void)
-+{
-+      unregister_qdisc(&esfq_qdisc_ops);
-+}
-+module_init(esfq_module_init)
-+module_exit(esfq_module_exit)
-+MODULE_LICENSE("GPL");
diff --git a/target/linux/generic-2.6/patches-2.6.31/201-jhash3.patch b/target/linux/generic-2.6/patches-2.6.31/201-jhash3.patch
deleted file mode 100644 (file)
index 0218fa1..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
---- a/include/linux/jhash.h
-+++ b/include/linux/jhash.h
-@@ -3,80 +3,95 @@
- /* jhash.h: Jenkins hash support.
-  *
-- * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)
-+ * Copyright (C) 2006. Bob Jenkins (bob_jenkins@burtleburtle.net)
-  *
-  * http://burtleburtle.net/bob/hash/
-  *
-  * These are the credits from Bob's sources:
-  *
-- * lookup2.c, by Bob Jenkins, December 1996, Public Domain.
-- * hash(), hash2(), hash3, and mix() are externally useful functions.
-- * Routines to test the hash are included if SELF_TEST is defined.
-- * You can use this free for any purpose.  It has no warranty.
-+ * lookup3.c, by Bob Jenkins, May 2006, Public Domain.
-  *
-- * Copyright (C) 2003 David S. Miller (davem@redhat.com)
-+ * These are functions for producing 32-bit hashes for hash table lookup.
-+ * hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() 
-+ * are externally useful functions.  Routines to test the hash are included 
-+ * if SELF_TEST is defined.  You can use this free for any purpose.  It's in
-+ * the public domain.  It has no warranty.
-+ *
-+ * Copyright (C) 2009 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
-  *
-  * I've modified Bob's hash to be useful in the Linux kernel, and
-- * any bugs present are surely my fault.  -DaveM
-+ * any bugs present are my fault.  Jozsef
-  */
--/* NOTE: Arguments are modified. */
--#define __jhash_mix(a, b, c) \
-+#define __rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
-+
-+/* __jhash_mix - mix 3 32-bit values reversibly. */
-+#define __jhash_mix(a,b,c) \
-+{ \
-+  a -= c;  a ^= __rot(c, 4);  c += b; \
-+  b -= a;  b ^= __rot(a, 6);  a += c; \
-+  c -= b;  c ^= __rot(b, 8);  b += a; \
-+  a -= c;  a ^= __rot(c,16);  c += b; \
-+  b -= a;  b ^= __rot(a,19);  a += c; \
-+  c -= b;  c ^= __rot(b, 4);  b += a; \
-+}
-+
-+/* __jhash_final - final mixing of 3 32-bit values (a,b,c) into c */
-+#define __jhash_final(a,b,c) \
- { \
--  a -= b; a -= c; a ^= (c>>13); \
--  b -= c; b -= a; b ^= (a<<8); \
--  c -= a; c -= b; c ^= (b>>13); \
--  a -= b; a -= c; a ^= (c>>12);  \
--  b -= c; b -= a; b ^= (a<<16); \
--  c -= a; c -= b; c ^= (b>>5); \
--  a -= b; a -= c; a ^= (c>>3);  \
--  b -= c; b -= a; b ^= (a<<10); \
--  c -= a; c -= b; c ^= (b>>15); \
-+  c ^= b; c -= __rot(b,14); \
-+  a ^= c; a -= __rot(c,11); \
-+  b ^= a; b -= __rot(a,25); \
-+  c ^= b; c -= __rot(b,16); \
-+  a ^= c; a -= __rot(c,4);  \
-+  b ^= a; b -= __rot(a,14); \
-+  c ^= b; c -= __rot(b,24); \
- }
--/* The golden ration: an arbitrary value */
--#define JHASH_GOLDEN_RATIO    0x9e3779b9
-+/* An arbitrary initial parameter */
-+#define JHASH_GOLDEN_RATIO    0xdeadbeef
- /* The most generic version, hashes an arbitrary sequence
-  * of bytes.  No alignment or length assumptions are made about
-- * the input key.
-+ * the input key. The result depends on endianness.
-  */
- static inline u32 jhash(const void *key, u32 length, u32 initval)
- {
--      u32 a, b, c, len;
-+      u32 a,b,c;
-       const u8 *k = key;
--      len = length;
--      a = b = JHASH_GOLDEN_RATIO;
--      c = initval;
--
--      while (len >= 12) {
--              a += (k[0] +((u32)k[1]<<8) +((u32)k[2]<<16) +((u32)k[3]<<24));
--              b += (k[4] +((u32)k[5]<<8) +((u32)k[6]<<16) +((u32)k[7]<<24));
--              c += (k[8] +((u32)k[9]<<8) +((u32)k[10]<<16)+((u32)k[11]<<24));
--
--              __jhash_mix(a,b,c);
-+      /* Set up the internal state */
-+      a = b = c = JHASH_GOLDEN_RATIO + length + initval;
-+      /* all but the last block: affect some 32 bits of (a,b,c) */
-+      while (length > 12) {
-+              a += (k[0] + ((u32)k[1]<<8) + ((u32)k[2]<<16) + ((u32)k[3]<<24));
-+              b += (k[4] + ((u32)k[5]<<8) + ((u32)k[6]<<16) + ((u32)k[7]<<24));
-+              c += (k[8] + ((u32)k[9]<<8) + ((u32)k[10]<<16) + ((u32)k[11]<<24));
-+              __jhash_mix(a, b, c);
-+              length -= 12;
-               k += 12;
--              len -= 12;
-       }
--      c += length;
--      switch (len) {
--      case 11: c += ((u32)k[10]<<24);
--      case 10: c += ((u32)k[9]<<16);
--      case 9 : c += ((u32)k[8]<<8);
--      case 8 : b += ((u32)k[7]<<24);
--      case 7 : b += ((u32)k[6]<<16);
--      case 6 : b += ((u32)k[5]<<8);
-+      /* last block: affect all 32 bits of (c) */
-+      /* all the case statements fall through */
-+      switch (length) {
-+      case 12: c += (u32)k[11]<<24;
-+      case 11: c += (u32)k[10]<<16;
-+      case 10: c += (u32)k[9]<<8;
-+      case 9 : c += k[8];
-+      case 8 : b += (u32)k[7]<<24;
-+      case 7 : b += (u32)k[6]<<16;
-+      case 6 : b += (u32)k[5]<<8;
-       case 5 : b += k[4];
--      case 4 : a += ((u32)k[3]<<24);
--      case 3 : a += ((u32)k[2]<<16);
--      case 2 : a += ((u32)k[1]<<8);
-+      case 4 : a += (u32)k[3]<<24;
-+      case 3 : a += (u32)k[2]<<16;
-+      case 2 : a += (u32)k[1]<<8;
-       case 1 : a += k[0];
--      };
--
--      __jhash_mix(a,b,c);
-+              __jhash_final(a, b, c);
-+      case 0 :
-+              break;
-+      }
-       return c;
- }
-@@ -86,58 +101,57 @@ static inline u32 jhash(const void *key,
-  */
- static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
- {
--      u32 a, b, c, len;
-+      u32 a, b, c;
--      a = b = JHASH_GOLDEN_RATIO;
--      c = initval;
--      len = length;
-+      /* Set up the internal state */
-+      a = b = c = JHASH_GOLDEN_RATIO + (length<<2) + initval;
--      while (len >= 3) {
-+      /* handle most of the key */
-+      while (length > 3) {
-               a += k[0];
-               b += k[1];
-               c += k[2];
-               __jhash_mix(a, b, c);
--              k += 3; len -= 3;
-+              length -= 3;
-+              k += 3;
-       }
--      c += length * 4;
--
--      switch (len) {
--      case 2 : b += k[1];
--      case 1 : a += k[0];
--      };
--
--      __jhash_mix(a,b,c);
-+      /* handle the last 3 u32's */
-+      /* all the case statements fall through */ 
-+      switch (length) {
-+      case 3: c += k[2];
-+      case 2: b += k[1];
-+      case 1: a += k[0];
-+              __jhash_final(a, b, c);
-+      case 0:     /* case 0: nothing left to add */
-+              break;
-+      }
-       return c;
- }
--
- /* A special ultra-optimized versions that knows they are hashing exactly
-  * 3, 2 or 1 word(s).
-- *
-- * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally
-- *       done at the end is not done here.
-  */
- static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
- {
--      a += JHASH_GOLDEN_RATIO;
--      b += JHASH_GOLDEN_RATIO;
--      c += initval;
-+      a += JHASH_GOLDEN_RATIO + initval;
-+      b += JHASH_GOLDEN_RATIO + initval;
-+      c += JHASH_GOLDEN_RATIO + initval;
--      __jhash_mix(a, b, c);
-+      __jhash_final(a, b, c);
-       return c;
- }
- static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
- {
--      return jhash_3words(a, b, 0, initval);
-+      return jhash_3words(0, a, b, initval);
- }
- static inline u32 jhash_1word(u32 a, u32 initval)
- {
--      return jhash_3words(a, 0, 0, initval);
-+      return jhash_3words(0, 0, a, initval);
- }
- #endif /* _LINUX_JHASH_H */
diff --git a/target/linux/generic-2.6/patches-2.6.31/202-mips_mem_functions_performance.patch b/target/linux/generic-2.6/patches-2.6.31/202-mips_mem_functions_performance.patch
deleted file mode 100644 (file)
index 6ea9ba5..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/arch/mips/include/asm/string.h
-+++ b/arch/mips/include/asm/string.h
-@@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ 
- #define __HAVE_ARCH_MEMSET
- extern void *memset(void *__s, int __c, size_t __count);
-+#define memset(__s, __c, len)                                 \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memset((__s), (__c), __len);            \
-+      else                                                    \
-+              __ret = __builtin_memset((__s), (__c), __len);  \
-+      __ret;                                                  \
-+})
- #define __HAVE_ARCH_MEMCPY
- extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
-+#define memcpy(dst, src, len)                                 \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memcpy((dst), (src), __len);            \
-+      else                                                    \
-+              __ret = __builtin_memcpy((dst), (src), __len);  \
-+      __ret;                                                  \
-+})
- #define __HAVE_ARCH_MEMMOVE
- extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
-+#define memmove(dst, src, len)                                        \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memmove((dst), (src), __len);           \
-+      else                                                    \
-+              __ret = __builtin_memmove((dst), (src), __len); \
-+      __ret;                                                  \
-+})
-+
-+#define __HAVE_ARCH_MEMCMP
-+#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len))
- #endif /* _ASM_STRING_H */
---- a/arch/mips/lib/Makefile
-+++ b/arch/mips/lib/Makefile
-@@ -3,7 +3,7 @@
- #
- lib-y += csum_partial.o delay.o memcpy.o memcpy-inatomic.o memset.o \
--         strlen_user.o strncpy_user.o strnlen_user.o uncached.o
-+         strlen_user.o strncpy_user.o strnlen_user.o uncached.o memcmp.o
- obj-y                 += iomap.o
- obj-$(CONFIG_PCI)     += iomap-pci.o
---- /dev/null
-+++ b/arch/mips/lib/memcmp.c
-@@ -0,0 +1,22 @@
-+/*
-+ *  copied from linux/lib/string.c
-+ *
-+ *  Copyright (C) 1991, 1992  Linus Torvalds
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+
-+#undef memcmp
-+int memcmp(const void *cs, const void *ct, size_t count)
-+{
-+      const unsigned char *su1, *su2;
-+      int res = 0;
-+
-+      for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
-+              if ((res = *su1 - *su2) != 0)
-+                      break;
-+      return res;
-+}
-+EXPORT_SYMBOL(memcmp);
-+
diff --git a/target/linux/generic-2.6/patches-2.6.31/203-slab_maxsize.patch b/target/linux/generic-2.6/patches-2.6.31/203-slab_maxsize.patch
deleted file mode 100644 (file)
index 0c1ae72..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/include/linux/slab.h
-+++ b/include/linux/slab.h
-@@ -124,8 +124,8 @@ int kmem_ptr_validate(struct kmem_cache 
-  * to do various tricks to work around compiler limitations in order to
-  * ensure proper constant folding.
-  */
--#define KMALLOC_SHIFT_HIGH    ((MAX_ORDER + PAGE_SHIFT - 1) <= 25 ? \
--                              (MAX_ORDER + PAGE_SHIFT - 1) : 25)
-+#define KMALLOC_SHIFT_HIGH    ((MAX_ORDER + PAGE_SHIFT - 1) <= 17 ? \
-+                              (MAX_ORDER + PAGE_SHIFT - 1) : 17)
- #define KMALLOC_MAX_SIZE      (1UL << KMALLOC_SHIFT_HIGH)
- #define KMALLOC_MAX_ORDER     (KMALLOC_SHIFT_HIGH - PAGE_SHIFT)
diff --git a/target/linux/generic-2.6/patches-2.6.31/204-jffs2_eofdetect.patch b/target/linux/generic-2.6/patches-2.6.31/204-jffs2_eofdetect.patch
deleted file mode 100644 (file)
index 16d3e1f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
---- a/fs/jffs2/build.c
-+++ b/fs/jffs2/build.c
-@@ -111,6 +111,17 @@ static int jffs2_build_filesystem(struct
-       dbg_fsbuild("scanned flash completely\n");
-       jffs2_dbg_dump_block_lists_nolock(c);
-+      if (c->flags & (1 << 7)) {
-+              printk("%s(): unlocking the mtd device... ", __func__);
-+              if (c->mtd->unlock)
-+                      c->mtd->unlock(c->mtd, 0, c->mtd->size);
-+              printk("done.\n");
-+
-+              printk("%s(): erasing all blocks after the end marker... ", __func__);
-+              jffs2_erase_pending_blocks(c, -1);
-+              printk("done.\n");
-+      }
-+
-       dbg_fsbuild("pass 1 starting\n");
-       c->flags |= JFFS2_SB_FLAG_BUILDING;
-       /* Now scan the directory tree, increasing nlink according to every dirent found. */
---- a/fs/jffs2/scan.c
-+++ b/fs/jffs2/scan.c
-@@ -72,7 +72,7 @@ static int file_dirty(struct jffs2_sb_in
-               return ret;
-       if ((ret = jffs2_scan_dirty_space(c, jeb, jeb->free_size)))
-               return ret;
--      /* Turned wasted size into dirty, since we apparently 
-+      /* Turned wasted size into dirty, since we apparently
-          think it's recoverable now. */
-       jeb->dirty_size += jeb->wasted_size;
-       c->dirty_size += jeb->wasted_size;
-@@ -144,8 +144,11 @@ int jffs2_scan_medium(struct jffs2_sb_in
-               /* reset summary info for next eraseblock scan */
-               jffs2_sum_reset_collected(s);
--              ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
--                                              buf_size, s);
-+              if (c->flags & (1 << 7))
-+                      ret = BLK_STATE_ALLFF;
-+              else
-+                      ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
-+                                                      buf_size, s);
-               if (ret < 0)
-                       goto out;
-@@ -400,7 +403,7 @@ static int jffs2_scan_xref_node(struct j
-       if (!ref)
-               return -ENOMEM;
--      /* BEFORE jffs2_build_xattr_subsystem() called, 
-+      /* BEFORE jffs2_build_xattr_subsystem() called,
-        * and AFTER xattr_ref is marked as a dead xref,
-        * ref->xid is used to store 32bit xid, xd is not used
-        * ref->ino is used to store 32bit inode-number, ic is not used
-@@ -473,7 +476,7 @@ static int jffs2_scan_eraseblock (struct
-               struct jffs2_sum_marker *sm;
-               void *sumptr = NULL;
-               uint32_t sumlen;
--            
-+
-               if (!buf_size) {
-                       /* XIP case. Just look, point at the summary if it's there */
-                       sm = (void *)buf + c->sector_size - sizeof(*sm);
-@@ -489,9 +492,9 @@ static int jffs2_scan_eraseblock (struct
-                               buf_len = sizeof(*sm);
-                       /* Read as much as we want into the _end_ of the preallocated buffer */
--                      err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len, 
-+                      err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len,
-                                                 jeb->offset + c->sector_size - buf_len,
--                                                buf_len);                             
-+                                                buf_len);
-                       if (err)
-                               return err;
-@@ -510,9 +513,9 @@ static int jffs2_scan_eraseblock (struct
-                               }
-                               if (buf_len < sumlen) {
-                                       /* Need to read more so that the entire summary node is present */
--                                      err = jffs2_fill_scan_buf(c, sumptr, 
-+                                      err = jffs2_fill_scan_buf(c, sumptr,
-                                                                 jeb->offset + c->sector_size - sumlen,
--                                                                sumlen - buf_len);                            
-+                                                                sumlen - buf_len);
-                                       if (err)
-                                               return err;
-                               }
-@@ -525,7 +528,7 @@ static int jffs2_scan_eraseblock (struct
-                       if (buf_size && sumlen > buf_size)
-                               kfree(sumptr);
--                      /* If it returns with a real error, bail. 
-+                      /* If it returns with a real error, bail.
-                          If it returns positive, that's a block classification
-                          (i.e. BLK_STATE_xxx) so return that too.
-                          If it returns zero, fall through to full scan. */
-@@ -546,6 +549,17 @@ static int jffs2_scan_eraseblock (struct
-                       return err;
-       }
-+      if ((buf[0] == 0xde) &&
-+              (buf[1] == 0xad) &&
-+              (buf[2] == 0xc0) &&
-+              (buf[3] == 0xde)) {
-+              /* end of filesystem. erase everything after this point */
-+              printk("%s(): End of filesystem marker found at 0x%x\n", __func__, jeb->offset);
-+              c->flags |= (1 << 7);
-+
-+              return BLK_STATE_ALLFF;
-+      }
-+
-       /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
-       ofs = 0;
-@@ -671,7 +685,7 @@ scan_more:
-                               scan_end = buf_len;
-                               goto more_empty;
-                       }
--                      
-+
-                       /* See how much more there is to read in this eraseblock... */
-                       buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
-                       if (!buf_len) {
-@@ -907,7 +921,7 @@ scan_more:
-       D1(printk(KERN_DEBUG "Block at 0x%08x: free 0x%08x, dirty 0x%08x, unchecked 0x%08x, used 0x%08x, wasted 0x%08x\n",
-                 jeb->offset,jeb->free_size, jeb->dirty_size, jeb->unchecked_size, jeb->used_size, jeb->wasted_size));
--      
-+
-       /* mark_node_obsolete can add to wasted !! */
-       if (jeb->wasted_size) {
-               jeb->dirty_size += jeb->wasted_size;
diff --git a/target/linux/generic-2.6/patches-2.6.31/205-skb_padding.patch b/target/linux/generic-2.6/patches-2.6.31/205-skb_padding.patch
deleted file mode 100644 (file)
index 80c7e70..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -1387,11 +1387,18 @@ static inline int skb_network_offset(con
-  *
-  * Various parts of the networking layer expect at least 32 bytes of
-  * headroom, you should not reduce this.
-+ *
-+ * This has been changed to 64 to acommodate for routing between ethernet
-+ * and wireless, but only for new allocations
-  */
- #ifndef NET_SKB_PAD
- #define NET_SKB_PAD   32
- #endif
-+#ifndef NET_SKB_PAD_ALLOC
-+#define NET_SKB_PAD_ALLOC     64
-+#endif
-+
- extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
- static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
-@@ -1481,9 +1488,9 @@ static inline void __skb_queue_purge(str
- static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
-                                             gfp_t gfp_mask)
- {
--      struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask);
-+      struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask);
-       if (likely(skb))
--              skb_reserve(skb, NET_SKB_PAD);
-+              skb_reserve(skb, NET_SKB_PAD_ALLOC);
-       return skb;
- }
-@@ -1556,7 +1563,7 @@ static inline int __skb_cow(struct sk_bu
-               delta = headroom - skb_headroom(skb);
-       if (delta || cloned)
--              return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
-+              return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD_ALLOC), 0,
-                                       GFP_ATOMIC);
-       return 0;
- }
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -336,9 +336,9 @@ struct sk_buff *__netdev_alloc_skb(struc
-       int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1;
-       struct sk_buff *skb;
--      skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node);
-+      skb = __alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask, 0, node);
-       if (likely(skb)) {
--              skb_reserve(skb, NET_SKB_PAD);
-+              skb_reserve(skb, NET_SKB_PAD_ALLOC);
-               skb->dev = dev;
-       }
-       return skb;
diff --git a/target/linux/generic-2.6/patches-2.6.31/207-powerpc_asm_segment_h.patch b/target/linux/generic-2.6/patches-2.6.31/207-powerpc_asm_segment_h.patch
deleted file mode 100644 (file)
index 1272e82..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
---- /dev/null
-+++ b/include/asm-powerpc/segment.h
-@@ -0,0 +1,6 @@
-+#ifndef _ASM_SEGMENT_H
-+#define _ASM_SEGMENT_H
-+
-+/* Only here because we have some old header files that expect it.. */
-+
-+#endif /* _ASM_SEGMENT_H */
diff --git a/target/linux/generic-2.6/patches-2.6.31/209-mini_fo.patch b/target/linux/generic-2.6/patches-2.6.31/209-mini_fo.patch
deleted file mode 100644 (file)
index e3ce162..0000000
+++ /dev/null
@@ -1,7780 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -178,6 +178,7 @@ source "fs/ubifs/Kconfig"
- source "fs/cramfs/Kconfig"
- source "fs/squashfs/Kconfig"
- source "fs/freevxfs/Kconfig"
-+source "fs/mini_fo/Kconfig"
- source "fs/minix/Kconfig"
- source "fs/omfs/Kconfig"
- source "fs/hpfs/Kconfig"
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -77,6 +77,7 @@ obj-$(CONFIG_SQUASHFS)               += squashfs/
- obj-y                         += ramfs/
- obj-$(CONFIG_HUGETLBFS)               += hugetlbfs/
- obj-$(CONFIG_CODA_FS)         += coda/
-+obj-$(CONFIG_MINI_FO)         += mini_fo/
- obj-$(CONFIG_MINIX_FS)                += minix/
- obj-$(CONFIG_FAT_FS)          += fat/
- obj-$(CONFIG_BFS_FS)          += bfs/
---- /dev/null
-+++ b/fs/mini_fo/aux.c
-@@ -0,0 +1,577 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/* check if file exists in storage  */
-+int exists_in_storage(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+      if(dtost(dentry) == MODIFIED || dtost(dentry) == CREATED || dtost(dentry) == DEL_REWRITTEN)
-+              return 1;
-+      return 0;
-+}
-+
-+/* check if dentry is in an existing state */
-+int is_mini_fo_existant(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) == DELETED || dtost(dentry) == NON_EXISTANT)
-+              return 0;
-+      else
-+              return 1;
-+}
-+
-+/*
-+ * This function will create a negative storage dentry for
-+ * dentry, what is required for many create like options.
-+ * It will create the storage structure if necessary.
-+ */
-+int get_neg_sto_dentry(dentry_t *dentry)
-+{
-+      int err = 0;
-+      unsigned int len;
-+      const unsigned char *name;
-+
-+      if(!dentry ||
-+         !dtopd(dentry) ||
-+         !(dtost(dentry) == UNMODIFIED ||
-+           dtost(dentry) == NON_EXISTANT ||
-+           dtost(dentry) == DELETED)) {
-+              printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      /* Have we got a neg. dentry already? */
-+      if(dtohd2(dentry)) {
-+              err = 0;
-+              goto out;
-+      }
-+      if(dtost(dentry->d_parent) == UNMODIFIED) {
-+              /* build sto struct */
-+              err = build_sto_structure(dentry->d_parent->d_parent, dentry->d_parent);
-+              if(err ||
-+                 dtost(dentry->d_parent) != MODIFIED) {
-+                      printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: ERROR building sto structure.\n");
-+                      err = -1;
-+                      goto out;
-+              }
-+      }
-+
-+      len = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+
-+      dtohd2(dentry) =
-+              lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+
-+ out:
-+      return err;
-+}
-+
-+int check_mini_fo_dentry(dentry_t *dentry)
-+{
-+      ASSERT(dentry != NULL);
-+      ASSERT(dtopd(dentry) != NULL);
-+      ASSERT((dtohd(dentry) != NULL) || (dtohd2(dentry) != NULL));
-+
-+/*    if(dtost(dentry) == MODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT(dtohd(dentry) != NULL); */
-+/*            ASSERT(dtohd(dentry)->d_inode != NULL); */
-+/*            ASSERT(dtohd2(dentry) != NULL); */
-+/*            ASSERT(dtohd2(dentry)->d_inode != NULL); */
-+/*    } */
-+/*    else if(dtost(dentry) == UNMODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT( */
-+/*    } */
-+      return 0;
-+}
-+
-+int check_mini_fo_file(file_t *file)
-+{
-+      ASSERT(file != NULL);
-+      ASSERT(ftopd(file) != NULL);
-+      ASSERT(file->f_dentry != NULL);
-+
-+      /* violent checking, check depending of state and type
-+       *      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {}
-+       */
-+      ASSERT((ftohf(file) != NULL) || (ftohf2(file) != NULL));
-+      return 0;
-+}
-+
-+int check_mini_fo_inode(inode_t *inode)
-+{
-+      ASSERT(inode != NULL);
-+      ASSERT(itopd(inode) != NULL);
-+      ASSERT((itohi(inode) != NULL) || (itohi2(inode) != NULL));
-+      return 0;
-+}
-+
-+/*
-+ * will walk a base path as provided by get_mini_fo_bpath and return
-+ * the (hopefully ;-) ) positive dentry of the renamed base dir.
-+ *
-+ * This does some work of path_init.
-+ */
-+dentry_t *bpath_walk(super_block_t *sb, char *bpath)
-+{
-+      int err;
-+        struct vfsmount *mnt;
-+      struct nameidata nd;
-+
-+      /* be paranoid */
-+      if(!bpath || bpath[0] != '/') {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid string.\n");
-+              return NULL;
-+      }
-+      if(!sb || !stopd(sb)) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid sb.\n");
-+              return NULL;
-+      }
-+
-+      /* fix this: how do I reach this lock?
-+       * read_lock(&current->fs->lock); */
-+      mnt = mntget(stopd(sb)->hidden_mnt);
-+      /* read_unlock(&current->fs->lock); */
-+
-+      err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-+
-+      /* validate */
-+      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-+              return NULL;
-+      }
-+      return nd.dentry;
-+}
-+
-+
-+/* returns the full path of the basefile incl. its name */
-+int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len)
-+{
-+      char *buf_walker;
-+      int len = 0;
-+      dentry_t *sky_walker;
-+
-+      if(!dentry || !dtohd(dentry)) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              len += sky_walker->d_name.len + 1 ; /* 1 for '/' */
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* 1 to oil the loop */
-+      *bpath = (char*)  kmalloc(len + 1, GFP_KERNEL);
-+      if(!*bpath) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: out of mem.\n");
-+              return -1;
-+      }
-+      buf_walker = *bpath+len; /* put it on last char */
-+      *buf_walker = '\n';
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              buf_walker -= sky_walker->d_name.len;
-+              strncpy(buf_walker,
-+                      sky_walker->d_name.name,
-+                      sky_walker->d_name.len);
-+              *(--buf_walker) = '/';
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* bpath_len doesn't count newline! */
-+      *bpath_len = len;
-+      return 0;
-+}
-+
-+int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                  dentry_t *src_dentry, struct vfsmount *src_mnt)
-+{
-+      void *buf;
-+      mm_segment_t old_fs;
-+      file_t *tgt_file;
-+      file_t *src_file;
-+      int bytes, len, tmp, err;
-+      err = 0;
-+
-+      if(!(tgt_dentry->d_inode && src_dentry->d_inode)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, neg. dentry passed.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dget(tgt_dentry);
-+      dget(src_dentry);
-+      mntget(tgt_mnt);
-+      mntget(src_mnt);
-+
-+      /* open file write only */
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      if(!tgt_file || IS_ERR(tgt_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-+              err = PTR_ERR(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* open file read only */
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      if(!src_file || IS_ERR(src_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-+              err = PTR_ERR(src_file);
-+
-+              /* close target file */
-+              fput(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* check if the filesystem(s) support read respective write */
-+      if(!src_file->f_op->read || !tgt_file->f_op->write) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, no fs read or write support.\n");
-+              err = -EPERM;
-+              goto out_close;
-+      }
-+
-+      /* allocate a page for transfering the data */
-+      buf = (void *) __get_free_page(GFP_KERNEL);
-+      if(!buf) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, out of kernel mem.\n");
-+              goto out_err;
-+      }
-+
-+      tgt_file->f_pos = 0;
-+      src_file->f_pos = 0;
-+
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+
-+      /* Doing this I assume that a read operation will return a full
-+       * buffer while there is still data to read, and a less than
-+       * full buffer when all data has been read.
-+       */
-+      bytes = len = PAGE_SIZE;
-+      while(bytes == len) {
-+              bytes = src_file->f_op->read(src_file, buf, len,
-+                                           &src_file->f_pos);
-+              tmp = tgt_file->f_op->write(tgt_file, buf, bytes,
-+                                          &tgt_file->f_pos);
-+              if(tmp != bytes) {
-+                      printk(KERN_CRIT "mini_fo_cp_cont: ERROR writing.\n");
-+                      goto out_close_unset;
-+              }
-+      }
-+
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+      fput(tgt_file);
-+      fput(src_file);
-+      goto out;
-+
-+ out_close_unset:
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+
-+ out_close:
-+      fput(tgt_file);
-+      fput(src_file);
-+
-+ out_err:
-+      dput(tgt_dentry);
-+      dput(src_dentry);
-+
-+      /* mk: not sure if this need to be done */
-+      mntput(tgt_mnt);
-+      mntput(src_mnt);
-+
-+ out:
-+      return err;
-+}
-+
-+/* mk:
-+ * ndl (no-duplicate list) stuff
-+ * This is used in mini_fo_readdir, to save the storage directory contents
-+ * and later when reading base, match them against the list in order
-+ * to avoid duplicates.
-+ */
-+
-+/* add a file specified by name and len to the ndl
-+ * Return values: 0 on success, <0 on failure.
-+ */
-+int ndl_add_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct ndl_entry *tmp_entry;
-+
-+      tmp_entry = (struct ndl_entry *)
-+              kmalloc(sizeof(struct ndl_entry), GFP_KERNEL);
-+      if(!tmp_entry) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+        tmp_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!tmp_entry->name) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+      strncpy(tmp_entry->name, name, len);
-+        tmp_entry->len = len;
-+
-+        list_add(&tmp_entry->list, &rd->ndl_list);
-+        rd->ndl_size++;
-+        return 0;
-+}
-+
-+/* delete all list entries and free memory */
-+void ndl_put_list(struct readdir_data *rd)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return;
-+      while(!list_empty(&rd->ndl_list)) {
-+              tmp = rd->ndl_list.next;
-+                list_del(tmp);
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+              kfree(tmp_entry->name);
-+                kfree(tmp_entry);
-+        }
-+      rd->ndl_size = 0;
-+}
-+
-+/* Check if a file specified by name and len is in the ndl
-+ * Return value: 0 if not in list, 1 if file is found in ndl.
-+ */
-+int ndl_check_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return 0;
-+
-+      list_for_each(tmp, &rd->ndl_list) {
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+                if(tmp_entry->len != len)
-+                        continue;
-+                if(!strncmp(tmp_entry->name, name, len))
-+                        return 1;
-+        }
-+        return 0;
-+}
-+
-+/* mk:
-+ * Recursive function to create corresponding directorys in the storage fs.
-+ * The function will build the storage directorys up to dentry.
-+ */
-+int build_sto_structure(dentry_t *dir, dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(dentry->d_parent != dir) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [1].\n");
-+              return 1;
-+      }
-+
-+              if(dtost(dir) != MODIFIED) {
-+              err = build_sto_structure(dir->d_parent, dentry->d_parent);
-+              if(err)
-+                      return err;
-+      }
-+
-+      /* ok, coming back again. */
-+      check_mini_fo_dentry(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(!hidden_sto_dentry) {
-+              /*
-+               * This is the case after creating the first
-+               * hidden_sto_dentry.
-+               * After one negative storage_dentry, all pointers to
-+               * hidden_storage dentries are set to NULL. We need to
-+               * create the negative dentry before we create the storage
-+               * file.
-+               */
-+              unsigned int len;
-+              const unsigned char *name;
-+              len = dtohd(dentry)->d_name.len;
-+              name = dtohd(dentry)->d_name.name;
-+              hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              dtohd2(dentry) = hidden_sto_dentry;
-+      }
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      /* lets be safe */
-+      if(dtohd2(dir) != hidden_sto_dir_dentry) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [2].\n");
-+              return 1;
-+      }
-+
-+      /* check for errors in lock_parent */
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if(IS_ERR(hidden_sto_dir_dentry)) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: lock_parent failed.\n");
-+              return err;
-+      }
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      dir->d_inode->i_mode);
-+
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [1].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return err;
-+      }
-+
-+      /* everything ok! */
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [2].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return 1;
-+      }
-+
-+      /* interpose the new inode and set new state */
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      dtopd(dentry)->state = MODIFIED;
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+      fist_copy_attr_timesizes(dir->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dir->d_inode->i_nlink++;
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+      return 0;
-+}
-+
-+
-+#if 0 /* unused */
-+
-+/*
-+ * Read "len" bytes from "filename" into "buf".
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_read_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+    /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDONLY, 0);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_read_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->read)
-+      return -2;  /* file(system) doesn't allow reads */
-+
-+    /* now read len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->read(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+
-+
-+/*
-+ * Write "len" bytes from "buf" to "filename"
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_write_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+                              /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDWR|O_CREAT, 0640);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_write_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->write)
-+      return -2;  /* file(system) doesn't allow writes */
-+
-+    /* now write len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->write(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+#endif /* unused */
-+
---- /dev/null
-+++ b/fs/mini_fo/ChangeLog
-@@ -0,0 +1,281 @@
-+2006-01-24  Markus Klotzbuecher  <mk@mary.denx.de>
-+
-+      * Add tons of ugly ifdefs to Ed L. Cashin's mutex patch to
-+          retain backwards compatibility.
-+
-+2006-01-24  Ed L. Cashin <ecashin@coraid.com>
-+
-+      * Support for the new mutex infrastructure
-+      (7892f2f48d165a34b0b8130c8a195dfd807b8cb6)
-+
-+2005-10-15  Markus Klotzbuecher  <mk@localhost.localdomain>
-+
-+      * Bugfix for a serious memory leak in mini_fo_follow_link.
-+
-+2005-09-21  Markus Klotzbuecher  <mk@mary>
-+
-+      * new release 0.6.1
-+
-+      * fix of a compiler warning due to changes in 2.6.13
-+
-+2005-09-21  Klaus Wenninger  <klaus.wenninger@siemens.com>
-+
-+      * file.c: readdir: fix for a bug that caused directory entries
-+          to show up twice when using storage filesystems such as
-+          minixfs or pramfs.
-+
-+2005-06-30  Eric Lammerts <eric@lammerts.org>
-+
-+      * fix for an oops when overwriting a binary thats beeing
-+          executed.
-+
-+2005-06-09    <mk@mary>
-+
-+      * Renamed overlay to mini_fo-overlay.
-+
-+      * Added mini_fo-merge script to allow merging of storage and base
-+      after making modifications.
-+
-+2005-05-22  root  <mk@mary>
-+
-+      * Added overlay script that allows to easily mount mini_fo ontop
-+      of a given base directory
-+
-+2005-05-10    <mk@mary>
-+
-+      * inode.c: xattr functions return -EOPNOSUPP instead of
-+          -ENOSUPP, what confuses "ls -l"
-+
-+      * Changed license from LGPL to GPL.
-+
-+2005-05-08  root  <mk@mary>
-+
-+      * Makefile: clean it up and added make install and make
-+          uninstall.
-+
-+2005-05-06    <mk@mary>
-+
-+      * merged devel branch back to main. [v0-6-0-pre3]
-+
-+      * removed unused files print.c and fist_ioctl. [devel-0-0-18]
-+
-+      * ioctl: removed fist_ioctl stuff, that is not needed for
-+          now.
-+
-+2005-05-03    <mk@mary>
-+
-+      * file.c: simplified mini_fo_open and mini_fo_setattr using
-+          new state changing functions. [devel-0-0-17]
-+
-+      * inode.c: Fixed getattr state bug (see below) in 2.4 function
-+          mini_fo_inode revalidate.
-+
-+      * inode.c: found an other bug in mini_fo_getattr. States are not
-+        reliable in this function, as a file can be opened, unlinked and
-+        the getattr function called. This results in a deleted dentry
-+        with an inode. Fix is to ignore states and simply use the inode
-+        available.
-+
-+2005-04-29    <mk@mary>
-+
-+      * file.c: Bugfix and cleanup in fasync and fsync. [devel-0-0-16]
-+
-+      * file.c: do not use mini_fo_lock so the generic version is
-+          used (I guess).
-+
-+      * inode.c: getattr, never call getattr on lower files, as this
-+          will cause the inum to change.
-+
-+      * inode.c: rename_reg_file renamed to rename_nondir, as it
-+          doesn't matter as long it't not a dir. Removed all
-+          rename_dev_file etc.
-+
-+      * tagged as devel-0-0-15
-+
-+      * inode.c: added support for chosing support for extended
-+          attrs at compile time by XATTR define in mini_fo.h .
-+
-+      * inode.c: fixed mini_fo_getattr to use mini_fo inode and not
-+          lower again, what avoids inode number changes that confused
-+          rm again. This is the proper solution.
-+
-+2005-04-24    <mk@mary>
-+
-+      * all files: updated Copyright notive to 2005. [devel-0-0-14]
-+
-+      * inode.c: fixed mini_fo_getattr to not change the inode
-+          number, even if lower files change.
-+
-+      * super.c: fixed a bug that caused deleted base file to show
-+          up suddenly after some time, or after creating a special
-+          file. The problem was that after some time or after special
-+          file creating sync_sb_inodes is called by the vfs, that
-+          called our mini_fo_put_inode. There was (wrongly) called
-+          __meta_put_lists, that nuked the lists, although the inode
-+          was going to continue its life. Moving __meta_put_lists to
-+          mini_fo_clear_inode, where an inode is really destroyed,
-+          solved the problem.
-+
-+
-+2005-04-23    <mk@mary>
-+
-+      * state.c, aux.c: more cleaning up and
-+          simplifications. [devel-0-0-13]
-+
-+      * inode.c: implemented mini_fo_getattr, that was required for
-+          2.6 because inode_revalidate has been remove there, and the
-+        old "du" bug returned.
-+
-+
-+2005-04-20    <mk@mary>
-+
-+      * aux.c: get_neg_sto_dentry(): allow to be called for dentries
-+          in state UNMODIFIED, NON_EXISTANT _and_ DELETED.
-+
-+2005-04-19    <mk@mary>
-+
-+      * Fixed a bug under 2.6 that caused files deleted via mini_fo
-+          not to be deleted properly and therefore the fs filled up
-+          untill no memory was left. [devel-0-0-12]
-+
-+      * Added basic hard link support. This means that creating
-+          hardlinks will work, but existing ones will be treated as
-+          individual files. [devel-0-0-11]
-+
-+2005-04-17    <mk@mary>
-+
-+      * Bugfixes
-+
-+2005-04-13  root  <mk@mary>
-+
-+      * Added file state.c for the state transition
-+          functions. Doesn't work very well yet, though...
-+
-+2005-04-12    <mk@mary>
-+
-+      * Porting to 2.6 started, which is easier than expected, also
-+          due to Olivier previous work.
-+
-+2005-04-08    <mk@mary>
-+
-+      * Fixed the bug that caused du to return invalid sizes of
-+          directory trees. The problem was that
-+          mini_fo_inode_revalidate didn't always copy the attributes
-+          from the base inode properly.
-+
-+2005-04-01  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Merged devel branch back to main trunk and updated the
-+          RELEASE notes. This will be 0-6-0-pre1.
-+
-+2005-03-31  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed some bugs in rename_reg_file, that only showed up in
-+          the kernel compile test. Kernel compiles cleanly ontop of
-+          mini_fo, now also make mrproper etc. work. Seems pretty stable.
-+
-+2005-03-28  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Many, many directory renaming bugfixes and a lot of other
-+          cleanup. Dir renaming seems to work relatively stable.
-+
-+2005-03-22  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing lightweight directory renaming. Some
-+          basic testing indicates it works fine.
-+        Next is to implement testcases for the testsuite and confirm
-+          everything is really working ok.
-+
-+2005-03-18  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing meta.c stuff required for directory
-+          renaming.
-+
-+2005-03-17  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed all compile warnings + an extremly old bug that
-+          somehow crept in while reworking the wol stuff to the META
-+          system. Turning on -Werror again... :-)
-+
-+      * Fixed some bugs in the new rename_reg_file function.
-+
-+      * Rewrote mini_fo rename and split it into several
-+          subfunctions, that handle the different types
-+          seperately. Rewrote the regular file function aswell, as it
-+          was implemented somewhat inefficient.
-+
-+2005-03-16  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Implemented new META subsystem, removed old WOL stuff in favor
-+        if it.
-+
-+      * After some basic testing everything seems ok...
-+
-+2005-03-11  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Renaming a non regular file caused trouble because I always
-+        tried to copy the contents. Now I only do this for regular
-+        files. mini_fo_rename still isn't implemented properly, renaming
-+        of device files, symlinks etc. results in a empty regular file
-+        instead of the proper type.
-+
-+      * Directory renaming suddenly works! What a surprise! I guess
-+          this is because renaming is implemented as making a copy and
-+          removing the original. Still this might not work
-+          everywhere...
-+
-+2005-03-09  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Bugfix, when a mini_fo directory that exists in storage
-+        (state: MODIFIED, CREATED and DEL_REWRITTEN) is deleted, a
-+        possibly existing WOL file contained in it needs to be
-+        deleted too.
-+
-+      * Starting cleanup: defined state names in order to get rid of
-+          the state numbers.
-+
-+2005-03-08  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Makefile fix, fist_ioctl was built against wrong sources if ARCH=um
-+
-+      * Fixed a bug in dentry.c, mini_fo_d_hash. In state 4 =
-+          DEL_REWRITTEN the hash was calculated from the base dentry,
-+          which was wrong and and caused assertions in
-+          __mini_fo_hidden_dentry to fail.
-+
-+2005-02-21    <mk@mary>
-+
-+      * Implemented directory deleting (inode.c)
-+
-+      * main.c: made mini_fo_parse_options a little more robust.
-+
-+2004-12-22    <mk@mary>
-+
-+      * Makefile cleanup and uml stuff, removed unneccessary files
-+
-+      * Created a new and hopefully more informative README
-+
-+      * CHANGELOG: created a new CHANGELOG and added old entries reversely
-+
-+
-+2004-10-24 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Fix: owner and group where not correctly copied from base to
-+          storage.
-+
-+
-+2004-10-05 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of fsync, fasync and lock mini_fo functions.
-+
-+
-+2004-09-29 Bob Lee <bob@pantasys.com>
-+
-+      * Fix of a serious pointer bug
-+
-+
-+2004-09-28 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of mini_fo_mknod and mini_fo_rename, support
-+          for device files.
-+
---- /dev/null
-+++ b/fs/mini_fo/dentry.c
-@@ -0,0 +1,244 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/*
-+ * THIS IS A BOOLEAN FUNCTION: returns 1 if valid, 0 otherwise.
-+ */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_d_revalidate(dentry_t *dentry, struct nameidata *nd)
-+#else
-+mini_fo_d_revalidate(dentry_t *dentry, int flags)
-+#endif
-+{
-+      int err1 = 1; /* valid = 1, invalid = 0 */
-+      int err2 = 1;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      hidden_dentry  = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry &&
-+         hidden_dentry->d_op &&
-+         hidden_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, nd);
-+#else
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, flags);
-+#endif
-+      }
-+      if(hidden_sto_dentry &&
-+         hidden_sto_dentry->d_op &&
-+         hidden_sto_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           nd);
-+#else
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           flags);
-+#endif
-+      }
-+
-+      /* mk: if one of the lower level dentries are valid,
-+       * the mini_fo dentry is too.
-+       */
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_d_hash(dentry_t *dentry, qstr_t *name)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry);
-+       * hidden_sto_dentry = mini_fo_hidden_sto_dentry(dentry); */
-+
-+      /* state 1, 3, 4, 5: build the hash for the storage dentry */
-+      if((dtopd(dentry)->state == MODIFIED) ||
-+         (dtopd(dentry)->state == CREATED) ||
-+         (dtopd(dentry)->state == DEL_REWRITTEN) ||
-+         (dtopd(dentry)->state == DELETED)) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 2: build the hash for the base dentry */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 6: build hash for the dentry that exists */
-+      if(dtopd(dentry)->state == NON_EXISTANT) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+                      goto out;
-+              }
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+                      goto out;
-+              }
-+      }
-+
-+      printk(KERN_CRIT "mini_fo: d_hash: invalid state detected.\n");
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_d_compare(dentry_t *dentry, qstr_t *a, qstr_t *b)
-+{
-+      int err;
-+      dentry_t *hidden_dentry=NULL;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry); */
-+      if(dtohd2(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else if(dtohd(dentry))
-+              hidden_dentry = dtohd(dentry);
-+
-+      if (hidden_dentry && hidden_dentry->d_op && hidden_dentry->d_op->d_compare) {
-+              err = hidden_dentry->d_op->d_compare(hidden_dentry, a, b);
-+      } else {
-+              err = ((a->len != b->len) || memcmp(a->name, b->name, b->len));
-+      }
-+
-+      return err;
-+}
-+
-+
-+int
-+mini_fo_d_delete(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      int err = 0;
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_delete: negative dentry passed.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              if(hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_delete) {
-+                      err = hidden_dentry->d_op->d_delete(hidden_dentry);
-+              }
-+      }
-+      if(hidden_sto_dentry) {
-+              if(hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_delete) {
-+                      err = hidden_sto_dentry->d_op->d_delete(hidden_sto_dentry);
-+              }
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+void
-+mini_fo_d_release(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_release: no private data.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_dentry);
-+      }
-+      if(hidden_sto_dentry) {
-+                /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_sto_dentry);
-+      }
-+
-+      /* free private data (mini_fo_dentry_info) here */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* just to be safe */
-+ out:
-+      return;
-+}
-+
-+
-+/*
-+ * we don't really need mini_fo_d_iput, because dentry_iput will call iput() if
-+ * mini_fo_d_iput is not defined. We left this implemented for ease of
-+ * tracing/debugging.
-+ */
-+void
-+mini_fo_d_iput(dentry_t *dentry, inode_t *inode)
-+{
-+      iput(inode);
-+}
-+
-+
-+struct dentry_operations mini_fo_dops = {
-+      d_revalidate:   mini_fo_d_revalidate,
-+      d_hash:         mini_fo_d_hash,
-+      d_compare:              mini_fo_d_compare,
-+      d_release:              mini_fo_d_release,
-+      d_delete:               mini_fo_d_delete,
-+      d_iput:         mini_fo_d_iput,
-+};
---- /dev/null
-+++ b/fs/mini_fo/file.c
-@@ -0,0 +1,713 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1))
-+
-+/*******************
-+ * File Operations *
-+ *******************/
-+
-+STATIC loff_t
-+mini_fo_llseek(file_t *file, loff_t offset, int origin)
-+{
-+      loff_t err;
-+      file_t *hidden_file = NULL;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to llseek from a directory */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      /* always set hidden position to this one */
-+      hidden_file->f_pos = file->f_pos;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      memcpy(&(hidden_file->f_ra),
-+             &(file->f_ra),
-+             sizeof(struct file_ra_state));
-+#else
-+      if (file->f_reada) { /* update readahead information if needed */
-+              hidden_file->f_reada = file->f_reada;
-+              hidden_file->f_ramax = file->f_ramax;
-+              hidden_file->f_raend = file->f_raend;
-+              hidden_file->f_ralen = file->f_ralen;
-+              hidden_file->f_rawin = file->f_rawin;
-+      }
-+#endif
-+      if (hidden_file->f_op && hidden_file->f_op->llseek)
-+              err = hidden_file->f_op->llseek(hidden_file, offset, origin);
-+      else
-+              err = generic_file_llseek(hidden_file, offset, origin);
-+
-+      if (err < 0)
-+              goto out;
-+
-+      if (err != file->f_pos) {
-+              file->f_pos = err;
-+              // ION maybe this?
-+              //      file->f_pos = hidden_file->f_pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              file->f_reada = 0;
-+#endif
-+              file->f_version++;
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* mk: fanout capable */
-+STATIC ssize_t
-+mini_fo_read(file_t *file, char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      loff_t pos = *ppos;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to read from a directory */
-+              /* printk(KERN_CRIT "mini_fo_read: ERROR: trying to read data from a directory.\n"); */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->read)
-+              goto out;
-+
-+      err = hidden_file->f_op->read(hidden_file, buf, count, &pos);
-+      *ppos = pos;
-+
-+      if (err >= 0) {
-+              /* atime should also be updated for reads of size zero or more */
-+              fist_copy_attr_atime(file->f_dentry->d_inode,
-+                                   hidden_file->f_dentry->d_inode);
-+      }
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * MAJOR HACK
-+       * because pread() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on read() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+      if (hidden_file->f_reada) { /* update readahead information if needed */
-+              file->f_reada = hidden_file->f_reada;
-+              file->f_ramax = hidden_file->f_ramax;
-+              file->f_raend = hidden_file->f_raend;
-+              file->f_ralen = hidden_file->f_ralen;
-+              file->f_rawin = hidden_file->f_rawin;
-+      }
-+#else
-+      memcpy(&(file->f_ra),&(hidden_file->f_ra),sizeof(struct file_ra_state));
-+#endif
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* this mini_fo_write() does not modify data pages! */
-+STATIC ssize_t
-+mini_fo_write(file_t *file, const char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      loff_t pos = *ppos;
-+
-+      /* mk: fan out: */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      /* This is bad! We have no storage file to write to. This
-+                       * should never happen because if a file is opened for
-+                       * writing, a copy should have been made earlier.
-+                       */
-+                      printk(KERN_CRIT "mini_fo: write : ERROR, no storage file to write.\n");
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      inode = file->f_dentry->d_inode;
-+      hidden_inode = itohi2(inode);
-+      if(!hidden_inode) {
-+              printk(KERN_CRIT "mini_fo: write: no sto inode found, not good.\n");
-+              goto out;
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->write)
-+              goto out;
-+
-+      /* adjust for append -- seek to the end of the file */
-+      if (file->f_flags & O_APPEND)
-+              pos = inode->i_size;
-+
-+      err = hidden_file->f_op->write(hidden_file, buf, count, &pos);
-+
-+      /*
-+       * copy ctime and mtime from lower layer attributes
-+       * atime is unchanged for both layers
-+       */
-+      if (err >= 0)
-+              fist_copy_attr_times(inode, hidden_inode);
-+
-+      *ppos = pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * XXX: MAJOR HACK
-+       *
-+       * because pwrite() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on write() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+#endif
-+      /* update this inode's size */
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+ out:
-+      return err;
-+}
-+
-+/* Global variable to hold a file_t pointer.
-+ * This serves to allow mini_fo_filldir function to know which file is
-+ * beeing read, which is required for two reasons:
-+ *
-+ *   - be able to call wol functions in order to avoid listing deleted
-+ *     base files.
-+ *   - if we're reading a directory which is in state 1, we need to
-+ *     maintain a list (in mini_fo_filldir) of which files allready
-+ *     have been copied to userspace,to detect files existing in base
-+ *     and storage and not list them twice.
-+ */
-+filldir_t mini_fo_filldir_orig;
-+file_t *mini_fo_filldir_file;
-+
-+/* mainly copied from fs/readdir.c */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                u64 ino, unsigned int d_type)
-+#else
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                ino_t ino, unsigned int d_type)
-+#endif
-+{
-+      struct getdents_callback * buf = (struct getdents_callback *) __buf;
-+      file_t* file = mini_fo_filldir_file;
-+
-+      /* In theses states we filter meta files in storage (WOL) */
-+      if(file && (dtopd(file->f_dentry)->state == MODIFIED ||
-+                  dtopd(file->f_dentry)->state == CREATED ||
-+                  dtopd(file->f_dentry)->state == DEL_REWRITTEN)) {
-+
-+              int tmp = strlen(META_FILENAME);
-+              if(tmp  == namlen) {
-+                      if(!strncmp(name, META_FILENAME, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      /* check if we are merging the contents of storage and base */
-+      if(file && dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* check if we are still reading storage contents, if
-+               * yes, we just save the name of the file for duplicate
-+               * checking later. */
-+
-+              if(!ftopd(file)->rd.sto_done) {
-+                      /* put file into ndl list */
-+                      if(ndl_add_entry(&ftopd(file)->rd, name, namlen))
-+                              printk(KERN_CRIT "mini_fo_filldir: Error adding to ndl.\n");
-+              } else {
-+                      /* check if file has been deleted */
-+                      if(meta_check_d_entry(file->f_dentry, name, namlen))
-+                              return 0;
-+
-+                      /* do duplicate checking */
-+                      if(ndl_check_entry(&ftopd(file)->rd, name, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      return mini_fo_filldir_orig(buf, name, namlen, offset, ino, d_type);
-+}
-+
-+
-+STATIC int
-+mini_fo_readdir(file_t *file, void *dirent, filldir_t filldir)
-+{
-+      int err = 0;/* mk: ??? -ENOTDIR; */
-+      file_t *hidden_file = NULL;
-+      file_t *hidden_sto_file = NULL;
-+      inode_t *inode;
-+      struct getdents_callback *buf;
-+      int oldcount;
-+
-+#if defined(FIST_FILTER_NAME) || defined(FIST_FILTER_SCA)
-+      struct mini_fo_getdents_callback buf;
-+#endif /* FIST_FILTER_NAME || FIST_FILTER_SCA */
-+
-+      buf = (struct getdents_callback *) dirent;
-+      oldcount = buf->count;
-+      inode = file->f_dentry->d_inode;
-+      mini_fo_filldir_file = file;
-+      mini_fo_filldir_orig = filldir;
-+
-+      ftopd(file)->rd.sto_done = 0;
-+      do {
-+              if (ftopd(file) != NULL) {
-+                      if(ftohf2(file)) {
-+                              hidden_sto_file = ftohf2(file);
-+                              err = vfs_readdir(hidden_sto_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_sto_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_sto_file->f_dentry->d_inode);
-+                              /* not finshed yet, we'll be called again */
-+                              if (buf->count != oldcount)
-+                                      break;
-+                      }
-+
-+                      ftopd(file)->rd.sto_done = 1;
-+
-+                      if(ftohf(file)) {
-+                              hidden_file = ftohf(file);
-+                              err = vfs_readdir(hidden_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_file->f_dentry->d_inode);
-+                      }
-+
-+              }
-+      } while (0);
-+
-+      /* mk:
-+       * we need to check if all the directory data has been copied to userspace,
-+       * or if we will be called again by userspace to complete the operation.
-+       */
-+      if(buf->count == oldcount) {
-+              ndl_put_list(&ftopd(file)->rd);
-+      }
-+
-+      /* unset this, safe */
-+      mini_fo_filldir_file = NULL;
-+      return err;
-+}
-+
-+
-+STATIC unsigned int
-+mini_fo_poll(file_t *file, poll_table *wait)
-+{
-+      unsigned int mask = DEFAULT_POLLMASK;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->poll)
-+              goto out;
-+
-+      mask = hidden_file->f_op->poll(hidden_file, wait);
-+
-+ out:
-+      return mask;
-+}
-+
-+/* FIST-LITE special version of mmap */
-+STATIC int
-+mini_fo_mmap(file_t *file, vm_area_t *vma)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      /* fanout capability */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      ASSERT(hidden_file != NULL);
-+      ASSERT(hidden_file->f_op != NULL);
-+      ASSERT(hidden_file->f_op->mmap != NULL);
-+
-+      vma->vm_file = hidden_file;
-+      err = hidden_file->f_op->mmap(hidden_file, vma);
-+      get_file(hidden_file); /* make sure it doesn't get freed on us */
-+      fput(file);            /* no need to keep extra ref on ours */
-+
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_open(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      int hidden_flags;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      /* fanout stuff */
-+      file_t *hidden_sto_file = NULL;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      __ftopd(file) =
-+              kmalloc(sizeof(struct mini_fo_file_info), GFP_KERNEL);
-+      if (!ftopd(file)) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* init the readdir_helper structure */
-+      INIT_LIST_HEAD(&ftopd(file)->rd.ndl_list);
-+      ftopd(file)->rd.ndl_size = 0;
-+
-+      /* In certain paths this could stay uninitalized and cause trouble */
-+      ftohf(file) = NULL;
-+      ftohf2(file) = NULL;
-+      hidden_flags = file->f_flags;
-+
-+      /* create storage files? */
-+      if(dtost(file->f_dentry) == UNMODIFIED) {
-+              if(!IS_WRITE_FLAG(file->f_flags)) {
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+                      /* dentry_open will decrement mnt refcnt if err.
-+                       * otherwise fput() will do an mntput() for us upon file close. */
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file;      /* link two files */
-+                      goto out;
-+              }
-+              else {
-+                      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+                              err = dir_unmod_to_mod(file->f_dentry);
-+                      } else
-+                              err = nondir_unmod_to_mod(file->f_dentry, 1);
-+
-+                      if (err) {
-+                              printk("mini_fo_open: ERROR creating storage file.\n");
-+                              goto out;
-+                      }
-+              }
-+      }
-+      hidden_sto_dentry = dtohd2(file->f_dentry);
-+      dget(hidden_sto_dentry);
-+
-+      if(dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* Directorys are special, interpose on both lower level files */
-+              if(S_ISDIR(itohi(inode)->i_mode)) {
-+                      /* check for invalid file types of lower level files */
-+                      if(!(S_ISDIR(itohi(inode)->i_mode) && S_ISDIR(itohi2(inode)->i_mode))) {
-+                              printk(KERN_CRIT "mini_fo_open: meta data corruption detected.\n");
-+                              dput(hidden_sto_dentry);
-+                              err = -EINVAL;
-+                              goto out;
-+                      }
-+
-+                      /* lower level directorys are ok, open the base file */
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              dput(hidden_sto_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file; /* link the two files */
-+              }
-+      }
-+
-+      if(!exists_in_storage(file->f_dentry)) {
-+              printk(KERN_CRIT "mini_fo_open: invalid file state detected.\n");
-+              err = -EINVAL;
-+              dput(hidden_sto_dentry);
-+
-+              /* If the base file has been opened, we need to close it here */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* ok, now we can safely open the storage file */
-+      mntget(stopd(inode->i_sb)->hidden_mnt2);
-+      hidden_sto_file = dentry_open(hidden_sto_dentry,
-+                                    stopd(inode->i_sb)->hidden_mnt2,
-+                                    hidden_flags);
-+
-+      /* dentry_open dputs the dentry if it fails */
-+      if (IS_ERR(hidden_sto_file)) {
-+              err = PTR_ERR(hidden_sto_file);
-+              /* close base file if open */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+      ftohf2(file) = hidden_sto_file; /* link storage file */
-+
-+ out:
-+      if (err < 0 && ftopd(file)) {
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_flush(file_t *file, fl_owner_t id)
-+#else
-+mini_fo_flush(file_t *file)
-+#endif
-+{
-+      int err1 = 0;           /* assume ok (see open.c:close_fp) */
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      /* mk: we don't do any state checking here, as its not worth the time.
-+       * Just flush the lower level files if they exist.
-+       */
-+      if(ftopd(file) != NULL) {
-+              if(ftohf(file) != NULL) {
-+                      hidden_file = ftohf(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err1 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err1 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+              if(ftohf2(file) != NULL) {
-+                      hidden_file = ftohf2(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err2 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err2 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+      }
-+      return (err1 | err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_release(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf(file)) {
-+                      hidden_file = ftohf(file);
-+                      fput(hidden_file);
-+              }
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+                      fput(hidden_file);
-+              }
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+mini_fo_fsync(file_t *file, dentry_t *dentry, int datasync)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+
-+      check_mini_fo_file(file);
-+
-+      if ((hidden_file = ftohf(file)) != NULL) {
-+              hidden_dentry = dtohd(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err1 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+
-+      if ((hidden_file = ftohf2(file)) != NULL) {
-+              hidden_dentry = dtohd2(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err2 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+      else
-+              goto err;
-+
-+err:
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_fasync(int fd, file_t *file, int flag)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      if((hidden_file = ftohf(file)) != NULL) {
-+              err1 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+      if((hidden_file = ftohf2(file)) != NULL) {
-+              err2 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+
-+      return (err1 || err2);
-+}
-+
-+
-+
-+struct file_operations mini_fo_dir_fops =
-+      {
-+              read:   generic_read_dir,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed lock:     mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
-+
-+struct file_operations mini_fo_main_fops =
-+      {
-+              llseek: mini_fo_llseek,
-+              read:   mini_fo_read,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed: lock:    mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/fist.h
-@@ -0,0 +1,252 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __FIST_H_
-+#define __FIST_H_
-+
-+/*
-+ * KERNEL ONLY CODE:
-+ */
-+#ifdef __KERNEL__
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
-+#include <linux/autoconf.h>
-+#else
-+#include <linux/config.h>
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#ifdef CONFIG_MODVERSIONS
-+# define MODVERSIONS
-+# include <linux/modversions.h>
-+#endif /* CONFIG_MODVERSIONS */
-+#endif /* KERNEL_VERSION < 2.6.0 */
-+#include <linux/sched.h>
-+#include <linux/kernel.h>
-+#include <linux/mm.h>
-+#include <linux/string.h>
-+#include <linux/stat.h>
-+#include <linux/errno.h>
-+#include <linux/wait.h>
-+#include <linux/limits.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#include <linux/locks.h>
-+#else
-+#include <linux/buffer_head.h>
-+#include <linux/pagemap.h>
-+#include <linux/namei.h>
-+#include <linux/module.h>
-+#include <linux/mount.h>
-+#include <linux/page-flags.h>
-+#include <linux/writeback.h>
-+#include <linux/statfs.h>
-+#endif
-+#include <linux/smp.h>
-+#include <linux/smp_lock.h>
-+#include <linux/file.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/poll.h>
-+#include <linux/list.h>
-+#include <linux/init.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
-+#include <linux/xattr.h>
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#include <linux/security.h>
-+#endif
-+
-+#include <linux/swap.h>
-+
-+#include <asm/system.h>
-+/* #include <asm/segment.h> */
-+#include <asm/mman.h>
-+#include <linux/seq_file.h>
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* those mapped to ATTR_* were copied from linux/fs.h */
-+#define FA_MODE               ATTR_MODE
-+#define FA_UID                ATTR_UID
-+#define FA_GID                ATTR_GID
-+#define FA_SIZE               ATTR_SIZE
-+#define FA_ATIME      ATTR_ATIME
-+#define FA_MTIME      ATTR_MTIME
-+#define FA_CTIME      ATTR_CTIME
-+#define FA_ATIME_SET  ATTR_ATIME_SET
-+#define FA_MTIME_SET  ATTR_MTIME_SET
-+#define FA_FORCE      ATTR_FORCE
-+#define FA_ATTR_FLAGS ATTR_ATTR_FLAG
-+
-+/* must be greater than all other ATTR_* flags! */
-+#define FA_NLINK      2048
-+#define FA_BLKSIZE    4096
-+#define FA_BLOCKS     8192
-+#define FA_TIMES      (FA_ATIME|FA_MTIME|FA_CTIME)
-+#define FA_ALL                0
-+
-+/* macros to manage changes between kernels */
-+#define INODE_DATA(i) (&(i)->i_data)
-+
-+#define MIN(x,y) ((x < y) ? (x) : (y))
-+#define MAX(x,y) ((x > y) ? (x) : (y))
-+#define MAXPATHLEN PATH_MAX
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5)
-+# define lookup_one_len(a,b,c) lookup_one(a,b)
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5) */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8)
-+# define generic_file_llseek default_llseek
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8) */
-+
-+#ifndef SEEK_SET
-+# define SEEK_SET 0
-+#endif /* not SEEK_SET */
-+
-+#ifndef SEEK_CUR
-+# define SEEK_CUR 1
-+#endif /* not SEEK_CUR */
-+
-+#ifndef SEEK_END
-+# define SEEK_END 2
-+#endif /* not SEEK_END */
-+
-+#ifndef DEFAULT_POLLMASK
-+# define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
-+#endif /* not DEFAULT_POLLMASK */
-+
-+/* XXX: fix this so fistgen generates kfree() code directly */
-+#define kfree_s(a,b) kfree(a)
-+
-+/*
-+ * TYPEDEFS:
-+ */
-+typedef struct dentry dentry_t;
-+typedef struct file file_t;
-+typedef struct inode inode_t;
-+typedef inode_t vnode_t;
-+typedef struct page page_t;
-+typedef struct qstr qstr_t;
-+typedef struct super_block super_block_t;
-+typedef super_block_t vfs_t;
-+typedef struct vm_area_struct vm_area_t;
-+
-+
-+/*
-+ * EXTERNALS:
-+ */
-+
-+#define FPPF(str,page) printk("PPF %s 0x%x/%d: Lck:%d Err:%d Ref:%d Upd:%d Other::%d:%d:%d:%d:\n", \
-+              str, \
-+              (int) page, \
-+              (int) page->index, \
-+              (PageLocked(page) ? 1 : 0), \
-+              (PageError(page) ? 1 : 0), \
-+              (PageReferenced(page) ? 1 : 0), \
-+              (Page_Uptodate(page) ? 1 : 0), \
-+              (PageDecrAfter(page) ? 1 : 0), \
-+              (PageSlab(page) ? 1 : 0), \
-+              (PageSwapCache(page) ? 1 : 0), \
-+              (PageReserved(page) ? 1 : 0) \
-+              )
-+#define EZKDBG printk("EZK %s:%d:%s\n",__FILE__,__LINE__,__FUNCTION__)
-+#if 0
-+# define EZKDBG1 printk("EZK %s:%d\n",__FILE__,__LINE__)
-+#else
-+# define EZKDBG1
-+#endif
-+
-+extern int fist_get_debug_value(void);
-+extern int fist_set_debug_value(int val);
-+#if 0 /* mini_fo doesn't need these */
-+extern void fist_dprint_internal(int level, char *str,...);
-+extern void fist_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_print_inode(char *str, const inode_t *inode);
-+extern void fist_print_file(char *str, const file_t *file);
-+extern void fist_print_buffer_flags(char *str, struct buffer_head *buffer);
-+extern void fist_print_page_flags(char *str, page_t *page);
-+extern void fist_print_page_bytes(char *str, page_t *page);
-+extern void fist_print_pte_flags(char *str, const page_t *page);
-+extern void fist_checkinode(inode_t *inode, char *msg);
-+extern void fist_print_sb(char *str, const super_block_t *sb);
-+
-+/* Â§$% by mk: special debug functions */
-+extern void fist_mk_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_mk_print_inode(char *str, const inode_t *inode);
-+
-+extern char *add_indent(void);
-+extern char *del_indent(void);
-+#endif/* mini_fo doesn't need these */
-+
-+
-+#define STATIC
-+#define ASSERT(EX)    \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED: %s at %s:%d (%s)\n", #EX,   \
-+             __FILE__, __LINE__, __FUNCTION__);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+/* same ASSERT, but tell me who was the caller of the function */
-+#define ASSERT2(EX)   \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED (caller): %s at %s:%d (%s)\n", #EX,  \
-+             file, line, func);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+
-+#if 0 /* mini_fo doesn't need these */
-+#define dprintk(format, args...) printk(KERN_DEBUG format, ##args)
-+#define fist_dprint(level, str, args...) fist_dprint_internal(level, KERN_DEBUG str, ## args)
-+#define print_entry_location() fist_dprint(4, "%sIN:  %s %s:%d\n", add_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_location() fist_dprint(4, "%s OUT: %s %s:%d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_status(status) fist_dprint(4, "%s OUT: %s %s:%d, STATUS: %d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, status)
-+#define print_exit_pointer(status) \
-+do { \
-+  if (IS_ERR(status)) \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: %ld\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+  else \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: 0x%x\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+} while (0)
-+#endif/* mini_fo doesn't need these */
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/*
-+ * DEFINITIONS FOR USER AND KERNEL CODE:
-+ * (Note: ioctl numbers 1--9 are reserved for fistgen, the rest
-+ *  are auto-generated automatically based on the user's .fist file.)
-+ */
-+# define FIST_IOCTL_GET_DEBUG_VALUE   _IOR(0x15, 1, int)
-+# define FIST_IOCTL_SET_DEBUG_VALUE   _IOW(0x15, 2, int)
-+
-+#endif /* not __FIST_H_ */
---- /dev/null
-+++ b/fs/mini_fo/inode.c
-@@ -0,0 +1,1564 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = create_sto_reg_file(dentry, mode, nd);
-+#else
-+      err = create_sto_reg_file(dentry, mode);
-+#endif
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC dentry_t *
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry, struct nameidata* nd)
-+#else
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry)
-+#endif
-+{
-+      int err = 0;
-+      dentry_t *hidden_dir_dentry;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      /* whiteout flag */
-+      int del_flag = 0;
-+      char *bpath = NULL;
-+
-+      const char *name;
-+      unsigned int namelen;
-+
-+      /* Don't allow lookups of META-files */
-+      namelen = strlen(META_FILENAME);
-+      if(namelen == dentry->d_name.len) {
-+              if(!strncmp(dentry->d_name.name, META_FILENAME, namelen)) {
-+                      err = -ENOENT;
-+                      goto out;
-+              }
-+      }
-+
-+      hidden_dir_dentry = dtohd(dentry->d_parent);
-+      hidden_sto_dir_dentry = dtohd2(dentry->d_parent);
-+
-+      name = dentry->d_name.name;
-+      namelen = dentry->d_name.len;
-+
-+      /* must initialize dentry operations */
-+      dentry->d_op = &mini_fo_dops;
-+
-+      /* setup the del_flag */
-+      del_flag = __meta_check_d_entry(dir, name, namelen);
-+      bpath = __meta_check_r_entry(dir, name, namelen);
-+
-+      /* perform the lookups of base and storage files:
-+       *
-+       * This caused some serious trouble, as a lookup_one_len passing
-+       * a negative dentry oopses. Solution is to only do the lookup
-+       * if the dentry is positive, else we set it to NULL
-+       * More trouble, who said a *_dir_dentry can't be NULL?
-+       */
-+      if(bpath) {
-+              /* Cross-Interposing (C), yeah! */
-+              hidden_dentry = bpath_walk(dir->i_sb, bpath);
-+              if(!hidden_dentry || !hidden_dentry->d_inode) {
-+                      printk(KERN_CRIT "mini_fo_lookup: bpath_walk failed.\n");
-+                      err= -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* this can be set up safely without fear of spaghetti
-+               * interposing as it is only used for copying times */
-+              hidden_dir_dentry = hidden_dentry->d_parent;
-+              kfree(bpath);
-+      }
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+              hidden_dentry =
-+                      lookup_one_len(name, hidden_dir_dentry, namelen);
-+      else
-+              hidden_dentry = NULL;
-+
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+              hidden_sto_dentry =
-+                      lookup_one_len(name, hidden_sto_dir_dentry, namelen);
-+      else
-+              hidden_sto_dentry =  NULL;
-+
-+      /* catch error in lookup */
-+      if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-+              /* mk: we need to call dput on the dentry, whose
-+               * lookup_one_len operation failed, in order to avoid
-+               * unmount trouble.
-+               */
-+              if(IS_ERR(hidden_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from base dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_dentry);
-+              } else {
-+                      dput(hidden_dentry);
-+              }
-+              if(IS_ERR(hidden_sto_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from storage dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_sto_dentry);
-+              } else {
-+                      dput(hidden_sto_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* allocate dentry private data */
-+      __dtopd(dentry) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+
-+      if (!dtopd(dentry)) {
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      /* check for different states of the mini_fo file to be looked up. */
-+
-+      /* state 1, file has been modified */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              /* update parent directory's atime */
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = MODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state1).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 2, file is unmodified */
-+      if(hidden_dentry && hidden_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = UNMODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry; /* could be negative */
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state2).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 3, file has been newly created */
-+      if(hidden_sto_dentry && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = CREATED;
-+              dtohd(dentry) = hidden_dentry; /* could be negative */
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state3).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+
-+      /* state 4, file has deleted and created again. */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         hidden_sto_dentry->d_inode && del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = DEL_REWRITTEN;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(NULL,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state4).\n");
-+                      goto out_free;
-+              }
-+              /* We will never need this dentry again, as the file has been
-+               * deleted from base */
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 5, file has been deleted in base */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         !hidden_sto_dentry->d_inode && del_flag) {
-+
-+              /* check which parents atime we need for updating */
-+              if(hidden_sto_dir_dentry->d_inode)
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_sto_dir_dentry->d_inode);
-+              else
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = DELETED;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              /* add negative dentry to dcache to speed up lookups */
-+              d_add(dentry, NULL);
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 6, file does not exist */
-+      if(((hidden_dentry && !hidden_dentry->d_inode) ||
-+          (hidden_sto_dentry && !hidden_sto_dentry->d_inode)) && !del_flag)
-+              {
-+                      /* check which parents atime we need for updating */
-+                      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+                              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+                      else
-+                              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+                      dtopd(dentry)->state = NON_EXISTANT;
-+                      dtohd(dentry) = hidden_dentry;
-+                      dtohd2(dentry) = hidden_sto_dentry;
-+                      d_add(dentry, NULL);
-+                      goto out;
-+              }
-+
-+      /* if we get to here, were in an invalid state. bad. */
-+      printk(KERN_CRIT "mini_fo_lookup: ERROR, meta data corruption detected.\n");
-+
-+      /* end state checking */
-+ out_free:
-+      d_drop(dentry);         /* so that our bad dentry will get destroyed */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* be safe */
-+
-+ out_dput:
-+      if(hidden_dentry)
-+              dput(hidden_dentry);
-+      if(hidden_sto_dentry)
-+              dput(hidden_sto_dentry); /* drops usage count and marks for release */
-+
-+ out:
-+      /* initalize wol if file exists and is directory */
-+      if(dentry->d_inode) {
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      itopd(dentry->d_inode)->deleted_list_size = -1;
-+                      itopd(dentry->d_inode)->renamed_list_size = -1;
-+                      meta_build_lists(dentry);
-+              }
-+      }
-+      return ERR_PTR(err);
-+}
-+
-+
-+STATIC int
-+mini_fo_link(dentry_t *old_dentry, inode_t *dir, dentry_t *new_dentry)
-+{
-+      int err;
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_dir_dentry;
-+
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(dir);
-+
-+      /* no links to directorys and existing targets target allowed */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode) ||
-+         is_mini_fo_existant(new_dentry)) {
-+              err = -EPERM;
-+              goto out;
-+      }
-+
-+      /* bring it directly from unmod to del_rew */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              err = meta_add_d_entry(old_dentry->d_parent,
-+                                     old_dentry->d_name.name,
-+                                     old_dentry->d_name.len);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              dput(dtohd(old_dentry));
-+              dtohd(old_dentry) = NULL;
-+              dtost(old_dentry) = DEL_REWRITTEN;
-+      }
-+
-+      err = get_neg_sto_dentry(new_dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      /* was: hidden_dir_dentry = lock_parent(hidden_new_dentry); */
-+      hidden_dir_dentry = dget(hidden_new_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = vfs_link(hidden_old_dentry,
-+                     hidden_dir_dentry->d_inode,
-+                     hidden_new_dentry);
-+      if (err || !hidden_new_dentry->d_inode)
-+              goto out_lock;
-+
-+      dtost(new_dentry) = CREATED;
-+      err = mini_fo_tri_interpose(NULL, hidden_new_dentry, new_dentry, dir->i_sb, 0);
-+      if (err)
-+              goto out_lock;
-+
-+      fist_copy_attr_timesizes(dir, hidden_new_dentry->d_inode);
-+      /* propagate number of hard-links */
-+      old_dentry->d_inode->i_nlink = itohi2(old_dentry->d_inode)->i_nlink;
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_dir_dentry);
-+
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+      if (!new_dentry->d_inode)
-+              d_drop(new_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_unlink(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              err = nondir_mod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              err = nondir_unmod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              err = nondir_creat_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              err = nondir_del_rew_to_del(dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_unlink: ERROR, invalid state detected.\n");
-+
-+ out:
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+
-+      if(!err) {
-+              /* is this causing my pain? d_delete(dentry); */
-+              d_drop(dentry);
-+      }
-+
-+      dput(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_symlink(inode_t *dir, dentry_t *dentry, const char *symname)
-+{
-+      int err=0;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        umode_t mode;
-+#endif
-+
-+      /* Fail if the symlink file exists */
-+      if(!(dtost(dentry) == DELETED ||
-+           dtost(dentry) == NON_EXISTANT)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      dget(hidden_sto_dentry);
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      mode = S_IALLUGO;
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry, symname, mode);
-+#else
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry,
-+                        symname);
-+#endif
-+      if (err || !hidden_sto_dentry->d_inode)
-+                goto out_lock;
-+
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        } else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+        /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+        dput(hidden_sto_dentry);
-+        if (!dentry->d_inode)
-+                d_drop(dentry);
-+ out:
-+        return err;
-+}
-+
-+STATIC int
-+mini_fo_mkdir(inode_t *dir, dentry_t *dentry, int mode)
-+{
-+      int err;
-+
-+      err = create_sto_dir(dentry, mode);
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rmdir(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *meta_dentry;
-+      inode_t *hidden_sto_dir = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+      check_mini_fo_inode(dir);
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              /* XXX: disabled, because it does not bother to check files on
-+               * the original filesystem - just a hack, but better than simply
-+               * removing it without testing */
-+              err = -EINVAL;
-+              goto out;
-+
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was:hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+              dput(dtohd(dentry));
-+
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* carefull with R files */
-+              if( __meta_is_r_entry(dir,
-+                                    dentry->d_name.name,
-+                                    dentry->d_name.len) == 1) {
-+                      err = meta_remove_r_entry(dentry->d_parent,
-+                                                dentry->d_name.name,
-+                                                dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rmdir: meta_remove_r_entry failed.\n");
-+                              goto out;
-+                      }
-+              }
-+              else {
-+                      /* ok, add deleted file to META */
-+                      meta_add_d_entry(dentry->d_parent,
-+                                       dentry->d_name.name,
-+                                       dentry->d_name.len);
-+              }
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              /* XXX: simply adding it to the delete list here is fscking dangerous!
-+               * as a temporary hack, i will disable rmdir on unmodified directories
-+               * for now.
-+               */
-+              err = -EINVAL;
-+              goto out;
-+
-+              err = get_neg_sto_dentry(dentry);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* dput base dentry, this will relase the inode and free the
-+               * dentry, as we will never need it again. */
-+              dput(dtohd(dentry));
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* add deleted file to META-file */
-+              meta_add_d_entry(dentry->d_parent,
-+                               dentry->d_name.name,
-+                               dentry->d_name.len);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = NON_EXISTANT;
-+
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = DELETED;
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_rmdir: ERROR, invalid state detected.\n");
-+
-+ out:
-+      if(!err) {
-+              d_drop(dentry);
-+      }
-+
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+      dput(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, dev_t dev)
-+#else
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      err = create_sto_nod(dentry, mode, dev);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo_mknod: creating sto nod failed.\n");
-+              err = -EINVAL;
-+      }
-+
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rename(inode_t *old_dir, dentry_t *old_dentry,
-+             inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      /* dispatch */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode))
-+              return rename_directory(old_dir, old_dentry, new_dir, new_dentry);
-+      return rename_nondir(old_dir, old_dentry, new_dir, new_dentry);
-+
-+}
-+
-+int rename_directory(inode_t *old_dir, dentry_t *old_dentry,
-+                   inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err, bpath_len;
-+      char *bpath;
-+
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_old_dir_dentry;
-+      dentry_t *hidden_new_dir_dentry;
-+
-+      err = 0;
-+      bpath = NULL;
-+      bpath_len = 0;
-+
-+      /* this is a test, chuck out if it works */
-+      if(!(dtopd(new_dentry)->state == DELETED ||
-+           dtopd(new_dentry)->state == NON_EXISTANT)) {
-+              printk(KERN_CRIT "mini_fo: rename_directory: \
-+                                  uh, ah, new_dentry not negative.\n");
-+              /* return -1; */
-+      }
-+
-+      /* state = UNMODIFIED */
-+      if(dtopd(old_dentry)->state == UNMODIFIED) {
-+              err = dir_unmod_to_mod(old_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+
-+      /* state = MODIFIED */
-+      if(dtopd(old_dentry)->state == MODIFIED) {
-+              bpath = meta_check_r_entry(old_dentry->d_parent,
-+                                         old_dentry->d_name.name,
-+                                         old_dentry->d_name.len);
-+              if(bpath) {
-+                      err = meta_remove_r_entry(old_dentry->d_parent,
-+                                                old_dentry->d_name.name,
-+                                                old_dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rename_directory:\
-+                                                   meta_remove_r_entry \
-+                                                  failed.\n");
-+                              goto out;
-+                      }
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath,
-+                                             strlen(bpath),
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      kfree(bpath);
-+              }
-+              else {/* wol it */
-+                      err = meta_add_d_entry(old_dentry->d_parent,
-+                                             old_dentry->d_name.name,
-+                                             old_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+                      /* put it on rename list */
-+                      err = get_mini_fo_bpath(old_dentry,
-+                                              &bpath,
-+                                              &bpath_len);
-+                      if (err)
-+                              goto out;
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath, bpath_len,
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+              }
-+              /* no state change, MODIFIED stays MODIFIED */
-+      }
-+      /* state = CREATED */
-+      if(dtopd(old_dentry)->state == CREATED ||
-+         dtopd(old_dentry)->state == DEL_REWRITTEN) {
-+              if(dtohd(old_dentry))
-+                      dput(dtohd(old_dentry));
-+
-+              if(dtopd(new_dentry)->state == DELETED) {
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+                      dtohd(old_dentry) = NULL;
-+              }
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      dtopd(old_dentry)->state = CREATED;
-+                      /* steal new dentry's neg. base dentry */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      dtohd(new_dentry) = NULL;
-+              }
-+      }
-+      if(dtopd(new_dentry)->state == UNMODIFIED ||
-+         dtopd(new_dentry)->state == NON_EXISTANT) {
-+              err = get_neg_sto_dentry(new_dentry);
-+              if(err)
-+                      goto out;
-+      }
-+
-+      /* now move sto file */
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+      hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+      double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+      err = vfs_rename(hidden_old_dir_dentry->d_inode, hidden_old_dentry,
-+                       hidden_new_dir_dentry->d_inode, hidden_new_dentry);
-+      if(err)
-+              goto out_lock;
-+
-+      fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+      if (new_dir != old_dir)
-+              fist_copy_attr_all(old_dir,
-+                                 hidden_old_dir_dentry->d_inode);
-+
-+ out_lock:
-+      /* double_unlock will dput the new/old parent dentries
-+       * whose refcnts were incremented via get_parent above. */
-+      double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int rename_nondir(inode_t *old_dir, dentry_t *old_dentry,
-+                inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err=0;
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(old_dir);
-+      check_mini_fo_inode(new_dir);
-+
-+      /* state: UNMODIFIED */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      /* the easy states */
-+      if(exists_in_storage(old_dentry)) {
-+
-+              dentry_t *hidden_old_dentry;
-+              dentry_t *hidden_new_dentry;
-+              dentry_t *hidden_old_dir_dentry;
-+              dentry_t *hidden_new_dir_dentry;
-+
-+              /* if old file is MODIFIED, add it to the deleted_list */
-+              if(dtopd(old_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(old_dentry->d_parent,
-+                                       old_dentry->d_name.name,
-+                                       old_dentry->d_name.len);
-+
-+                      dput(dtohd(old_dentry));
-+              }
-+              /* if old file is CREATED, we only release the base dentry */
-+              if(dtopd(old_dentry)->state == CREATED) {
-+                      if(dtohd(old_dentry))
-+                              dput(dtohd(old_dentry));
-+              }
-+
-+              /* now setup the new states (depends on new_dentry state) */
-+              /* new dentry state =  MODIFIED */
-+              if(dtopd(new_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* new dentry will be d_put'ed later by the vfs
-+                       * so don't do it here
-+                       * dput(dtohd(new_dentry));
-+                       */
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  UNMODIFIED */
-+              else if(dtopd(new_dentry)->state == UNMODIFIED) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* is this right??? */
-+                      /*dput(dtohd(new_dentry));*/
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  CREATED */
-+              else if(dtopd(new_dentry)->state == CREATED) {
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  NON_EXISTANT */
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * Dr. dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  DEL_REWRITTEN or DELETED */
-+              else if(dtopd(new_dentry)->state == DEL_REWRITTEN ||
-+                      dtopd(new_dentry)->state == DELETED) {
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              else { /* not possible, uhh, ahh */
-+                      printk(KERN_CRIT
-+                             "mini_fo: rename_reg_file: invalid state detected [1].\n");
-+                      return -1;
-+              }
-+
-+              /* now we definitely have a sto file */
-+              hidden_old_dentry = dtohd2(old_dentry);
-+              hidden_new_dentry = dtohd2(new_dentry);
-+
-+              dget(hidden_old_dentry);
-+              dget(hidden_new_dentry);
-+
-+              hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+              hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+              double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+              err = vfs_rename(hidden_old_dir_dentry->d_inode,
-+                               hidden_old_dentry,
-+                               hidden_new_dir_dentry->d_inode,
-+                               hidden_new_dentry);
-+              if(err)
-+                      goto out_lock;
-+
-+              fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+              if (new_dir != old_dir)
-+                      fist_copy_attr_all(old_dir, hidden_old_dir_dentry->d_inode);
-+
-+      out_lock:
-+              /* double_unlock will dput the new/old parent dentries
-+               * whose refcnts were incremented via get_parent above.
-+               */
-+              double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+              dput(hidden_new_dentry);
-+              dput(hidden_old_dentry);
-+      out:
-+              return err;
-+      }
-+      else { /* invalid state */
-+              printk(KERN_CRIT "mini_fo: rename_reg_file: ERROR: invalid state detected [2].\n");
-+              return -1;
-+      }
-+}
-+
-+
-+STATIC int
-+mini_fo_readlink(dentry_t *dentry, char *buf, int bufsiz)
-+{
-+      int err=0;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              hidden_dentry = dtohd2(dentry);
-+      } else if(dtohd(dentry) && dtohd(dentry)->d_inode) {
-+              hidden_dentry = dtohd(dentry);
-+      } else {
-+              goto out;
-+      }
-+
-+      if (!hidden_dentry->d_inode->i_op ||
-+          !hidden_dentry->d_inode->i_op->readlink) {
-+              err = -EINVAL;          goto out;
-+      }
-+
-+      err = hidden_dentry->d_inode->i_op->readlink(hidden_dentry,
-+                                                   buf,
-+                                                   bufsiz);
-+      if (err > 0)
-+              fist_copy_attr_atime(dentry->d_inode, hidden_dentry->d_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+static int mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#else
-+static void* mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#endif
-+{
-+      char *buf;
-+      int len = PAGE_SIZE, err;
-+      mm_segment_t old_fs;
-+
-+      /* in 2.6 this is freed by mini_fo_put_link called by __do_follow_link */
-+      buf = kmalloc(len, GFP_KERNEL);
-+      if (!buf) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* read the symlink, and then we will follow it */
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+      err = dentry->d_inode->i_op->readlink(dentry, buf, len);
-+      set_fs(old_fs);
-+      if (err < 0) {
-+              kfree(buf);
-+              buf = NULL;
-+              goto out;
-+      }
-+      buf[err] = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        nd_set_link(nd, buf);
-+        err = 0;
-+#else
-+      err = vfs_follow_link(nd, buf);
-+#endif
-+
-+ out:
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      kfree(buf);
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+        return err;
-+#else
-+        return ERR_PTR(err);
-+#endif
-+}
-+
-+STATIC
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd)
-+#else
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
-+#endif
-+{
-+        char *link;
-+        link = nd_get_link(nd);
-+        kfree(link);
-+}
-+#endif
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
-+#else
-+mini_fo_permission(inode_t *inode, int mask)
-+#endif
-+{
-+      inode_t *hidden_inode;
-+      int mode;
-+      int err;
-+
-+      if(itohi2(inode)) {
-+              hidden_inode = itohi2(inode);
-+      } else {
-+              hidden_inode = itohi(inode);
-+      }
-+      mode = inode->i_mode;
-+
-+      /* not really needed, as permission handles everything:
-+       *      err = vfs_permission(inode, mask);
-+       *      if (err)
-+       *              goto out;
-+       */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = permission(hidden_inode, mask, nd);
-+#else
-+      err = permission(hidden_inode, mask);
-+#endif
-+
-+      /*  out: */
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_inode_revalidate(dentry_t *dentry)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      inode_t *hidden_inode;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else {
-+                printk(KERN_CRIT "mini_fo_inode_revalidate: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      if (hidden_inode && hidden_inode->i_op && hidden_inode->i_op->revalidate){
-+              err = hidden_inode->i_op->revalidate(hidden_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+      fist_copy_attr_all(dentry->d_inode, hidden_inode);
-+ out:
-+      return err;
-+}
-+#endif
-+
-+STATIC int
-+mini_fo_setattr(dentry_t *dentry, struct iattr *ia)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(!is_mini_fo_existant(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [1].\n");
-+              goto out;
-+      }
-+
-+      if(dtost(dentry) == UNMODIFIED) {
-+              if(!IS_COPY_FLAG(ia->ia_valid))
-+                      goto out; /* we ignore these changes to base */
-+
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      err = dir_unmod_to_mod(dentry);
-+              } else {
-+                      /* we copy contents if file is not beeing truncated */
-+                      if(S_ISREG(dentry->d_inode->i_mode) &&
-+                         !(ia->ia_size == 0 && (ia->ia_valid & ATTR_SIZE))) {
-+                              err = nondir_unmod_to_mod(dentry, 1);
-+                      } else
-+                              err = nondir_unmod_to_mod(dentry, 0);
-+              }
-+              if(err) {
-+                      err = -EINVAL;
-+                      printk(KERN_CRIT "mini_fo_setattr: ERROR changing states.\n");
-+                      goto out;
-+              }
-+      }
-+      if(!exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [2].\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      ASSERT(dentry->d_inode);
-+      ASSERT(dtohd2(dentry));
-+      ASSERT(itopd(dentry->d_inode));
-+      ASSERT(itohi2(dentry->d_inode));
-+
-+      err = notify_change(dtohd2(dentry), ia);
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
-+{
-+      int err = 0;
-+        dentry_t *hidden_dentry;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+      } else {
-+                printk(KERN_CRIT "mini_fo_getattr: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      fist_copy_attr_all(dentry->d_inode, hidden_dentry->d_inode);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      generic_fillattr(dentry->d_inode, stat);
-+      if (!stat->blksize) {
-+              struct super_block *s = hidden_dentry->d_inode->i_sb;
-+              unsigned blocks;
-+              blocks = (stat->size+s->s_blocksize-1) >> s->s_blocksize_bits;
-+              stat->blocks = (s->s_blocksize / 512) * blocks;
-+              stat->blksize = s->s_blocksize;
-+      }
-+ out:
-+        return err;
-+}
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+#if 0 /* no xattr_alloc() and xattr_free() */
-+/* This is lifted from fs/xattr.c */
-+static void *
-+xattr_alloc(size_t size, size_t limit)
-+{
-+      void *ptr;
-+
-+      if (size > limit)
-+              return ERR_PTR(-E2BIG);
-+
-+      if (!size)      /* size request, no buffer is needed */
-+              return NULL;
-+      else if (size <= PAGE_SIZE)
-+              ptr = kmalloc((unsigned long) size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc((unsigned long) size);
-+      if (!ptr)
-+              return ERR_PTR(-ENOMEM);
-+      return ptr;
-+}
-+
-+static void
-+xattr_free(void *ptr, size_t size)
-+{
-+      if (!size)      /* size request, no buffer was needed */
-+              return;
-+      else if (size <= PAGE_SIZE)
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
-+}
-+#endif /* no xattr_alloc() and xattr_free() */
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      /* Define these anyway so we don't need as much ifdef'ed code. */
-+      char *encoded_name = NULL;
-+      char *encoded_value = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->getxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, encoded_name, encoded_value, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) \
-+     && LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,23)) \
-+     || LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               const void *value, size_t size, int flags)
-+#else
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               void *value, size_t size, int flags)
-+#endif
-+
-+{
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+
-+      /* Define these anyway, so we don't have as much ifdef'ed code. */
-+      char *encoded_value = NULL;
-+      char *encoded_name = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->setxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->setxattr(hidden_dentry, encoded_name, encoded_value, size, flags);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_removexattr(struct dentry *dentry, const char *name) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_name;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->removexattr) {
-+              encoded_name = (char *)name;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, encoded_name);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_listxattr(struct dentry *dentry, char *list, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_list = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->listxattr) {
-+              encoded_list = list;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, encoded_list, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+
-+struct inode_operations mini_fo_symlink_iops =
-+      {
-+              readlink:       mini_fo_readlink,
-+              follow_link: mini_fo_follow_link,
-+              /* mk: permission:      mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+              put_link:       mini_fo_put_link,
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+      };
-+
-+struct inode_operations mini_fo_dir_iops =
-+      {
-+              create: mini_fo_create,
-+              lookup: mini_fo_lookup,
-+              link:   mini_fo_link,
-+              unlink: mini_fo_unlink,
-+              symlink:        mini_fo_symlink,
-+              mkdir:  mini_fo_mkdir,
-+              rmdir:  mini_fo_rmdir,
-+              mknod:  mini_fo_mknod,
-+              rename: mini_fo_rename,
-+              /* no readlink/follow_link for non-symlinks */
-+              // off because we have setattr
-+              //    truncate: mini_fo_truncate,
-+              /* mk:permission:       mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
-+
-+struct inode_operations mini_fo_main_iops =
-+      {
-+              /* permission:  mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr:    mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/main.c
-@@ -0,0 +1,423 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#include <linux/module.h>
-+
-+/* This definition must only appear after we include <linux/module.h> */
-+#ifndef MODULE_LICENSE
-+# define MODULE_LICENSE(bison)
-+#endif /* not MODULE_LICENSE */
-+
-+/*
-+ * This is the mini_fo tri interpose function, which extends the
-+ * functionality of the regular interpose by interposing a higher
-+ * level inode on top of two lower level ones: the base filesystem
-+ * inode and the storage filesystem inode.
-+ *
-+ *  sb we pass is mini_fo's super_block
-+ */
-+int
-+mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                    dentry_t *hidden_sto_dentry,
-+                    dentry_t *dentry, super_block_t *sb, int flag)
-+{
-+      inode_t *hidden_inode = NULL;
-+      inode_t *hidden_sto_inode = NULL; /* store corresponding storage inode */
-+      int err = 0;
-+      inode_t *inode;
-+
-+      /* Pointer to hidden_sto_inode if exists, else to hidden_inode.
-+       * This is used to copy the attributes of the correct inode. */
-+      inode_t *master_inode;
-+
-+      if(hidden_dentry)
-+              hidden_inode = hidden_dentry->d_inode;
-+      if(hidden_sto_dentry)
-+              hidden_sto_inode = hidden_sto_dentry->d_inode;
-+
-+      ASSERT(dentry->d_inode == NULL);
-+
-+      /* mk: One of the inodes associated with the dentrys is likely to
-+       * be NULL, so carefull:
-+       */
-+      ASSERT((hidden_inode != NULL) || (hidden_sto_inode != NULL));
-+
-+      if(hidden_sto_inode)
-+              master_inode = hidden_sto_inode;
-+      else
-+              master_inode = hidden_inode;
-+
-+      /*
-+       * We allocate our new inode below, by calling iget.
-+       * iget will call our read_inode which will initialize some
-+       * of the new inode's fields
-+       */
-+
-+      /*
-+       * original: inode = iget(sb, hidden_inode->i_ino);
-+       */
-+      inode = iget(sb, iunique(sb, 25));
-+      if (!inode) {
-+              err = -EACCES;          /* should be impossible??? */
-+              goto out;
-+      }
-+
-+      /*
-+       * interpose the inode if not already interposed
-+       *   this is possible if the inode is being reused
-+       * XXX: what happens if we get_empty_inode() but there's another already?
-+       * for now, ASSERT() that this can't happen; fix later.
-+       */
-+      if (itohi(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi(inode) != NULL.\n");
-+      }
-+      if (itohi2(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi2(inode) != NULL.\n");
-+      }
-+
-+      /* mk: Carefull, igrab can't handle NULL inodes (ok, why should it?), so
-+       * we need to check here:
-+       */
-+      if(hidden_inode)
-+              itohi(inode) = igrab(hidden_inode);
-+      else
-+              itohi(inode) = NULL;
-+
-+      if(hidden_sto_inode)
-+              itohi2(inode) = igrab(hidden_sto_inode);
-+      else
-+              itohi2(inode) = NULL;
-+
-+
-+      /* Use different set of inode ops for symlinks & directories*/
-+      if (S_ISLNK(master_inode->i_mode))
-+              inode->i_op = &mini_fo_symlink_iops;
-+      else if (S_ISDIR(master_inode->i_mode))
-+              inode->i_op = &mini_fo_dir_iops;
-+
-+      /* Use different set of file ops for directories */
-+      if (S_ISDIR(master_inode->i_mode))
-+              inode->i_fop = &mini_fo_dir_fops;
-+
-+      /* properly initialize special inodes */
-+      if (S_ISBLK(master_inode->i_mode) || S_ISCHR(master_inode->i_mode) ||
-+          S_ISFIFO(master_inode->i_mode) || S_ISSOCK(master_inode->i_mode)) {
-+              init_special_inode(inode, master_inode->i_mode, master_inode->i_rdev);
-+      }
-+
-+      /* Fix our inode's address operations to that of the lower inode */
-+      if (inode->i_mapping->a_ops != master_inode->i_mapping->a_ops) {
-+              inode->i_mapping->a_ops = master_inode->i_mapping->a_ops;
-+      }
-+
-+      /* only (our) lookup wants to do a d_add */
-+      if (flag)
-+              d_add(dentry, inode);
-+      else
-+              d_instantiate(dentry, inode);
-+
-+      ASSERT(dtopd(dentry) != NULL);
-+
-+      /* all well, copy inode attributes */
-+      fist_copy_attr_all(inode, master_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+/* parse mount options "base=" and "sto=" */
-+dentry_t *
-+mini_fo_parse_options(super_block_t *sb, char *options)
-+{
-+      dentry_t *hidden_root = ERR_PTR(-EINVAL);
-+      dentry_t *hidden_root2 = ERR_PTR(-EINVAL);
-+      struct nameidata nd, nd2;
-+      char *name, *tmp, *end;
-+      int err = 0;
-+
-+      /* We don't want to go off the end of our arguments later on. */
-+      for (end = options; *end; end++);
-+
-+      while (options < end) {
-+              tmp = options;
-+              while (*tmp && *tmp != ',')
-+                      tmp++;
-+              *tmp = '\0';
-+              if (!strncmp("base=", options, 5)) {
-+                      name = options + 5;
-+                      printk(KERN_INFO "mini_fo: using base directory: %s\n", name);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if (path_init(name, LOOKUP_FOLLOW, &nd))
-+                              err = path_walk(name, &nd);
-+#else
-+                      err = path_lookup(name, LOOKUP_FOLLOW, &nd);
-+#endif
-+                      if (err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden directory '%s'\n", name);
-+                              hidden_root = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root = nd.dentry;
-+                      stopd(sb)->base_dir_dentry = nd.dentry;
-+                      stopd(sb)->hidden_mnt = nd.mnt;
-+
-+              } else if(!strncmp("sto=", options, 4)) {
-+                      /* parse the storage dir */
-+                      name = options + 4;
-+                      printk(KERN_INFO "mini_fo: using storage directory: %s\n", name);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if(path_init(name, LOOKUP_FOLLOW, &nd2))
-+                              err = path_walk(name, &nd2);
-+#else
-+                        err = path_lookup(name, LOOKUP_FOLLOW, &nd2);
-+#endif
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden storage directory '%s'\n", name);
-+
-+                              hidden_root2 = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root2 = nd2.dentry;
-+                      stopd(sb)->storage_dir_dentry = nd2.dentry;
-+                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      stohs2(sb) = hidden_root2->d_sb;
-+
-+                      /* validate storage dir, this is done in
-+                       * mini_fo_read_super for the base directory.
-+                       */
-+                      if (IS_ERR(hidden_root2)) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: storage dentry lookup failed (err = %ld)\n", PTR_ERR(hidden_root2));
-+                              goto out;
-+                      }
-+                      if (!hidden_root2->d_inode) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: no storage dir to interpose on.\n");
-+                              goto out;
-+                      }
-+                      stohs2(sb) = hidden_root2->d_sb;
-+              } else {
-+                      printk(KERN_WARNING "mini_fo: unrecognized option '%s'\n", options);
-+                      hidden_root = ERR_PTR(-EINVAL);
-+                      goto out;
-+              }
-+              options = tmp + 1;
-+      }
-+
-+ out:
-+      if(IS_ERR(hidden_root2))
-+              return hidden_root2;
-+      return hidden_root;
-+}
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+static int
-+#else
-+super_block_t *
-+#endif
-+mini_fo_read_super(super_block_t *sb, void *raw_data, int silent)
-+{
-+      dentry_t *hidden_root;
-+      int err = 0;
-+
-+      if (!raw_data) {
-+              printk(KERN_WARNING "mini_fo_read_super: missing argument\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      /*
-+       * Allocate superblock private data
-+       */
-+      __stopd(sb) = kmalloc(sizeof(struct mini_fo_sb_info), GFP_KERNEL);
-+      if (!stopd(sb)) {
-+              printk(KERN_WARNING "%s: out of memory\n", __FUNCTION__);
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+      stohs(sb) = NULL;
-+
-+      hidden_root = mini_fo_parse_options(sb, raw_data);
-+      if (IS_ERR(hidden_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: lookup_dentry failed (err = %ld)\n", PTR_ERR(hidden_root));
-+              err = PTR_ERR(hidden_root);
-+              goto out_free;
-+      }
-+      if (!hidden_root->d_inode) {
-+              printk(KERN_WARNING "mini_fo_read_super: no directory to interpose on\n");
-+              goto out_free;
-+      }
-+      stohs(sb) = hidden_root->d_sb;
-+
-+      /*
-+       * Linux 2.4.2-ac3 and beyond has code in
-+       * mm/filemap.c:generic_file_write() that requires sb->s_maxbytes
-+       * to be populated.  If not set, all write()s under that sb will
-+       * return 0.
-+       *
-+       * Linux 2.4.4+ automatically sets s_maxbytes to MAX_NON_LFS;
-+       * the filesystem should override it only if it supports LFS.
-+       */
-+      /* non-SCA code is good to go with LFS */
-+      sb->s_maxbytes = hidden_root->d_sb->s_maxbytes;
-+
-+      sb->s_op = &mini_fo_sops;
-+      /*
-+       * we can't use d_alloc_root if we want to use
-+       * our own interpose function unchanged,
-+       * so we simply replicate *most* of the code in d_alloc_root here
-+       */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      sb->s_root = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
-+#else
-+      sb->s_root = d_alloc(NULL, &(const struct qstr){hash: 0, name: "/", len : 1});
-+#endif
-+      if (IS_ERR(sb->s_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: d_alloc failed\n");
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      sb->s_root->d_op = &mini_fo_dops;
-+      sb->s_root->d_sb = sb;
-+      sb->s_root->d_parent = sb->s_root;
-+
-+      /* link the upper and lower dentries */
-+      __dtopd(sb->s_root) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+      if (!dtopd(sb->s_root)) {
-+              err = -ENOMEM;
-+              goto out_dput2;
-+      }
-+      dtopd(sb->s_root)->state = MODIFIED;
-+      dtohd(sb->s_root) = hidden_root;
-+
-+      /* fanout relevant, interpose on storage root dentry too */
-+      dtohd2(sb->s_root) = stopd(sb)->storage_dir_dentry;
-+
-+      /* ...and call tri-interpose to interpose root dir inodes
-+       * if (mini_fo_interpose(hidden_root, sb->s_root, sb, 0))
-+       */
-+      if(mini_fo_tri_interpose(hidden_root, dtohd2(sb->s_root), sb->s_root, sb, 0))
-+              goto out_dput2;
-+
-+      /* initalize the wol list */
-+      itopd(sb->s_root->d_inode)->deleted_list_size = -1;
-+      itopd(sb->s_root->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(sb->s_root);
-+
-+      goto out;
-+
-+ out_dput2:
-+      dput(sb->s_root);
-+ out_dput:
-+      dput(hidden_root);
-+      dput(dtohd2(sb->s_root)); /* release the hidden_sto_dentry too */
-+ out_free:
-+      kfree(stopd(sb));
-+      __stopd(sb) = NULL;
-+ out:
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        return err;
-+#else
-+        if (err) {
-+              return ERR_PTR(err);
-+        } else {
-+              return sb;
-+        }
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+static int mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data, struct vfsmount *mnt)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super, mnt);
-+}
-+#else
-+static struct super_block *mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super);
-+}
-+#endif
-+
-+void mini_fo_kill_block_super(struct super_block *sb)
-+{
-+      generic_shutdown_super(sb);
-+      /*
-+       *      XXX: BUG: Halcrow: Things get unstable sometime after this point:
-+       *      lib/rwsem-spinlock.c:127: spin_is_locked on uninitialized
-+       *      fs/fs-writeback.c:402: spin_lock(fs/super.c:a0381828) already
-+       *      locked by fs/fs-writeback.c/402
-+       *
-+       *      Apparently, someone's not releasing a lock on sb_lock...
-+       */
-+}
-+
-+static struct file_system_type mini_fo_fs_type = {
-+      .owner          = THIS_MODULE,
-+      .name           = "mini_fo",
-+      .get_sb         = mini_fo_get_sb,
-+      .kill_sb        = mini_fo_kill_block_super,
-+      .fs_flags       = 0,
-+};
-+
-+
-+#else
-+static DECLARE_FSTYPE(mini_fo_fs_type, "mini_fo", mini_fo_read_super, 0);
-+#endif
-+
-+static int __init init_mini_fo_fs(void)
-+{
-+      printk("Registering mini_fo version $Id$\n");
-+      return register_filesystem(&mini_fo_fs_type);
-+}
-+static void __exit exit_mini_fo_fs(void)
-+{
-+      printk("Unregistering mini_fo version $Id$\n");
-+      unregister_filesystem(&mini_fo_fs_type);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+EXPORT_NO_SYMBOLS;
-+#endif
-+
-+MODULE_AUTHOR("Erez Zadok <ezk@cs.sunysb.edu>");
-+MODULE_DESCRIPTION("FiST-generated mini_fo filesystem");
-+MODULE_LICENSE("GPL");
-+
-+/* MODULE_PARM(fist_debug_var, "i"); */
-+/* MODULE_PARM_DESC(fist_debug_var, "Debug level"); */
-+
-+module_init(init_mini_fo_fs)
-+module_exit(exit_mini_fo_fs)
---- /dev/null
-+++ b/fs/mini_fo/Makefile
-@@ -0,0 +1,17 @@
-+#
-+# Makefile for mini_fo 2.4 and 2.6 Linux kernels
-+#
-+# Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+#
-+# 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.
-+#
-+
-+obj-$(CONFIG_MINI_FO) := mini_fo.o
-+mini_fo-objs   := meta.o dentry.o file.o inode.o main.o super.o state.o aux.o
-+
-+# dependencies
-+${mini_fo-objs}: mini_fo.h fist.h
-+
---- /dev/null
-+++ b/fs/mini_fo/meta.c
-@@ -0,0 +1,1000 @@
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+int meta_build_lists(dentry_t *dentry)
-+{
-+      struct mini_fo_inode_info *inode_info;
-+
-+      dentry_t *meta_dentry = 0;
-+      file_t *meta_file = 0;
-+      mm_segment_t old_fs;
-+      void *buf;
-+
-+      int bytes, len;
-+      struct vfsmount *meta_mnt;
-+      char *entry;
-+
-+      inode_info = itopd(dentry->d_inode);
-+      if(!(inode_info->deleted_list_size == -1 &&
-+           inode_info->renamed_list_size == -1)) {
-+              printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                  Error, list(s) not virgin.\n");
-+              return -1;
-+      }
-+
-+      /* init our meta lists */
-+      INIT_LIST_HEAD(&inode_info->deleted_list);
-+      inode_info->deleted_list_size = 0;
-+
-+      INIT_LIST_HEAD(&inode_info->renamed_list);
-+      inode_info->renamed_list_size = 0;
-+
-+      /* might there be a META-file? */
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           dtohd2(dentry),
-+                                           strlen(META_FILENAME));
-+              if(!meta_dentry->d_inode) {
-+                      dput(meta_dentry);
-+                      goto out_ok;
-+              }
-+              /* $%& err, is this correct? */
-+              meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              mntget(meta_mnt);
-+
-+
-+              /* open META-file for reading */
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              if(!meta_file || IS_ERR(meta_file)) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR opening META file.\n");
-+                      goto out_err;
-+              }
-+
-+              /* check if fs supports reading */
-+              if(!meta_file->f_op->read) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, fs does not support reading.\n");
-+                      goto out_err_close;
-+              }
-+
-+              /* allocate a page for transfering the data */
-+              buf = (void *) __get_free_page(GFP_KERNEL);
-+              if(!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, out of mem.\n");
-+                      goto out_err_close;
-+              }
-+              meta_file->f_pos = 0;
-+              old_fs = get_fs();
-+              set_fs(KERNEL_DS);
-+              do {
-+                      char *c;
-+                      bytes = meta_file->f_op->read(meta_file, buf, PAGE_SIZE, &meta_file->f_pos);
-+                      if(bytes == PAGE_SIZE) {
-+                              /* trim a cut off filename and adjust f_pos to get it next time */
-+                              for(c = (char*) buf+PAGE_SIZE;
-+                                  *c != '\n';
-+                                  c--, bytes--, meta_file->f_pos--);
-+                      }
-+                      entry = (char *) buf;
-+                      while(entry < (char *) buf+bytes) {
-+
-+                              char *old_path;
-+                              char *dir_name;
-+                              int old_len, new_len;
-+
-+                              /* len without '\n'*/
-+                              len = (int) (strchr(entry, '\n') - entry);
-+                              switch (*entry) {
-+                              case 'D':
-+                                      /* format: "D filename" */
-+                                      meta_list_add_d_entry(dentry,
-+                                                            entry+2,
-+                                                            len-2);
-+                                      break;
-+                              case 'R':
-+                                      /* format: "R path/xy/dir newDir" */
-+                                      old_path = entry+2;
-+                                      dir_name = strchr(old_path, ' ') + 1;
-+                                      old_len =  dir_name - old_path - 1;
-+                                      new_len = ((int) entry) + len - ((int ) dir_name);
-+                                      meta_list_add_r_entry(dentry,
-+                                                            old_path,
-+                                                            old_len,
-+                                                            dir_name,
-+                                                            new_len);
-+                                      break;
-+                              default:
-+                                      /* unknown entry type detected */
-+                                      break;
-+                              }
-+                              entry += len+1;
-+                      }
-+
-+              } while(meta_file->f_pos < meta_dentry->d_inode->i_size);
-+
-+              free_page((unsigned long) buf);
-+              set_fs(old_fs);
-+              fput(meta_file);
-+      }
-+      goto out_ok;
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out_err:
-+      mntput(meta_mnt);
-+      dput(meta_dentry);
-+      return -1;
-+ out_ok:
-+      return 1; /* check this!!! inode_info->wol_size; */
-+}
-+
-+/* cleanups up all lists and free's the mem by dentry */
-+int meta_put_lists(dentry_t *dentry)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_put_lists: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_put_lists(dentry->d_inode);
-+}
-+
-+/* cleanups up all lists and free's the mem by inode */
-+int __meta_put_lists(inode_t *inode)
-+{
-+      int err = 0;
-+      if(!inode || !itopd(inode)) {
-+              printk("mini_fo: __meta_put_lists: invalid inode passed.\n");
-+              return -1;
-+      }
-+      err = __meta_put_d_list(inode);
-+      err |= __meta_put_r_list(inode);
-+      return err;
-+}
-+
-+int meta_sync_lists(dentry_t *dentry)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_sync_lists: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      err = meta_sync_d_list(dentry, 0);
-+      err |= meta_sync_r_list(dentry, 1);
-+      return err;
-+}
-+
-+
-+/* remove all D entries from the renamed list and free the mem */
-+int __meta_put_d_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: __meta_put_d_list: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the DELETED-list */
-+        if(inode_info->deleted_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->deleted_list)) {
-+              tmp = inode_info->deleted_list.next;
-+              list_del(tmp);
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+      }
-+      inode_info->deleted_list_size = 0;
-+
-+      return 0;
-+}
-+
-+/* remove all R entries from the renamed list and free the mem */
-+int __meta_put_r_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+      struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_put_r_list: invalid inode.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the RENAMED-list */
-+        if(inode_info->renamed_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->renamed_list)) {
-+              tmp = inode_info->renamed_list.next;
-+              list_del(tmp);
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+      }
-+      inode_info->renamed_list_size = 0;
-+
-+      return 0;
-+}
-+
-+int meta_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      err = meta_list_add_d_entry(dentry, name, len);
-+      err |= meta_write_d_entry(dentry,name,len);
-+      return err;
-+}
-+
-+/* add a D entry to the deleted list */
-+int meta_list_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0)
-+                return -1;
-+
-+        del_entry = (struct deleted_entry *)
-+              kmalloc(sizeof(struct deleted_entry), GFP_KERNEL);
-+        del_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!del_entry || !del_entry->name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  out of mem.\n");
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(del_entry->name, name, len);
-+        del_entry->len = len;
-+
-+        list_add(&del_entry->list, &inode_info->deleted_list);
-+        inode_info->deleted_list_size++;
-+        return 0;
-+}
-+
-+int meta_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+      int err = 0;
-+      err = meta_list_add_r_entry(dentry,
-+                                  old_name, old_len,
-+                                  new_name, new_len);
-+      err |= meta_write_r_entry(dentry,
-+                                old_name, old_len,
-+                                new_name, new_len);
-+      return err;
-+}
-+
-+/* add a R entry to the renamed list */
-+int meta_list_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+
-+        ren_entry = (struct renamed_entry *)
-+              kmalloc(sizeof(struct renamed_entry), GFP_KERNEL);
-+        ren_entry->old_name = (char*) kmalloc(old_len, GFP_KERNEL);
-+        ren_entry->new_name = (char*) kmalloc(new_len, GFP_KERNEL);
-+
-+        if(!ren_entry || !ren_entry->old_name || !ren_entry->new_name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  out of mem.\n");
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(ren_entry->old_name, old_name, old_len);
-+        ren_entry->old_len = old_len;
-+        strncpy(ren_entry->new_name, new_name, new_len);
-+        ren_entry->new_len = new_len;
-+
-+        list_add(&ren_entry->list, &inode_info->renamed_list);
-+        inode_info->renamed_list_size++;
-+        return 0;
-+}
-+
-+
-+int meta_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+
-+      err = meta_list_remove_r_entry(dentry, name, len);
-+      err |= meta_sync_lists(dentry);
-+      return err;
-+}
-+
-+int meta_list_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_list_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_list_remove_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_list_remove_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT
-+                     "mini_fo: __meta_list_remove_r_entry: \
-+                        invalid inode passed.\n");
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+        if(inode_info->renamed_list_size == 0)
-+                return 1;
-+
-+      list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      list_del(tmp);
-+                      kfree(ren_entry->new_name);
-+                      kfree(ren_entry->old_name);
-+                      kfree(ren_entry);
-+                      inode_info->renamed_list_size--;
-+                      return 0;
-+              }
-+      }
-+      return 1;
-+}
-+
-+
-+/* append a single D entry to the meta file */
-+int meta_write_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry), strlen (META_FILENAME));
-+
-+      /* We need to create a META-file */
-+        if(!meta_dentry->d_inode) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR,
-+                         NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt); /* $%& is this necessary? */
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: len for name, 1 for \n and 2 for "D " */
-+      buf = (char *) kmalloc(len+3, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'D';
-+      buf[1] = ' ';
-+      strncpy(buf+2, name, len);
-+      buf[len+2] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, len+3,
-+                                     &meta_file->f_pos);
-+      if(bytes != len+3) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR writing.\n");
-+              err = -1;
-+      }
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* append a single R entry to the meta file */
-+int meta_write_r_entry(dentry_t *dentry,
-+                     const char *old_name, int old_len,
-+                     const char *new_name, int new_len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+      struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->renamed_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* build the storage structure? */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen (META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt);
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+      buf_len = old_len + new_len + 4;
-+      buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'R';
-+      buf[1] = ' ';
-+      strncpy(buf + 2, old_name, old_len);
-+      buf[old_len + 2] = ' ';
-+      strncpy(buf + old_len + 3, new_name, new_len);
-+      buf[buf_len -1] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, buf_len, &meta_file->f_pos);
-+      if(bytes != buf_len) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: ERROR writing.\n");
-+              err = -1;
-+      }
-+
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* sync D list to disk, append data if app_flag is 1 */
-+/* check the meta_mnt, which seems not to be used (properly)  */
-+
-+int meta_sync_d_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  invalid inode passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+
-+              /* size: len for name, 1 for \n and 2 for "D " */
-+              buf = (char *) kmalloc(del_entry->len+3, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+
-+              buf[0] = 'D';
-+              buf[1] = ' ';
-+              strncpy(buf+2, del_entry->name, del_entry->len);
-+              buf[del_entry->len+2] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             del_entry->len+3,
-+                                             &meta_file->f_pos);
-+              if(bytes != del_entry->len+3) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+
-+}
-+
-+int meta_sync_r_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              /* size:
-+               * 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+              buf_len = ren_entry->old_len + ren_entry->new_len + 4;
-+              buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+              buf[0] = 'R';
-+              buf[1] = ' ';
-+              strncpy(buf + 2, ren_entry->old_name, ren_entry->old_len);
-+              buf[ren_entry->old_len + 2] = ' ';
-+              strncpy(buf + ren_entry->old_len + 3,
-+                      ren_entry->new_name, ren_entry->new_len);
-+              buf[buf_len - 1] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             buf_len, &meta_file->f_pos);
-+              if(bytes != buf_len) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+int meta_check_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode)
-+              printk(KERN_CRIT "mini_fo: meta_check_d_dentry: \
-+                                  invalid dentry passed.\n");
-+      return __meta_check_d_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_check_d_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT "mini_fo: __meta_check_d_dentry: \
-+                                  invalid inode passed.\n");
-+
-+        inode_info = itopd(inode);
-+
-+        if(inode_info->deleted_list_size <= 0)
-+                return 0;
-+
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              if(del_entry->len != len)
-+                      continue;
-+
-+              if(!strncmp(del_entry->name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+/*
-+ * check if file has been renamed and return path to orig. base dir.
-+ * Implements no error return values so far, what of course sucks.
-+ * String is null terminated.'
-+ */
-+char* meta_check_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid dentry passed.\n");
-+              return NULL;
-+      }
-+      return __meta_check_r_entry(dentry->d_inode, name, len);
-+}
-+
-+char* __meta_check_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+      char *old_path;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid inode passed.\n");
-+              return NULL;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return NULL;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      old_path = (char *)
-+                              kmalloc(ren_entry->old_len+1, GFP_KERNEL);
-+                      strncpy(old_path,
-+                              ren_entry->old_name,
-+                              ren_entry->old_len);
-+                      old_path[ren_entry->old_len]='\0';
-+                      return old_path;
-+              }
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * This version only checks if entry exists and return:
-+ *     1 if exists,
-+ *     0 if not,
-+ *    -1 if error.
-+ */
-+int meta_is_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_is_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_is_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return -1;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/mini_fo.h
-@@ -0,0 +1,510 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __MINI_FO_H_
-+#define __MINI_FO_H_
-+
-+#ifdef __KERNEL__
-+
-+/* META stuff */
-+#define META_FILENAME "META_dAfFgHE39ktF3HD2sr"
-+
-+/* use xattrs? */
-+#define XATTR
-+
-+/* File attributes that when changed, result in a file beeing copied to storage */
-+#define COPY_FLAGS ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE
-+
-+/*
-+ * mini_fo filestates
-+ */
-+#define MODIFIED       1
-+#define UNMODIFIED     2
-+#define CREATED        3
-+#define DEL_REWRITTEN  4
-+#define DELETED        5
-+#define NON_EXISTANT   6
-+
-+/* fist file systems superblock magic */
-+# define MINI_FO_SUPER_MAGIC 0xf15f
-+
-+/*
-+ * STRUCTURES:
-+ */
-+
-+/* mini_fo inode data in memory */
-+struct mini_fo_inode_info {
-+      inode_t *wii_inode;
-+      inode_t *wii_inode2; /* pointer to storage inode */
-+
-+      /* META-data lists */
-+      /* deleted list, ex wol */
-+      struct list_head deleted_list;
-+      int deleted_list_size;
-+
-+      /* renamed list */
-+      struct list_head renamed_list;
-+      int renamed_list_size;
-+
-+      /* add other lists here ... */
-+};
-+
-+/* mini_fo dentry data in memory */
-+struct mini_fo_dentry_info {
-+      dentry_t *wdi_dentry;
-+      dentry_t *wdi_dentry2; /* pointer to  storage dentry */
-+      unsigned int state;  /* state of the mini_fo dentry */
-+};
-+
-+
-+/* mini_fo super-block data in memory */
-+struct mini_fo_sb_info {
-+      super_block_t *wsi_sb, *wsi_sb2; /* mk: might point to the same sb */
-+      struct vfsmount *hidden_mnt, *hidden_mnt2;
-+      dentry_t *base_dir_dentry;
-+      dentry_t *storage_dir_dentry;
-+      ;
-+};
-+
-+/* readdir_data, readdir helper struct */
-+struct readdir_data {
-+      struct list_head ndl_list; /* linked list head ptr */
-+      int ndl_size; /* list size */
-+      int sto_done; /* flag to show that the storage dir entries have
-+                     * all been read an now follow base entries */
-+};
-+
-+/* file private data. */
-+struct mini_fo_file_info {
-+      struct file *wfi_file;
-+      struct file *wfi_file2; /* pointer to storage file */
-+      struct readdir_data rd;
-+};
-+
-+/* struct ndl_entry */
-+struct ndl_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/********************************
-+ *  META-data structures
-+ ********************************/
-+
-+/* deleted entry */
-+struct deleted_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* renamed entry */
-+struct renamed_entry {
-+      struct list_head list;
-+      char *old_name;     /* old directory with full path */
-+      int old_len;        /* length of above string */
-+      char *new_name;     /* new directory name */
-+      int new_len;        /* length of above string */
-+};
-+
-+/* attr_change entry */
-+struct attr_change_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* link entry */
-+struct link_entry {
-+      struct list_head list;
-+      int links_moved;
-+      int inum_base;
-+      int inum_sto;
-+      char *weird_name;
-+      int weird_name_len;
-+};
-+
-+
-+/* Some other stuff required for mini_fo_filldir64, copied from
-+ * fs/readdir.c
-+ */
-+
-+#define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1))
-+#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
-+
-+
-+struct linux_dirent64 {
-+        u64             d_ino;
-+        s64             d_off;
-+        unsigned short  d_reclen;
-+        unsigned char   d_type;
-+        char            d_name[0];
-+};
-+
-+
-+struct getdents_callback64 {
-+        struct linux_dirent64 * current_dir;
-+        struct linux_dirent64 * previous;
-+        int count;
-+        int error;
-+};
-+
-+struct linux_dirent {
-+      unsigned long   d_ino;
-+      unsigned long   d_off;
-+      unsigned short  d_reclen;
-+      char            d_name[1];
-+};
-+
-+struct getdents_callback {
-+      struct linux_dirent * current_dir;
-+      struct linux_dirent * previous;
-+      int count;
-+      int error;
-+};
-+
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* file TO private_data */
-+# define ftopd(file) ((struct mini_fo_file_info *)((file)->private_data))
-+# define __ftopd(file) ((file)->private_data)
-+/* file TO hidden_file */
-+# define ftohf(file) ((ftopd(file))->wfi_file)
-+# define ftohf2(file) ((ftopd(file))->wfi_file2)
-+
-+/* inode TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->i_private)
-+# define __itopd(ino) ((ino)->i_private)
-+#else
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->u.generic_ip)
-+# define __itopd(ino) ((ino)->u.generic_ip)
-+#endif
-+/* inode TO hidden_inode */
-+# define itohi(ino) (itopd(ino)->wii_inode)
-+# define itohi2(ino) (itopd(ino)->wii_inode2)
-+
-+/* superblock TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->s_fs_info)
-+# define __stopd(super) ((super)->s_fs_info)
-+#else
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->u.generic_sbp)
-+# define __stopd(super) ((super)->u.generic_sbp)
-+#endif
-+
-+/* unused? # define vfs2priv stopd */
-+/* superblock TO hidden_superblock */
-+
-+# define stohs(super) (stopd(super)->wsi_sb)
-+# define stohs2(super) (stopd(super)->wsi_sb2)
-+
-+/* dentry TO private_data */
-+# define dtopd(dentry) ((struct mini_fo_dentry_info *)(dentry)->d_fsdata)
-+# define __dtopd(dentry) ((dentry)->d_fsdata)
-+/* dentry TO hidden_dentry */
-+# define dtohd(dent) (dtopd(dent)->wdi_dentry)
-+# define dtohd2(dent) (dtopd(dent)->wdi_dentry2)
-+
-+/* dentry to state */
-+# define dtost(dent) (dtopd(dent)->state)
-+# define sbt(sb) ((sb)->s_type->name)
-+
-+#define IS_WRITE_FLAG(flag) (flag & (O_RDWR | O_WRONLY | O_APPEND))
-+#define IS_COPY_FLAG(flag) (flag & (COPY_FLAGS))
-+
-+/* macros to simplify non-SCA code */
-+#  define MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages)
-+#  define MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages)
-+#  define FREE_PAGE_POINTERS(hidden_pages, num)
-+#  define FREE_PAGEDATA_POINTERS(hidden_pages_data, num)
-+#  define FOR_EACH_PAGE
-+#  define CURRENT_HIDDEN_PAGE hidden_page
-+#  define CURRENT_HIDDEN_PAGEDATA hidden_page_data
-+#  define CURRENT_HIDDEN_PAGEINDEX page->index
-+
-+/*
-+ * EXTERNALS:
-+ */
-+extern struct file_operations mini_fo_main_fops;
-+extern struct file_operations mini_fo_dir_fops;
-+extern struct inode_operations mini_fo_main_iops;
-+extern struct inode_operations mini_fo_dir_iops;
-+extern struct inode_operations mini_fo_symlink_iops;
-+extern struct super_operations mini_fo_sops;
-+extern struct dentry_operations mini_fo_dops;
-+extern struct vm_operations_struct mini_fo_shared_vmops;
-+extern struct vm_operations_struct mini_fo_private_vmops;
-+extern struct address_space_operations mini_fo_aops;
-+
-+#if 0 /* unused by mini_fo */
-+extern int mini_fo_interpose(dentry_t *hidden_dentry, dentry_t *this_dentry, super_block_t *sb, int flag);
-+#if defined(FIST_FILTER_DATA) || defined(FIST_FILTER_SCA)
-+extern page_t *mini_fo_get1page(file_t *file, int index);
-+extern int mini_fo_fill_zeros(file_t *file, page_t *page, unsigned from);
-+# endif /* FIST_FILTER_DATA || FIST_FILTER_SCA */
-+
-+
-+#  define mini_fo_hidden_dentry(d) __mini_fo_hidden_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+#  define mini_fo_hidden_sto_dentry(d) __mini_fo_hidden_sto_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+
-+extern dentry_t *__mini_fo_hidden_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+extern dentry_t *__mini_fo_hidden_sto_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+
-+extern int mini_fo_read_file(const char *filename, void *buf, int len);
-+extern int mini_fo_write_file(const char *filename, void *buf, int len);
-+extern dentry_t *fist_lookup(dentry_t *dir, const char *name, vnode_t **out, uid_t uid, gid_t gid);
-+#endif /* unused by mini_fo */
-+
-+/* state transition functions */
-+extern int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag);
-+extern int nondir_del_rew_to_del(dentry_t *dentry);
-+extern int nondir_creat_to_del(dentry_t *dentry);
-+extern int nondir_mod_to_del(dentry_t *dentry);
-+extern int nondir_unmod_to_del(dentry_t *dentry);
-+
-+extern int dir_unmod_to_mod(dentry_t *dentry);
-+
-+/* rename specials */
-+extern int rename_directory(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+extern int rename_nondir(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+
-+/* misc stuff */
-+extern int mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                               dentry_t *hidden_sto_dentry,
-+                               dentry_t *dentry,
-+                               super_block_t *sb, int flag);
-+
-+extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                         dentry_t *src_dentry, struct vfsmount *src_mnt);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, dev_t dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd);
-+#else
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, int dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode);
-+#endif
-+
-+extern int create_sto_dir(dentry_t *dentry, int mode);
-+
-+extern int exists_in_storage(dentry_t *dentry);
-+extern int is_mini_fo_existant(dentry_t *dentry);
-+extern int get_neg_sto_dentry(dentry_t *dentry);
-+extern int build_sto_structure(dentry_t *dir, dentry_t *dentry);
-+extern int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len);
-+extern dentry_t *bpath_walk(super_block_t *sb, char *bpath);
-+extern int bpath_put(dentry_t *dentry);
-+
-+/* check_mini_fo types functions */
-+extern int check_mini_fo_dentry(dentry_t *dentry);
-+extern int check_mini_fo_file(file_t *file);
-+extern int check_mini_fo_inode(inode_t *inode);
-+
-+/* General meta functions, can be called from outside of meta.c */
-+extern int meta_build_lists(dentry_t *dentry);
-+extern int meta_put_lists(dentry_t *dentry);
-+extern int __meta_put_lists(inode_t *inode);
-+
-+extern int meta_add_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_add_r_entry(dentry_t *dentry,
-+                          const char *old_name, int old_len,
-+                          const char *new_name, int new_len);
-+
-+extern int meta_remove_r_entry(dentry_t *dentry, const char *name, int len);
-+
-+extern int meta_check_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_check_d_entry(inode_t *inode, const char *name, int len);
-+
-+extern char* meta_check_r_entry(dentry_t *dentry, const char *name, int len);
-+extern char* __meta_check_r_entry(inode_t *inode, const char *name, int len);
-+extern int meta_is_r_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_is_r_entry(inode_t *inode, const char *name, int len);
-+
-+/* Specific meta functions, should be called only inside meta.c */
-+extern int __meta_put_d_list(inode_t *inode);
-+extern int __meta_put_r_list(inode_t *inode);
-+
-+extern int meta_list_add_d_entry(dentry_t *dentry,
-+                               const char *name, int len);
-+extern int meta_list_add_r_entry(dentry_t *dentry,
-+                               const char *old_name, int old_len,
-+                               const char *new_name, int new_len);
-+
-+extern int meta_list_remove_r_entry(dentry_t *dentry,
-+                                  const char *name, int len);
-+
-+extern int __meta_list_remove_r_entry(inode_t *inode,
-+                                    const char *name, int len);
-+
-+extern int meta_write_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_write_r_entry(dentry_t *dentry,
-+                            const char *old_name, int old_len,
-+                            const char *new_name, int new_len);
-+
-+extern int meta_sync_lists(dentry_t *dentry);
-+extern int meta_sync_d_list(dentry_t *dentry, int app_flag);
-+extern int meta_sync_r_list(dentry_t *dentry, int app_flag);
-+
-+/* ndl stuff */
-+extern int ndl_add_entry(struct readdir_data *rd, const char *name, int len);
-+extern void ndl_put_list(struct readdir_data *rd);
-+extern int ndl_check_entry(struct readdir_data *rd,
-+                         const char *name, int len);
-+
-+
-+# define copy_inode_size(dst, src) \
-+    dst->i_size = src->i_size; \
-+    dst->i_blocks = src->i_blocks;
-+
-+static inline void
-+fist_copy_attr_atime(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+}
-+static inline void
-+fist_copy_attr_times(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+}
-+static inline void
-+fist_copy_attr_timesizes(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+      copy_inode_size(dest, src);
-+}
-+static inline void
-+fist_copy_attr_all(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_mode = src->i_mode;
-+      dest->i_nlink = src->i_nlink;
-+      dest->i_uid = src->i_uid;
-+      dest->i_gid = src->i_gid;
-+      dest->i_rdev = src->i_rdev;
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+      dest->i_blksize = src->i_blksize;
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,12)
-+      dest->i_blkbits = src->i_blkbits;
-+# endif /* linux 2.4.12 and newer */
-+      copy_inode_size(dest, src);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      dest->i_attr_flags = src->i_attr_flags;
-+#else
-+      dest->i_flags = src->i_flags;
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+/* copied from linux/fs.h */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      if (m1 != m2) {
-+              if ((unsigned long) m1 < (unsigned long) m2) {
-+                      struct mutex *tmp = m2;
-+                      m2 = m1; m1 = tmp;
-+              }
-+              mutex_lock(m1);
-+      }
-+      mutex_lock(m2);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      mutex_unlock(m1);
-+      if (m1 != m2)
-+              mutex_unlock(m2);
-+      dput(d1);
-+      dput(d2);
-+}
-+
-+#else
-+static inline void double_down(struct semaphore *s1, struct semaphore *s2)
-+{
-+        if (s1 != s2) {
-+                if ((unsigned long) s1 < (unsigned long) s2) {
-+                        struct semaphore *tmp = s2;
-+                        s2 = s1; s1 = tmp;
-+                }
-+                down(s1);
-+        }
-+        down(s2);
-+}
-+
-+static inline void double_up(struct semaphore *s1, struct semaphore *s2)
-+{
-+        up(s1);
-+        if (s1 != s2)
-+                up(s2);
-+}
-+
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_down(&d1->d_inode->i_sem, &d2->d_inode->i_sem);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_up(&d1->d_inode->i_sem,&d2->d_inode->i_sem);
-+        dput(d1);
-+        dput(d2);
-+}
-+#endif   /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
-+#endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
-+#endif /* __KERNEL__ */
-+
-+/*
-+ * Definitions for user and kernel code
-+ */
-+
-+/* ioctls */
-+
-+#endif        /* not __MINI_FO_H_ */
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-merge
-@@ -0,0 +1,180 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+BASE=
-+STO=
-+HELP=
-+DRYRUN=
-+VERBOSE=
-+TMP="/tmp/"
-+META_NAME="META_dAfFgHE39ktF3HD2sr"
-+SKIP_DEL_LIST="skip-delete-list.mini_fo-merge"
-+
-+COMMAND=
-+exec_command()
-+{
-+    if [ x$DRYRUN == "xset" ]; then
-+      echo "  would run: $COMMAND"
-+    elif ! [ x$DRYRUN == "xset" ]; then
-+      if [ x$VERBOSE == "xset" ]; then
-+          echo "  running: $COMMAND"
-+      fi
-+      eval $COMMAND
-+    fi
-+}
-+
-+usage()
-+{
-+cat <<EOF
-+
-+USAGE: $0 -b <base dir> -s <storage dir>
-+Version 0.1
-+
-+This script merges the contents of a mini_fo storage file system back
-+to the base file system.
-+
-+!!! Warning: This will modify the base filesystem and can destroy data
-+             if used wrongly.
-+
-+Options:
-+     -b <base dir>
-+          the directory of the base file system.
-+
-+     -s <storage dir>
-+          the directory of the storage file system.
-+
-+     -d   dry run, will not change anything and print the commands that
-+          would be executed.
-+
-+     -t   tmp dir for storing temporary file. default: $TMP
-+
-+     -v   show what operations are performed.
-+
-+     -h   displays this message.
-+
-+EOF
-+}
-+
-+# parse parameters
-+while getopts hdvt:b:s: OPTS
-+  do
-+  case $OPTS in
-+      h)  HELP="set";;
-+      d)  DRYRUN="set";;
-+      v)  VERBOSE="set";;
-+      b)  BASE="$OPTARG";;
-+      s)  STO="$OPTARG";;
-+      t)  TMP="$OPTARG";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+if ! [ -d "$BASE" ] || ! [ -d "$STO" ]; then
-+    echo -e "$0:\n Error, -s and/or -b argument missing. type $0 -h for help."
-+    exit -1;
-+fi
-+
-+# get full paths
-+pushd $STO; STO=`pwd`; popd
-+pushd $BASE; BASE=`pwd`; popd
-+TMP=${TMP%/}
-+
-+
-+cat<<EOF
-+###############################################################################
-+# mini_fo-merge
-+#
-+# base dir:       $BASE
-+# storage dir:    $STO
-+# meta filename:  $META_NAME
-+# dry run:        $DRYRUN
-+# verbose:        $VERBOSE
-+# tmp files:      $TMP
-+###############################################################################
-+
-+EOF
-+
-+rm $TMP/$SKIP_DEL_LIST
-+
-+# first process all renamed dirs
-+echo "Merging renamed directories..."
-+pushd $STO &> /dev/null
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^R ' | tr -s ':R' ' ' | while read ENTRY; do
-+    echo "entry: $ENTRY"
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    OLD_B_DIR=`echo $ENTRY | cut -d ' ' -f 2 | sed -e 's/\///'`
-+    NEW_NAME=`echo $ENTRY | cut -d ' ' -f 3`
-+    NEW_B_DIR=`echo $META_FILE | sed -e "s/$META_NAME/$NEW_NAME/" | sed -e 's/^\.\///'`
-+    echo "META_FILE: $META_FILE"
-+    echo "OLD_B_DIR: $OLD_B_DIR"
-+    echo "NEW_NAME: $NEW_NAME"
-+    echo  "NEW_B_DIR: $NEW_B_DIR"
-+
-+    pushd $BASE &> /dev/null
-+    # remove an existing dir in storage
-+    COMMAND="rm -rf $NEW_B_DIR"; exec_command
-+    COMMAND="cp -R $OLD_B_DIR $NEW_B_DIR"; exec_command
-+    echo ""
-+    popd &> /dev/null
-+
-+    # remember this dir to exclude it from deleting later
-+    echo $NEW_B_DIR >> $TMP/$SKIP_DEL_LIST
-+done
-+
-+# delete all whiteouted files from base
-+echo -e "\nDeleting whiteout'ed files from base file system..."
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^D ' | sed -e 's/:D//' | while read ENTRY; do
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    DEL_NAME=`echo $ENTRY | cut -d ' ' -f 2`
-+    DEL_FILE=`echo $META_FILE | sed -e "s/$META_NAME/$DEL_NAME/" | sed -e 's/^\.\///'`
-+    grep -x $DEL_FILE $TMP/$SKIP_DEL_LIST &> /dev/null
-+    if [ $? -ne 0 ]; then
-+      pushd $BASE &> /dev/null
-+      COMMAND="rm -rf $DEL_FILE"; exec_command
-+      popd &> /dev/null
-+    else
-+      echo "  excluding: $DEL_FILE as in skip-del-list."
-+    fi
-+done
-+
-+# create all dirs and update permissions
-+echo -e "\nSetting up directory structures in base file system..."
-+find . -type d | sed -e 's/^\.\///' | while read DIR; do
-+    PERMS=`stat -c %a $DIR`
-+    DIR_UID=`stat -c %u $DIR`
-+    DIR_GID=`stat -c %g $DIR`
-+    pushd $BASE &> /dev/null
-+    if ! [ -d $DIR ]; then
-+      COMMAND="mkdir -p $DIR"; exec_command
-+    fi
-+    COMMAND="chmod $PERMS $DIR"; exec_command
-+    COMMAND="chown $DIR_UID:$DIR_GID $DIR"; exec_command
-+    popd &> /dev/null
-+done
-+
-+# merge all non-directory files
-+echo -e "\nMerging all non-directory files...."
-+for i in b c p f l s; do
-+    find . -type $i | sed -e 's/^\.\///' | grep -v "$META_NAME" | while read FILE; do
-+      pushd $BASE #&> /dev/null
-+      COMMAND="cp -df $STO/$FILE $BASE/$FILE"; exec_command
-+      popd &> /dev/null
-+    done
-+done
-+popd &> /dev/null
-+
-+#rm $TMP/$SKIP_DEL_LIST
-+
-+echo "Done!"
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-overlay
-@@ -0,0 +1,130 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+HELP=
-+SUFF=
-+MNTP=
-+MNT_DIR="/mnt"
-+STO=
-+STO_DIR="/tmp"
-+BASE=
-+
-+usage()
-+{
-+cat <<EOF
-+
-+Usage: $0 [-s suffix] [-d sto_dir_dir] [-m mount point] base_dir
-+Version 0.1
-+
-+This script overlays the given base directory using the mini_fo file
-+system. If only the base directory base_dir is given, $0
-+will use a storage directory called "sto-<base_dir_name>" in $STO_DIR,
-+and mount point "mini_fo-<base_dir_dir>" in $MNT_DIR.
-+
-+Options:
-+     -s <suffix>
-+          add given suffix to storage directory and the mount
-+          point. This is usefull for overlaying one base directory
-+          several times and avoiding conflicts with storage directory
-+          names and mount points.
-+
-+     -d <sto_dir_dir>
-+          change the directory in which the storage directory will be
-+          created (default is currently "$STO_DIR".
-+
-+     -m <mount point>
-+          use an alternative directory to create the mini_fo
-+          mountpoint (default is currently "$MNT_DIR".
-+
-+     -h   displays this message.
-+
-+EOF
-+exit 1;
-+}
-+
-+while getopts hm:s:d: OPTS
-+  do
-+  case $OPTS in
-+      s)  SUFF="$OPTARG";;
-+      d)  STO_DIR="$OPTARG";;
-+      m)  MNT_DIR="$OPTARG";;
-+      h)  HELP="set";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+shift $(($OPTIND - 1))
-+
-+BASE="$1"
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+# fix suffix
-+if [ "x$SUFF" != "x" ]; then
-+    SUFF="-$SUFF"
-+fi
-+
-+# kill trailing slashes
-+MNT_DIR=${MNT_DIR%/}
-+STO_DIR=${STO_DIR%/}
-+BASE=${BASE%/}
-+
-+
-+if ! [ -d "$BASE" ]; then
-+    echo "invalid base dir $BASE, run $0 -h for help."
-+    exit -1
-+fi
-+
-+# check opts
-+if ! [ -d "$MNT_DIR" ]; then
-+    echo "invalid mount dir $MNT_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+if ! [ -d "$STO_DIR" ]; then
-+    echo "invalid sto_dir_dir $STO_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+MNTP="$MNT_DIR/mini_fo-`basename $BASE`$SUFF"
-+STO="$STO_DIR/sto-`basename $BASE`$SUFF"
-+
-+# create the mount point if it doesn't exist
-+mkdir -p $MNTP
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create mount point $MNTP"
-+fi
-+
-+mkdir -p $STO
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create storage dir $STO"
-+fi
-+
-+# check if fs is already mounted
-+mount | grep mini_fo | grep $MNTP &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, existing mini_fo mount at $MNTP."
-+    exit -1
-+fi
-+
-+mount | grep mini_fo | grep $STO &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, $STO seems to be used already."
-+    exit -1
-+fi
-+
-+# mount
-+mount -t mini_fo -o base=$BASE,sto=$STO $BASE $MNTP
-+
-+if [ $? -ne 0 ]; then
-+    echo "Error, mounting failed, maybe no permisson to mount?"
-+fi
---- /dev/null
-+++ b/fs/mini_fo/mmap.c
-@@ -0,0 +1,637 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+#ifdef FIST_COUNT_WRITES
-+/* for counting writes in the middle vs. regular writes */
-+unsigned long count_writes = 0, count_writes_middle = 0;
-+#endif /* FIST_COUNT_WRITES */
-+
-+/* forward declaration of commit write and prepare write */
-+STATIC int mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+STATIC int mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+
-+
-+/*
-+ * Function for handling creation of holes when lseek-ing past the
-+ * end of the file and then writing some data.
-+ */
-+int
-+mini_fo_fill_zeros(file_t* file, page_t *page, unsigned from)
-+{
-+      int err = 0;
-+      dentry_t *dentry = file->f_dentry;
-+      inode_t *inode = dentry->d_inode;
-+      page_t *tmp_page;
-+      int index;
-+
-+      print_entry_location();
-+
-+      for (index = inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+              tmp_page = mini_fo_get1page(file, index);
-+              if (IS_ERR(tmp_page)) {
-+                      err = PTR_ERR(tmp_page);
-+                      goto out;
-+              }
-+
-+              /*
-+               * zero out rest of the contents of the page between the appropriate
-+               * offsets.
-+               */
-+              memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+              if (! (err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+
-+              page_cache_release(tmp_page);
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+      /* zero out appropriate parts of last page */
-+
-+      /*
-+       * if the encoding type is block, then adjust the 'from' (where the
-+       * zeroing will start) offset appropriately
-+       */
-+      from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+
-+      if ((from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0) {
-+
-+              memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, from - (inode->i_size & ~PAGE_CACHE_MASK));
-+              if (! (err = mini_fo_prepare_write(file, page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, page, 0, PAGE_CACHE_SIZE);
-+
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_writepage(page_t *page)
-+{
-+      int err = -EIO;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      char *kaddr, *hidden_kaddr;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      /*
-+       * writepage is called when shared mmap'ed files need to write
-+       * their pages, while prepare/commit_write are called from the
-+       * non-paged write() interface.  (However, in 2.3 the two interfaces
-+       * share the same cache, while in 2.2 they didn't.)
-+       *
-+       * So we pretty much have to duplicate much of what commit_write does.
-+       */
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      /* get page address, and encode it */
-+      kaddr = (char *) kmap(page);
-+      hidden_kaddr = (char*) kmap(hidden_page);
-+      mini_fo_encode_block(kaddr, hidden_kaddr, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then return error */
-+      kunmap(page);
-+      kunmap(hidden_page);
-+
-+      /* call lower writepage (expects locked page) */
-+      err = hidden_inode->i_mapping->a_ops->writepage(hidden_page);
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,1)
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+# endif /* kernel older than 2.4.1 */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+      if (err)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+ out:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,1)
-+      UnlockPage(page);
-+# endif /* kernel 2.4.1 and newer */
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * returns unlocked, up-to-date page (if ok), with increased refcnt.
-+ */
-+page_t *
-+mini_fo_get1page(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+      wait_on_page(page);
-+      if (!Page_Uptodate(page)) {
-+              lock_page(page);
-+              err = mapping->a_ops->readpage(file, page);
-+              if (err) {
-+                      page = ERR_PTR(err);
-+                      goto out;
-+              }
-+              wait_on_page(page);
-+              if (!Page_Uptodate(page)) {
-+                      page = ERR_PTR(-EIO);
-+                      goto out;
-+              }
-+      }
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * similar to get1page, but doesn't guarantee that it will return
-+ * an unlocked page.
-+ */
-+page_t *
-+mini_fo_get1page_cached(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * readpage is called from generic_page_read and the fault handler.
-+ * If your file system uses generic_page_read for the read op, it
-+ * must implement readpage.
-+ *
-+ * Readpage expects a locked page, and must unlock it.
-+ */
-+STATIC int
-+mini_fo_do_readpage(file_t *file, page_t *page)
-+{
-+      int err = -EIO;
-+      dentry_t *dentry;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      char *page_data;
-+      page_t *hidden_page;
-+      char *hidden_page_data;
-+      int real_size;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+      hidden_dentry = dtohd(dentry);
-+      inode = dentry->d_inode;
-+      hidden_inode = itohi(inode);
-+
-+      fist_dprint(7, "%s: requesting page %d from file %s\n", __FUNCTION__, page->index, dentry->d_name.name);
-+
-+      MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGE = NULL;
-+
-+      /* find lower page (returns a locked page) */
-+      FOR_EACH_PAGE {
-+              fist_dprint(8, "%s: Current page index = %d\n", __FUNCTION__, CURRENT_HIDDEN_PAGEINDEX);
-+              CURRENT_HIDDEN_PAGE = read_cache_page(hidden_inode->i_mapping,
-+                                                    CURRENT_HIDDEN_PAGEINDEX,
-+                                                    (filler_t *) hidden_inode->i_mapping->a_ops->readpage,
-+                                                    (void *) hidden_file);
-+              if (IS_ERR(CURRENT_HIDDEN_PAGE)) {
-+                      err = PTR_ERR(CURRENT_HIDDEN_PAGE);
-+                      CURRENT_HIDDEN_PAGE = NULL;
-+                      goto out_release;
-+              }
-+      }
-+
-+      /*
-+       * wait for the page data to show up
-+       * (signaled by readpage as unlocking the page)
-+       */
-+      FOR_EACH_PAGE {
-+              wait_on_page(CURRENT_HIDDEN_PAGE);
-+              if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                      /*
-+                       * call readpage() again if we returned from wait_on_page with a
-+                       * page that's not up-to-date; that can happen when a partial
-+                       * page has a few buffers which are ok, but not the whole
-+                       * page.
-+                       */
-+                      lock_page(CURRENT_HIDDEN_PAGE);
-+                      err = hidden_inode->i_mapping->a_ops->readpage(hidden_file,
-+                                                                     CURRENT_HIDDEN_PAGE);
-+                      if (err) {
-+                              CURRENT_HIDDEN_PAGE = NULL;
-+                              goto out_release;
-+                      }
-+                      wait_on_page(CURRENT_HIDDEN_PAGE);
-+                      if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                              err = -EIO;
-+                              goto out_release;
-+                      }
-+              }
-+      }
-+
-+      /* map pages, get their addresses */
-+      page_data = (char *) kmap(page);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGEDATA = (char *) kmap(CURRENT_HIDDEN_PAGE);
-+
-+      /* if decode_block could fail, then return error */
-+      err = 0;
-+      real_size = hidden_inode->i_size - (page->index << PAGE_CACHE_SHIFT);
-+      if (real_size <= 0)
-+              memset(page_data, 0, PAGE_CACHE_SIZE);
-+      else if (real_size < PAGE_CACHE_SIZE) {
-+              mini_fo_decode_block(hidden_page_data, page_data, real_size, inode, inode->i_sb, page->index);
-+              memset(page_data + real_size, 0, PAGE_CACHE_SIZE - real_size);
-+      } else
-+              mini_fo_decode_block(hidden_page_data, page_data, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+
-+      FOR_EACH_PAGE
-+              kunmap(CURRENT_HIDDEN_PAGE);
-+      kunmap(page);
-+
-+ out_release:
-+      FOR_EACH_PAGE
-+              if (CURRENT_HIDDEN_PAGE)
-+                      page_cache_release(CURRENT_HIDDEN_PAGE); /* undo read_cache_page */
-+
-+      FREE_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      FREE_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+
-+ out:
-+      if (err == 0)
-+              SetPageUptodate(page);
-+      else
-+              ClearPageUptodate(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_readpage(file_t *file, page_t *page)
-+{
-+      int err;
-+      print_entry_location();
-+
-+      err = mini_fo_do_readpage(file, page);
-+
-+      /*
-+       * we have to unlock our page, b/c we _might_ have gotten a locked page.
-+       * but we no longer have to wakeup on our page here, b/c UnlockPage does
-+       * it
-+       */
-+      UnlockPage(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = 0;
-+
-+      print_entry_location();
-+
-+      /*
-+       * we call kmap(page) only here, and do the kunmap
-+       * and the actual downcalls, including unlockpage and uncache
-+       * in commit_write.
-+       */
-+      kmap(page);
-+
-+      /* fast path for whole page writes */
-+      if (from == 0 && to == PAGE_CACHE_SIZE)
-+              goto out;
-+      /* read the page to "revalidate" our data */
-+      /* call the helper function which doesn't unlock the page */
-+      if (!Page_Uptodate(page))
-+              err = mini_fo_do_readpage(file, page);
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = -ENOMEM;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      file_t *hidden_file = NULL;
-+      loff_t pos;
-+      unsigned bytes = to - from;
-+      unsigned hidden_from, hidden_to, hidden_bytes;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      ASSERT(file != NULL);
-+      /*
-+       * here we have a kmapped page, with data from the user copied
-+       * into it.  we need to encode_block it, and then call the lower
-+       * commit_write.  We also need to simulate same behavior of
-+       * generic_file_write, and call prepare_write on the lower f/s first.
-+       */
-+#ifdef FIST_COUNT_WRITES
-+      count_writes++;
-+# endif /* FIST_COUNT_WRITES */
-+
-+      /* this is append and/or extend -- we can't have holes so fill them in */
-+      if (page->index > (hidden_inode->i_size >> PAGE_CACHE_SHIFT)) {
-+              page_t *tmp_page;
-+              int index;
-+              for (index = hidden_inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+                      tmp_page = mini_fo_get1page(file, index);
-+                      if (IS_ERR(tmp_page)) {
-+                              err = PTR_ERR(tmp_page);
-+                              goto out;
-+                      }
-+                      /* zero out the contents of the page at the appropriate offsets */
-+                      memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+                      if (!(err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                              err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+                      page_cache_release(tmp_page);
-+                      if (err < 0)
-+                              goto out;
-+                      if (current->need_resched)
-+                              schedule();
-+              }
-+      }
-+
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_inode->i_mutex);
-+#else
-+      down(&hidden_inode->i_sem);
-+#endif
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+#if FIST_ENCODING_BLOCKSIZE > 1
-+#  error encoding_blocksize greater than 1 is not yet supported
-+# endif /* FIST_ENCODING_BLOCKSIZE > 1 */
-+
-+      hidden_from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+      hidden_to = ((to + FIST_ENCODING_BLOCKSIZE - 1) & (~(FIST_ENCODING_BLOCKSIZE - 1)));
-+      if ((page->index << PAGE_CACHE_SHIFT) + to > hidden_inode->i_size) {
-+
-+              /*
-+               * if this call to commit_write had introduced holes and the code
-+               * for handling holes was invoked, then the beginning of this page
-+               * must be zeroed out
-+               * zero out bytes from 'size_of_file%pagesize' to 'from'.
-+               */
-+              if ((hidden_from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0)
-+                      memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, hidden_from - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+      }
-+      hidden_bytes = hidden_to - hidden_from;
-+
-+      /* call lower prepare_write */
-+      err = -EINVAL;
-+      if (hidden_inode->i_mapping &&
-+          hidden_inode->i_mapping->a_ops &&
-+          hidden_inode->i_mapping->a_ops->prepare_write)
-+              err = hidden_inode->i_mapping->a_ops->prepare_write(hidden_file,
-+                                                                  hidden_page,
-+                                                                  hidden_from,
-+                                                                  hidden_to);
-+      if (err)
-+              /* don't leave locked pages behind, esp. on an ENOSPC */
-+              goto out_unlock;
-+
-+      fist_dprint(8, "%s: encoding %d bytes\n", __FUNCTION__, hidden_bytes);
-+      mini_fo_encode_block((char *) page_address(page) + hidden_from, (char*) page_address(hidden_page) + hidden_from, hidden_bytes, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then goto unlock and return error */
-+
-+      /* call lower commit_write */
-+      err = hidden_inode->i_mapping->a_ops->commit_write(hidden_file,
-+                                                         hidden_page,
-+                                                         hidden_from,
-+                                                         hidden_to);
-+
-+      if (err < 0)
-+              goto out_unlock;
-+
-+      err = bytes;    /* convert error to no. of bytes */
-+
-+      inode->i_blocks = hidden_inode->i_blocks;
-+      /* we may have to update i_size */
-+      pos = (page->index << PAGE_CACHE_SHIFT) + to;
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+      mark_inode_dirty_sync(inode);
-+
-+ out_unlock:
-+      UnlockPage(hidden_page);
-+      page_cache_release(hidden_page);
-+      kunmap(page);           /* kmap was done in prepare_write */
-+ out:
-+      /* we must set our page as up-to-date */
-+      if (err < 0)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_inode->i_mutex);
-+#else
-+      up(&hidden_inode->i_sem);
-+#endif
-+      print_exit_status(err);
-+      return err;                     /* assume all is ok */
-+}
-+
-+
-+STATIC int
-+mini_fo_bmap(struct address_space *mapping, long block)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+
-+      print_entry_location();
-+
-+      inode = (inode_t *) mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      if (hidden_inode->i_mapping->a_ops->bmap)
-+              err = hidden_inode->i_mapping->a_ops->bmap(hidden_inode->i_mapping, block);
-+      print_exit_location();
-+      return err;
-+}
-+
-+
-+/*
-+ * This function is copied verbatim from mm/filemap.c.
-+ * XXX: It should be simply moved to some header file instead -- bug Al about it!
-+ */
-+static inline int sync_page(struct page *page)
-+{
-+      struct address_space *mapping = page->mapping;
-+
-+      if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
-+              return mapping->a_ops->sync_page(page);
-+      return 0;
-+}
-+
-+
-+/*
-+ * XXX: we may not need this function if not FIST_FILTER_DATA.
-+ * FIXME: for FIST_FILTER_SCA, get all lower pages and sync them each.
-+ */
-+STATIC int
-+mini_fo_sync_page(page_t *page)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      err = sync_page(hidden_page);
-+
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
---- /dev/null
-+++ b/fs/mini_fo/README
-@@ -0,0 +1,163 @@
-+README for the mini_fo overlay file system
-+=========================================
-+
-+
-+WHAT IS MINI_FO?
-+----------------
-+
-+mini_fo is a virtual kernel file system that can make read-only
-+file systems writable. This is done by redirecting modifying operations
-+to a writeable location called "storage directory", and leaving the
-+original data in the "base directory" untouched. When reading, the
-+file system merges the modifed and original data so that only the
-+newest versions will appear. This occurs transparently to the user,
-+who can access the data like on any other read-write file system.
-+
-+Base and storage directories may be located on the same or on
-+different partitions and may be of different file system types. While
-+the storage directory obviously needs to be writable, the base may or
-+may not be writable, what doesn't matter as it will no be modified
-+anyway.
-+
-+
-+WHAT IS GOOD FOR?
-+-----------------
-+
-+The primary purpose of the mini_fo file system is to allow easy
-+software updates to embedded systems, that often store their root
-+file system in a read-only flash file system, but there are many
-+more as for example sandboxing, or for allowing live-cds to
-+permanently store information.
-+
-+
-+BUILDING
-+--------
-+This should be simple. Adjust the Makefile to point to the correct
-+kernel headers you want to build the module for. Then:
-+
-+    # make
-+
-+should build "mini_fo.o" for a 2.4 kernel or "mini_fo.ko" for a 2.6
-+kernel.
-+
-+If you are building the module for you current kernel, you can install
-+the module (as root):
-+
-+    # make install
-+
-+or uninstall with
-+
-+    # make uninstall
-+
-+
-+USING THE FILE SYSTEM
-+--------------------
-+
-+the general mount syntax is:
-+
-+   mount -t mini_fo -o base=<base directory>,sto=<storage directory>\
-+                            <base directory> <mount point>
-+
-+Example:
-+
-+You have mounted a cdrom to /mnt/cdrom and want to modifiy some files
-+on it:
-+
-+load the module (as root)
-+
-+    # insmod mini_fo.o for a 2.4 kernel or
-+
-+    # insmod mini_fo.ko for a 2.6 kernel
-+
-+
-+create a storage dir in tmp and a mountpoint for mini_fo:
-+
-+    # mkdir /tmp/sto
-+    # mkdir /mnt/mini_fo
-+
-+and mount the mini_fo file system:
-+
-+    # mount -t mini_fo -o base=/mnt/cdrom,sto=/tmp/sto /mnt/cdrom /mnt/mini_fo
-+
-+
-+Now the data stored on the cd can be accessed via the mini_fo
-+mountpoint just like any read-write file system, files can be modified
-+and deleted, new ones can be created and so on. When done unmount the
-+file system:
-+
-+    # unmount /mnt/mini_fo
-+
-+Note that if the file system is mounted again using the same storage
-+file system, of course it will appear in the modified state again. If
-+you remount it using an new empty storage directory, it will be
-+unmodified. Therefore by executing:
-+
-+    # cd /tmp/sto
-+    # rm -rf *
-+
-+you can nuke all the changes you made to the original file system. But
-+ remember NEVER do this while the mini_fo file system is mounted!
-+
-+
-+Alternatively you can use the mini_fo-overlay bash script, that
-+simplifies managing mini_fo mounts. See TOOLS Section.
-+
-+
-+TOOLS
-+-----
-+
-+mini_fo-merge (experimental):
-+
-+This is a bash script that will merge changes contained in the storage
-+directory back to the base directory. This allows mini_fo to function
-+as a cache file system by overlaying a slow (network, ...) file system
-+and using a fast (ramdisk, ...) as storage. When done, changes can be
-+merged back to the (slow) base with mini_fo-merge. See "mini_fo-merge
-+-h" for details.
-+
-+It can be usefull for merging changes back after a successfull test
-+(patches, software updates...)
-+
-+
-+mini_fo-overlay:
-+
-+This bash script simplifies managing one or more mini_fo mounts. For
-+overlaying a directory called "basedir1", you can just call:
-+
-+    # mini_fo-overlay basedir1
-+
-+This will mount mini_fo with "basedir1" as base, "/tmp/sto-basedir1/"
-+as storage to "/mnt/mini_fo-basedir1/". It has more options though,
-+type "mini_fo-overlay -h" for details.
-+
-+
-+DOCUMENTATION, REPORTING BUGS, GETTING HELP
-+-------------------------------------------
-+
-+Please visit the mini_fo project page at:
-+
-+http://www.denx.de/twiki/bin/view/Know/MiniFOHome
-+
-+
-+WARNINGS
-+--------
-+
-+Never modify the base or the storage directorys while the mini_fo
-+file system is mounted, or you might crash you system. Simply accessing
-+and reading should not cause any trouble.
-+
-+Exporting a mini_fo mount point via NFS has not been tested, and may
-+or may not work.
-+
-+Check the RELEASE_NOTES for details on bugs and features.
-+
-+
-+
-+Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+
-+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.
-+
-+
---- /dev/null
-+++ b/fs/mini_fo/RELEASE_NOTES
-@@ -0,0 +1,111 @@
-+Release:      mini_fo-0.6.1 (v0-6-1)
-+Date:         21.09.2005
-+
-+
-+Changes:
-+--------
-+v0-6-1:
-+
-+- bugfixes (see ChangeLog)
-+
-+- two helper scripts "mini_fo_merge" and "mini_fo_overlay" (see
-+  README for details).
-+
-+v0-6-0:
-+
-+- Support for 2.4 and 2.6 (see Makefile)
-+
-+- Partial hard link support (creating works as expected, but already
-+  existing links in the base file system will be treated as if they
-+  were individual files).
-+
-+- Various bugfixes and cleanups.
-+
-+
-+v0-6-0-pre1:
-+
-+- This is mini_fo-0-6-0-pre1! This release is a complete rewrite of
-+  many vital mini_fo parts such as the old whiteout list code which
-+  has been replaced by the new META subsystem.
-+
-+- Light weight directory renaming implemented. This means if a
-+  directory is renamed via the mini_fo filesystem this will no longer
-+  result in a complete copy in storage, instead only one empty
-+  directory will be created. All base filed contained in the original
-+  directory stay there until modified.
-+
-+- Special files (creating, renaming, deleting etc.) now working.
-+
-+- Many bugfixes and cleanup, mini_fo is now a lot more stable.
-+
-+
-+v0-5-10:
-+
-+- Final release of the 0-5-* versions. Next will be a complete rewrite
-+  of many features. This release contains several bugfixes related to
-+  directory renaming.
-+
-+
-+v0-5-10-pre6:
-+
-+- Lots of cleanup and several bugfixes related to directory deleting
-+
-+- Directory renaming suddenly works, what is most likely due to the
-+  fact tha that "mv" is smart: if the classic rename doesn't work it
-+  will assume that source and target file are on different fs and will
-+  copy the directory and try to remove the source directory. Until
-+  directory removing wasn't implemented, it would fail to do this and
-+  rollback.
-+  So, directory renaming works for now, but it doesn't yet do what you
-+  would expect from a overlay fs, so use with care.
-+
-+
-+v0-5-10-pre5:
-+
-+- implemented directory deleting
-+- made parsing of mount options more stable
-+- New format of mount options! (See README)
-+- I can't reproduce the unknown panic with 2.4.25 anymore, so I'll
-+  happily assume it never existed!
-+
-+
-+Implemented features:
-+---------------------
-+
-+- creating hard links (see BUGS on already existing hard links)
-+- lightweight directory renaming
-+- renaming device files, pipes, sockets, etc.
-+- creating, renaming, deleting of special files
-+- deleting directorys
-+- general directory reading (simple "ls" )
-+- creating files in existing directorys
-+- creating directorys
-+- renaming files.
-+- reading and writing files (involves opening)
-+- appending to files (creates copy in storage)
-+- deleting files
-+- llseek works too, what allows editors to work
-+- persistency (a deleted file stay deleted over remounts)
-+- use of symbolic links
-+- creating of device files
-+
-+
-+Not (yet) implemented features:
-+-------------------------------
-+
-+- full hard link support.
-+
-+
-+
-+BUGS:
-+-----
-+
-+Hard links in the base file system will be treated as individual
-+files, not as links to one inode.
-+
-+The main problem with hard links isn't allowing to create them, but
-+their pure existence. If you modify a base hard link, the changes made
-+will only show up on this link, the other link will remain in the
-+original state. I hope to fix this someday. Please note that this does
-+not effect the special hard links '.' and '..', that are handled
-+seperately by the lower fs.
---- /dev/null
-+++ b/fs/mini_fo/state.c
-@@ -0,0 +1,620 @@
-+/*
-+ * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+/* create the storage file, setup new states */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+int create_sto_reg_file(dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: wrong type or state.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode, nd);
-+#else
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode);
-+#endif
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file [2].\n");
-+                err = -EINVAL;
-+                goto out_lock;
-+        }
-+
-+        /* interpose the new inode */
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == UNMODIFIED) {
-+                dtost(dentry) = MODIFIED;
-+                /* interpose on new inode */
-+                if(itohi2(dentry->d_inode) != NULL) {
-+                        printk(KERN_CRIT "mini_fo: create_sto_file: invalid inode detected.\n");
-+                        err = -EINVAL;
-+                        goto out_lock;
-+                }
-+                itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+      fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* create the sto dir, setup states */
-+int create_sto_dir(dentry_t *dentry, int mode)
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+        dentry_t *hidden_sto_dir_dentry;
-+
-+      /* had to take the "!S_ISDIR(mode))" check out, because it failed */
-+      if(exists_in_storage(dentry)) {
-+                printk(KERN_CRIT "mini_fo: create_sto_dir: wrong type or state.\\
-+n");
-+                err = -EINVAL;
-+                goto out;
-+        }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      mode);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir.\n");
-+              goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir [2].\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == NON_EXISTANT) {
-+              dtopd(dentry)->state = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              dtopd(dentry)->state = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo:  create_sto_dir: ERROR, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_nod(dentry_t *dentry, int mode, dev_t dev)
-+#else
-+int create_sto_nod(dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+                printk(KERN_CRIT "mini_fo: create_sto_nod: ERROR getting neg. sto dentry.\n");
-+                goto out;
-+        }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mknod(hidden_sto_dir_dentry->d_inode, hidden_sto_dentry, mode, dev);
-+      if(err)
-+              goto out_lock;
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_nod: creating storage inode failed [1].\n");
-+              err = -EINVAL; /* return something indicating failure */
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == NON_EXISTANT) {
-+              dtost(dentry) = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == UNMODIFIED) {
-+              dtost(dentry) = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo: create_sto_nod: error, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+
-+/* unimplemented (and possibly not usefull):
-+
-+   nondir-del_to_del_rew
-+   nondir-non_exist_to_creat
-+
-+   dir-unmod_to_del
-+   dir-mod_to_del
-+   dir-creat_to_del
-+   dir-del_rew_to_del
-+   dir-del_to_del_rew
-+   dir-non_exist_to_creat
-+*/
-+
-+
-+/* bring a file of any type from state UNMODIFIED to MODIFIED */
-+int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag)
-+{
-+      int err = 0;
-+      struct vfsmount *tgt_mnt;
-+      struct vfsmount *src_mnt;
-+      dentry_t *tgt_dentry;
-+      dentry_t *src_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if((dtost(dentry) != UNMODIFIED) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      /* create sto file */
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+      /* handle different types of nondirs */
-+      if(S_ISCHR(dentry->d_inode->i_mode) ||
-+         S_ISBLK(dentry->d_inode->i_mode)) {
-+              err = vfs_mknod(hidden_sto_dir_dentry->d_inode,
-+                              hidden_sto_dentry,
-+                              dtohd(dentry)->d_inode->i_mode,
-+                              dtohd(dentry)->d_inode->i_rdev);
-+      }
-+
-+      else if(S_ISREG(dentry->d_inode->i_mode)) {
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode, NULL);
-+#else
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode);
-+#endif
-+      }
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      /* interpose on new inode */
-+      if(itohi2(dentry->d_inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR, invalid inode detected.\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+
-+        fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dtost(dentry) = MODIFIED;
-+
-+      /* copy contents if regular file and cp_flag = 1 */
-+      if((cp_flag == 1) && S_ISREG(dentry->d_inode->i_mode)) {
-+
-+              /* unlock first */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              dput(hidden_sto_dir_dentry);
-+
-+              tgt_dentry = dtohd2(dentry);
-+              tgt_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              src_dentry = dtohd(dentry);
-+              src_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt;
-+
-+              err = mini_fo_cp_cont(tgt_dentry, tgt_mnt,
-+                                    src_dentry, src_mnt);
-+              if(err) {
-+                      printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                          ERROR copying contents.\n");
-+              }
-+              goto out;
-+      }
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* this function is currently identical to nondir_creat_to_del */
-+int nondir_del_rew_to_del(dentry_t *dentry)
-+{
-+      return nondir_creat_to_del(dentry);
-+}
-+
-+int nondir_creat_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      /* for now this function serves for both state DEL_REWRITTEN and
-+       * CREATED */
-+      if(!(dtost(dentry) == CREATED || (dtost(dentry) == DEL_REWRITTEN)) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del/del_rew_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      dtost(dentry) = NON_EXISTANT;
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_mod_to_del(dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != MODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_unmod_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+       /* next we have to get a negative dentry for the storage file */
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if(err)
-+              goto out;
-+
-+      /* add deleted file to META lists */
-+      err = meta_add_d_entry(dentry->d_parent,
-+                             dentry->d_name.name,
-+                             dentry->d_name.len);
-+
-+      if(err)
-+              goto out;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+ out:
-+      return err;
-+}
-+
-+/* bring a dir from state UNMODIFIED to MODIFIED */
-+int dir_unmod_to_mod(dentry_t *dentry)
-+{
-+      int err;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         !S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* this creates our dir incl. sto. structure */
-+      err = build_sto_structure(dentry->d_parent, dentry);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  build_sto_structure failed.\n");
-+              goto out;
-+      }
-+ out:
-+      return err;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/super.c
-@@ -0,0 +1,281 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+STATIC void
-+mini_fo_read_inode(inode_t *inode)
-+{
-+      static struct address_space_operations mini_fo_empty_aops;
-+
-+      __itopd(inode) = kmalloc(sizeof(struct mini_fo_inode_info), GFP_KERNEL);
-+      if (!itopd(inode)) {
-+              printk("<0>%s:%s:%d: No kernel memory!\n", __FILE__, __FUNCTION__, __LINE__);
-+              ASSERT(NULL);
-+      }
-+      itohi(inode) = NULL;
-+      itohi2(inode) = NULL;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      inode->i_version++;
-+#else
-+      inode->i_version = ++event;     /* increment inode version */
-+#endif
-+      inode->i_op = &mini_fo_main_iops;
-+      inode->i_fop = &mini_fo_main_fops;
-+#if 0
-+      /*
-+       * XXX: To export a file system via NFS, it has to have the
-+       * FS_REQUIRES_DEV flag, so turn it on.  But should we inherit it from
-+       * the lower file system, or can we allow our file system to be exported
-+       * even if the lower one cannot be natively exported.
-+       */
-+      inode->i_sb->s_type->fs_flags |= FS_REQUIRES_DEV;
-+      /*
-+       * OK, the above was a hack, which is now turned off because it may
-+       * cause a panic/oops on some systems.  The correct way to export a
-+       * "nodev" filesystem is via using nfs-utils > 1.0 and the "fsid=" export
-+       * parameter, which requires 2.4.20 or later.
-+       */
-+#endif
-+      /* I don't think ->a_ops is ever allowed to be NULL */
-+      inode->i_mapping->a_ops = &mini_fo_empty_aops;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * No need to call write_inode() on the lower inode, as it
-+ * will have been marked 'dirty' anyway. But we might need
-+ * to write some of our own stuff to disk.
-+ */
-+STATIC void
-+mini_fo_write_inode(inode_t *inode, int sync)
-+{
-+      print_entry_location();
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+STATIC void
-+mini_fo_put_inode(inode_t *inode)
-+{
-+      /*
-+       * This is really funky stuff:
-+       * Basically, if i_count == 1, iput will then decrement it and this inode will be destroyed.
-+       * It is currently holding a reference to the hidden inode.
-+       * Therefore, it needs to release that reference by calling iput on the hidden inode.
-+       * iput() _will_ do it for us (by calling our clear_inode), but _only_ if i_nlink == 0.
-+       * The problem is, NFS keeps i_nlink == 1 for silly_rename'd files.
-+       * So we must for our i_nlink to 0 here to trick iput() into calling our clear_inode.
-+       */
-+      if (atomic_read(&inode->i_count) == 1)
-+              inode->i_nlink = 0;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * we now define delete_inode, because there are two VFS paths that may
-+ * destroy an inode: one of them calls clear inode before doing everything
-+ * else that's needed, and the other is fine.  This way we truncate the inode
-+ * size (and its pages) and then clear our own inode, which will do an iput
-+ * on our and the lower inode.
-+ */
-+STATIC void
-+mini_fo_delete_inode(inode_t *inode)
-+{
-+      print_entry_location();
-+
-+      fist_checkinode(inode, "mini_fo_delete_inode IN");
-+      inode->i_size = 0;              /* every f/s seems to do that */
-+      clear_inode(inode);
-+
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+/* final actions when unmounting a file system */
-+STATIC void
-+mini_fo_put_super(super_block_t *sb)
-+{
-+      if (stopd(sb)) {
-+              mntput(stopd(sb)->hidden_mnt);
-+              mntput(stopd(sb)->hidden_mnt2);
-+
-+              /* mk: no! dput(stopd(sb)->base_dir_dentry);
-+                 dput(stopd(sb)->storage_dir_dentry); */
-+
-+              kfree(stopd(sb));
-+              __stopd(sb) = NULL;
-+      }
-+}
-+
-+
-+#ifdef NOT_NEEDED
-+/*
-+ * This is called in do_umount before put_super.
-+ * The superblock lock is not held yet.
-+ * We probably do not need to define this or call write_super
-+ * on the hidden_sb, because sync_supers() will get to hidden_sb
-+ * sooner or later.  But it is also called from file_fsync()...
-+ */
-+STATIC void
-+mini_fo_write_super(super_block_t *sb)
-+{
-+      return;
-+}
-+#endif /* NOT_NEEDED */
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_statfs(struct dentry *d, struct kstatfs *buf)
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_statfs(super_block_t *sb, struct kstatfs *buf)
-+#else
-+mini_fo_statfs(super_block_t *sb, struct statfs *buf)
-+#endif
-+{
-+      int err = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+      struct dentry *hidden_d;
-+
-+      hidden_d = dtohd(d);
-+      err = vfs_statfs(hidden_d, buf);
-+#else
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+      err = vfs_statfs(hidden_sb, buf);
-+#endif
-+
-+      return err;
-+}
-+
-+
-+/*
-+ * XXX: not implemented.  This is not allowed yet.
-+ * Should we call this on the hidden_sb?  Probably not.
-+ */
-+STATIC int
-+mini_fo_remount_fs(super_block_t *sb, int *flags, char *data)
-+{
-+      //printk(KERN_CRIT "mini_fo_remount_fs: WARNING, this function is umimplemented.\n");
-+      return -ENOSYS;
-+}
-+
-+
-+/*
-+ * Called by iput() when the inode reference count reached zero
-+ * and the inode is not hashed anywhere.  Used to clear anything
-+ * that needs to be, before the inode is completely destroyed and put
-+ * on the inode free list.
-+ */
-+STATIC void
-+mini_fo_clear_inode(inode_t *inode)
-+{
-+      /*
-+       * Decrement a reference to a hidden_inode, which was incremented
-+       * by our read_inode when it was created initially.
-+       */
-+
-+      /* release the wol_list */
-+      if(S_ISDIR(inode->i_mode)) {
-+              __meta_put_lists(inode);
-+      }
-+
-+      /* mk: fan out fun */
-+      if(itohi(inode))
-+              iput(itohi(inode));
-+      if(itohi2(inode))
-+              iput(itohi2(inode));
-+
-+      // XXX: why this assertion fails?
-+      // because it doesn't like us
-+      // ASSERT((inode->i_state & I_DIRTY) == 0);
-+      kfree(itopd(inode));
-+      __itopd(inode) = NULL;
-+}
-+
-+
-+/*
-+ * Called in do_umount() if the MNT_FORCE flag was used and this
-+ * function is defined.  See comment in linux/fs/super.c:do_umount().
-+ * Used only in nfs, to kill any pending RPC tasks, so that subsequent
-+ * code can actually succeed and won't leave tasks that need handling.
-+ *
-+ * PS. I wonder if this is somehow useful to undo damage that was
-+ * left in the kernel after a user level file server (such as amd)
-+ * dies.
-+ */
-+STATIC void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_umount_begin(struct vfsmount *mnt, int flags)
-+{
-+      struct vfsmount *hidden_mnt;
-+
-+      hidden_mnt = stopd(mnt->mnt_sb)->hidden_mnt;
-+
-+      if (hidden_mnt->mnt_sb->s_op->umount_begin)
-+              hidden_mnt->mnt_sb->s_op->umount_begin(hidden_mnt, flags);
-+
-+}
-+#else
-+mini_fo_umount_begin(super_block_t *sb)
-+{
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+
-+      if (hidden_sb->s_op->umount_begin)
-+              hidden_sb->s_op->umount_begin(hidden_sb);
-+
-+}
-+#endif
-+
-+
-+struct super_operations mini_fo_sops =
-+{
-+      read_inode:             mini_fo_read_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      write_inode:    mini_fo_write_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_inode:              mini_fo_put_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      delete_inode:   mini_fo_delete_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_super:              mini_fo_put_super,
-+      statfs:         mini_fo_statfs,
-+      remount_fs:             mini_fo_remount_fs,
-+      clear_inode:    mini_fo_clear_inode,
-+      umount_begin:   mini_fo_umount_begin,
-+};
---- /dev/null
-+++ b/fs/mini_fo/Kconfig
-@@ -0,0 +1,3 @@
-+config MINI_FO
-+      tristate "Mini fanout overlay filesystem"
-+
diff --git a/target/linux/generic-2.6/patches-2.6.31/210-mini_fo_2.6.25_fixes.patch b/target/linux/generic-2.6/patches-2.6.31/210-mini_fo_2.6.25_fixes.patch
deleted file mode 100644 (file)
index d71e3b6..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
---- a/fs/mini_fo/main.c
-+++ b/fs/mini_fo/main.c
-@@ -79,6 +79,7 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-        * of the new inode's fields
-        */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       /*
-        * original: inode = iget(sb, hidden_inode->i_ino);
-        */
-@@ -87,6 +88,13 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-               err = -EACCES;          /* should be impossible??? */
-               goto out;
-       }
-+#else
-+      inode = mini_fo_iget(sb, iunique(sb, 25));
-+      if (IS_ERR(inode)) {
-+              err = PTR_ERR(inode);
-+              goto out;
-+      }
-+#endif
-       /*
-        * interpose the inode if not already interposed
-@@ -184,9 +192,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root = nd.dentry;
--                      stopd(sb)->base_dir_dentry = nd.dentry;
--                      stopd(sb)->hidden_mnt = nd.mnt;
-+                      hidden_root = nd_get_dentry(&nd);
-+                      stopd(sb)->base_dir_dentry = nd_get_dentry(&nd);
-+                      stopd(sb)->hidden_mnt = nd_get_mnt(&nd);
-               } else if(!strncmp("sto=", options, 4)) {
-                       /* parse the storage dir */
-@@ -204,9 +212,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root2 = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root2 = nd2.dentry;
--                      stopd(sb)->storage_dir_dentry = nd2.dentry;
--                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      hidden_root2 = nd_get_dentry(&nd2);
-+                      stopd(sb)->storage_dir_dentry = nd_get_dentry(&nd2);
-+                      stopd(sb)->hidden_mnt2 = nd_get_mnt(&nd2);
-                       stohs2(sb) = hidden_root2->d_sb;
-                       /* validate storage dir, this is done in
---- a/fs/mini_fo/mini_fo.h
-+++ b/fs/mini_fo/mini_fo.h
-@@ -302,6 +302,10 @@ extern int mini_fo_tri_interpose(dentry_
- extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-                          dentry_t *src_dentry, struct vfsmount *src_mnt);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+extern struct inode *mini_fo_iget(struct super_block *sb, unsigned long ino);
-+#endif
-+
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-@@ -501,6 +505,29 @@ static inline void double_unlock(struct 
- #endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
- #endif /* __KERNEL__ */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->path.dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->path.mnt);
-+}
-+#else
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->mnt);
-+}
-+#endif
-+
- /*
-  * Definitions for user and kernel code
-  */
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -262,10 +262,31 @@ mini_fo_umount_begin(super_block_t *sb)
- }
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+struct inode *
-+mini_fo_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      mini_fo_read_inode(inode);
-+
-+      unlock_new_inode(inode);
-+      return inode;
-+}
-+#endif /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) */
- struct super_operations mini_fo_sops =
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       read_inode:             mini_fo_read_inode,
-+#endif
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -164,11 +164,11 @@ dentry_t *bpath_walk(super_block_t *sb, 
-       err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-       /* validate */
--      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+      if (err || !nd_get_dentry(&nd) || !nd_get_dentry(&nd)->d_inode) {
-               printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-               return NULL;
-       }
--      return nd.dentry;
-+      return nd_get_dentry(&nd);
- }
diff --git a/target/linux/generic-2.6/patches-2.6.31/211-mini_fo_2.6.25_dentry_open_war.patch b/target/linux/generic-2.6/patches-2.6.31/211-mini_fo_2.6.25_dentry_open_war.patch
deleted file mode 100644 (file)
index 48a1942..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -442,6 +442,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                          S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -535,6 +540,11 @@ int meta_write_r_entry(dentry_t *dentry,
-                          meta_dentry, S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -671,14 +681,16 @@ int meta_sync_d_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
-@@ -811,14 +823,16 @@ int meta_sync_r_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
diff --git a/target/linux/generic-2.6/patches-2.6.31/212-mini_fo_2.6.26_fixes.patch b/target/linux/generic-2.6/patches-2.6.31/212-mini_fo_2.6.26_fixes.patch
deleted file mode 100644 (file)
index 8bd9ba3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -84,6 +84,7 @@ mini_fo_write_inode(inode_t *inode, int 
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
- STATIC void
- mini_fo_put_inode(inode_t *inode)
- {
-@@ -99,6 +100,7 @@ mini_fo_put_inode(inode_t *inode)
-       if (atomic_read(&inode->i_count) == 1)
-               inode->i_nlink = 0;
- }
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) */
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-@@ -238,7 +240,7 @@ mini_fo_clear_inode(inode_t *inode)
-  * dies.
-  */
- STATIC void
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
- mini_fo_umount_begin(struct vfsmount *mnt, int flags)
- {
-       struct vfsmount *hidden_mnt;
-@@ -290,7 +292,9 @@ struct super_operations mini_fo_sops =
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
-       put_inode:              mini_fo_put_inode,
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) */
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       delete_inode:   mini_fo_delete_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
diff --git a/target/linux/generic-2.6/patches-2.6.31/213-mini_fo_2.6.27_fixes.patch b/target/linux/generic-2.6/patches-2.6.31/213-mini_fo_2.6.27_fixes.patch
deleted file mode 100644 (file)
index f92c18b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
---- a/fs/mini_fo/inode.c
-+++ b/fs/mini_fo/inode.c
-@@ -439,7 +439,7 @@ mini_fo_symlink(inode_t *dir, dentry_t *
-       int err=0;
-       dentry_t *hidden_sto_dentry;
-       dentry_t *hidden_sto_dir_dentry;
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-         umode_t mode;
- #endif
-@@ -466,7 +466,7 @@ mini_fo_symlink(inode_t *dir, dentry_t *
-       down(&hidden_sto_dir_dentry->d_inode->i_sem);
- #endif
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-       mode = S_IALLUGO;
-       err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-                         hidden_sto_dentry, symname, mode);
-@@ -1128,7 +1128,7 @@ void mini_fo_put_link(struct dentry *den
- #endif
- STATIC int
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
- mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
- #else
- mini_fo_permission(inode_t *inode, int mask)
-@@ -1150,8 +1150,9 @@ mini_fo_permission(inode_t *inode, int m
-        *      if (err)
-        *              goto out;
-        */
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-+      err = inode_permission(hidden_inode, mask);
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-       err = permission(hidden_inode, mask, nd);
- #else
-       err = permission(hidden_inode, mask);
diff --git a/target/linux/generic-2.6/patches-2.6.31/214-mini_fo_2.6.29.patch b/target/linux/generic-2.6/patches-2.6.31/214-mini_fo_2.6.29.patch
deleted file mode 100644 (file)
index 63d704b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -236,7 +236,7 @@ int mini_fo_cp_cont(dentry_t *tgt_dentry
-       mntget(src_mnt);
-       /* open file write only */
--      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1, current_cred());
-       if(!tgt_file || IS_ERR(tgt_file)) {
-               printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-               err = PTR_ERR(tgt_file);
-@@ -244,7 +244,7 @@ int mini_fo_cp_cont(dentry_t *tgt_dentry
-       }
-       /* open file read only */
--      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0, current_cred());
-       if(!src_file || IS_ERR(src_file)) {
-               printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-               err = PTR_ERR(src_file);
---- a/fs/mini_fo/file.c
-+++ b/fs/mini_fo/file.c
-@@ -437,7 +437,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-                       mntget(stopd(inode->i_sb)->hidden_mnt);
-                       hidden_file = dentry_open(hidden_dentry,
-                                                 stopd(inode->i_sb)->hidden_mnt,
--                                                hidden_flags);
-+                                                hidden_flags, file->f_cred);
-                       if (IS_ERR(hidden_file)) {
-                               err = PTR_ERR(hidden_file);
-                               dput(hidden_dentry);
-@@ -479,7 +479,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-                       mntget(stopd(inode->i_sb)->hidden_mnt);
-                       hidden_file = dentry_open(hidden_dentry,
-                                                 stopd(inode->i_sb)->hidden_mnt,
--                                                hidden_flags);
-+                                                hidden_flags, file->f_cred);
-                       if (IS_ERR(hidden_file)) {
-                               err = PTR_ERR(hidden_file);
-                               dput(hidden_dentry);
-@@ -512,7 +512,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-       mntget(stopd(inode->i_sb)->hidden_mnt2);
-       hidden_sto_file = dentry_open(hidden_sto_dentry,
-                                     stopd(inode->i_sb)->hidden_mnt2,
--                                    hidden_flags);
-+                                    hidden_flags, file->f_cred);
-       /* dentry_open dputs the dentry if it fails */
-       if (IS_ERR(hidden_sto_file)) {
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -56,7 +56,7 @@ int meta_build_lists(dentry_t *dentry)
-               /* open META-file for reading */
--              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0, current_cred());
-               if(!meta_file || IS_ERR(meta_file)) {
-                       printk(KERN_CRIT "mini_fo: meta_build_lists: \
-                                           ERROR opening META file.\n");
-@@ -448,7 +448,7 @@ int meta_write_d_entry(dentry_t *dentry,
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-                                   ERROR opening meta file.\n");
-@@ -546,7 +546,7 @@ int meta_write_r_entry(dentry_t *dentry,
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-                                   ERROR opening meta file.\n");
-@@ -686,7 +686,7 @@ int meta_sync_d_list(dentry_t *dentry, i
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
-@@ -828,7 +828,7 @@ int meta_sync_r_list(dentry_t *dentry, i
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
diff --git a/target/linux/generic-2.6/patches-2.6.31/215-mini_fo_2.6.30.patch b/target/linux/generic-2.6/patches-2.6.31/215-mini_fo_2.6.30.patch
deleted file mode 100644 (file)
index 2d20920..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -86,8 +86,10 @@ int get_neg_sto_dentry(dentry_t *dentry)
-       len = dentry->d_name.len;
-       name = dentry->d_name.name;
-+      mutex_lock(&dtohd2(dentry->d_parent)->d_inode->i_mutex);
-       dtohd2(dentry) =
-               lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+      mutex_unlock(&dtohd2(dentry->d_parent)->d_inode->i_mutex);
-  out:
-       return err;
-@@ -426,7 +428,9 @@ int build_sto_structure(dentry_t *dir, d
-               const unsigned char *name;
-               len = dtohd(dentry)->d_name.len;
-               name = dtohd(dentry)->d_name.name;
-+              mutex_lock(&dtohd2(dir)->d_inode->i_mutex);
-               hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              mutex_unlock(&dtohd2(dir)->d_inode->i_mutex);
-               dtohd2(dentry) = hidden_sto_dentry;
-       }
---- a/fs/mini_fo/inode.c
-+++ b/fs/mini_fo/inode.c
-@@ -113,17 +113,23 @@ mini_fo_lookup(inode_t *dir, dentry_t *d
-               hidden_dir_dentry = hidden_dentry->d_parent;
-               kfree(bpath);
-       }
--      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode) {
-+              mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-               hidden_dentry =
-                       lookup_one_len(name, hidden_dir_dentry, namelen);
--      else
-+              mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+      } else {
-               hidden_dentry = NULL;
-+      }
--      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode) {
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-               hidden_sto_dentry =
-                       lookup_one_len(name, hidden_sto_dir_dentry, namelen);
--      else
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+      } else {
-               hidden_sto_dentry =  NULL;
-+      }
-       /* catch error in lookup */
-       if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-@@ -553,9 +559,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-                       dput(meta_dentry);
-@@ -643,9 +651,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       /* is this necessary? dget(meta_dentry); */
-                       err = vfs_unlink(hidden_sto_dentry->d_inode,
-@@ -688,9 +698,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       /* is this necessary? dget(meta_dentry); */
-                       err = vfs_unlink(hidden_sto_dentry->d_inode,
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -43,9 +43,11 @@ int meta_build_lists(dentry_t *dentry)
-       /* might there be a META-file? */
-       if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            dtohd2(dentry),
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-               if(!meta_dentry->d_inode) {
-                       dput(meta_dentry);
-                       goto out_ok;
-@@ -426,8 +428,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry), strlen (META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-       /* We need to create a META-file */
-         if(!meta_dentry->d_inode) {
-@@ -527,9 +532,13 @@ int meta_write_r_entry(dentry_t *dentry,
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen (META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-@@ -641,9 +650,13 @@ int meta_sync_d_list(dentry_t *dentry, i
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen(META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-@@ -784,9 +797,13 @@ int meta_sync_r_list(dentry_t *dentry, i
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen(META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
diff --git a/target/linux/generic-2.6/patches-2.6.31/216-mini_fo_locking.patch b/target/linux/generic-2.6/patches-2.6.31/216-mini_fo_locking.patch
deleted file mode 100644 (file)
index 4f07592..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/fs/mini_fo/state.c
-+++ b/fs/mini_fo/state.c
-@@ -537,17 +537,17 @@ int nondir_mod_to_del(dentry_t *dentry)
-       dtohd(dentry) = NULL;
-       dtost(dentry) = DELETED;
--      /* add deleted file to META-file */
--      meta_add_d_entry(dentry->d_parent,
--                       dentry->d_name.name,
--                       dentry->d_name.len);
--
-       /* was: unlock_dir(hidden_sto_dir_dentry); */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-       mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
- #else
-       up(&hidden_sto_dir_dentry->d_inode->i_sem);
- #endif
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-       dput(hidden_sto_dir_dentry);
-  out:
diff --git a/target/linux/generic-2.6/patches-2.6.31/219-kobject_uevent.patch b/target/linux/generic-2.6/patches-2.6.31/219-kobject_uevent.patch
deleted file mode 100644 (file)
index 7e00b22..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/lib/kobject_uevent.c
-+++ b/lib/kobject_uevent.c
-@@ -29,7 +29,8 @@ u64 uevent_seqnum;
- char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
- static DEFINE_SPINLOCK(sequence_lock);
- #if defined(CONFIG_NET)
--static struct sock *uevent_sock;
-+struct sock *uevent_sock = NULL;
-+EXPORT_SYMBOL_GPL(uevent_sock);
- #endif
- /* the strings here must match the enum in include/linux/kobject.h */
-@@ -42,6 +43,18 @@ static const char *kobject_actions[] = {
-       [KOBJ_OFFLINE] =        "offline",
- };
-+u64 uevent_next_seqnum(void)
-+{
-+      u64 seq;
-+
-+      spin_lock(&sequence_lock);
-+      seq = ++uevent_seqnum;
-+      spin_unlock(&sequence_lock);
-+
-+      return seq;
-+}
-+EXPORT_SYMBOL_GPL(uevent_next_seqnum);
-+
- /**
-  * kobject_action_type - translate action string to numeric type
-  *
-@@ -201,9 +214,7 @@ int kobject_uevent_env(struct kobject *k
-               kobj->state_remove_uevent_sent = 1;
-       /* we will send an event, so request a new sequence number */
--      spin_lock(&sequence_lock);
--      seq = ++uevent_seqnum;
--      spin_unlock(&sequence_lock);
-+      seq = uevent_next_seqnum();
-       retval = add_uevent_var(env, "SEQNUM=%llu", (unsigned long long)seq);
-       if (retval)
-               goto exit;
diff --git a/target/linux/generic-2.6/patches-2.6.31/220-sound_kconfig.patch b/target/linux/generic-2.6/patches-2.6.31/220-sound_kconfig.patch
deleted file mode 100644 (file)
index f374009..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/sound/core/Kconfig
-+++ b/sound/core/Kconfig
-@@ -7,7 +7,7 @@ config SND_PCM
-       select SND_TIMER
- config SND_HWDEP
--      tristate
-+      tristate "Sound hardware support"
- config SND_RAWMIDI
-       tristate
diff --git a/target/linux/generic-2.6/patches-2.6.31/221-binfmt_elf_gcc4.1.patch b/target/linux/generic-2.6/patches-2.6.31/221-binfmt_elf_gcc4.1.patch
deleted file mode 100644 (file)
index fa891e0..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/fs/binfmt_elf.c
-+++ b/fs/binfmt_elf.c
-@@ -1193,7 +1193,7 @@ static unsigned long vma_dump_size(struc
-       if (FILTER(ELF_HEADERS) &&
-           vma->vm_pgoff == 0 && (vma->vm_flags & VM_READ)) {
-               u32 __user *header = (u32 __user *) vma->vm_start;
--              u32 word;
-+              u32 word = 0;
-               mm_segment_t fs = get_fs();
-               /*
-                * Doing it this way gets the constant folded by GCC.
diff --git a/target/linux/generic-2.6/patches-2.6.31/222-partial_eraseblock_write.patch b/target/linux/generic-2.6/patches-2.6.31/222-partial_eraseblock_write.patch
deleted file mode 100644 (file)
index d3234f0..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -21,6 +21,8 @@
- #include <linux/root_dev.h>
- #include <linux/magic.h>
-+#define MTD_ERASE_PARTIAL     0x8000 /* partition only covers parts of an erase block */
-+
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -226,13 +228,60 @@ static int part_erase(struct mtd_info *m
-               return -EROFS;
-       if (instr->addr >= mtd->size)
-               return -EINVAL;
-+
-+      instr->partial_start = false;
-+      if (mtd->flags & MTD_ERASE_PARTIAL) {
-+              size_t readlen = 0;
-+              u64 mtd_ofs;
-+
-+              instr->erase_buf = kmalloc(part->master->erasesize, GFP_ATOMIC);
-+              if (!instr->erase_buf)
-+                      return -ENOMEM;
-+
-+              mtd_ofs = part->offset + instr->addr;
-+              instr->erase_buf_ofs = do_div(mtd_ofs, part->master->erasesize);
-+
-+              if (instr->erase_buf_ofs > 0) {
-+                      instr->addr -= instr->erase_buf_ofs;
-+                      ret = part->master->read(part->master,
-+                              instr->addr + part->offset,
-+                              part->master->erasesize,
-+                              &readlen, instr->erase_buf);
-+
-+                      instr->partial_start = true;
-+              } else {
-+                      mtd_ofs = part->offset + part->mtd.size;
-+                      instr->erase_buf_ofs = part->master->erasesize -
-+                              do_div(mtd_ofs, part->master->erasesize);
-+
-+                      if (instr->erase_buf_ofs > 0) {
-+                              instr->len += instr->erase_buf_ofs;
-+                              ret = part->master->read(part->master,
-+                                      part->offset + instr->addr +
-+                                      instr->len - part->master->erasesize,
-+                                      part->master->erasesize, &readlen,
-+                                      instr->erase_buf);
-+                      } else {
-+                              ret = 0;
-+                      }
-+              }
-+              if (ret < 0) {
-+                      kfree(instr->erase_buf);
-+                      return ret;
-+              }
-+
-+      }
-+
-       instr->addr += part->offset;
-       ret = part->master->erase(part->master, instr);
-       if (ret) {
-               if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
-                       instr->fail_addr -= part->offset;
-               instr->addr -= part->offset;
-+              if (mtd->flags & MTD_ERASE_PARTIAL)
-+                      kfree(instr->erase_buf);
-       }
-+
-       return ret;
- }
-@@ -240,7 +289,25 @@ void mtd_erase_callback(struct erase_inf
- {
-       if (instr->mtd->erase == part_erase) {
-               struct mtd_part *part = PART(instr->mtd);
-+              size_t wrlen = 0;
-+              if (instr->mtd->flags & MTD_ERASE_PARTIAL) {
-+                      if (instr->partial_start) {
-+                              part->master->write(part->master,
-+                                      instr->addr, instr->erase_buf_ofs,
-+                                      &wrlen, instr->erase_buf);
-+                              instr->addr += instr->erase_buf_ofs;
-+                      } else {
-+                              instr->len -= instr->erase_buf_ofs;
-+                              part->master->write(part->master,
-+                                      instr->addr + instr->len,
-+                                      instr->erase_buf_ofs, &wrlen,
-+                                      instr->erase_buf +
-+                                      part->master->erasesize -
-+                                      instr->erase_buf_ofs);
-+                      }
-+                      kfree(instr->erase_buf);
-+              }
-               if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
-                       instr->fail_addr -= part->offset;
-               instr->addr -= part->offset;
-@@ -472,18 +539,24 @@ static struct mtd_part *add_one_partitio
-       if ((slave->mtd.flags & MTD_WRITEABLE) &&
-           mtd_mod_by_eb(slave->offset, &slave->mtd)) {
-               /* Doesn't start on a boundary of major erase size */
--              /* FIXME: Let it be writable if it is on a boundary of
--               * _minor_ erase size though */
--              slave->mtd.flags &= ~MTD_WRITEABLE;
--              printk(KERN_WARNING"mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
--                      part->name);
-+              slave->mtd.flags |= MTD_ERASE_PARTIAL;
-+              if (((u32) slave->mtd.size) > master->erasesize)
-+                      slave->mtd.flags &= ~MTD_WRITEABLE;
-+              else
-+                      slave->mtd.erasesize = slave->mtd.size;
-       }
-       if ((slave->mtd.flags & MTD_WRITEABLE) &&
--          mtd_mod_by_eb(slave->mtd.size, &slave->mtd)) {
--              slave->mtd.flags &= ~MTD_WRITEABLE;
--              printk(KERN_WARNING"mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
--                      part->name);
--      }
-+          mtd_mod_by_eb(slave->offset + slave->mtd.size, &slave->mtd)) {
-+              slave->mtd.flags |= MTD_ERASE_PARTIAL;
-+
-+              if ((u32) slave->mtd.size > master->erasesize)
-+                      slave->mtd.flags &= ~MTD_WRITEABLE;
-+              else
-+                      slave->mtd.erasesize = slave->mtd.size;
-+      }
-+      if ((slave->mtd.flags & (MTD_ERASE_PARTIAL|MTD_WRITEABLE)) == MTD_ERASE_PARTIAL)
-+              printk(KERN_WARNING"mtd: partition \"%s\" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only\n",
-+                              part->name);
-       slave->mtd.ecclayout = master->ecclayout;
-       if (master->block_isbad) {
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -46,6 +46,10 @@ struct erase_info {
-       u_long priv;
-       u_char state;
-       struct erase_info *next;
-+
-+      u8 *erase_buf;
-+      u32 erase_buf_ofs;
-+      bool partial_start;
- };
- struct mtd_erase_region_info {
diff --git a/target/linux/generic-2.6/patches-2.6.31/240-packet_socket_type.patch b/target/linux/generic-2.6/patches-2.6.31/240-packet_socket_type.patch
deleted file mode 100644 (file)
index 92553de..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-This patch allows the user to specify desired packet types (outgoing,
-broadcast, unicast, etc.) on packet sockets via setsockopt.
-This can reduce the load in situations where only a limited number
-of packet types are necessary
-
-Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-
---- a/include/linux/if_packet.h
-+++ b/include/linux/if_packet.h
-@@ -31,6 +31,8 @@ struct sockaddr_ll
- /* These ones are invisible by user level */
- #define PACKET_LOOPBACK               5               /* MC/BRD frame looped back */
- #define PACKET_FASTROUTE      6               /* Fastrouted frame     */
-+#define PACKET_MASK_ANY               0xffffffff      /* mask for packet type bits */
-+
- /* Packet socket options */
-@@ -48,6 +50,7 @@ struct sockaddr_ll
- #define PACKET_RESERVE                        12
- #define PACKET_TX_RING                        13
- #define PACKET_LOSS                   14
-+#define PACKET_RECV_TYPE              15
- struct tpacket_stats
- {
---- a/net/packet/af_packet.c
-+++ b/net/packet/af_packet.c
-@@ -206,6 +206,7 @@ struct packet_sock {
-       unsigned int            tp_reserve;
-       unsigned int            tp_loss:1;
- #endif
-+      unsigned int            pkt_type;
- };
- struct packet_skb_cb {
-@@ -343,6 +344,7 @@ static int packet_rcv_spkt(struct sk_buf
- {
-       struct sock *sk;
-       struct sockaddr_pkt *spkt;
-+      struct packet_sock *po;
-       /*
-        *      When we registered the protocol we saved the socket in the data
-@@ -350,6 +352,7 @@ static int packet_rcv_spkt(struct sk_buf
-        */
-       sk = pt->af_packet_priv;
-+      po = pkt_sk(sk);
-       /*
-        *      Yank back the headers [hope the device set this
-@@ -362,7 +365,7 @@ static int packet_rcv_spkt(struct sk_buf
-        *      so that this procedure is noop.
-        */
--      if (skb->pkt_type == PACKET_LOOPBACK)
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-               goto out;
-       if (dev_net(dev) != sock_net(sk))
-@@ -546,12 +549,12 @@ static int packet_rcv(struct sk_buff *sk
-       int skb_len = skb->len;
-       unsigned int snaplen, res;
--      if (skb->pkt_type == PACKET_LOOPBACK)
--              goto drop;
--
-       sk = pt->af_packet_priv;
-       po = pkt_sk(sk);
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-+              goto drop;
-+
-       if (dev_net(dev) != sock_net(sk))
-               goto drop;
-@@ -667,12 +670,12 @@ static int tpacket_rcv(struct sk_buff *s
-       struct timeval tv;
-       struct timespec ts;
--      if (skb->pkt_type == PACKET_LOOPBACK)
--              goto drop;
--
-       sk = pt->af_packet_priv;
-       po = pkt_sk(sk);
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-+              goto drop;
-+
-       if (dev_net(dev) != sock_net(sk))
-               goto drop;
-@@ -1387,6 +1390,7 @@ static int packet_create(struct net *net
-       spin_lock_init(&po->bind_lock);
-       mutex_init(&po->pg_vec_lock);
-       po->prot_hook.func = packet_rcv;
-+      po->pkt_type = PACKET_MASK_ANY & ~(1 << PACKET_LOOPBACK);
-       if (sock->type == SOCK_PACKET)
-               po->prot_hook.func = packet_rcv_spkt;
-@@ -1733,6 +1737,16 @@ packet_setsockopt(struct socket *sock, i
-                       ret = packet_mc_drop(sk, &mreq);
-               return ret;
-       }
-+      case PACKET_RECV_TYPE:
-+      {
-+              unsigned int val;
-+              if (optlen != sizeof(val))
-+                      return -EINVAL;
-+              if (copy_from_user(&val, optval, sizeof(val)))
-+                      return -EFAULT;
-+              po->pkt_type = val & ~PACKET_LOOPBACK;
-+              return 0;
-+      }
- #ifdef CONFIG_PACKET_MMAP
-       case PACKET_RX_RING:
-@@ -1878,6 +1892,13 @@ static int packet_getsockopt(struct sock
-               data = &val;
-               break;
-+      case PACKET_RECV_TYPE:
-+              if (len > sizeof(unsigned int))
-+                      len = sizeof(unsigned int);
-+              val = po->pkt_type;
-+
-+              data = &val;
-+              break;
- #ifdef CONFIG_PACKET_MMAP
-       case PACKET_VERSION:
-               if (len > sizeof(int))
diff --git a/target/linux/generic-2.6/patches-2.6.31/250-pppoe_header_pad.patch b/target/linux/generic-2.6/patches-2.6.31/250-pppoe_header_pad.patch
deleted file mode 100644 (file)
index 042546f..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/drivers/net/pppoe.c
-+++ b/drivers/net/pppoe.c
-@@ -863,7 +863,7 @@ static int pppoe_sendmsg(struct kiocb *i
-               goto end;
--      skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32,
-+      skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32 + NET_SKB_PAD,
-                          0, GFP_KERNEL);
-       if (!skb) {
-               error = -ENOMEM;
-@@ -871,7 +871,7 @@ static int pppoe_sendmsg(struct kiocb *i
-       }
-       /* Reserve space for headers. */
--      skb_reserve(skb, dev->hard_header_len);
-+      skb_reserve(skb, dev->hard_header_len + NET_SKB_PAD);
-       skb_reset_network_header(skb);
-       skb->dev = dev;
diff --git a/target/linux/generic-2.6/patches-2.6.31/260-extend_pfifo_fast.patch b/target/linux/generic-2.6/patches-2.6.31/260-extend_pfifo_fast.patch
deleted file mode 100644 (file)
index f306e86..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
---- a/net/sched/sch_generic.c
-+++ b/net/sched/sch_generic.c
-@@ -391,16 +391,50 @@ static const u8 prio2band[TC_PRIO_MAX+1]
- #define PFIFO_FAST_BANDS 3
-+struct pfifo_fast_sched_data {
-+      struct tcf_proto *filter_list;
-+      struct sk_buff_head list[PFIFO_FAST_BANDS];
-+};
-+
- static inline struct sk_buff_head *prio2list(struct sk_buff *skb,
-                                            struct Qdisc *qdisc)
- {
--      struct sk_buff_head *list = qdisc_priv(qdisc);
-+      struct pfifo_fast_sched_data *q = qdisc_priv(qdisc);
-+      struct sk_buff_head *list = q->list;
-       return list + prio2band[skb->priority & TC_PRIO_MAX];
- }
-+static int pfifo_fast_filter(struct sk_buff *skb, struct Qdisc* qdisc)
-+{
-+#ifdef CONFIG_NET_CLS_ACT
-+      struct pfifo_fast_sched_data *q = qdisc_priv(qdisc);
-+      int result = 0, ret = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;
-+      struct tcf_result res;
-+
-+      if (q->filter_list != NULL)
-+              result = tc_classify(skb, q->filter_list, &res);
-+      if (result >= 0) {
-+              switch (result) {
-+              case TC_ACT_STOLEN:
-+              case TC_ACT_QUEUED:
-+                      ret = NET_XMIT_SUCCESS | __NET_XMIT_STOLEN;
-+              case TC_ACT_SHOT:
-+                      kfree_skb(skb);
-+                      return ret;
-+              }
-+      }
-+#endif
-+      return 0;
-+}
-+
- static int pfifo_fast_enqueue(struct sk_buff *skb, struct Qdisc* qdisc)
- {
-       struct sk_buff_head *list = prio2list(skb, qdisc);
-+      int ret;
-+
-+      ret = pfifo_fast_filter(skb, qdisc);
-+      if (ret)
-+              return ret;
-       if (skb_queue_len(list) < qdisc_dev(qdisc)->tx_queue_len) {
-               qdisc->q.qlen++;
-@@ -412,8 +446,9 @@ static int pfifo_fast_enqueue(struct sk_
- static struct sk_buff *pfifo_fast_dequeue(struct Qdisc* qdisc)
- {
-+      struct pfifo_fast_sched_data *q = qdisc_priv(qdisc);
-+      struct sk_buff_head *list = q->list;
-       int prio;
--      struct sk_buff_head *list = qdisc_priv(qdisc);
-       for (prio = 0; prio < PFIFO_FAST_BANDS; prio++) {
-               if (!skb_queue_empty(list + prio)) {
-@@ -440,8 +475,9 @@ static struct sk_buff *pfifo_fast_peek(s
- static void pfifo_fast_reset(struct Qdisc* qdisc)
- {
-+      struct pfifo_fast_sched_data *q = qdisc_priv(qdisc);
-+      struct sk_buff_head *list = q->list;
-       int prio;
--      struct sk_buff_head *list = qdisc_priv(qdisc);
-       for (prio = 0; prio < PFIFO_FAST_BANDS; prio++)
-               __qdisc_reset_queue(qdisc, list + prio);
-@@ -464,8 +500,9 @@ nla_put_failure:
- static int pfifo_fast_init(struct Qdisc *qdisc, struct nlattr *opt)
- {
-+      struct pfifo_fast_sched_data *q = qdisc_priv(qdisc);
-+      struct sk_buff_head *list = q->list;
-       int prio;
--      struct sk_buff_head *list = qdisc_priv(qdisc);
-       for (prio = 0; prio < PFIFO_FAST_BANDS; prio++)
-               skb_queue_head_init(list + prio);
-@@ -473,9 +510,36 @@ static int pfifo_fast_init(struct Qdisc 
-       return 0;
- }
-+static int pfifo_fast_change_class(struct Qdisc *qdisc, u32 classid, u32 parentid,
-+                          struct nlattr **tca, unsigned long *arg)
-+{
-+      return -EOPNOTSUPP;
-+}
-+
-+static unsigned long pfifo_fast_get(struct Qdisc *qdisc, u32 classid)
-+{
-+      return 0;
-+}
-+
-+static struct tcf_proto **pfifo_fast_find_tcf(struct Qdisc *qdisc, unsigned long cl)
-+{
-+      struct pfifo_fast_sched_data *q = qdisc_priv(qdisc);
-+
-+      if (cl)
-+              return NULL;
-+      return &q->filter_list;
-+}
-+
-+static const struct Qdisc_class_ops pfifo_fast_class_ops = {
-+      .get            =       pfifo_fast_get,
-+      .change         =       pfifo_fast_change_class,
-+      .tcf_chain      =       pfifo_fast_find_tcf,
-+};
-+
- static struct Qdisc_ops pfifo_fast_ops __read_mostly = {
-       .id             =       "pfifo_fast",
--      .priv_size      =       PFIFO_FAST_BANDS * sizeof(struct sk_buff_head),
-+      .cl_ops         =       &pfifo_fast_class_ops,
-+      .priv_size      =       sizeof(struct pfifo_fast_sched_data),
-       .enqueue        =       pfifo_fast_enqueue,
-       .dequeue        =       pfifo_fast_dequeue,
-       .peek           =       pfifo_fast_peek,
-@@ -757,3 +821,18 @@ void dev_shutdown(struct net_device *dev
-       shutdown_scheduler_queue(dev, &dev->rx_queue, &noop_qdisc);
-       WARN_ON(timer_pending(&dev->watchdog_timer));
- }
-+
-+#ifdef CONFIG_NET_SCHED
-+static int __init sch_generic_init(void)
-+{
-+      return register_qdisc(&pfifo_fast_ops);
-+}
-+
-+static void __exit sch_generic_exit(void)
-+{
-+      unregister_qdisc(&pfifo_fast_ops);
-+}
-+
-+module_init(sch_generic_init)
-+module_exit(sch_generic_exit)
-+#endif
diff --git a/target/linux/generic-2.6/patches-2.6.31/270-sched_bfs.patch b/target/linux/generic-2.6/patches-2.6.31/270-sched_bfs.patch
deleted file mode 100644 (file)
index 9f30674..0000000
+++ /dev/null
@@ -1,6448 +0,0 @@
-This patch adds support for bfs v230, modified for diff size reduction
-
---- a/Documentation/sysctl/kernel.txt
-+++ b/Documentation/sysctl/kernel.txt
-@@ -27,6 +27,7 @@ show up in /proc/sys/kernel:
- - domainname
- - hostname
- - hotplug
-+- iso_cpu
- - java-appletviewer           [ binfmt_java, obsolete ]
- - java-interpreter            [ binfmt_java, obsolete ]
- - kstack_depth_to_print       [ X86 only ]
-@@ -49,6 +50,7 @@ show up in /proc/sys/kernel:
- - randomize_va_space
- - real-root-dev               ==> Documentation/initrd.txt
- - reboot-cmd                  [ SPARC only ]
-+- rr_interval
- - rtsig-max
- - rtsig-nr
- - sem
-@@ -171,6 +173,16 @@ Default value is "/sbin/hotplug".
- ==============================================================
-+iso_cpu: (BFS only)
-+
-+This sets the percentage cpu that the unprivileged SCHED_ISO tasks can
-+run effectively at realtime priority, averaged over a rolling five
-+seconds over the -whole- system, meaning all cpus.
-+
-+Set to 70 (percent) by default.
-+
-+==============================================================
-+
- l2cr: (PPC only)
- This flag controls the L2 cache of G3 processor boards. If
-@@ -333,6 +345,19 @@ rebooting. ???
- ==============================================================
-+rr_interval: (BFS only)
-+
-+This is the smallest duration that any cpu process scheduling unit
-+will run for. Increasing this value can increase throughput of cpu
-+bound tasks substantially but at the expense of increased latencies
-+overall. This value is in milliseconds and the default value chosen
-+depends on the number of cpus available at scheduler initialisation
-+with a minimum of 6.
-+
-+Valid values are from 1-5000.
-+
-+==============================================================
-+
- rtsig-max & rtsig-nr:
- The file rtsig-max can be used to tune the maximum number
---- a/include/linux/init_task.h
-+++ b/include/linux/init_task.h
-@@ -116,9 +116,10 @@ extern struct cred init_cred;
-       .usage          = ATOMIC_INIT(2),                               \
-       .flags          = PF_KTHREAD,                                   \
-       .lock_depth     = -1,                                           \
--      .prio           = MAX_PRIO-20,                                  \
-+      .prio           = NORMAL_PRIO,                                  \
-       .static_prio    = MAX_PRIO-20,                                  \
--      .normal_prio    = MAX_PRIO-20,                                  \
-+      .normal_prio    = NORMAL_PRIO,                                  \
-+      .deadline       = 0,                                            \
-       .policy         = SCHED_NORMAL,                                 \
-       .cpus_allowed   = CPU_MASK_ALL,                                 \
-       .mm             = NULL,                                         \
---- a/include/linux/sched.h
-+++ b/include/linux/sched.h
-@@ -36,9 +36,12 @@
- #define SCHED_FIFO            1
- #define SCHED_RR              2
- #define SCHED_BATCH           3
--/* SCHED_ISO: reserved but not implemented yet */
-+#define SCHED_ISO             4
- #define SCHED_IDLE            5
-+#define SCHED_MAX             (SCHED_IDLE)
-+#define SCHED_RANGE(policy)   ((policy) <= SCHED_MAX)
-+
- #ifdef __KERNEL__
- struct sched_param {
-@@ -1090,10 +1093,13 @@ struct sched_entity {
-       struct load_weight      load;           /* for load-balancing */
-       struct rb_node          run_node;
-       struct list_head        group_node;
-+#ifdef CONFIG_SCHED_CFS
-       unsigned int            on_rq;
-       u64                     exec_start;
-+#endif
-       u64                     sum_exec_runtime;
-+#ifdef CONFIG_SCHED_CFS
-       u64                     vruntime;
-       u64                     prev_sum_exec_runtime;
-@@ -1145,6 +1151,7 @@ struct sched_entity {
-       /* rq "owned" by this entity/group: */
-       struct cfs_rq           *my_q;
- #endif
-+#endif
- };
- struct sched_rt_entity {
-@@ -1172,17 +1179,19 @@ struct task_struct {
-       int lock_depth;         /* BKL lock depth */
--#ifdef CONFIG_SMP
--#ifdef __ARCH_WANT_UNLOCKED_CTXSW
-       int oncpu;
--#endif
--#endif
--
-       int prio, static_prio, normal_prio;
-       unsigned int rt_priority;
-       const struct sched_class *sched_class;
-       struct sched_entity se;
-       struct sched_rt_entity rt;
-+      unsigned long deadline;
-+#ifdef CONFIG_SCHED_BFS
-+      int load_weight;        /* for niceness load balancing purposes */
-+      int first_time_slice;
-+      unsigned long long timestamp, last_ran;
-+      unsigned long utime_pc, stime_pc;
-+#endif
- #ifdef CONFIG_PREEMPT_NOTIFIERS
-       /* list of struct preempt_notifier: */
-@@ -1205,6 +1214,9 @@ struct task_struct {
-       unsigned int policy;
-       cpumask_t cpus_allowed;
-+#ifdef CONFIG_HOTPLUG_CPU
-+      cpumask_t unplugged_mask;
-+#endif
- #ifdef CONFIG_PREEMPT_RCU
-       int rcu_read_lock_nesting;
-@@ -1497,11 +1509,19 @@ struct task_struct {
-  * priority to a value higher than any user task. Note:
-  * MAX_RT_PRIO must not be smaller than MAX_USER_RT_PRIO.
-  */
--
-+#define PRIO_RANGE            (40)
- #define MAX_USER_RT_PRIO      100
- #define MAX_RT_PRIO           MAX_USER_RT_PRIO
--
-+#ifdef CONFIG_SCHED_BFS
-+#define MAX_PRIO              (MAX_RT_PRIO + PRIO_RANGE)
-+#define ISO_PRIO              (MAX_RT_PRIO)
-+#define NORMAL_PRIO           (MAX_RT_PRIO + 1)
-+#define IDLE_PRIO             (MAX_RT_PRIO + 2)
-+#define PRIO_LIMIT            ((IDLE_PRIO) + 1)
-+#else
- #define MAX_PRIO              (MAX_RT_PRIO + 40)
-+#define NORMAL_PRIO   (MAX_RT_PRIO - 20)
-+#endif
- #define DEFAULT_PRIO          (MAX_RT_PRIO + 20)
- static inline int rt_prio(int prio)
-@@ -1785,7 +1805,7 @@ task_sched_runtime(struct task_struct *t
- extern unsigned long long thread_group_sched_runtime(struct task_struct *task);
- /* sched_exec is called by processes performing an exec */
--#ifdef CONFIG_SMP
-+#if defined(CONFIG_SMP) && defined(CONFIG_SCHED_CFS)
- extern void sched_exec(void);
- #else
- #define sched_exec()   {}
---- a/init/Kconfig
-+++ b/init/Kconfig
-@@ -451,9 +451,22 @@ config LOG_BUF_SHIFT
- config HAVE_UNSTABLE_SCHED_CLOCK
-       bool
-+choice
-+      prompt "Scheduler"
-+      default SCHED_CFS
-+
-+      config SCHED_CFS
-+              bool "CFS"
-+
-+      config SCHED_BFS
-+              bool "BFS"
-+
-+endchoice
-+
- config GROUP_SCHED
-       bool "Group CPU scheduler"
-       depends on EXPERIMENTAL
-+      depends on SCHED_CFS
-       default n
-       help
-         This feature lets CPU scheduler recognize task groups and control CPU
-@@ -504,6 +517,7 @@ endchoice
- menuconfig CGROUPS
-       boolean "Control Group support"
-+      depends on SCHED_CFS
-       help
-         This option adds support for grouping sets of processes together, for
-         use with process control subsystems such as Cpusets, CFS, memory
---- a/kernel/Makefile
-+++ b/kernel/Makefile
-@@ -2,7 +2,7 @@
- # Makefile for the linux kernel.
- #
--obj-y     = sched.o fork.o exec_domain.o panic.o printk.o \
-+obj-y     = $(if $(CONFIG_SCHED_CFS),sched.o,sched_bfs.o) fork.o exec_domain.o panic.o printk.o \
-           cpu.o exit.o itimer.o time.o softirq.o resource.o \
-           sysctl.o capability.o ptrace.o timer.o user.o \
-           signal.o sys.o kmod.o workqueue.o pid.o \
-@@ -108,6 +108,7 @@ ifneq ($(CONFIG_SCHED_OMIT_FRAME_POINTER
- # I turn this off for IA-64 only.  Andreas Schwab says it's also needed on m68k
- # to get a correct value for the wait-channel (WCHAN in ps). --davidm
- CFLAGS_sched.o := $(PROFILING) -fno-omit-frame-pointer
-+CFLAGS_sched_bfs.o := $(PROFILING) -fno-omit-frame-pointer
- endif
- $(obj)/configs.o: $(obj)/config_data.h
---- a/kernel/kthread.c
-+++ b/kernel/kthread.c
-@@ -16,7 +16,11 @@
- #include <linux/mutex.h>
- #include <trace/events/sched.h>
-+#ifdef CONFIG_SCHED_BFS
-+#define KTHREAD_NICE_LEVEL (0)
-+#else
- #define KTHREAD_NICE_LEVEL (-5)
-+#endif
- static DEFINE_SPINLOCK(kthread_create_lock);
- static LIST_HEAD(kthread_create_list);
---- /dev/null
-+++ b/kernel/sched_bfs.c
-@@ -0,0 +1,6105 @@
-+/*
-+ *  kernel/sched_bfs.c, was sched.c
-+ *
-+ *  Kernel scheduler and related syscalls
-+ *
-+ *  Copyright (C) 1991-2002  Linus Torvalds
-+ *
-+ *  1996-12-23  Modified by Dave Grothe to fix bugs in semaphores and
-+ *            make semaphores SMP safe
-+ *  1998-11-19        Implemented schedule_timeout() and related stuff
-+ *            by Andrea Arcangeli
-+ *  2002-01-04        New ultra-scalable O(1) scheduler by Ingo Molnar:
-+ *            hybrid priority-list and round-robin design with
-+ *            an array-switch method of distributing timeslices
-+ *            and per-CPU runqueues.  Cleanups and useful suggestions
-+ *            by Davide Libenzi, preemptible kernel bits by Robert Love.
-+ *  2003-09-03        Interactivity tuning by Con Kolivas.
-+ *  2004-04-02        Scheduler domains code by Nick Piggin
-+ *  2007-04-15  Work begun on replacing all interactivity tuning with a
-+ *              fair scheduling design by Con Kolivas.
-+ *  2007-05-05  Load balancing (smp-nice) and other improvements
-+ *              by Peter Williams
-+ *  2007-05-06  Interactivity improvements to CFS by Mike Galbraith
-+ *  2007-07-01  Group scheduling enhancements by Srivatsa Vaddagiri
-+ *  2007-11-29  RT balancing improvements by Steven Rostedt, Gregory Haskins,
-+ *              Thomas Gleixner, Mike Kravetz
-+ *  now               Brainfuck deadline scheduling policy by Con Kolivas deletes
-+ *              a whole lot of those previous things.
-+ */
-+
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+#include <linux/nmi.h>
-+#include <linux/init.h>
-+#include <asm/uaccess.h>
-+#include <linux/highmem.h>
-+#include <linux/smp_lock.h>
-+#include <asm/mmu_context.h>
-+#include <linux/interrupt.h>
-+#include <linux/capability.h>
-+#include <linux/completion.h>
-+#include <linux/kernel_stat.h>
-+#include <linux/debug_locks.h>
-+#include <linux/perf_counter.h>
-+#include <linux/security.h>
-+#include <linux/notifier.h>
-+#include <linux/profile.h>
-+#include <linux/freezer.h>
-+#include <linux/vmalloc.h>
-+#include <linux/blkdev.h>
-+#include <linux/delay.h>
-+#include <linux/smp.h>
-+#include <linux/threads.h>
-+#include <linux/timer.h>
-+#include <linux/rcupdate.h>
-+#include <linux/cpu.h>
-+#include <linux/cpuset.h>
-+#include <linux/cpumask.h>
-+#include <linux/percpu.h>
-+#include <linux/kthread.h>
-+#include <linux/proc_fs.h>
-+#include <linux/seq_file.h>
-+#include <linux/syscalls.h>
-+#include <linux/times.h>
-+#include <linux/tsacct_kern.h>
-+#include <linux/kprobes.h>
-+#include <linux/delayacct.h>
-+#include <linux/reciprocal_div.h>
-+#include <linux/log2.h>
-+#include <linux/bootmem.h>
-+#include <linux/ftrace.h>
-+
-+#include <asm/tlb.h>
-+#include <asm/unistd.h>
-+
-+#define CREATE_TRACE_POINTS
-+#include <trace/events/sched.h>
-+
-+#define rt_prio(prio)         unlikely((prio) < MAX_RT_PRIO)
-+#define rt_task(p)            rt_prio((p)->prio)
-+#define rt_queue(rq)          rt_prio((rq)->rq_prio)
-+#define batch_task(p)         (unlikely((p)->policy == SCHED_BATCH))
-+#define is_rt_policy(policy)  ((policy) == SCHED_FIFO || \
-+                                      (policy) == SCHED_RR)
-+#define has_rt_policy(p)      unlikely(is_rt_policy((p)->policy))
-+#define idleprio_task(p)      unlikely((p)->policy == SCHED_IDLE)
-+#define iso_task(p)           unlikely((p)->policy == SCHED_ISO)
-+#define iso_queue(rq)         unlikely((rq)->rq_policy == SCHED_ISO)
-+#define ISO_PERIOD            ((5 * HZ * num_online_cpus()) + 1)
-+
-+/*
-+ * Convert user-nice values [ -20 ... 0 ... 19 ]
-+ * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
-+ * and back.
-+ */
-+#define NICE_TO_PRIO(nice)    (MAX_RT_PRIO + (nice) + 20)
-+#define PRIO_TO_NICE(prio)    ((prio) - MAX_RT_PRIO - 20)
-+#define TASK_NICE(p)          PRIO_TO_NICE((p)->static_prio)
-+
-+/*
-+ * 'User priority' is the nice value converted to something we
-+ * can work with better when scaling various scheduler parameters,
-+ * it's a [ 0 ... 39 ] range.
-+ */
-+#define USER_PRIO(p)          ((p)-MAX_RT_PRIO)
-+#define TASK_USER_PRIO(p)     USER_PRIO((p)->static_prio)
-+#define MAX_USER_PRIO         (USER_PRIO(MAX_PRIO))
-+#define SCHED_PRIO(p)         ((p)+MAX_RT_PRIO)
-+
-+/* Some helpers for converting to/from various scales.*/
-+#define JIFFIES_TO_NS(TIME)   ((TIME) * (1000000000 / HZ))
-+#define MS_TO_NS(TIME)                ((TIME) * 1000000)
-+#define MS_TO_US(TIME)                ((TIME) * 1000)
-+
-+#ifdef CONFIG_SMP
-+/*
-+ * Divide a load by a sched group cpu_power : (load / sg->__cpu_power)
-+ * Since cpu_power is a 'constant', we can use a reciprocal divide.
-+ */
-+static inline u32 sg_div_cpu_power(const struct sched_group *sg, u32 load)
-+{
-+      return reciprocal_divide(load, sg->reciprocal_cpu_power);
-+}
-+
-+/*
-+ * Each time a sched group cpu_power is changed,
-+ * we must compute its reciprocal value
-+ */
-+static inline void sg_inc_cpu_power(struct sched_group *sg, u32 val)
-+{
-+      sg->__cpu_power += val;
-+      sg->reciprocal_cpu_power = reciprocal_value(sg->__cpu_power);
-+}
-+#endif
-+
-+/*
-+ * This is the time all tasks within the same priority round robin.
-+ * Value is in ms and set to a minimum of 6ms. Scales with number of cpus.
-+ * Tunable via /proc interface.
-+ */
-+int rr_interval __read_mostly = 6;
-+
-+/*
-+ * sched_iso_cpu - sysctl which determines the cpu percentage SCHED_ISO tasks
-+ * are allowed to run five seconds as real time tasks. This is the total over
-+ * all online cpus.
-+ */
-+int sched_iso_cpu __read_mostly = 70;
-+
-+int prio_ratios[PRIO_RANGE] __read_mostly;
-+
-+static inline unsigned long timeslice(void)
-+{
-+      return MS_TO_US(rr_interval);
-+}
-+
-+struct global_rq {
-+      spinlock_t lock;
-+      unsigned long nr_running;
-+      unsigned long nr_uninterruptible;
-+      unsigned long long nr_switches;
-+      struct list_head queue[PRIO_LIMIT];
-+      DECLARE_BITMAP(prio_bitmap, PRIO_LIMIT + 1);
-+      unsigned long iso_ticks;
-+      unsigned short iso_refractory;
-+#ifdef CONFIG_SMP
-+      unsigned long qnr; /* queued not running */
-+      cpumask_t cpu_idle_map;
-+#endif
-+};
-+
-+static struct global_rq grq;
-+
-+/*
-+ * This is the main, per-CPU runqueue data structure.
-+ * All this is protected by the global_rq lock.
-+ */
-+struct rq {
-+#ifdef CONFIG_SMP
-+#ifdef CONFIG_NO_HZ
-+      unsigned char in_nohz_recently;
-+#endif
-+#endif
-+
-+      struct task_struct *curr, *idle;
-+      struct mm_struct *prev_mm;
-+      struct list_head queue; /* Place to store currently running task */
-+
-+      /* Stored data about rq->curr to work outside grq lock */
-+      unsigned long rq_deadline;
-+      unsigned int rq_policy;
-+      int rq_time_slice;
-+      int rq_prio;
-+
-+      /* Accurate timekeeping data */
-+      u64 timekeep_clock;
-+      unsigned long user_pc, nice_pc, irq_pc, softirq_pc, system_pc,
-+                      iowait_pc, idle_pc;
-+      atomic_t nr_iowait;
-+
-+      int cpu;                /* cpu of this runqueue */
-+      int online;
-+
-+#ifdef CONFIG_SMP
-+      struct root_domain *rd;
-+      struct sched_domain *sd;
-+
-+      struct list_head migration_queue;
-+#endif
-+
-+      u64 clock;
-+#ifdef CONFIG_SCHEDSTATS
-+
-+      /* latency stats */
-+      struct sched_info rq_sched_info;
-+      unsigned long long rq_cpu_time;
-+      /* could above be rq->cfs_rq.exec_clock + rq->rt_rq.rt_runtime ? */
-+
-+      /* sys_sched_yield() stats */
-+      unsigned int yld_count;
-+
-+      /* schedule() stats */
-+      unsigned int sched_switch;
-+      unsigned int sched_count;
-+      unsigned int sched_goidle;
-+
-+      /* try_to_wake_up() stats */
-+      unsigned int ttwu_count;
-+      unsigned int ttwu_local;
-+
-+      /* BKL stats */
-+      unsigned int bkl_count;
-+#endif
-+};
-+
-+static DEFINE_PER_CPU(struct rq, runqueues) ____cacheline_aligned_in_smp;
-+static DEFINE_MUTEX(sched_hotcpu_mutex);
-+
-+#ifdef CONFIG_SMP
-+
-+/*
-+ * We add the notion of a root-domain which will be used to define per-domain
-+ * variables. Each exclusive cpuset essentially defines an island domain by
-+ * fully partitioning the member cpus from any other cpuset. Whenever a new
-+ * exclusive cpuset is created, we also create and attach a new root-domain
-+ * object.
-+ *
-+ */
-+struct root_domain {
-+      atomic_t refcount;
-+      cpumask_var_t span;
-+      cpumask_var_t online;
-+
-+      /*
-+       * The "RT overload" flag: it gets set if a CPU has more than
-+       * one runnable RT task.
-+       */
-+      cpumask_var_t rto_mask;
-+      atomic_t rto_count;
-+#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-+      /*
-+       * Preferred wake up cpu nominated by sched_mc balance that will be
-+       * used when most cpus are idle in the system indicating overall very
-+       * low system utilisation. Triggered at POWERSAVINGS_BALANCE_WAKEUP(2)
-+       */
-+      unsigned int sched_mc_preferred_wakeup_cpu;
-+#endif
-+};
-+
-+/*
-+ * By default the system creates a single root-domain with all cpus as
-+ * members (mimicking the global state we have today).
-+ */
-+static struct root_domain def_root_domain;
-+
-+#endif
-+
-+static inline int cpu_of(struct rq *rq)
-+{
-+#ifdef CONFIG_SMP
-+      return rq->cpu;
-+#else
-+      return 0;
-+#endif
-+}
-+
-+/*
-+ * The domain tree (rq->sd) is protected by RCU's quiescent state transition.
-+ * See detach_destroy_domains: synchronize_sched for details.
-+ *
-+ * The domain tree of any CPU may only be accessed from within
-+ * preempt-disabled sections.
-+ */
-+#define for_each_domain(cpu, __sd) \
-+      for (__sd = rcu_dereference(cpu_rq(cpu)->sd); __sd; __sd = __sd->parent)
-+
-+#define cpu_rq(cpu)           (&per_cpu(runqueues, (cpu)))
-+#define this_rq()             (&__get_cpu_var(runqueues))
-+#define task_rq(p)            cpu_rq(task_cpu(p))
-+#define cpu_curr(cpu)         (cpu_rq(cpu)->curr)
-+
-+#include "sched_stats.h"
-+
-+#ifndef prepare_arch_switch
-+# define prepare_arch_switch(next)    do { } while (0)
-+#endif
-+#ifndef finish_arch_switch
-+# define finish_arch_switch(prev)     do { } while (0)
-+#endif
-+
-+inline void update_rq_clock(struct rq *rq)
-+{
-+      rq->clock = sched_clock_cpu(cpu_of(rq));
-+}
-+
-+static inline int task_running(struct task_struct *p)
-+{
-+      return (!!p->oncpu);
-+}
-+
-+static inline void grq_lock(void)
-+      __acquires(grq.lock)
-+{
-+      smp_mb();
-+      spin_lock(&grq.lock);
-+}
-+
-+static inline void grq_unlock(void)
-+      __releases(grq.lock)
-+{
-+      spin_unlock(&grq.lock);
-+}
-+
-+static inline void grq_lock_irq(void)
-+      __acquires(grq.lock)
-+{
-+      smp_mb();
-+      spin_lock_irq(&grq.lock);
-+}
-+
-+static inline void time_lock_grq(struct rq *rq)
-+      __acquires(grq.lock)
-+{
-+      grq_lock();
-+      update_rq_clock(rq);
-+}
-+
-+static inline void grq_unlock_irq(void)
-+      __releases(grq.lock)
-+{
-+      spin_unlock_irq(&grq.lock);
-+}
-+
-+static inline void grq_lock_irqsave(unsigned long *flags)
-+      __acquires(grq.lock)
-+{
-+      smp_mb();
-+      spin_lock_irqsave(&grq.lock, *flags);
-+}
-+
-+static inline void grq_unlock_irqrestore(unsigned long *flags)
-+      __releases(grq.lock)
-+{
-+      spin_unlock_irqrestore(&grq.lock, *flags);
-+}
-+
-+static inline struct rq
-+*task_grq_lock(struct task_struct *p, unsigned long *flags)
-+      __acquires(grq.lock)
-+{
-+      grq_lock_irqsave(flags);
-+      return task_rq(p);
-+}
-+
-+static inline struct rq
-+*time_task_grq_lock(struct task_struct *p, unsigned long *flags)
-+      __acquires(grq.lock)
-+{
-+      struct rq *rq = task_grq_lock(p, flags);
-+      update_rq_clock(rq);
-+      return rq;
-+}
-+
-+static inline void task_grq_unlock(unsigned long *flags)
-+      __releases(grq.lock)
-+{
-+      grq_unlock_irqrestore(flags);
-+}
-+
-+/**
-+ * runqueue_is_locked
-+ *
-+ * Returns true if the global runqueue is locked.
-+ * This interface allows printk to be called with the runqueue lock
-+ * held and know whether or not it is OK to wake up the klogd.
-+ */
-+int runqueue_is_locked(void)
-+{
-+      return spin_is_locked(&grq.lock);
-+}
-+
-+void task_rq_unlock_wait(struct task_struct *p)
-+      __releases(grq.lock)
-+{
-+      smp_mb(); /* spin-unlock-wait is not a full memory barrier */
-+      spin_unlock_wait(&grq.lock);
-+}
-+
-+static inline void time_grq_lock(struct rq *rq, unsigned long *flags)
-+      __acquires(grq.lock)
-+{
-+      spin_lock_irqsave(&grq.lock, *flags);
-+      update_rq_clock(rq);
-+}
-+
-+static inline struct rq *__task_grq_lock(struct task_struct *p)
-+      __acquires(grq.lock)
-+{
-+      grq_lock();
-+      return task_rq(p);
-+}
-+
-+static inline void __task_grq_unlock(void)
-+      __releases(grq.lock)
-+{
-+      grq_unlock();
-+}
-+
-+#ifndef __ARCH_WANT_UNLOCKED_CTXSW
-+static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
-+{
-+}
-+
-+static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
-+{
-+#ifdef CONFIG_DEBUG_SPINLOCK
-+      /* this is a valid case when another task releases the spinlock */
-+      grq.lock.owner = current;
-+#endif
-+      /*
-+       * If we are tracking spinlock dependencies then we have to
-+       * fix up the runqueue lock - which gets 'carried over' from
-+       * prev into current:
-+       */
-+      spin_acquire(&grq.lock.dep_map, 0, 0, _THIS_IP_);
-+
-+      grq_unlock_irq();
-+}
-+
-+#else /* __ARCH_WANT_UNLOCKED_CTXSW */
-+
-+static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
-+{
-+#ifdef __ARCH_WANT_INTERRUPTS_ON_CTXSW
-+      grq_unlock_irq();
-+#else
-+      grq_unlock();
-+#endif
-+}
-+
-+static inline void finish_lock_switch(struct rq *rq, struct task_struct *prev)
-+{
-+      smp_wmb();
-+#ifndef __ARCH_WANT_INTERRUPTS_ON_CTXSW
-+      local_irq_enable();
-+#endif
-+}
-+#endif /* __ARCH_WANT_UNLOCKED_CTXSW */
-+
-+/*
-+ * A task that is queued will be on the grq run list.
-+ * A task that is not running or queued will not be on the grq run list.
-+ * A task that is currently running will have ->oncpu set and be queued
-+ * temporarily in its own rq queue.
-+ * A task that is running and no longer queued will be seen only on
-+ * context switch exit.
-+ */
-+
-+static inline int task_queued(struct task_struct *p)
-+{
-+      return (!list_empty(&p->rt.run_list));
-+}
-+
-+static inline int task_queued_only(struct task_struct *p)
-+{
-+      return (!list_empty(&p->rt.run_list) && !task_running(p));
-+}
-+
-+/*
-+ * Removing from the global runqueue. Enter with grq locked.
-+ */
-+static void dequeue_task(struct task_struct *p)
-+{
-+      list_del_init(&p->rt.run_list);
-+      if (list_empty(grq.queue + p->prio))
-+              __clear_bit(p->prio, grq.prio_bitmap);
-+}
-+
-+static inline void reset_first_time_slice(struct task_struct *p)
-+{
-+      if (unlikely(p->first_time_slice))
-+              p->first_time_slice = 0;
-+}
-+
-+static int idleprio_suitable(struct task_struct *p)
-+{
-+      return (!freezing(p) && !signal_pending(p) &&
-+              !(task_contributes_to_load(p)) && !(p->flags & (PF_EXITING)));
-+}
-+
-+static int isoprio_suitable(void)
-+{
-+      return !grq.iso_refractory;
-+}
-+
-+/*
-+ * Adding to the global runqueue. Enter with grq locked.
-+ */
-+static void enqueue_task(struct task_struct *p)
-+{
-+      if (!rt_task(p)) {
-+              /* Check it hasn't gotten rt from PI */
-+              if ((idleprio_task(p) && idleprio_suitable(p)) ||
-+                 (iso_task(p) && isoprio_suitable()))
-+                      p->prio = p->normal_prio;
-+              else
-+                      p->prio = NORMAL_PRIO;
-+      }
-+      __set_bit(p->prio, grq.prio_bitmap);
-+      list_add_tail(&p->rt.run_list, grq.queue + p->prio);
-+      sched_info_queued(p);
-+}
-+
-+/* Only idle task does this as a real time task*/
-+static inline void enqueue_task_head(struct task_struct *p)
-+{
-+      __set_bit(p->prio, grq.prio_bitmap);
-+      list_add(&p->rt.run_list, grq.queue + p->prio);
-+      sched_info_queued(p);
-+}
-+
-+static inline void requeue_task(struct task_struct *p)
-+{
-+      sched_info_queued(p);
-+}
-+
-+static inline int pratio(struct task_struct *p)
-+{
-+      return prio_ratios[TASK_USER_PRIO(p)];
-+}
-+
-+/*
-+ * task_timeslice - all tasks of all priorities get the exact same timeslice
-+ * length. CPU distribution is handled by giving different deadlines to
-+ * tasks of different priorities.
-+ */
-+static inline int task_timeslice(struct task_struct *p)
-+{
-+      return (rr_interval * pratio(p) / 100);
-+}
-+
-+#ifdef CONFIG_SMP
-+static inline void inc_qnr(void)
-+{
-+      grq.qnr++;
-+}
-+
-+static inline void dec_qnr(void)
-+{
-+      grq.qnr--;
-+}
-+
-+static inline int queued_notrunning(void)
-+{
-+      return grq.qnr;
-+}
-+#else
-+static inline void inc_qnr(void)
-+{
-+}
-+
-+static inline void dec_qnr(void)
-+{
-+}
-+
-+static inline int queued_notrunning(void)
-+{
-+      return grq.nr_running;
-+}
-+#endif
-+
-+/*
-+ * activate_idle_task - move idle task to the _front_ of runqueue.
-+ */
-+static inline void activate_idle_task(struct task_struct *p)
-+{
-+      enqueue_task_head(p);
-+      grq.nr_running++;
-+      inc_qnr();
-+}
-+
-+static inline int normal_prio(struct task_struct *p)
-+{
-+      if (has_rt_policy(p))
-+              return MAX_RT_PRIO - 1 - p->rt_priority;
-+      if (idleprio_task(p))
-+              return IDLE_PRIO;
-+      if (iso_task(p))
-+              return ISO_PRIO;
-+      return NORMAL_PRIO;
-+}
-+
-+/*
-+ * Calculate the current priority, i.e. the priority
-+ * taken into account by the scheduler. This value might
-+ * be boosted by RT tasks as it will be RT if the task got
-+ * RT-boosted. If not then it returns p->normal_prio.
-+ */
-+static int effective_prio(struct task_struct *p)
-+{
-+      p->normal_prio = normal_prio(p);
-+      /*
-+       * If we are RT tasks or we were boosted to RT priority,
-+       * keep the priority unchanged. Otherwise, update priority
-+       * to the normal priority:
-+       */
-+      if (!rt_prio(p->prio))
-+              return p->normal_prio;
-+      return p->prio;
-+}
-+
-+/*
-+ * activate_task - move a task to the runqueue. Enter with grq locked. The rq
-+ * doesn't really matter but gives us the local clock.
-+ */
-+static void activate_task(struct task_struct *p, struct rq *rq)
-+{
-+      u64 now = rq->clock;
-+
-+      /*
-+       * Sleep time is in units of nanosecs, so shift by 20 to get a
-+       * milliseconds-range estimation of the amount of time that the task
-+       * spent sleeping:
-+       */
-+      if (unlikely(prof_on == SLEEP_PROFILING)) {
-+              if (p->state == TASK_UNINTERRUPTIBLE)
-+                      profile_hits(SLEEP_PROFILING, (void *)get_wchan(p),
-+                                   (now - p->timestamp) >> 20);
-+      }
-+
-+      p->prio = effective_prio(p);
-+      p->timestamp = now;
-+      if (task_contributes_to_load(p))
-+              grq.nr_uninterruptible--;
-+      enqueue_task(p);
-+      grq.nr_running++;
-+      inc_qnr();
-+}
-+
-+/*
-+ * deactivate_task - If it's running, it's not on the grq and we can just
-+ * decrement the nr_running.
-+ */
-+static inline void deactivate_task(struct task_struct *p)
-+{
-+      if (task_contributes_to_load(p))
-+              grq.nr_uninterruptible++;
-+      grq.nr_running--;
-+}
-+
-+#ifdef CONFIG_SMP
-+void set_task_cpu(struct task_struct *p, unsigned int cpu)
-+{
-+      trace_sched_migrate_task(p, cpu);
-+      /*
-+       * After ->cpu is set up to a new value, task_grq_lock(p, ...) can be
-+       * successfuly executed on another CPU. We must ensure that updates of
-+       * per-task data have been completed by this moment.
-+       */
-+      smp_wmb();
-+      task_thread_info(p)->cpu = cpu;
-+}
-+#endif
-+
-+/*
-+ * Move a task off the global queue and take it to a cpu for it will
-+ * become the running task.
-+ */
-+static inline void take_task(struct rq *rq, struct task_struct *p)
-+{
-+      set_task_cpu(p, rq->cpu);
-+      dequeue_task(p);
-+      list_add(&p->rt.run_list, &rq->queue);
-+      dec_qnr();
-+}
-+
-+/*
-+ * Returns a descheduling task to the grq runqueue unless it is being
-+ * deactivated.
-+ */
-+static inline void return_task(struct task_struct *p, int deactivate)
-+{
-+      list_del_init(&p->rt.run_list);
-+      if (deactivate)
-+              deactivate_task(p);
-+      else {
-+              inc_qnr();
-+              enqueue_task(p);
-+      }
-+}
-+
-+/*
-+ * resched_task - mark a task 'to be rescheduled now'.
-+ *
-+ * On UP this means the setting of the need_resched flag, on SMP it
-+ * might also involve a cross-CPU call to trigger the scheduler on
-+ * the target CPU.
-+ */
-+#ifdef CONFIG_SMP
-+
-+#ifndef tsk_is_polling
-+#define tsk_is_polling(t) test_tsk_thread_flag(t, TIF_POLLING_NRFLAG)
-+#endif
-+
-+static void resched_task(struct task_struct *p)
-+{
-+      int cpu;
-+
-+      assert_spin_locked(&grq.lock);
-+
-+      if (unlikely(test_tsk_thread_flag(p, TIF_NEED_RESCHED)))
-+              return;
-+
-+      set_tsk_thread_flag(p, TIF_NEED_RESCHED);
-+
-+      cpu = task_cpu(p);
-+      if (cpu == smp_processor_id())
-+              return;
-+
-+      /* NEED_RESCHED must be visible before we test polling */
-+      smp_mb();
-+      if (!tsk_is_polling(p))
-+              smp_send_reschedule(cpu);
-+}
-+
-+#else
-+static inline void resched_task(struct task_struct *p)
-+{
-+      assert_spin_locked(&grq.lock);
-+      set_tsk_need_resched(p);
-+}
-+#endif
-+
-+/**
-+ * task_curr - is this task currently executing on a CPU?
-+ * @p: the task in question.
-+ */
-+inline int task_curr(const struct task_struct *p)
-+{
-+      return cpu_curr(task_cpu(p)) == p;
-+}
-+
-+#ifdef CONFIG_SMP
-+struct migration_req {
-+      struct list_head list;
-+
-+      struct task_struct *task;
-+      int dest_cpu;
-+
-+      struct completion done;
-+};
-+
-+/*
-+ * wait_task_context_switch - wait for a thread to complete at least one
-+ *                            context switch.
-+ *
-+ * @p must not be current.
-+ */
-+void wait_task_context_switch(struct task_struct *p)
-+{
-+      unsigned long nvcsw, nivcsw, flags;
-+      int running;
-+      struct rq *rq;
-+
-+      nvcsw   = p->nvcsw;
-+      nivcsw  = p->nivcsw;
-+      for (;;) {
-+              /*
-+               * The runqueue is assigned before the actual context
-+               * switch. We need to take the runqueue lock.
-+               *
-+               * We could check initially without the lock but it is
-+               * very likely that we need to take the lock in every
-+               * iteration.
-+               */
-+              rq = task_grq_lock(p, &flags);
-+              running = task_running(p);
-+              task_grq_unlock(&flags);
-+
-+              if (likely(!running))
-+                      break;
-+              /*
-+               * The switch count is incremented before the actual
-+               * context switch. We thus wait for two switches to be
-+               * sure at least one completed.
-+               */
-+              if ((p->nvcsw - nvcsw) > 1)
-+                      break;
-+              if ((p->nivcsw - nivcsw) > 1)
-+                      break;
-+
-+              cpu_relax();
-+      }
-+}
-+
-+/*
-+ * wait_task_inactive - wait for a thread to unschedule.
-+ *
-+ * If @match_state is nonzero, it's the @p->state value just checked and
-+ * not expected to change.  If it changes, i.e. @p might have woken up,
-+ * then return zero.  When we succeed in waiting for @p to be off its CPU,
-+ * we return a positive number (its total switch count).  If a second call
-+ * a short while later returns the same number, the caller can be sure that
-+ * @p has remained unscheduled the whole time.
-+ *
-+ * The caller must ensure that the task *will* unschedule sometime soon,
-+ * else this function might spin for a *long* time. This function can't
-+ * be called with interrupts off, or it may introduce deadlock with
-+ * smp_call_function() if an IPI is sent by the same process we are
-+ * waiting to become inactive.
-+ */
-+unsigned long wait_task_inactive(struct task_struct *p, long match_state)
-+{
-+      unsigned long flags;
-+      int running, on_rq;
-+      unsigned long ncsw;
-+      struct rq *rq;
-+
-+      for (;;) {
-+              /*
-+               * We do the initial early heuristics without holding
-+               * any task-queue locks at all. We'll only try to get
-+               * the runqueue lock when things look like they will
-+               * work out!
-+               */
-+              rq = task_rq(p);
-+
-+              /*
-+               * If the task is actively running on another CPU
-+               * still, just relax and busy-wait without holding
-+               * any locks.
-+               *
-+               * NOTE! Since we don't hold any locks, it's not
-+               * even sure that "rq" stays as the right runqueue!
-+               * But we don't care, since this will
-+               * return false if the runqueue has changed and p
-+               * is actually now running somewhere else!
-+               */
-+              while (task_running(p) && p == rq->curr) {
-+                      if (match_state && unlikely(p->state != match_state))
-+                              return 0;
-+                      cpu_relax();
-+              }
-+
-+              /*
-+               * Ok, time to look more closely! We need the grq
-+               * lock now, to be *sure*. If we're wrong, we'll
-+               * just go back and repeat.
-+               */
-+              rq = task_grq_lock(p, &flags);
-+              trace_sched_wait_task(rq, p);
-+              running = task_running(p);
-+              on_rq = task_queued(p);
-+              ncsw = 0;
-+              if (!match_state || p->state == match_state)
-+                      ncsw = p->nvcsw | LONG_MIN; /* sets MSB */
-+              task_grq_unlock(&flags);
-+
-+              /*
-+               * If it changed from the expected state, bail out now.
-+               */
-+              if (unlikely(!ncsw))
-+                      break;
-+
-+              /*
-+               * Was it really running after all now that we
-+               * checked with the proper locks actually held?
-+               *
-+               * Oops. Go back and try again..
-+               */
-+              if (unlikely(running)) {
-+                      cpu_relax();
-+                      continue;
-+              }
-+
-+              /*
-+               * It's not enough that it's not actively running,
-+               * it must be off the runqueue _entirely_, and not
-+               * preempted!
-+               *
-+               * So if it was still runnable (but just not actively
-+               * running right now), it's preempted, and we should
-+               * yield - it could be a while.
-+               */
-+              if (unlikely(on_rq)) {
-+                      schedule_timeout_uninterruptible(1);
-+                      continue;
-+              }
-+
-+              /*
-+               * Ahh, all good. It wasn't running, and it wasn't
-+               * runnable, which means that it will never become
-+               * running in the future either. We're all done!
-+               */
-+              break;
-+      }
-+
-+      return ncsw;
-+}
-+
-+/***
-+ * kick_process - kick a running thread to enter/exit the kernel
-+ * @p: the to-be-kicked thread
-+ *
-+ * Cause a process which is running on another CPU to enter
-+ * kernel-mode, without any delay. (to get signals handled.)
-+ *
-+ * NOTE: this function doesnt have to take the runqueue lock,
-+ * because all it wants to ensure is that the remote task enters
-+ * the kernel. If the IPI races and the task has been migrated
-+ * to another CPU then no harm is done and the purpose has been
-+ * achieved as well.
-+ */
-+void kick_process(struct task_struct *p)
-+{
-+      int cpu;
-+
-+      preempt_disable();
-+      cpu = task_cpu(p);
-+      if ((cpu != smp_processor_id()) && task_curr(p))
-+              smp_send_reschedule(cpu);
-+      preempt_enable();
-+}
-+EXPORT_SYMBOL_GPL(kick_process);
-+#endif
-+
-+#define rq_idle(rq)   ((rq)->rq_prio == PRIO_LIMIT)
-+
-+/*
-+ * RT tasks preempt purely on priority. SCHED_NORMAL tasks preempt on the
-+ * basis of earlier deadlines. SCHED_BATCH and SCHED_IDLE don't preempt,
-+ * they cooperatively multitask.
-+ */
-+static inline int task_preempts_curr(struct task_struct *p, struct rq *rq)
-+{
-+      int preempts = 0;
-+
-+      if (p->prio < rq->rq_prio)
-+              preempts = 1;
-+      else if (p->policy == SCHED_NORMAL && (p->prio == rq->rq_prio &&
-+               time_before(p->deadline, rq->rq_deadline)))
-+                      preempts = 1;
-+      return preempts;
-+}
-+
-+/*
-+ * Wake up *any* suitable cpu to schedule this task.
-+ */
-+static void try_preempt(struct task_struct *p)
-+{
-+      struct rq *highest_prio_rq, *this_rq;
-+      unsigned long latest_deadline, cpu;
-+      int highest_prio;
-+      cpumask_t tmp;
-+
-+      /* Try the task's previous rq first and as a fallback */
-+      this_rq = task_rq(p);
-+
-+      if (cpu_isset(this_rq->cpu, p->cpus_allowed)) {
-+              highest_prio_rq = this_rq;
-+              /* If this_rq is idle, use that. */
-+              if (rq_idle(this_rq))
-+                      goto found_rq;
-+      } else
-+              highest_prio_rq = cpu_rq(any_online_cpu(p->cpus_allowed));
-+      latest_deadline = this_rq->rq_deadline;
-+      highest_prio = this_rq->rq_prio;
-+
-+      cpus_and(tmp, cpu_online_map, p->cpus_allowed);
-+
-+      for_each_cpu_mask(cpu, tmp) {
-+              struct rq *rq;
-+              int rq_prio;
-+
-+              rq = cpu_rq(cpu);
-+
-+              if (rq_idle(rq)) {
-+                      /* found an idle rq, use that one */
-+                      highest_prio_rq = rq;
-+                      goto found_rq;
-+              }
-+
-+              rq_prio = rq->rq_prio;
-+              if (rq_prio > highest_prio ||
-+                      (rq_prio == highest_prio &&
-+                      time_after(rq->rq_deadline, latest_deadline))) {
-+                              highest_prio = rq_prio;
-+                              latest_deadline = rq->rq_deadline;
-+                              highest_prio_rq = rq;
-+              }
-+      }
-+
-+      if (!task_preempts_curr(p, highest_prio_rq))
-+              return;
-+found_rq:
-+      resched_task(highest_prio_rq->curr);
-+      return;
-+}
-+
-+/**
-+ * task_oncpu_function_call - call a function on the cpu on which a task runs
-+ * @p:                the task to evaluate
-+ * @func:     the function to be called
-+ * @info:     the function call argument
-+ *
-+ * Calls the function @func when the task is currently running. This might
-+ * be on the current CPU, which just calls the function directly
-+ */
-+void task_oncpu_function_call(struct task_struct *p,
-+                            void (*func) (void *info), void *info)
-+{
-+      int cpu;
-+
-+      preempt_disable();
-+      cpu = task_cpu(p);
-+      if (task_curr(p))
-+              smp_call_function_single(cpu, func, info, 1);
-+      preempt_enable();
-+}
-+
-+#ifdef CONFIG_SMP
-+static int suitable_idle_cpus(struct task_struct *p)
-+{
-+      return (cpus_intersects(p->cpus_allowed, grq.cpu_idle_map));
-+}
-+#else
-+static int suitable_idle_cpus(struct task_struct *p)
-+{
-+      return 0;
-+}
-+#endif
-+
-+/***
-+ * try_to_wake_up - wake up a thread
-+ * @p: the to-be-woken-up thread
-+ * @state: the mask of task states that can be woken
-+ * @sync: do a synchronous wakeup?
-+ *
-+ * Put it on the run-queue if it's not already there. The "current"
-+ * thread is always on the run-queue (except when the actual
-+ * re-schedule is in progress), and as such you're allowed to do
-+ * the simpler "current->state = TASK_RUNNING" to mark yourself
-+ * runnable without the overhead of this.
-+ *
-+ * returns failure only if the task is already active.
-+ */
-+static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
-+{
-+      unsigned long flags;
-+      int success = 0;
-+      long old_state;
-+      struct rq *rq;
-+
-+      rq = time_task_grq_lock(p, &flags);
-+      old_state = p->state;
-+      if (!(old_state & state))
-+              goto out_unlock;
-+
-+      /*
-+       * Note this catches tasks that are running and queued, but returns
-+       * false during the context switch when they're running and no
-+       * longer queued.
-+       */
-+      if (task_queued(p))
-+              goto out_running;
-+
-+      activate_task(p, rq);
-+      /*
-+       * Sync wakeups (i.e. those types of wakeups where the waker
-+       * has indicated that it will leave the CPU in short order)
-+       * don't trigger a preemption if there are no idle cpus,
-+       * instead waiting for current to deschedule.
-+       */
-+      if (!sync || (sync && suitable_idle_cpus(p)))
-+              try_preempt(p);
-+      success = 1;
-+
-+out_running:
-+      trace_sched_wakeup(rq, p, success);
-+      p->state = TASK_RUNNING;
-+out_unlock:
-+      task_grq_unlock(&flags);
-+      return success;
-+}
-+
-+/**
-+ * wake_up_process - Wake up a specific process
-+ * @p: The process to be woken up.
-+ *
-+ * Attempt to wake up the nominated process and move it to the set of runnable
-+ * processes.  Returns 1 if the process was woken up, 0 if it was already
-+ * running.
-+ *
-+ * It may be assumed that this function implies a write memory barrier before
-+ * changing the task state if and only if any tasks are woken up.
-+ */
-+int wake_up_process(struct task_struct *p)
-+{
-+      return try_to_wake_up(p, TASK_ALL, 0);
-+}
-+EXPORT_SYMBOL(wake_up_process);
-+
-+int wake_up_state(struct task_struct *p, unsigned int state)
-+{
-+      return try_to_wake_up(p, state, 0);
-+}
-+
-+/*
-+ * Perform scheduler related setup for a newly forked process p.
-+ * p is forked by current.
-+ */
-+void sched_fork(struct task_struct *p, int clone_flags)
-+{
-+      int cpu = get_cpu();
-+      struct rq *rq;
-+
-+#ifdef CONFIG_PREEMPT_NOTIFIERS
-+      INIT_HLIST_HEAD(&p->preempt_notifiers);
-+#endif
-+      /*
-+       * We mark the process as running here, but have not actually
-+       * inserted it onto the runqueue yet. This guarantees that
-+       * nobody will actually run it, and a signal or other external
-+       * event cannot wake it up and insert it on the runqueue either.
-+       */
-+      p->state = TASK_RUNNING;
-+      set_task_cpu(p, cpu);
-+
-+      /* Should be reset in fork.c but done here for ease of bfs patching */
-+      p->se.sum_exec_runtime = p->stime_pc = p->utime_pc = 0;
-+
-+      /*
-+       * Make sure we do not leak PI boosting priority to the child:
-+       */
-+      p->prio = current->normal_prio;
-+
-+      INIT_LIST_HEAD(&p->rt.run_list);
-+#if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
-+      if (unlikely(sched_info_on()))
-+              memset(&p->sched_info, 0, sizeof(p->sched_info));
-+#endif
-+
-+      p->oncpu = 0;
-+
-+#ifdef CONFIG_PREEMPT
-+      /* Want to start with kernel preemption disabled. */
-+      task_thread_info(p)->preempt_count = 1;
-+#endif
-+      if (unlikely(p->policy == SCHED_FIFO))
-+              goto out;
-+      /*
-+       * Share the timeslice between parent and child, thus the
-+       * total amount of pending timeslices in the system doesn't change,
-+       * resulting in more scheduling fairness. If it's negative, it won't
-+       * matter since that's the same as being 0. current's time_slice is
-+       * actually in rq_time_slice when it's running.
-+       */
-+      local_irq_disable();
-+      rq = task_rq(current);
-+      if (likely(rq->rq_time_slice > 0)) {
-+              rq->rq_time_slice /= 2;
-+              /*
-+               * The remainder of the first timeslice might be recovered by
-+               * the parent if the child exits early enough.
-+               */
-+              p->first_time_slice = 1;
-+      }
-+      p->rt.time_slice = rq->rq_time_slice;
-+      local_irq_enable();
-+out:
-+      put_cpu();
-+}
-+
-+/*
-+ * wake_up_new_task - wake up a newly created task for the first time.
-+ *
-+ * This function will do some initial scheduler statistics housekeeping
-+ * that must be done for every newly created context, then puts the task
-+ * on the runqueue and wakes it.
-+ */
-+void wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
-+{
-+      struct task_struct *parent;
-+      unsigned long flags;
-+      struct rq *rq;
-+
-+      rq = time_task_grq_lock(p, &flags); ;
-+      parent = p->parent;
-+      BUG_ON(p->state != TASK_RUNNING);
-+      set_task_cpu(p, task_cpu(parent));
-+
-+      activate_task(p, rq);
-+      trace_sched_wakeup_new(rq, p, 1);
-+      if (!(clone_flags & CLONE_VM) && rq->curr == parent &&
-+              !suitable_idle_cpus(p)) {
-+              /*
-+               * The VM isn't cloned, so we're in a good position to
-+               * do child-runs-first in anticipation of an exec. This
-+               * usually avoids a lot of COW overhead.
-+               */
-+                      resched_task(parent);
-+      } else
-+              try_preempt(p);
-+      task_grq_unlock(&flags);
-+}
-+
-+/*
-+ * Potentially available exiting-child timeslices are
-+ * retrieved here - this way the parent does not get
-+ * penalized for creating too many threads.
-+ *
-+ * (this cannot be used to 'generate' timeslices
-+ * artificially, because any timeslice recovered here
-+ * was given away by the parent in the first place.)
-+ */
-+void sched_exit(struct task_struct *p)
-+{
-+      struct task_struct *parent;
-+      unsigned long flags;
-+      struct rq *rq;
-+
-+      if (p->first_time_slice) {
-+              parent = p->parent;
-+              rq = task_grq_lock(parent, &flags);
-+              parent->rt.time_slice += p->rt.time_slice;
-+              if (unlikely(parent->rt.time_slice > timeslice()))
-+                      parent->rt.time_slice = timeslice();
-+              task_grq_unlock(&flags);
-+      }
-+}
-+
-+#ifdef CONFIG_PREEMPT_NOTIFIERS
-+
-+/**
-+ * preempt_notifier_register - tell me when current is being preempted & rescheduled
-+ * @notifier: notifier struct to register
-+ */
-+void preempt_notifier_register(struct preempt_notifier *notifier)
-+{
-+      hlist_add_head(&notifier->link, &current->preempt_notifiers);
-+}
-+EXPORT_SYMBOL_GPL(preempt_notifier_register);
-+
-+/**
-+ * preempt_notifier_unregister - no longer interested in preemption notifications
-+ * @notifier: notifier struct to unregister
-+ *
-+ * This is safe to call from within a preemption notifier.
-+ */
-+void preempt_notifier_unregister(struct preempt_notifier *notifier)
-+{
-+      hlist_del(&notifier->link);
-+}
-+EXPORT_SYMBOL_GPL(preempt_notifier_unregister);
-+
-+static void fire_sched_in_preempt_notifiers(struct task_struct *curr)
-+{
-+      struct preempt_notifier *notifier;
-+      struct hlist_node *node;
-+
-+      hlist_for_each_entry(notifier, node, &curr->preempt_notifiers, link)
-+              notifier->ops->sched_in(notifier, raw_smp_processor_id());
-+}
-+
-+static void
-+fire_sched_out_preempt_notifiers(struct task_struct *curr,
-+                               struct task_struct *next)
-+{
-+      struct preempt_notifier *notifier;
-+      struct hlist_node *node;
-+
-+      hlist_for_each_entry(notifier, node, &curr->preempt_notifiers, link)
-+              notifier->ops->sched_out(notifier, next);
-+}
-+
-+#else /* !CONFIG_PREEMPT_NOTIFIERS */
-+
-+static void fire_sched_in_preempt_notifiers(struct task_struct *curr)
-+{
-+}
-+
-+static void
-+fire_sched_out_preempt_notifiers(struct task_struct *curr,
-+                               struct task_struct *next)
-+{
-+}
-+
-+#endif /* CONFIG_PREEMPT_NOTIFIERS */
-+
-+/**
-+ * prepare_task_switch - prepare to switch tasks
-+ * @rq: the runqueue preparing to switch
-+ * @next: the task we are going to switch to.
-+ *
-+ * This is called with the rq lock held and interrupts off. It must
-+ * be paired with a subsequent finish_task_switch after the context
-+ * switch.
-+ *
-+ * prepare_task_switch sets up locking and calls architecture specific
-+ * hooks.
-+ */
-+static inline void
-+prepare_task_switch(struct rq *rq, struct task_struct *prev,
-+                  struct task_struct *next)
-+{
-+      fire_sched_out_preempt_notifiers(prev, next);
-+      prepare_lock_switch(rq, next);
-+      prepare_arch_switch(next);
-+}
-+
-+/**
-+ * finish_task_switch - clean up after a task-switch
-+ * @rq: runqueue associated with task-switch
-+ * @prev: the thread we just switched away from.
-+ *
-+ * finish_task_switch must be called after the context switch, paired
-+ * with a prepare_task_switch call before the context switch.
-+ * finish_task_switch will reconcile locking set up by prepare_task_switch,
-+ * and do any other architecture-specific cleanup actions.
-+ *
-+ * Note that we may have delayed dropping an mm in context_switch(). If
-+ * so, we finish that here outside of the runqueue lock.  (Doing it
-+ * with the lock held can cause deadlocks; see schedule() for
-+ * details.)
-+ */
-+static inline void finish_task_switch(struct rq *rq, struct task_struct *prev)
-+      __releases(grq.lock)
-+{
-+      struct mm_struct *mm = rq->prev_mm;
-+      long prev_state;
-+
-+      rq->prev_mm = NULL;
-+
-+      /*
-+       * A task struct has one reference for the use as "current".
-+       * If a task dies, then it sets TASK_DEAD in tsk->state and calls
-+       * schedule one last time. The schedule call will never return, and
-+       * the scheduled task must drop that reference.
-+       * The test for TASK_DEAD must occur while the runqueue locks are
-+       * still held, otherwise prev could be scheduled on another cpu, die
-+       * there before we look at prev->state, and then the reference would
-+       * be dropped twice.
-+       *              Manfred Spraul <manfred@colorfullife.com>
-+       */
-+      prev_state = prev->state;
-+      finish_arch_switch(prev);
-+      perf_counter_task_sched_in(current, cpu_of(rq));
-+      finish_lock_switch(rq, prev);
-+
-+      fire_sched_in_preempt_notifiers(current);
-+      if (mm)
-+              mmdrop(mm);
-+      if (unlikely(prev_state == TASK_DEAD)) {
-+              /*
-+               * Remove function-return probe instances associated with this
-+               * task and put them back on the free list.
-+               */
-+              kprobe_flush_task(prev);
-+              put_task_struct(prev);
-+      }
-+}
-+
-+/**
-+ * schedule_tail - first thing a freshly forked thread must call.
-+ * @prev: the thread we just switched away from.
-+ */
-+asmlinkage void schedule_tail(struct task_struct *prev)
-+      __releases(grq.lock)
-+{
-+      struct rq *rq = this_rq();
-+
-+      finish_task_switch(rq, prev);
-+#ifdef __ARCH_WANT_UNLOCKED_CTXSW
-+      /* In this case, finish_task_switch does not reenable preemption */
-+      preempt_enable();
-+#endif
-+      if (current->set_child_tid)
-+              put_user(current->pid, current->set_child_tid);
-+}
-+
-+/*
-+ * context_switch - switch to the new MM and the new
-+ * thread's register state.
-+ */
-+static inline void
-+context_switch(struct rq *rq, struct task_struct *prev,
-+             struct task_struct *next)
-+{
-+      struct mm_struct *mm, *oldmm;
-+
-+      prepare_task_switch(rq, prev, next);
-+      trace_sched_switch(rq, prev, next);
-+      mm = next->mm;
-+      oldmm = prev->active_mm;
-+      /*
-+       * For paravirt, this is coupled with an exit in switch_to to
-+       * combine the page table reload and the switch backend into
-+       * one hypercall.
-+       */
-+      arch_start_context_switch(prev);
-+
-+      if (unlikely(!mm)) {
-+              next->active_mm = oldmm;
-+              atomic_inc(&oldmm->mm_count);
-+              enter_lazy_tlb(oldmm, next);
-+      } else
-+              switch_mm(oldmm, mm, next);
-+
-+      if (unlikely(!prev->mm)) {
-+              prev->active_mm = NULL;
-+              rq->prev_mm = oldmm;
-+      }
-+      /*
-+       * Since the runqueue lock will be released by the next
-+       * task (which is an invalid locking op but in the case
-+       * of the scheduler it's an obvious special-case), so we
-+       * do an early lockdep release here:
-+       */
-+#ifndef __ARCH_WANT_UNLOCKED_CTXSW
-+      spin_release(&grq.lock.dep_map, 1, _THIS_IP_);
-+#endif
-+
-+      /* Here we just switch the register state and the stack. */
-+      switch_to(prev, next, prev);
-+
-+      barrier();
-+      /*
-+       * this_rq must be evaluated again because prev may have moved
-+       * CPUs since it called schedule(), thus the 'rq' on its stack
-+       * frame will be invalid.
-+       */
-+      finish_task_switch(this_rq(), prev);
-+}
-+
-+/*
-+ * nr_running, nr_uninterruptible and nr_context_switches:
-+ *
-+ * externally visible scheduler statistics: current number of runnable
-+ * threads, current number of uninterruptible-sleeping threads, total
-+ * number of context switches performed since bootup. All are measured
-+ * without grabbing the grq lock but the occasional inaccurate result
-+ * doesn't matter so long as it's positive.
-+ */
-+unsigned long nr_running(void)
-+{
-+      long nr = grq.nr_running;
-+
-+      if (unlikely(nr < 0))
-+              nr = 0;
-+      return (unsigned long)nr;
-+}
-+
-+unsigned long nr_uninterruptible(void)
-+{
-+      unsigned long nu = grq.nr_uninterruptible;
-+
-+      if (unlikely(nu < 0))
-+              nu = 0;
-+      return nu;
-+}
-+
-+unsigned long long nr_context_switches(void)
-+{
-+      long long ns = grq.nr_switches;
-+
-+      /* This is of course impossible */
-+      if (unlikely(ns < 0))
-+              ns = 1;
-+      return (long long)ns;
-+}
-+
-+unsigned long nr_iowait(void)
-+{
-+      unsigned long i, sum = 0;
-+
-+      for_each_possible_cpu(i)
-+              sum += atomic_read(&cpu_rq(i)->nr_iowait);
-+
-+      return sum;
-+}
-+
-+unsigned long nr_active(void)
-+{
-+      return nr_running() + nr_uninterruptible();
-+}
-+
-+/* Variables and functions for calc_load */
-+static unsigned long calc_load_update;
-+unsigned long avenrun[3];
-+EXPORT_SYMBOL(avenrun);
-+
-+/**
-+ * get_avenrun - get the load average array
-+ * @loads:    pointer to dest load array
-+ * @offset:   offset to add
-+ * @shift:    shift count to shift the result left
-+ *
-+ * These values are estimates at best, so no need for locking.
-+ */
-+void get_avenrun(unsigned long *loads, unsigned long offset, int shift)
-+{
-+      loads[0] = (avenrun[0] + offset) << shift;
-+      loads[1] = (avenrun[1] + offset) << shift;
-+      loads[2] = (avenrun[2] + offset) << shift;
-+}
-+
-+static unsigned long
-+calc_load(unsigned long load, unsigned long exp, unsigned long active)
-+{
-+      load *= exp;
-+      load += active * (FIXED_1 - exp);
-+      return load >> FSHIFT;
-+}
-+
-+/*
-+ * calc_load - update the avenrun load estimates every LOAD_FREQ seconds.
-+ */
-+void calc_global_load(void)
-+{
-+      long active;
-+
-+      if (time_before(jiffies, calc_load_update))
-+              return;
-+      active = nr_active() * FIXED_1;
-+
-+      avenrun[0] = calc_load(avenrun[0], EXP_1, active);
-+      avenrun[1] = calc_load(avenrun[1], EXP_5, active);
-+      avenrun[2] = calc_load(avenrun[2], EXP_15, active);
-+
-+      calc_load_update = jiffies + LOAD_FREQ;
-+}
-+
-+DEFINE_PER_CPU(struct kernel_stat, kstat);
-+
-+EXPORT_PER_CPU_SYMBOL(kstat);
-+
-+/*
-+ * On each tick, see what percentage of that tick was attributed to each
-+ * component and add the percentage to the _pc values. Once a _pc value has
-+ * accumulated one tick's worth, account for that. This means the total
-+ * percentage of load components will always be 100 per tick.
-+ */
-+static void pc_idle_time(struct rq *rq, unsigned long pc)
-+{
-+      struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+      cputime64_t tmp = cputime_to_cputime64(jiffies_to_cputime(1));
-+
-+      if (atomic_read(&rq->nr_iowait) > 0) {
-+              rq->iowait_pc += pc;
-+              if (rq->iowait_pc >= 100) {
-+                      rq->iowait_pc %= 100;
-+                      cpustat->iowait = cputime64_add(cpustat->iowait, tmp);
-+              }
-+      } else {
-+              rq->idle_pc += pc;
-+              if (rq->idle_pc >= 100) {
-+                      rq->idle_pc %= 100;
-+                      cpustat->idle = cputime64_add(cpustat->idle, tmp);
-+              }
-+      }
-+}
-+
-+static void
-+pc_system_time(struct rq *rq, struct task_struct *p, int hardirq_offset,
-+             unsigned long pc, unsigned long ns)
-+{
-+      struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+      cputime_t one_jiffy = jiffies_to_cputime(1);
-+      cputime_t one_jiffy_scaled = cputime_to_scaled(one_jiffy);
-+      cputime64_t tmp = cputime_to_cputime64(one_jiffy);
-+
-+      p->stime_pc += pc;
-+      if (p->stime_pc >= 100) {
-+              p->stime_pc -= 100;
-+              p->stime = cputime_add(p->stime, one_jiffy);
-+              p->stimescaled = cputime_add(p->stimescaled, one_jiffy_scaled);
-+              account_group_system_time(p, one_jiffy);
-+              acct_update_integrals(p);
-+      }
-+      p->se.sum_exec_runtime += ns;
-+
-+      if (hardirq_count() - hardirq_offset)
-+              rq->irq_pc += pc;
-+      else if (softirq_count()) {
-+              rq->softirq_pc += pc;
-+              if (rq->softirq_pc >= 100) {
-+                      rq->softirq_pc %= 100;
-+                      cpustat->softirq = cputime64_add(cpustat->softirq, tmp);
-+              }
-+      } else {
-+              rq->system_pc += pc;
-+              if (rq->system_pc >= 100) {
-+                      rq->system_pc %= 100;
-+                      cpustat->system = cputime64_add(cpustat->system, tmp);
-+              }
-+      }
-+}
-+
-+static void pc_user_time(struct rq *rq, struct task_struct *p,
-+                       unsigned long pc, unsigned long ns)
-+{
-+      struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+      cputime_t one_jiffy = jiffies_to_cputime(1);
-+      cputime_t one_jiffy_scaled = cputime_to_scaled(one_jiffy);
-+      cputime64_t tmp = cputime_to_cputime64(one_jiffy);
-+
-+      p->utime_pc += pc;
-+      if (p->utime_pc >= 100) {
-+              p->utime_pc -= 100;
-+              p->utime = cputime_add(p->utime, one_jiffy);
-+              p->utimescaled = cputime_add(p->utimescaled, one_jiffy_scaled);
-+              account_group_user_time(p, one_jiffy);
-+              acct_update_integrals(p);
-+      }
-+      p->se.sum_exec_runtime += ns;
-+
-+      if (TASK_NICE(p) > 0 || idleprio_task(p)) {
-+              rq->nice_pc += pc;
-+              if (rq->nice_pc >= 100) {
-+                      rq->nice_pc %= 100;
-+                      cpustat->nice = cputime64_add(cpustat->nice, tmp);
-+              }
-+      } else {
-+              rq->user_pc += pc;
-+              if (rq->user_pc >= 100) {
-+                      rq->user_pc %= 100;
-+                      cpustat->user = cputime64_add(cpustat->user, tmp);
-+              }
-+      }
-+}
-+
-+/* Convert nanoseconds to percentage of one tick. */
-+#define NS_TO_PC(NS)  (NS * 100 / JIFFIES_TO_NS(1))
-+
-+/*
-+ * This is called on clock ticks and on context switches.
-+ * Bank in p->se.sum_exec_runtime the ns elapsed since the last tick or switch.
-+ * CPU scheduler quota accounting is also performed here in microseconds.
-+ * The value returned from sched_clock() occasionally gives bogus values so
-+ * some sanity checking is required. Time is supposed to be banked all the
-+ * time so default to half a tick to make up for when sched_clock reverts
-+ * to just returning jiffies, and for hardware that can't do tsc.
-+ */
-+static void
-+update_cpu_clock(struct rq *rq, struct task_struct *p, int tick)
-+{
-+      long time_diff = rq->clock - p->last_ran;
-+      long account_ns = rq->clock - rq->timekeep_clock;
-+      struct task_struct *idle = rq->idle;
-+      unsigned long account_pc;
-+
-+      /*
-+       * There should be less than or equal to one jiffy worth, and not
-+       * negative/overflow. time_diff is only used for internal scheduler
-+       * time_slice accounting.
-+       */
-+      if (time_diff <= 0)
-+              time_diff = JIFFIES_TO_NS(1) / 2;
-+      else if (time_diff > JIFFIES_TO_NS(1))
-+              time_diff = JIFFIES_TO_NS(1);
-+
-+      if (unlikely(account_ns < 0))
-+              account_ns = 0;
-+
-+      account_pc = NS_TO_PC(account_ns);
-+
-+      if (tick) {
-+              int user_tick = user_mode(get_irq_regs());
-+
-+              /* Accurate tick timekeeping */
-+              if (user_tick)
-+                      pc_user_time(rq, p, account_pc, account_ns);
-+              else if (p != idle || (irq_count() != HARDIRQ_OFFSET))
-+                      pc_system_time(rq, p, HARDIRQ_OFFSET,
-+                                     account_pc, account_ns);
-+              else
-+                      pc_idle_time(rq, account_pc);
-+      } else {
-+              /* Accurate subtick timekeeping */
-+              if (p == idle)
-+                      pc_idle_time(rq, account_pc);
-+              else
-+                      pc_user_time(rq, p, account_pc, account_ns);
-+      }
-+
-+      /* time_slice accounting is done in usecs to avoid overflow on 32bit */
-+      if (rq->rq_policy != SCHED_FIFO && p != idle)
-+              rq->rq_time_slice -= time_diff / 1000;
-+      p->last_ran = rq->timekeep_clock = rq->clock;
-+}
-+
-+/*
-+ * Return any ns on the sched_clock that have not yet been accounted in
-+ * @p in case that task is currently running.
-+ *
-+ * Called with task_grq_lock() held on @rq.
-+ */
-+static u64 do_task_delta_exec(struct task_struct *p, struct rq *rq)
-+{
-+      u64 ns = 0;
-+
-+      if (p == rq->curr) {
-+              update_rq_clock(rq);
-+              ns = rq->clock - p->last_ran;
-+              if ((s64)ns < 0)
-+                      ns = 0;
-+      }
-+
-+      return ns;
-+}
-+
-+unsigned long long task_delta_exec(struct task_struct *p)
-+{
-+      unsigned long flags;
-+      struct rq *rq;
-+      u64 ns = 0;
-+
-+      rq = task_grq_lock(p, &flags);
-+      ns = do_task_delta_exec(p, rq);
-+      task_grq_unlock(&flags);
-+
-+      return ns;
-+}
-+
-+/*
-+ * Return accounted runtime for the task.
-+ * In case the task is currently running, return the runtime plus current's
-+ * pending runtime that have not been accounted yet.
-+ */
-+unsigned long long task_sched_runtime(struct task_struct *p)
-+{
-+      unsigned long flags;
-+      struct rq *rq;
-+      u64 ns = 0;
-+
-+      rq = task_grq_lock(p, &flags);
-+      ns = p->se.sum_exec_runtime + do_task_delta_exec(p, rq);
-+      task_grq_unlock(&flags);
-+
-+      return ns;
-+}
-+
-+/*
-+ * Return sum_exec_runtime for the thread group.
-+ * In case the task is currently running, return the sum plus current's
-+ * pending runtime that have not been accounted yet.
-+ *
-+ * Note that the thread group might have other running tasks as well,
-+ * so the return value not includes other pending runtime that other
-+ * running tasks might have.
-+ */
-+unsigned long long thread_group_sched_runtime(struct task_struct *p)
-+{
-+      struct task_cputime totals;
-+      unsigned long flags;
-+      struct rq *rq;
-+      u64 ns;
-+
-+      rq = task_grq_lock(p, &flags);
-+      thread_group_cputime(p, &totals);
-+      ns = totals.sum_exec_runtime + do_task_delta_exec(p, rq);
-+      task_grq_unlock(&flags);
-+
-+      return ns;
-+}
-+
-+/* Compatibility crap for removal */
-+void account_user_time(struct task_struct *p, cputime_t cputime,
-+                     cputime_t cputime_scaled)
-+{
-+}
-+
-+void account_idle_time(cputime_t cputime)
-+{
-+}
-+
-+/*
-+ * Account guest cpu time to a process.
-+ * @p: the process that the cpu time gets accounted to
-+ * @cputime: the cpu time spent in virtual machine since the last update
-+ * @cputime_scaled: cputime scaled by cpu frequency
-+ */
-+static void account_guest_time(struct task_struct *p, cputime_t cputime,
-+                             cputime_t cputime_scaled)
-+{
-+      cputime64_t tmp;
-+      struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+
-+      tmp = cputime_to_cputime64(cputime);
-+
-+      /* Add guest time to process. */
-+      p->utime = cputime_add(p->utime, cputime);
-+      p->utimescaled = cputime_add(p->utimescaled, cputime_scaled);
-+      account_group_user_time(p, cputime);
-+      p->gtime = cputime_add(p->gtime, cputime);
-+
-+      /* Add guest time to cpustat. */
-+      cpustat->user = cputime64_add(cpustat->user, tmp);
-+      cpustat->guest = cputime64_add(cpustat->guest, tmp);
-+}
-+
-+/*
-+ * Account system cpu time to a process.
-+ * @p: the process that the cpu time gets accounted to
-+ * @hardirq_offset: the offset to subtract from hardirq_count()
-+ * @cputime: the cpu time spent in kernel space since the last update
-+ * @cputime_scaled: cputime scaled by cpu frequency
-+ * This is for guest only now.
-+ */
-+void account_system_time(struct task_struct *p, int hardirq_offset,
-+                       cputime_t cputime, cputime_t cputime_scaled)
-+{
-+
-+      if ((p->flags & PF_VCPU) && (irq_count() - hardirq_offset == 0))
-+              account_guest_time(p, cputime, cputime_scaled);
-+}
-+
-+/*
-+ * Account for involuntary wait time.
-+ * @steal: the cpu time spent in involuntary wait
-+ */
-+void account_steal_time(cputime_t cputime)
-+{
-+      struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+      cputime64_t cputime64 = cputime_to_cputime64(cputime);
-+
-+      cpustat->steal = cputime64_add(cpustat->steal, cputime64);
-+}
-+
-+/*
-+ * Account for idle time.
-+ * @cputime: the cpu time spent in idle wait
-+ */
-+static void account_idle_times(cputime_t cputime)
-+{
-+      struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
-+      cputime64_t cputime64 = cputime_to_cputime64(cputime);
-+      struct rq *rq = this_rq();
-+
-+      if (atomic_read(&rq->nr_iowait) > 0)
-+              cpustat->iowait = cputime64_add(cpustat->iowait, cputime64);
-+      else
-+              cpustat->idle = cputime64_add(cpustat->idle, cputime64);
-+}
-+
-+#ifndef CONFIG_VIRT_CPU_ACCOUNTING
-+
-+void account_process_tick(struct task_struct *p, int user_tick)
-+{
-+}
-+
-+/*
-+ * Account multiple ticks of steal time.
-+ * @p: the process from which the cpu time has been stolen
-+ * @ticks: number of stolen ticks
-+ */
-+void account_steal_ticks(unsigned long ticks)
-+{
-+      account_steal_time(jiffies_to_cputime(ticks));
-+}
-+
-+/*
-+ * Account multiple ticks of idle time.
-+ * @ticks: number of stolen ticks
-+ */
-+void account_idle_ticks(unsigned long ticks)
-+{
-+      account_idle_times(jiffies_to_cputime(ticks));
-+}
-+#endif
-+
-+/*
-+ * Functions to test for when SCHED_ISO tasks have used their allocated
-+ * quota as real time scheduling and convert them back to SCHED_NORMAL.
-+ * Where possible, the data is tested lockless, to avoid grabbing grq_lock
-+ * because the occasional inaccurate result won't matter. However the
-+ * data is only ever modified under lock.
-+ */
-+static void set_iso_refractory(void)
-+{
-+      grq_lock();
-+      grq.iso_refractory = 1;
-+      grq_unlock();
-+}
-+
-+static void clear_iso_refractory(void)
-+{
-+      grq_lock();
-+      grq.iso_refractory = 0;
-+      grq_unlock();
-+}
-+
-+/*
-+ * Test if SCHED_ISO tasks have run longer than their alloted period as RT
-+ * tasks and set the refractory flag if necessary. There is 10% hysteresis
-+ * for unsetting the flag.
-+ */
-+static unsigned int test_ret_isorefractory(struct rq *rq)
-+{
-+      if (likely(!grq.iso_refractory)) {
-+              if (grq.iso_ticks / ISO_PERIOD > sched_iso_cpu)
-+                      set_iso_refractory();
-+      } else {
-+              if (grq.iso_ticks / ISO_PERIOD < (sched_iso_cpu * 90 / 100))
-+                      clear_iso_refractory();
-+      }
-+      return grq.iso_refractory;
-+}
-+
-+static void iso_tick(void)
-+{
-+      grq_lock();
-+      grq.iso_ticks += 100;
-+      grq_unlock();
-+}
-+
-+/* No SCHED_ISO task was running so decrease rq->iso_ticks */
-+static inline void no_iso_tick(void)
-+{
-+      if (grq.iso_ticks) {
-+              grq_lock();
-+              grq.iso_ticks = grq.iso_ticks * (ISO_PERIOD - 1) / ISO_PERIOD;
-+              grq_unlock();
-+      }
-+}
-+
-+static int rq_running_iso(struct rq *rq)
-+{
-+      return rq->rq_prio == ISO_PRIO;
-+}
-+
-+/* This manages tasks that have run out of timeslice during a scheduler_tick */
-+static void task_running_tick(struct rq *rq)
-+{
-+      struct task_struct *p;
-+
-+      /*
-+       * If a SCHED_ISO task is running we increment the iso_ticks. In
-+       * order to prevent SCHED_ISO tasks from causing starvation in the
-+       * presence of true RT tasks we account those as iso_ticks as well.
-+       */
-+      if ((rt_queue(rq) || (iso_queue(rq) && !grq.iso_refractory))) {
-+              if (grq.iso_ticks <= (ISO_PERIOD * 100) - 100)
-+                      iso_tick();
-+      } else
-+              no_iso_tick();
-+
-+      if (iso_queue(rq)) {
-+              if (unlikely(test_ret_isorefractory(rq))) {
-+                      if (rq_running_iso(rq)) {
-+                              /*
-+                               * SCHED_ISO task is running as RT and limit
-+                               * has been hit. Force it to reschedule as
-+                               * SCHED_NORMAL by zeroing its time_slice
-+                               */
-+                              rq->rq_time_slice = 0;
-+                      }
-+              }
-+      }
-+
-+      /* SCHED_FIFO tasks never run out of timeslice. */
-+      if (rq_idle(rq) || rq->rq_time_slice > 0 || rq->rq_policy == SCHED_FIFO)
-+              return;
-+
-+      /* p->rt.time_slice <= 0. We only modify task_struct under grq lock */
-+      grq_lock();
-+      p = rq->curr;
-+      if (likely(task_running(p))) {
-+              requeue_task(p);
-+              set_tsk_need_resched(p);
-+      }
-+      grq_unlock();
-+}
-+
-+void wake_up_idle_cpu(int cpu);
-+
-+/*
-+ * This function gets called by the timer code, with HZ frequency.
-+ * We call it with interrupts disabled. The data modified is all
-+ * local to struct rq so we don't need to grab grq lock.
-+ */
-+void scheduler_tick(void)
-+{
-+      int cpu = smp_processor_id();
-+      struct rq *rq = cpu_rq(cpu);
-+
-+      sched_clock_tick();
-+      update_rq_clock(rq);
-+      update_cpu_clock(rq, rq->curr, 1);
-+      if (!rq_idle(rq))
-+              task_running_tick(rq);
-+      else {
-+              no_iso_tick();
-+              if (unlikely(queued_notrunning()))
-+                      set_tsk_need_resched(rq->idle);
-+      }
-+}
-+
-+notrace unsigned long get_parent_ip(unsigned long addr)
-+{
-+      if (in_lock_functions(addr)) {
-+              addr = CALLER_ADDR2;
-+              if (in_lock_functions(addr))
-+                      addr = CALLER_ADDR3;
-+      }
-+      return addr;
-+}
-+
-+#if defined(CONFIG_PREEMPT) && (defined(CONFIG_DEBUG_PREEMPT) || \
-+                              defined(CONFIG_PREEMPT_TRACER))
-+void __kprobes add_preempt_count(int val)
-+{
-+#ifdef CONFIG_DEBUG_PREEMPT
-+      /*
-+       * Underflow?
-+       */
-+      if (DEBUG_LOCKS_WARN_ON((preempt_count() < 0)))
-+              return;
-+#endif
-+      preempt_count() += val;
-+#ifdef CONFIG_DEBUG_PREEMPT
-+      /*
-+       * Spinlock count overflowing soon?
-+       */
-+      DEBUG_LOCKS_WARN_ON((preempt_count() & PREEMPT_MASK) >=
-+                              PREEMPT_MASK - 10);
-+#endif
-+      if (preempt_count() == val)
-+              trace_preempt_off(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
-+}
-+EXPORT_SYMBOL(add_preempt_count);
-+
-+void __kprobes sub_preempt_count(int val)
-+{
-+#ifdef CONFIG_DEBUG_PREEMPT
-+      /*
-+       * Underflow?
-+       */
-+      if (DEBUG_LOCKS_WARN_ON(val > preempt_count()))
-+              return;
-+      /*
-+       * Is the spinlock portion underflowing?
-+       */
-+      if (DEBUG_LOCKS_WARN_ON((val < PREEMPT_MASK) &&
-+                      !(preempt_count() & PREEMPT_MASK)))
-+              return;
-+#endif
-+
-+      if (preempt_count() == val)
-+              trace_preempt_on(CALLER_ADDR0, get_parent_ip(CALLER_ADDR1));
-+      preempt_count() -= val;
-+}
-+EXPORT_SYMBOL(sub_preempt_count);
-+#endif
-+
-+/*
-+ * Deadline is "now" in jiffies + (offset by priority). Setting the deadline
-+ * is the key to everything. It distributes cpu fairly amongst tasks of the
-+ * same nice value, it proportions cpu according to nice level, it means the
-+ * task that last woke up the longest ago has the earliest deadline, thus
-+ * ensuring that interactive tasks get low latency on wake up.
-+ */
-+static inline int prio_deadline_diff(struct task_struct *p)
-+{
-+      return (pratio(p) * rr_interval * HZ / 1000 / 100) ? : 1;
-+}
-+
-+static inline int longest_deadline(void)
-+{
-+      return (prio_ratios[39] * rr_interval * HZ / 1000 / 100);
-+}
-+
-+/*
-+ * SCHED_IDLE tasks still have a deadline set, but offset by to nice +19.
-+ * This allows nice levels to work between IDLEPRIO tasks and gives a
-+ * deadline longer than nice +19 for when they're scheduled as SCHED_NORMAL
-+ * tasks.
-+ */
-+static inline void time_slice_expired(struct task_struct *p)
-+{
-+      reset_first_time_slice(p);
-+      p->rt.time_slice = timeslice();
-+      p->deadline = jiffies + prio_deadline_diff(p);
-+      if (idleprio_task(p))
-+              p->deadline += longest_deadline();
-+}
-+
-+static inline void check_deadline(struct task_struct *p)
-+{
-+      if (p->rt.time_slice <= 0)
-+              time_slice_expired(p);
-+}
-+
-+/*
-+ * O(n) lookup of all tasks in the global runqueue. The real brainfuck
-+ * of lock contention and O(n). It's not really O(n) as only the queued,
-+ * but not running tasks are scanned, and is O(n) queued in the worst case
-+ * scenario only because the right task can be found before scanning all of
-+ * them.
-+ * Tasks are selected in this order:
-+ * Real time tasks are selected purely by their static priority and in the
-+ * order they were queued, so the lowest value idx, and the first queued task
-+ * of that priority value is chosen.
-+ * If no real time tasks are found, the SCHED_ISO priority is checked, and
-+ * all SCHED_ISO tasks have the same priority value, so they're selected by
-+ * the earliest deadline value.
-+ * If no SCHED_ISO tasks are found, SCHED_NORMAL tasks are selected by the
-+ * earliest deadline.
-+ * Finally if no SCHED_NORMAL tasks are found, SCHED_IDLEPRIO tasks are
-+ * selected by the earliest deadline.
-+ */
-+static inline struct
-+task_struct *earliest_deadline_task(struct rq *rq, struct task_struct *idle)
-+{
-+      unsigned long dl, earliest_deadline = 0; /* Initialise to silence compiler */
-+      struct task_struct *p, *edt;
-+      unsigned int cpu = rq->cpu;
-+      struct list_head *queue;
-+      int idx = 0;
-+
-+      edt = idle;
-+retry:
-+      idx = find_next_bit(grq.prio_bitmap, PRIO_LIMIT, idx);
-+      if (idx >= PRIO_LIMIT)
-+              goto out;
-+      queue = &grq.queue[idx];
-+      list_for_each_entry(p, queue, rt.run_list) {
-+              /* Make sure cpu affinity is ok */
-+              if (!cpu_isset(cpu, p->cpus_allowed))
-+                      continue;
-+              if (idx < MAX_RT_PRIO) {
-+                      /* We found an rt task */
-+                      edt = p;
-+                      goto out_take;
-+              }
-+
-+              /*
-+               * No rt task, select the earliest deadline task now.
-+               * On the 1st run the 2nd condition is never used, so
-+               * there is no need to initialise earliest_deadline
-+               * before. Normalise all old deadlines to now.
-+               */
-+              if (time_before(p->deadline, jiffies))
-+                      dl = jiffies;
-+              else
-+                      dl = p->deadline;
-+
-+              if (edt == idle ||
-+                  time_before(dl, earliest_deadline)) {
-+                      earliest_deadline = dl;
-+                      edt = p;
-+              }
-+      }
-+      if (edt == idle) {
-+              if (++idx < PRIO_LIMIT)
-+                      goto retry;
-+              goto out;
-+      }
-+out_take:
-+      take_task(rq, edt);
-+out:
-+      return edt;
-+}
-+
-+#ifdef CONFIG_SMP
-+static inline void set_cpuidle_map(unsigned long cpu)
-+{
-+      cpu_set(cpu, grq.cpu_idle_map);
-+}
-+
-+static inline void clear_cpuidle_map(unsigned long cpu)
-+{
-+      cpu_clear(cpu, grq.cpu_idle_map);
-+}
-+
-+#else /* CONFIG_SMP */
-+static inline void set_cpuidle_map(unsigned long cpu)
-+{
-+}
-+
-+static inline void clear_cpuidle_map(unsigned long cpu)
-+{
-+}
-+#endif /* !CONFIG_SMP */
-+
-+/*
-+ * Print scheduling while atomic bug:
-+ */
-+static noinline void __schedule_bug(struct task_struct *prev)
-+{
-+      struct pt_regs *regs = get_irq_regs();
-+
-+      printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n",
-+              prev->comm, prev->pid, preempt_count());
-+
-+      debug_show_held_locks(prev);
-+      print_modules();
-+      if (irqs_disabled())
-+              print_irqtrace_events(prev);
-+
-+      if (regs)
-+              show_regs(regs);
-+      else
-+              dump_stack();
-+}
-+
-+/*
-+ * Various schedule()-time debugging checks and statistics:
-+ */
-+static inline void schedule_debug(struct task_struct *prev)
-+{
-+      /*
-+       * Test if we are atomic. Since do_exit() needs to call into
-+       * schedule() atomically, we ignore that path for now.
-+       * Otherwise, whine if we are scheduling when we should not be.
-+       */
-+      if (unlikely(in_atomic_preempt_off() && !prev->exit_state))
-+              __schedule_bug(prev);
-+
-+      profile_hit(SCHED_PROFILING, __builtin_return_address(0));
-+
-+      schedstat_inc(this_rq(), sched_count);
-+#ifdef CONFIG_SCHEDSTATS
-+      if (unlikely(prev->lock_depth >= 0)) {
-+              schedstat_inc(this_rq(), bkl_count);
-+              schedstat_inc(prev, sched_info.bkl_count);
-+      }
-+#endif
-+}
-+
-+/*
-+ * schedule() is the main scheduler function.
-+ */
-+asmlinkage void __sched __schedule(void)
-+{
-+      struct task_struct *prev, *next, *idle;
-+      int deactivate = 0, cpu;
-+      long *switch_count;
-+      struct rq *rq;
-+      u64 now;
-+
-+      cpu = smp_processor_id();
-+      rq = this_rq();
-+      rcu_qsctr_inc(cpu);
-+      prev = rq->curr;
-+      switch_count = &prev->nivcsw;
-+
-+      release_kernel_lock(prev);
-+need_resched_nonpreemptible:
-+
-+      schedule_debug(prev);
-+      idle = rq->idle;
-+      /*
-+       * The idle thread is not allowed to schedule!
-+       * Remove this check after it has been exercised a bit.
-+       */
-+      if (unlikely(prev == idle) && prev->state != TASK_RUNNING) {
-+              printk(KERN_ERR "bad: scheduling from the idle thread!\n");
-+              dump_stack();
-+      }
-+
-+      grq_lock_irq();
-+      update_rq_clock(rq);
-+      now = rq->clock;
-+      update_cpu_clock(rq, prev, 0);
-+
-+      clear_tsk_need_resched(prev);
-+
-+      if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
-+              if (unlikely(signal_pending_state(prev->state, prev)))
-+                      prev->state = TASK_RUNNING;
-+              else
-+                      deactivate = 1;
-+              switch_count = &prev->nvcsw;
-+      }
-+
-+      if (prev != idle) {
-+              /* Update all the information stored on struct rq */
-+              prev->rt.time_slice = rq->rq_time_slice;
-+              prev->deadline = rq->rq_deadline;
-+              check_deadline(prev);
-+              return_task(prev, deactivate);
-+      }
-+
-+      if (likely(queued_notrunning())) {
-+              next = earliest_deadline_task(rq, idle);
-+      } else {
-+              next = idle;
-+              schedstat_inc(rq, sched_goidle);
-+      }
-+
-+      if (next == rq->idle)
-+              set_cpuidle_map(cpu);
-+      else
-+              clear_cpuidle_map(cpu);
-+
-+      prefetch(next);
-+      prefetch_stack(next);
-+
-+      prev->timestamp = prev->last_ran = now;
-+
-+      if (likely(prev != next)) {
-+              rq->rq_time_slice = next->rt.time_slice;
-+              rq->rq_deadline = next->deadline;
-+              rq->rq_prio = next->prio;
-+
-+              sched_info_switch(prev, next);
-+              grq.nr_switches++;
-+              next->oncpu = 1;
-+              prev->oncpu = 0;
-+              rq->curr = next;
-+              ++*switch_count;
-+
-+              context_switch(rq, prev, next); /* unlocks the rq */
-+              /*
-+               * the context switch might have flipped the stack from under
-+               * us, hence refresh the local variables.
-+               */
-+              cpu = smp_processor_id();
-+              rq = cpu_rq(cpu);
-+      } else
-+              grq_unlock_irq();
-+
-+      if (unlikely(reacquire_kernel_lock(current) < 0))
-+              goto need_resched_nonpreemptible;
-+}
-+
-+asmlinkage void __sched schedule(void)
-+{
-+need_resched:
-+      preempt_disable();
-+      __schedule();
-+      preempt_enable_no_resched();
-+      if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
-+              goto need_resched;
-+}
-+EXPORT_SYMBOL(schedule);
-+
-+#ifdef CONFIG_SMP
-+int mutex_spin_on_owner(struct mutex *lock, struct thread_info *owner)
-+{
-+      return 0;
-+}
-+#endif
-+
-+#ifdef CONFIG_PREEMPT
-+/*
-+ * this is the entry point to schedule() from in-kernel preemption
-+ * off of preempt_enable. Kernel preemptions off return from interrupt
-+ * occur there and call schedule directly.
-+ */
-+asmlinkage void __sched preempt_schedule(void)
-+{
-+      struct thread_info *ti = current_thread_info();
-+
-+      /*
-+       * If there is a non-zero preempt_count or interrupts are disabled,
-+       * we do not want to preempt the current task. Just return..
-+       */
-+      if (likely(ti->preempt_count || irqs_disabled()))
-+              return;
-+
-+      do {
-+              add_preempt_count(PREEMPT_ACTIVE);
-+              schedule();
-+              sub_preempt_count(PREEMPT_ACTIVE);
-+
-+              /*
-+               * Check again in case we missed a preemption opportunity
-+               * between schedule and now.
-+               */
-+              barrier();
-+      } while (need_resched());
-+}
-+EXPORT_SYMBOL(preempt_schedule);
-+
-+/*
-+ * this is the entry point to schedule() from kernel preemption
-+ * off of irq context.
-+ * Note, that this is called and return with irqs disabled. This will
-+ * protect us against recursive calling from irq.
-+ */
-+asmlinkage void __sched preempt_schedule_irq(void)
-+{
-+      struct thread_info *ti = current_thread_info();
-+
-+      /* Catch callers which need to be fixed */
-+      BUG_ON(ti->preempt_count || !irqs_disabled());
-+
-+      do {
-+              add_preempt_count(PREEMPT_ACTIVE);
-+              local_irq_enable();
-+              schedule();
-+              local_irq_disable();
-+              sub_preempt_count(PREEMPT_ACTIVE);
-+
-+              /*
-+               * Check again in case we missed a preemption opportunity
-+               * between schedule and now.
-+               */
-+              barrier();
-+      } while (need_resched());
-+}
-+
-+#endif /* CONFIG_PREEMPT */
-+
-+int default_wake_function(wait_queue_t *curr, unsigned mode, int sync,
-+                        void *key)
-+{
-+      return try_to_wake_up(curr->private, mode, sync);
-+}
-+EXPORT_SYMBOL(default_wake_function);
-+
-+/*
-+ * The core wakeup function.  Non-exclusive wakeups (nr_exclusive == 0) just
-+ * wake everything up.  If it's an exclusive wakeup (nr_exclusive == small +ve
-+ * number) then we wake all the non-exclusive tasks and one exclusive task.
-+ *
-+ * There are circumstances in which we can try to wake a task which has already
-+ * started to run but is not in state TASK_RUNNING.  try_to_wake_up() returns
-+ * zero in this (rare) case, and we handle it by continuing to scan the queue.
-+ */
-+void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
-+                    int nr_exclusive, int sync, void *key)
-+{
-+      struct list_head *tmp, *next;
-+
-+      list_for_each_safe(tmp, next, &q->task_list) {
-+              wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list);
-+              unsigned flags = curr->flags;
-+
-+              if (curr->func(curr, mode, sync, key) &&
-+                              (flags & WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
-+                      break;
-+      }
-+}
-+
-+/**
-+ * __wake_up - wake up threads blocked on a waitqueue.
-+ * @q: the waitqueue
-+ * @mode: which threads
-+ * @nr_exclusive: how many wake-one or wake-many threads to wake up
-+ * @key: is directly passed to the wakeup function
-+ *
-+ * It may be assumed that this function implies a write memory barrier before
-+ * changing the task state if and only if any tasks are woken up.
-+ */
-+void __wake_up(wait_queue_head_t *q, unsigned int mode,
-+                      int nr_exclusive, void *key)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&q->lock, flags);
-+      __wake_up_common(q, mode, nr_exclusive, 0, key);
-+      spin_unlock_irqrestore(&q->lock, flags);
-+}
-+EXPORT_SYMBOL(__wake_up);
-+
-+/*
-+ * Same as __wake_up but called with the spinlock in wait_queue_head_t held.
-+ */
-+void __wake_up_locked(wait_queue_head_t *q, unsigned int mode)
-+{
-+      __wake_up_common(q, mode, 1, 0, NULL);
-+}
-+
-+void __wake_up_locked_key(wait_queue_head_t *q, unsigned int mode, void *key)
-+{
-+      __wake_up_common(q, mode, 1, 0, key);
-+}
-+
-+/**
-+ * __wake_up_sync_key - wake up threads blocked on a waitqueue.
-+ * @q: the waitqueue
-+ * @mode: which threads
-+ * @nr_exclusive: how many wake-one or wake-many threads to wake up
-+ * @key: opaque value to be passed to wakeup targets
-+ *
-+ * The sync wakeup differs that the waker knows that it will schedule
-+ * away soon, so while the target thread will be woken up, it will not
-+ * be migrated to another CPU - ie. the two threads are 'synchronized'
-+ * with each other. This can prevent needless bouncing between CPUs.
-+ *
-+ * On UP it can prevent extra preemption.
-+ *
-+ * It may be assumed that this function implies a write memory barrier before
-+ * changing the task state if and only if any tasks are woken up.
-+ */
-+void __wake_up_sync_key(wait_queue_head_t *q, unsigned int mode,
-+                      int nr_exclusive, void *key)
-+{
-+      unsigned long flags;
-+      int sync = 1;
-+
-+      if (unlikely(!q))
-+              return;
-+
-+      if (unlikely(!nr_exclusive))
-+              sync = 0;
-+
-+      spin_lock_irqsave(&q->lock, flags);
-+      __wake_up_common(q, mode, nr_exclusive, sync, key);
-+      spin_unlock_irqrestore(&q->lock, flags);
-+}
-+EXPORT_SYMBOL_GPL(__wake_up_sync_key);
-+
-+/**
-+ * __wake_up_sync - wake up threads blocked on a waitqueue.
-+ * @q: the waitqueue
-+ * @mode: which threads
-+ * @nr_exclusive: how many wake-one or wake-many threads to wake up
-+ *
-+ * The sync wakeup differs that the waker knows that it will schedule
-+ * away soon, so while the target thread will be woken up, it will not
-+ * be migrated to another CPU - ie. the two threads are 'synchronized'
-+ * with each other. This can prevent needless bouncing between CPUs.
-+ *
-+ * On UP it can prevent extra preemption.
-+ */
-+void __wake_up_sync(wait_queue_head_t *q, unsigned int mode, int nr_exclusive)
-+{
-+      unsigned long flags;
-+      int sync = 1;
-+
-+      if (unlikely(!q))
-+              return;
-+
-+      if (unlikely(!nr_exclusive))
-+              sync = 0;
-+
-+      spin_lock_irqsave(&q->lock, flags);
-+      __wake_up_common(q, mode, nr_exclusive, sync, NULL);
-+      spin_unlock_irqrestore(&q->lock, flags);
-+}
-+EXPORT_SYMBOL_GPL(__wake_up_sync);    /* For internal use only */
-+
-+/**
-+ * complete: - signals a single thread waiting on this completion
-+ * @x:  holds the state of this particular completion
-+ *
-+ * This will wake up a single thread waiting on this completion. Threads will be
-+ * awakened in the same order in which they were queued.
-+ *
-+ * See also complete_all(), wait_for_completion() and related routines.
-+ *
-+ * It may be assumed that this function implies a write memory barrier before
-+ * changing the task state if and only if any tasks are woken up.
-+ */
-+void complete(struct completion *x)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&x->wait.lock, flags);
-+      x->done++;
-+      __wake_up_common(&x->wait, TASK_NORMAL, 1, 0, NULL);
-+      spin_unlock_irqrestore(&x->wait.lock, flags);
-+}
-+EXPORT_SYMBOL(complete);
-+
-+/**
-+ * complete_all: - signals all threads waiting on this completion
-+ * @x:  holds the state of this particular completion
-+ *
-+ * This will wake up all threads waiting on this particular completion event.
-+ *
-+ * It may be assumed that this function implies a write memory barrier before
-+ * changing the task state if and only if any tasks are woken up.
-+ */
-+void complete_all(struct completion *x)
-+{
-+      unsigned long flags;
-+
-+      spin_lock_irqsave(&x->wait.lock, flags);
-+      x->done += UINT_MAX/2;
-+      __wake_up_common(&x->wait, TASK_NORMAL, 0, 0, NULL);
-+      spin_unlock_irqrestore(&x->wait.lock, flags);
-+}
-+EXPORT_SYMBOL(complete_all);
-+
-+static inline long __sched
-+do_wait_for_common(struct completion *x, long timeout, int state)
-+{
-+      if (!x->done) {
-+              DECLARE_WAITQUEUE(wait, current);
-+
-+              wait.flags |= WQ_FLAG_EXCLUSIVE;
-+              __add_wait_queue_tail(&x->wait, &wait);
-+              do {
-+                      if (signal_pending_state(state, current)) {
-+                              timeout = -ERESTARTSYS;
-+                              break;
-+                      }
-+                      __set_current_state(state);
-+                      spin_unlock_irq(&x->wait.lock);
-+                      timeout = schedule_timeout(timeout);
-+                      spin_lock_irq(&x->wait.lock);
-+              } while (!x->done && timeout);
-+              __remove_wait_queue(&x->wait, &wait);
-+              if (!x->done)
-+                      return timeout;
-+      }
-+      x->done--;
-+      return timeout ?: 1;
-+}
-+
-+static long __sched
-+wait_for_common(struct completion *x, long timeout, int state)
-+{
-+      might_sleep();
-+
-+      spin_lock_irq(&x->wait.lock);
-+      timeout = do_wait_for_common(x, timeout, state);
-+      spin_unlock_irq(&x->wait.lock);
-+      return timeout;
-+}
-+
-+/**
-+ * wait_for_completion: - waits for completion of a task
-+ * @x:  holds the state of this particular completion
-+ *
-+ * This waits to be signaled for completion of a specific task. It is NOT
-+ * interruptible and there is no timeout.
-+ *
-+ * See also similar routines (i.e. wait_for_completion_timeout()) with timeout
-+ * and interrupt capability. Also see complete().
-+ */
-+void __sched wait_for_completion(struct completion *x)
-+{
-+      wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE);
-+}
-+EXPORT_SYMBOL(wait_for_completion);
-+
-+/**
-+ * wait_for_completion_timeout: - waits for completion of a task (w/timeout)
-+ * @x:  holds the state of this particular completion
-+ * @timeout:  timeout value in jiffies
-+ *
-+ * This waits for either a completion of a specific task to be signaled or for a
-+ * specified timeout to expire. The timeout is in jiffies. It is not
-+ * interruptible.
-+ */
-+unsigned long __sched
-+wait_for_completion_timeout(struct completion *x, unsigned long timeout)
-+{
-+      return wait_for_common(x, timeout, TASK_UNINTERRUPTIBLE);
-+}
-+EXPORT_SYMBOL(wait_for_completion_timeout);
-+
-+/**
-+ * wait_for_completion_interruptible: - waits for completion of a task (w/intr)
-+ * @x:  holds the state of this particular completion
-+ *
-+ * This waits for completion of a specific task to be signaled. It is
-+ * interruptible.
-+ */
-+int __sched wait_for_completion_interruptible(struct completion *x)
-+{
-+      long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
-+      if (t == -ERESTARTSYS)
-+              return t;
-+      return 0;
-+}
-+EXPORT_SYMBOL(wait_for_completion_interruptible);
-+
-+/**
-+ * wait_for_completion_interruptible_timeout: - waits for completion (w/(to,intr))
-+ * @x:  holds the state of this particular completion
-+ * @timeout:  timeout value in jiffies
-+ *
-+ * This waits for either a completion of a specific task to be signaled or for a
-+ * specified timeout to expire. It is interruptible. The timeout is in jiffies.
-+ */
-+unsigned long __sched
-+wait_for_completion_interruptible_timeout(struct completion *x,
-+                                        unsigned long timeout)
-+{
-+      return wait_for_common(x, timeout, TASK_INTERRUPTIBLE);
-+}
-+EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
-+
-+/**
-+ * wait_for_completion_killable: - waits for completion of a task (killable)
-+ * @x:  holds the state of this particular completion
-+ *
-+ * This waits to be signaled for completion of a specific task. It can be
-+ * interrupted by a kill signal.
-+ */
-+int __sched wait_for_completion_killable(struct completion *x)
-+{
-+      long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_KILLABLE);
-+      if (t == -ERESTARTSYS)
-+              return t;
-+      return 0;
-+}
-+EXPORT_SYMBOL(wait_for_completion_killable);
-+
-+/**
-+ *    try_wait_for_completion - try to decrement a completion without blocking
-+ *    @x:     completion structure
-+ *
-+ *    Returns: 0 if a decrement cannot be done without blocking
-+ *             1 if a decrement succeeded.
-+ *
-+ *    If a completion is being used as a counting completion,
-+ *    attempt to decrement the counter without blocking. This
-+ *    enables us to avoid waiting if the resource the completion
-+ *    is protecting is not available.
-+ */
-+bool try_wait_for_completion(struct completion *x)
-+{
-+      int ret = 1;
-+
-+      spin_lock_irq(&x->wait.lock);
-+      if (!x->done)
-+              ret = 0;
-+      else
-+              x->done--;
-+      spin_unlock_irq(&x->wait.lock);
-+      return ret;
-+}
-+EXPORT_SYMBOL(try_wait_for_completion);
-+
-+/**
-+ *    completion_done - Test to see if a completion has any waiters
-+ *    @x:     completion structure
-+ *
-+ *    Returns: 0 if there are waiters (wait_for_completion() in progress)
-+ *             1 if there are no waiters.
-+ *
-+ */
-+bool completion_done(struct completion *x)
-+{
-+      int ret = 1;
-+
-+      spin_lock_irq(&x->wait.lock);
-+      if (!x->done)
-+              ret = 0;
-+      spin_unlock_irq(&x->wait.lock);
-+      return ret;
-+}
-+EXPORT_SYMBOL(completion_done);
-+
-+static long __sched
-+sleep_on_common(wait_queue_head_t *q, int state, long timeout)
-+{
-+      unsigned long flags;
-+      wait_queue_t wait;
-+
-+      init_waitqueue_entry(&wait, current);
-+
-+      __set_current_state(state);
-+
-+      spin_lock_irqsave(&q->lock, flags);
-+      __add_wait_queue(q, &wait);
-+      spin_unlock(&q->lock);
-+      timeout = schedule_timeout(timeout);
-+      spin_lock_irq(&q->lock);
-+      __remove_wait_queue(q, &wait);
-+      spin_unlock_irqrestore(&q->lock, flags);
-+
-+      return timeout;
-+}
-+
-+void __sched interruptible_sleep_on(wait_queue_head_t *q)
-+{
-+      sleep_on_common(q, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
-+}
-+EXPORT_SYMBOL(interruptible_sleep_on);
-+
-+long __sched
-+interruptible_sleep_on_timeout(wait_queue_head_t *q, long timeout)
-+{
-+      return sleep_on_common(q, TASK_INTERRUPTIBLE, timeout);
-+}
-+EXPORT_SYMBOL(interruptible_sleep_on_timeout);
-+
-+void __sched sleep_on(wait_queue_head_t *q)
-+{
-+      sleep_on_common(q, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
-+}
-+EXPORT_SYMBOL(sleep_on);
-+
-+long __sched sleep_on_timeout(wait_queue_head_t *q, long timeout)
-+{
-+      return sleep_on_common(q, TASK_UNINTERRUPTIBLE, timeout);
-+}
-+EXPORT_SYMBOL(sleep_on_timeout);
-+
-+#ifdef CONFIG_RT_MUTEXES
-+
-+/*
-+ * rt_mutex_setprio - set the current priority of a task
-+ * @p: task
-+ * @prio: prio value (kernel-internal form)
-+ *
-+ * This function changes the 'effective' priority of a task. It does
-+ * not touch ->normal_prio like __setscheduler().
-+ *
-+ * Used by the rt_mutex code to implement priority inheritance logic.
-+ */
-+void rt_mutex_setprio(struct task_struct *p, int prio)
-+{
-+      unsigned long flags;
-+      int queued, oldprio;
-+      struct rq *rq;
-+
-+      BUG_ON(prio < 0 || prio > MAX_PRIO);
-+
-+      rq = time_task_grq_lock(p, &flags);
-+
-+      oldprio = p->prio;
-+      queued = task_queued_only(p);
-+      if (queued)
-+              dequeue_task(p);
-+      p->prio = prio;
-+      if (task_running(p) && prio > oldprio)
-+              resched_task(p);
-+      if (queued) {
-+              enqueue_task(p);
-+              try_preempt(p);
-+      }
-+
-+      task_grq_unlock(&flags);
-+}
-+
-+#endif
-+
-+/*
-+ * Adjust the deadline for when the priority is to change, before it's
-+ * changed.
-+ */
-+static void adjust_deadline(struct task_struct *p, int new_prio)
-+{
-+      p->deadline += (prio_ratios[USER_PRIO(new_prio)] - pratio(p)) *
-+                      rr_interval * HZ / 1000 / 100;
-+}
-+
-+void set_user_nice(struct task_struct *p, long nice)
-+{
-+      int queued, new_static;
-+      unsigned long flags;
-+      struct rq *rq;
-+
-+      if (TASK_NICE(p) == nice || nice < -20 || nice > 19)
-+              return;
-+      new_static = NICE_TO_PRIO(nice);
-+      /*
-+       * We have to be careful, if called from sys_setpriority(),
-+       * the task might be in the middle of scheduling on another CPU.
-+       */
-+      rq = time_task_grq_lock(p, &flags);
-+      /*
-+       * The RT priorities are set via sched_setscheduler(), but we still
-+       * allow the 'normal' nice value to be set - but as expected
-+       * it wont have any effect on scheduling until the task is
-+       * not SCHED_NORMAL/SCHED_BATCH:
-+       */
-+      if (has_rt_policy(p)) {
-+              p->static_prio = new_static;
-+              goto out_unlock;
-+      }
-+      queued = task_queued_only(p);
-+      /*
-+       * If p is actually running, we don't need to do anything when
-+       * changing the priority because the grq is unaffected.
-+       */
-+      if (queued)
-+              dequeue_task(p);
-+
-+      adjust_deadline(p, new_static);
-+      p->static_prio = new_static;
-+      p->prio = effective_prio(p);
-+
-+      if (queued) {
-+              enqueue_task(p);
-+              try_preempt(p);
-+      }
-+
-+      /* Just resched the task, schedule() will know what to do. */
-+      if (task_running(p))
-+              resched_task(p);
-+out_unlock:
-+      task_grq_unlock(&flags);
-+}
-+EXPORT_SYMBOL(set_user_nice);
-+
-+/*
-+ * can_nice - check if a task can reduce its nice value
-+ * @p: task
-+ * @nice: nice value
-+ */
-+int can_nice(const struct task_struct *p, const int nice)
-+{
-+      /* convert nice value [19,-20] to rlimit style value [1,40] */
-+      int nice_rlim = 20 - nice;
-+
-+      return (nice_rlim <= p->signal->rlim[RLIMIT_NICE].rlim_cur ||
-+              capable(CAP_SYS_NICE));
-+}
-+
-+#ifdef __ARCH_WANT_SYS_NICE
-+
-+/*
-+ * sys_nice - change the priority of the current process.
-+ * @increment: priority increment
-+ *
-+ * sys_setpriority is a more generic, but much slower function that
-+ * does similar things.
-+ */
-+SYSCALL_DEFINE1(nice, int, increment)
-+{
-+      long nice, retval;
-+
-+      /*
-+       * Setpriority might change our priority at the same moment.
-+       * We don't have to worry. Conceptually one call occurs first
-+       * and we have a single winner.
-+       */
-+      if (increment < -40)
-+              increment = -40;
-+      if (increment > 40)
-+              increment = 40;
-+
-+      nice = TASK_NICE(current) + increment;
-+      if (nice < -20)
-+              nice = -20;
-+      if (nice > 19)
-+              nice = 19;
-+
-+      if (increment < 0 && !can_nice(current, nice))
-+              return -EPERM;
-+
-+      retval = security_task_setnice(current, nice);
-+      if (retval)
-+              return retval;
-+
-+      set_user_nice(current, nice);
-+      return 0;
-+}
-+
-+#endif
-+
-+/**
-+ * task_prio - return the priority value of a given task.
-+ * @p: the task in question.
-+ *
-+ * This is the priority value as seen by users in /proc.
-+ * RT tasks are offset by -100. Normal tasks are centered
-+ * around 1, value goes from 0 (SCHED_ISO) up to 82 (nice +19
-+ * SCHED_IDLE).
-+ */
-+int task_prio(const struct task_struct *p)
-+{
-+      int delta, prio = p->prio - MAX_RT_PRIO;
-+
-+      /* rt tasks and iso tasks */
-+      if (prio <= 0)
-+              goto out;
-+
-+      delta = (p->deadline - jiffies) * 40 / longest_deadline();
-+      if (delta > 0 && delta <= 80)
-+              prio += delta;
-+out:
-+      return prio;
-+}
-+
-+/**
-+ * task_nice - return the nice value of a given task.
-+ * @p: the task in question.
-+ */
-+int task_nice(const struct task_struct *p)
-+{
-+      return TASK_NICE(p);
-+}
-+EXPORT_SYMBOL_GPL(task_nice);
-+
-+/**
-+ * idle_cpu - is a given cpu idle currently?
-+ * @cpu: the processor in question.
-+ */
-+int idle_cpu(int cpu)
-+{
-+      return cpu_curr(cpu) == cpu_rq(cpu)->idle;
-+}
-+
-+/**
-+ * idle_task - return the idle task for a given cpu.
-+ * @cpu: the processor in question.
-+ */
-+struct task_struct *idle_task(int cpu)
-+{
-+      return cpu_rq(cpu)->idle;
-+}
-+
-+/**
-+ * find_process_by_pid - find a process with a matching PID value.
-+ * @pid: the pid in question.
-+ */
-+static inline struct task_struct *find_process_by_pid(pid_t pid)
-+{
-+      return pid ? find_task_by_vpid(pid) : current;
-+}
-+
-+/* Actually do priority change: must hold grq lock. */
-+static void __setscheduler(struct task_struct *p, int policy, int prio)
-+{
-+      BUG_ON(task_queued_only(p));
-+
-+      p->policy = policy;
-+      p->rt_priority = prio;
-+      p->normal_prio = normal_prio(p);
-+      /* we are holding p->pi_lock already */
-+      p->prio = rt_mutex_getprio(p);
-+      /*
-+       * Reschedule if running. schedule() will know if it can continue
-+       * running or not.
-+       */
-+      if (task_running(p))
-+              resched_task(p);
-+}
-+
-+/*
-+ * check the target process has a UID that matches the current process's
-+ */
-+static bool check_same_owner(struct task_struct *p)
-+{
-+      const struct cred *cred = current_cred(), *pcred;
-+      bool match;
-+
-+      rcu_read_lock();
-+      pcred = __task_cred(p);
-+      match = (cred->euid == pcred->euid ||
-+               cred->euid == pcred->uid);
-+      rcu_read_unlock();
-+      return match;
-+}
-+
-+static int __sched_setscheduler(struct task_struct *p, int policy,
-+                     struct sched_param *param, bool user)
-+{
-+      struct sched_param zero_param = { .sched_priority = 0 };
-+      int queued, retval, oldprio, oldpolicy = -1;
-+      unsigned long flags, rlim_rtprio = 0;
-+      struct rq *rq;
-+
-+      /* may grab non-irq protected spin_locks */
-+      BUG_ON(in_interrupt());
-+
-+      if (is_rt_policy(policy) && !capable(CAP_SYS_NICE)) {
-+              unsigned long lflags;
-+
-+              if (!lock_task_sighand(p, &lflags))
-+                      return -ESRCH;
-+              rlim_rtprio = p->signal->rlim[RLIMIT_RTPRIO].rlim_cur;
-+              unlock_task_sighand(p, &lflags);
-+              if (rlim_rtprio)
-+                      goto recheck;
-+              /*
-+               * If the caller requested an RT policy without having the
-+               * necessary rights, we downgrade the policy to SCHED_ISO.
-+               * We also set the parameter to zero to pass the checks.
-+               */
-+              policy = SCHED_ISO;
-+              param = &zero_param;
-+      }
-+recheck:
-+      /* double check policy once rq lock held */
-+      if (policy < 0)
-+              policy = oldpolicy = p->policy;
-+      else if (!SCHED_RANGE(policy))
-+              return -EINVAL;
-+      /*
-+       * Valid priorities for SCHED_FIFO and SCHED_RR are
-+       * 1..MAX_USER_RT_PRIO-1, valid priority for SCHED_NORMAL and
-+       * SCHED_BATCH is 0.
-+       */
-+      if (param->sched_priority < 0 ||
-+          (p->mm && param->sched_priority > MAX_USER_RT_PRIO-1) ||
-+          (!p->mm && param->sched_priority > MAX_RT_PRIO-1))
-+              return -EINVAL;
-+      if (is_rt_policy(policy) != (param->sched_priority != 0))
-+              return -EINVAL;
-+
-+      /*
-+       * Allow unprivileged RT tasks to decrease priority:
-+       */
-+      if (user && !capable(CAP_SYS_NICE)) {
-+              if (is_rt_policy(policy)) {
-+                      /* can't set/change the rt policy */
-+                      if (policy != p->policy && !rlim_rtprio)
-+                              return -EPERM;
-+
-+                      /* can't increase priority */
-+                      if (param->sched_priority > p->rt_priority &&
-+                          param->sched_priority > rlim_rtprio)
-+                              return -EPERM;
-+              } else {
-+                      switch (p->policy) {
-+                              /*
-+                               * Can only downgrade policies but not back to
-+                               * SCHED_NORMAL
-+                               */
-+                              case SCHED_ISO:
-+                                      if (policy == SCHED_ISO)
-+                                              goto out;
-+                                      if (policy == SCHED_NORMAL)
-+                                              return -EPERM;
-+                                      break;
-+                              case SCHED_BATCH:
-+                                      if (policy == SCHED_BATCH)
-+                                              goto out;
-+                                      if (policy != SCHED_IDLE)
-+                                              return -EPERM;
-+                                      break;
-+                              case SCHED_IDLE:
-+                                      if (policy == SCHED_IDLE)
-+                                              goto out;
-+                                      return -EPERM;
-+                              default:
-+                                      break;
-+                      }
-+              }
-+
-+              /* can't change other user's priorities */
-+              if (!check_same_owner(p))
-+                      return -EPERM;
-+      }
-+
-+      retval = security_task_setscheduler(p, policy, param);
-+      if (retval)
-+              return retval;
-+      /*
-+       * make sure no PI-waiters arrive (or leave) while we are
-+       * changing the priority of the task:
-+       */
-+      spin_lock_irqsave(&p->pi_lock, flags);
-+      /*
-+       * To be able to change p->policy safely, the apropriate
-+       * runqueue lock must be held.
-+       */
-+      rq = __task_grq_lock(p);
-+      /* recheck policy now with rq lock held */
-+      if (unlikely(oldpolicy != -1 && oldpolicy != p->policy)) {
-+              __task_grq_unlock();
-+              spin_unlock_irqrestore(&p->pi_lock, flags);
-+              policy = oldpolicy = -1;
-+              goto recheck;
-+      }
-+      update_rq_clock(rq);
-+      queued = task_queued_only(p);
-+      if (queued)
-+              dequeue_task(p);
-+      oldprio = p->prio;
-+      __setscheduler(p, policy, param->sched_priority);
-+      if (queued) {
-+              enqueue_task(p);
-+              try_preempt(p);
-+      }
-+      __task_grq_unlock();
-+      spin_unlock_irqrestore(&p->pi_lock, flags);
-+
-+      rt_mutex_adjust_pi(p);
-+out:
-+      return 0;
-+}
-+
-+/**
-+ * sched_setscheduler - change the scheduling policy and/or RT priority of a thread.
-+ * @p: the task in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ *
-+ * NOTE that the task may be already dead.
-+ */
-+int sched_setscheduler(struct task_struct *p, int policy,
-+                     struct sched_param *param)
-+{
-+      return __sched_setscheduler(p, policy, param, true);
-+}
-+
-+EXPORT_SYMBOL_GPL(sched_setscheduler);
-+
-+/**
-+ * sched_setscheduler_nocheck - change the scheduling policy and/or RT priority of a thread from kernelspace.
-+ * @p: the task in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ *
-+ * Just like sched_setscheduler, only don't bother checking if the
-+ * current context has permission.  For example, this is needed in
-+ * stop_machine(): we create temporary high priority worker threads,
-+ * but our caller might not have that capability.
-+ */
-+int sched_setscheduler_nocheck(struct task_struct *p, int policy,
-+                             struct sched_param *param)
-+{
-+      return __sched_setscheduler(p, policy, param, false);
-+}
-+
-+static int
-+do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
-+{
-+      struct sched_param lparam;
-+      struct task_struct *p;
-+      int retval;
-+
-+      if (!param || pid < 0)
-+              return -EINVAL;
-+      if (copy_from_user(&lparam, param, sizeof(struct sched_param)))
-+              return -EFAULT;
-+
-+      rcu_read_lock();
-+      retval = -ESRCH;
-+      p = find_process_by_pid(pid);
-+      if (p != NULL)
-+              retval = sched_setscheduler(p, policy, &lparam);
-+      rcu_read_unlock();
-+
-+      return retval;
-+}
-+
-+/**
-+ * sys_sched_setscheduler - set/change the scheduler policy and RT priority
-+ * @pid: the pid in question.
-+ * @policy: new policy.
-+ * @param: structure containing the new RT priority.
-+ */
-+asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
-+                                     struct sched_param __user *param)
-+{
-+      /* negative values for policy are not valid */
-+      if (policy < 0)
-+              return -EINVAL;
-+
-+      return do_sched_setscheduler(pid, policy, param);
-+}
-+
-+/**
-+ * sys_sched_setparam - set/change the RT priority of a thread
-+ * @pid: the pid in question.
-+ * @param: structure containing the new RT priority.
-+ */
-+SYSCALL_DEFINE2(sched_setparam, pid_t, pid, struct sched_param __user *, param)
-+{
-+      return do_sched_setscheduler(pid, -1, param);
-+}
-+
-+/**
-+ * sys_sched_getscheduler - get the policy (scheduling class) of a thread
-+ * @pid: the pid in question.
-+ */
-+SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid)
-+{
-+      struct task_struct *p;
-+      int retval = -EINVAL;
-+
-+      if (pid < 0)
-+              goto out_nounlock;
-+
-+      retval = -ESRCH;
-+      read_lock(&tasklist_lock);
-+      p = find_process_by_pid(pid);
-+      if (p) {
-+              retval = security_task_getscheduler(p);
-+              if (!retval)
-+                      retval = p->policy;
-+      }
-+      read_unlock(&tasklist_lock);
-+
-+out_nounlock:
-+      return retval;
-+}
-+
-+/**
-+ * sys_sched_getscheduler - get the RT priority of a thread
-+ * @pid: the pid in question.
-+ * @param: structure containing the RT priority.
-+ */
-+SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param)
-+{
-+      struct sched_param lp;
-+      struct task_struct *p;
-+      int retval = -EINVAL;
-+
-+      if (!param || pid < 0)
-+              goto out_nounlock;
-+
-+      read_lock(&tasklist_lock);
-+      p = find_process_by_pid(pid);
-+      retval = -ESRCH;
-+      if (!p)
-+              goto out_unlock;
-+
-+      retval = security_task_getscheduler(p);
-+      if (retval)
-+              goto out_unlock;
-+
-+      lp.sched_priority = p->rt_priority;
-+      read_unlock(&tasklist_lock);
-+
-+      /*
-+       * This one might sleep, we cannot do it with a spinlock held ...
-+       */
-+      retval = copy_to_user(param, &lp, sizeof(*param)) ? -EFAULT : 0;
-+
-+out_nounlock:
-+      return retval;
-+
-+out_unlock:
-+      read_unlock(&tasklist_lock);
-+      return retval;
-+}
-+
-+long sched_setaffinity(pid_t pid, const struct cpumask *in_mask)
-+{
-+      cpumask_var_t cpus_allowed, new_mask;
-+      struct task_struct *p;
-+      int retval;
-+
-+      get_online_cpus();
-+      read_lock(&tasklist_lock);
-+
-+      p = find_process_by_pid(pid);
-+      if (!p) {
-+              read_unlock(&tasklist_lock);
-+              put_online_cpus();
-+              return -ESRCH;
-+      }
-+
-+      /*
-+       * It is not safe to call set_cpus_allowed with the
-+       * tasklist_lock held. We will bump the task_struct's
-+       * usage count and then drop tasklist_lock.
-+       */
-+      get_task_struct(p);
-+      read_unlock(&tasklist_lock);
-+
-+      if (!alloc_cpumask_var(&cpus_allowed, GFP_KERNEL)) {
-+              retval = -ENOMEM;
-+              goto out_put_task;
-+      }
-+      if (!alloc_cpumask_var(&new_mask, GFP_KERNEL)) {
-+              retval = -ENOMEM;
-+              goto out_free_cpus_allowed;
-+      }
-+      retval = -EPERM;
-+      if (!check_same_owner(p) && !capable(CAP_SYS_NICE))
-+              goto out_unlock;
-+
-+      retval = security_task_setscheduler(p, 0, NULL);
-+      if (retval)
-+              goto out_unlock;
-+
-+      cpuset_cpus_allowed(p, cpus_allowed);
-+      cpumask_and(new_mask, in_mask, cpus_allowed);
-+again:
-+      retval = set_cpus_allowed_ptr(p, new_mask);
-+
-+      if (!retval) {
-+              cpuset_cpus_allowed(p, cpus_allowed);
-+              if (!cpumask_subset(new_mask, cpus_allowed)) {
-+                      /*
-+                       * We must have raced with a concurrent cpuset
-+                       * update. Just reset the cpus_allowed to the
-+                       * cpuset's cpus_allowed
-+                       */
-+                      cpumask_copy(new_mask, cpus_allowed);
-+                      goto again;
-+              }
-+      }
-+out_unlock:
-+      free_cpumask_var(new_mask);
-+out_free_cpus_allowed:
-+      free_cpumask_var(cpus_allowed);
-+out_put_task:
-+      put_task_struct(p);
-+      put_online_cpus();
-+      return retval;
-+}
-+
-+static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len,
-+                           cpumask_t *new_mask)
-+{
-+      if (len < sizeof(cpumask_t)) {
-+              memset(new_mask, 0, sizeof(cpumask_t));
-+      } else if (len > sizeof(cpumask_t)) {
-+              len = sizeof(cpumask_t);
-+      }
-+      return copy_from_user(new_mask, user_mask_ptr, len) ? -EFAULT : 0;
-+}
-+
-+
-+/**
-+ * sys_sched_setaffinity - set the cpu affinity of a process
-+ * @pid: pid of the process
-+ * @len: length in bytes of the bitmask pointed to by user_mask_ptr
-+ * @user_mask_ptr: user-space pointer to the new cpu mask
-+ */
-+SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len,
-+              unsigned long __user *, user_mask_ptr)
-+{
-+      cpumask_var_t new_mask;
-+      int retval;
-+
-+      if (!alloc_cpumask_var(&new_mask, GFP_KERNEL))
-+              return -ENOMEM;
-+
-+      retval = get_user_cpu_mask(user_mask_ptr, len, new_mask);
-+      if (retval == 0)
-+              retval = sched_setaffinity(pid, new_mask);
-+      free_cpumask_var(new_mask);
-+      return retval;
-+}
-+
-+long sched_getaffinity(pid_t pid, cpumask_t *mask)
-+{
-+      struct task_struct *p;
-+      int retval;
-+
-+      mutex_lock(&sched_hotcpu_mutex);
-+      read_lock(&tasklist_lock);
-+
-+      retval = -ESRCH;
-+      p = find_process_by_pid(pid);
-+      if (!p)
-+              goto out_unlock;
-+
-+      retval = security_task_getscheduler(p);
-+      if (retval)
-+              goto out_unlock;
-+
-+      cpus_and(*mask, p->cpus_allowed, cpu_online_map);
-+
-+out_unlock:
-+      read_unlock(&tasklist_lock);
-+      mutex_unlock(&sched_hotcpu_mutex);
-+      if (retval)
-+              return retval;
-+
-+      return 0;
-+}
-+
-+/**
-+ * sys_sched_getaffinity - get the cpu affinity of a process
-+ * @pid: pid of the process
-+ * @len: length in bytes of the bitmask pointed to by user_mask_ptr
-+ * @user_mask_ptr: user-space pointer to hold the current cpu mask
-+ */
-+SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len,
-+              unsigned long __user *, user_mask_ptr)
-+{
-+      int ret;
-+      cpumask_var_t mask;
-+
-+      if (len < cpumask_size())
-+              return -EINVAL;
-+
-+      if (!alloc_cpumask_var(&mask, GFP_KERNEL))
-+              return -ENOMEM;
-+
-+      ret = sched_getaffinity(pid, mask);
-+      if (ret == 0) {
-+              if (copy_to_user(user_mask_ptr, mask, cpumask_size()))
-+                      ret = -EFAULT;
-+              else
-+                      ret = cpumask_size();
-+      }
-+      free_cpumask_var(mask);
-+
-+      return ret;
-+}
-+
-+/**
-+ * sys_sched_yield - yield the current processor to other threads.
-+ *
-+ * This function yields the current CPU to other tasks. It does this by
-+ * refilling the timeslice, resetting the deadline and scheduling away.
-+ */
-+SYSCALL_DEFINE0(sched_yield)
-+{
-+      struct task_struct *p;
-+
-+      grq_lock_irq();
-+      p = current;
-+      schedstat_inc(this_rq(), yld_count);
-+      update_rq_clock(task_rq(p));
-+      time_slice_expired(p);
-+      requeue_task(p);
-+
-+      /*
-+       * Since we are going to call schedule() anyway, there's
-+       * no need to preempt or enable interrupts:
-+       */
-+      __release(grq.lock);
-+      spin_release(&grq.lock.dep_map, 1, _THIS_IP_);
-+      _raw_spin_unlock(&grq.lock);
-+      preempt_enable_no_resched();
-+
-+      schedule();
-+
-+      return 0;
-+}
-+
-+static inline int should_resched(void)
-+{
-+      return need_resched() && !(preempt_count() & PREEMPT_ACTIVE);
-+}
-+
-+static void __cond_resched(void)
-+{
-+#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
-+      __might_sleep(__FILE__, __LINE__);
-+#endif
-+      /*
-+       * The BKS might be reacquired before we have dropped
-+       * PREEMPT_ACTIVE, which could trigger a second
-+       * cond_resched() call.
-+       */
-+      do {
-+              add_preempt_count(PREEMPT_ACTIVE);
-+              schedule();
-+              sub_preempt_count(PREEMPT_ACTIVE);
-+      } while (need_resched());
-+}
-+
-+int __sched _cond_resched(void)
-+{
-+      if (should_resched()) {
-+              __cond_resched();
-+              return 1;
-+      }
-+      return 0;
-+}
-+EXPORT_SYMBOL(_cond_resched);
-+
-+/*
-+ * cond_resched_lock() - if a reschedule is pending, drop the given lock,
-+ * call schedule, and on return reacquire the lock.
-+ *
-+ * This works OK both with and without CONFIG_PREEMPT.  We do strange low-level
-+ * operations here to prevent schedule() from being called twice (once via
-+ * spin_unlock(), once by hand).
-+ */
-+int cond_resched_lock(spinlock_t *lock)
-+{
-+      int resched = should_resched();
-+      int ret = 0;
-+
-+      if (spin_needbreak(lock) || resched) {
-+              spin_unlock(lock);
-+              if (resched)
-+                      __cond_resched();
-+              else
-+                      cpu_relax();
-+              ret = 1;
-+              spin_lock(lock);
-+      }
-+      return ret;
-+}
-+EXPORT_SYMBOL(cond_resched_lock);
-+
-+int __sched cond_resched_softirq(void)
-+{
-+      BUG_ON(!in_softirq());
-+
-+      if (should_resched()) {
-+              local_bh_enable();
-+              __cond_resched();
-+              local_bh_disable();
-+              return 1;
-+      }
-+      return 0;
-+}
-+EXPORT_SYMBOL(cond_resched_softirq);
-+
-+/**
-+ * yield - yield the current processor to other threads.
-+ *
-+ * This is a shortcut for kernel-space yielding - it marks the
-+ * thread runnable and calls sys_sched_yield().
-+ */
-+void __sched yield(void)
-+{
-+      set_current_state(TASK_RUNNING);
-+      sys_sched_yield();
-+}
-+EXPORT_SYMBOL(yield);
-+
-+/*
-+ * This task is about to go to sleep on IO.  Increment rq->nr_iowait so
-+ * that process accounting knows that this is a task in IO wait state.
-+ *
-+ * But don't do that if it is a deliberate, throttling IO wait (this task
-+ * has set its backing_dev_info: the queue against which it should throttle)
-+ */
-+void __sched io_schedule(void)
-+{
-+      struct rq *rq = &__raw_get_cpu_var(runqueues);
-+
-+      delayacct_blkio_start();
-+      atomic_inc(&rq->nr_iowait);
-+      schedule();
-+      atomic_dec(&rq->nr_iowait);
-+      delayacct_blkio_end();
-+}
-+EXPORT_SYMBOL(io_schedule);
-+
-+long __sched io_schedule_timeout(long timeout)
-+{
-+      struct rq *rq = &__raw_get_cpu_var(runqueues);
-+      long ret;
-+
-+      delayacct_blkio_start();
-+      atomic_inc(&rq->nr_iowait);
-+      ret = schedule_timeout(timeout);
-+      atomic_dec(&rq->nr_iowait);
-+      delayacct_blkio_end();
-+      return ret;
-+}
-+
-+/**
-+ * sys_sched_get_priority_max - return maximum RT priority.
-+ * @policy: scheduling class.
-+ *
-+ * this syscall returns the maximum rt_priority that can be used
-+ * by a given scheduling class.
-+ */
-+SYSCALL_DEFINE1(sched_get_priority_max, int, policy)
-+{
-+      int ret = -EINVAL;
-+
-+      switch (policy) {
-+      case SCHED_FIFO:
-+      case SCHED_RR:
-+              ret = MAX_USER_RT_PRIO-1;
-+              break;
-+      case SCHED_NORMAL:
-+      case SCHED_BATCH:
-+      case SCHED_ISO:
-+      case SCHED_IDLE:
-+              ret = 0;
-+              break;
-+      }
-+      return ret;
-+}
-+
-+/**
-+ * sys_sched_get_priority_min - return minimum RT priority.
-+ * @policy: scheduling class.
-+ *
-+ * this syscall returns the minimum rt_priority that can be used
-+ * by a given scheduling class.
-+ */
-+SYSCALL_DEFINE1(sched_get_priority_min, int, policy)
-+{
-+      int ret = -EINVAL;
-+
-+      switch (policy) {
-+      case SCHED_FIFO:
-+      case SCHED_RR:
-+              ret = 1;
-+              break;
-+      case SCHED_NORMAL:
-+      case SCHED_BATCH:
-+      case SCHED_ISO:
-+      case SCHED_IDLE:
-+              ret = 0;
-+              break;
-+      }
-+      return ret;
-+}
-+
-+/**
-+ * sys_sched_rr_get_interval - return the default timeslice of a process.
-+ * @pid: pid of the process.
-+ * @interval: userspace pointer to the timeslice value.
-+ *
-+ * this syscall writes the default timeslice value of a given process
-+ * into the user-space timespec buffer. A value of '0' means infinity.
-+ */
-+SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid,
-+              struct timespec __user *, interval)
-+{
-+      struct task_struct *p;
-+      int retval = -EINVAL;
-+      struct timespec t;
-+
-+      if (pid < 0)
-+              goto out_nounlock;
-+
-+      retval = -ESRCH;
-+      read_lock(&tasklist_lock);
-+      p = find_process_by_pid(pid);
-+      if (!p)
-+              goto out_unlock;
-+
-+      retval = security_task_getscheduler(p);
-+      if (retval)
-+              goto out_unlock;
-+
-+      t = ns_to_timespec(p->policy == SCHED_FIFO ? 0 :
-+                         MS_TO_NS(task_timeslice(p)));
-+      read_unlock(&tasklist_lock);
-+      retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
-+out_nounlock:
-+      return retval;
-+out_unlock:
-+      read_unlock(&tasklist_lock);
-+      return retval;
-+}
-+
-+static const char stat_nam[] = TASK_STATE_TO_CHAR_STR;
-+
-+void sched_show_task(struct task_struct *p)
-+{
-+      unsigned long free = 0;
-+      unsigned state;
-+
-+      state = p->state ? __ffs(p->state) + 1 : 0;
-+      printk(KERN_INFO "%-13.13s %c", p->comm,
-+              state < sizeof(stat_nam) - 1 ? stat_nam[state] : '?');
-+#if BITS_PER_LONG == 32
-+      if (state == TASK_RUNNING)
-+              printk(KERN_CONT " running  ");
-+      else
-+              printk(KERN_CONT " %08lx ", thread_saved_pc(p));
-+#else
-+      if (state == TASK_RUNNING)
-+              printk(KERN_CONT "  running task    ");
-+      else
-+              printk(KERN_CONT " %016lx ", thread_saved_pc(p));
-+#endif
-+#ifdef CONFIG_DEBUG_STACK_USAGE
-+      free = stack_not_used(p);
-+#endif
-+      printk(KERN_CONT "%5lu %5d %6d 0x%08lx\n", free,
-+              task_pid_nr(p), task_pid_nr(p->real_parent),
-+              (unsigned long)task_thread_info(p)->flags);
-+
-+      show_stack(p, NULL);
-+}
-+
-+void show_state_filter(unsigned long state_filter)
-+{
-+      struct task_struct *g, *p;
-+
-+#if BITS_PER_LONG == 32
-+      printk(KERN_INFO
-+              "  task                PC stack   pid father\n");
-+#else
-+      printk(KERN_INFO
-+              "  task                        PC stack   pid father\n");
-+#endif
-+      read_lock(&tasklist_lock);
-+      do_each_thread(g, p) {
-+              /*
-+               * reset the NMI-timeout, listing all files on a slow
-+               * console might take alot of time:
-+               */
-+              touch_nmi_watchdog();
-+              if (!state_filter || (p->state & state_filter))
-+                      sched_show_task(p);
-+      } while_each_thread(g, p);
-+
-+      touch_all_softlockup_watchdogs();
-+
-+      read_unlock(&tasklist_lock);
-+      /*
-+       * Only show locks if all tasks are dumped:
-+       */
-+      if (state_filter == -1)
-+              debug_show_all_locks();
-+}
-+
-+/**
-+ * init_idle - set up an idle thread for a given CPU
-+ * @idle: task in question
-+ * @cpu: cpu the idle task belongs to
-+ *
-+ * NOTE: this function does not set the idle thread's NEED_RESCHED
-+ * flag, to make booting more robust.
-+ */
-+void __cpuinit init_idle(struct task_struct *idle, int cpu)
-+{
-+      struct rq *rq = cpu_rq(cpu);
-+      unsigned long flags;
-+
-+      time_grq_lock(rq, &flags);
-+      idle->timestamp = idle->last_ran = rq->clock;
-+      idle->state = TASK_RUNNING;
-+      /* Setting prio to illegal value shouldn't matter when never queued */
-+      idle->prio = rq->rq_prio = PRIO_LIMIT;
-+      rq->rq_deadline = idle->deadline;
-+      rq->rq_policy = idle->policy;
-+      rq->rq_time_slice = idle->rt.time_slice;
-+      idle->cpus_allowed = cpumask_of_cpu(cpu);
-+      set_task_cpu(idle, cpu);
-+      rq->curr = rq->idle = idle;
-+      idle->oncpu = 1;
-+      set_cpuidle_map(cpu);
-+#ifdef CONFIG_HOTPLUG_CPU
-+      idle->unplugged_mask = CPU_MASK_NONE;
-+#endif
-+      grq_unlock_irqrestore(&flags);
-+
-+      /* Set the preempt count _outside_ the spinlocks! */
-+#if defined(CONFIG_PREEMPT) && !defined(CONFIG_PREEMPT_BKL)
-+      task_thread_info(idle)->preempt_count = (idle->lock_depth >= 0);
-+#else
-+      task_thread_info(idle)->preempt_count = 0;
-+#endif
-+      ftrace_graph_init_task(idle);
-+}
-+
-+/*
-+ * In a system that switches off the HZ timer nohz_cpu_mask
-+ * indicates which cpus entered this state. This is used
-+ * in the rcu update to wait only for active cpus. For system
-+ * which do not switch off the HZ timer nohz_cpu_mask should
-+ * always be CPU_BITS_NONE.
-+ */
-+cpumask_var_t nohz_cpu_mask;
-+
-+#ifdef CONFIG_SMP
-+#ifdef CONFIG_NO_HZ
-+static struct {
-+      atomic_t load_balancer;
-+      cpumask_var_t cpu_mask;
-+      cpumask_var_t ilb_grp_nohz_mask;
-+} nohz ____cacheline_aligned = {
-+      .load_balancer = ATOMIC_INIT(-1),
-+};
-+
-+int get_nohz_load_balancer(void)
-+{
-+      return atomic_read(&nohz.load_balancer);
-+}
-+
-+/*
-+ * This routine will try to nominate the ilb (idle load balancing)
-+ * owner among the cpus whose ticks are stopped. ilb owner will do the idle
-+ * load balancing on behalf of all those cpus. If all the cpus in the system
-+ * go into this tickless mode, then there will be no ilb owner (as there is
-+ * no need for one) and all the cpus will sleep till the next wakeup event
-+ * arrives...
-+ *
-+ * For the ilb owner, tick is not stopped. And this tick will be used
-+ * for idle load balancing. ilb owner will still be part of
-+ * nohz.cpu_mask..
-+ *
-+ * While stopping the tick, this cpu will become the ilb owner if there
-+ * is no other owner. And will be the owner till that cpu becomes busy
-+ * or if all cpus in the system stop their ticks at which point
-+ * there is no need for ilb owner.
-+ *
-+ * When the ilb owner becomes busy, it nominates another owner, during the
-+ * next busy scheduler_tick()
-+ */
-+int select_nohz_load_balancer(int stop_tick)
-+{
-+      int cpu = smp_processor_id();
-+
-+      if (stop_tick) {
-+              cpu_rq(cpu)->in_nohz_recently = 1;
-+
-+              if (!cpu_active(cpu)) {
-+                      if (atomic_read(&nohz.load_balancer) != cpu)
-+                              return 0;
-+
-+                      /*
-+                       * If we are going offline and still the leader,
-+                       * give up!
-+                       */
-+                      if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu)
-+                              BUG();
-+
-+                      return 0;
-+              }
-+
-+              cpumask_set_cpu(cpu, nohz.cpu_mask);
-+
-+              /* time for ilb owner also to sleep */
-+              if (cpumask_weight(nohz.cpu_mask) == num_online_cpus()) {
-+                      if (atomic_read(&nohz.load_balancer) == cpu)
-+                              atomic_set(&nohz.load_balancer, -1);
-+                      return 0;
-+              }
-+
-+              if (atomic_read(&nohz.load_balancer) == -1) {
-+                      /* make me the ilb owner */
-+                      if (atomic_cmpxchg(&nohz.load_balancer, -1, cpu) == -1)
-+                              return 1;
-+              } else if (atomic_read(&nohz.load_balancer) == cpu)
-+                      return 1;
-+      } else {
-+              if (!cpumask_test_cpu(cpu, nohz.cpu_mask))
-+                      return 0;
-+
-+              cpumask_clear_cpu(cpu, nohz.cpu_mask);
-+
-+              if (atomic_read(&nohz.load_balancer) == cpu)
-+                      if (atomic_cmpxchg(&nohz.load_balancer, cpu, -1) != cpu)
-+                              BUG();
-+      }
-+      return 0;
-+}
-+
-+/*
-+ * When add_timer_on() enqueues a timer into the timer wheel of an
-+ * idle CPU then this timer might expire before the next timer event
-+ * which is scheduled to wake up that CPU. In case of a completely
-+ * idle system the next event might even be infinite time into the
-+ * future. wake_up_idle_cpu() ensures that the CPU is woken up and
-+ * leaves the inner idle loop so the newly added timer is taken into
-+ * account when the CPU goes back to idle and evaluates the timer
-+ * wheel for the next timer event.
-+ */
-+void wake_up_idle_cpu(int cpu)
-+{
-+      struct task_struct *idle;
-+      struct rq *rq;
-+
-+      if (cpu == smp_processor_id())
-+              return;
-+
-+      rq = cpu_rq(cpu);
-+      idle = rq->idle;
-+
-+      /*
-+       * This is safe, as this function is called with the timer
-+       * wheel base lock of (cpu) held. When the CPU is on the way
-+       * to idle and has not yet set rq->curr to idle then it will
-+       * be serialized on the timer wheel base lock and take the new
-+       * timer into account automatically.
-+       */
-+      if (unlikely(rq->curr != idle))
-+              return;
-+
-+      /*
-+       * We can set TIF_RESCHED on the idle task of the other CPU
-+       * lockless. The worst case is that the other CPU runs the
-+       * idle task through an additional NOOP schedule()
-+       */
-+      set_tsk_need_resched(idle);
-+
-+      /* NEED_RESCHED must be visible before we test polling */
-+      smp_mb();
-+      if (!tsk_is_polling(idle))
-+              smp_send_reschedule(cpu);
-+}
-+
-+#endif /* CONFIG_NO_HZ */
-+
-+/*
-+ * Change a given task's CPU affinity. Migrate the thread to a
-+ * proper CPU and schedule it away if the CPU it's executing on
-+ * is removed from the allowed bitmask.
-+ *
-+ * NOTE: the caller must have a valid reference to the task, the
-+ * task must not exit() & deallocate itself prematurely. The
-+ * call is not atomic; no spinlocks may be held.
-+ */
-+int set_cpus_allowed_ptr(struct task_struct *p, const struct cpumask *new_mask)
-+{
-+      unsigned long flags;
-+      int running = 0;
-+      int queued = 0;
-+      struct rq *rq;
-+      int ret = 0;
-+
-+      rq = task_grq_lock(p, &flags);
-+      if (!cpumask_intersects(new_mask, cpu_online_mask)) {
-+              ret = -EINVAL;
-+              goto out;
-+      }
-+
-+      if (unlikely((p->flags & PF_THREAD_BOUND) && p != current &&
-+                   !cpumask_equal(&p->cpus_allowed, new_mask))) {
-+              ret = -EINVAL;
-+              goto out;
-+      }
-+
-+      queued = task_queued_only(p);
-+
-+      cpumask_copy(&p->cpus_allowed, new_mask);
-+      p->rt.nr_cpus_allowed = cpumask_weight(new_mask);
-+
-+      /* Can the task run on the task's current CPU? If so, we're done */
-+      if (cpumask_test_cpu(task_cpu(p), new_mask))
-+              goto out;
-+
-+      /* Reschedule the task, schedule() will know if it can keep running */
-+      if (task_running(p))
-+              running = 1;
-+      else
-+              set_task_cpu(p, cpumask_any_and(cpu_online_mask, new_mask));
-+
-+out:
-+      if (queued)
-+              try_preempt(p);
-+      task_grq_unlock(&flags);
-+
-+      /* This might be a flaky way of changing cpus! */
-+      if (running)
-+              schedule();
-+      return ret;
-+}
-+EXPORT_SYMBOL_GPL(set_cpus_allowed_ptr);
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+/* Schedules idle task to be the next runnable task on current CPU.
-+ * It does so by boosting its priority to highest possible.
-+ * Used by CPU offline code.
-+ */
-+void sched_idle_next(void)
-+{
-+      int this_cpu = smp_processor_id();
-+      struct rq *rq = cpu_rq(this_cpu);
-+      struct task_struct *idle = rq->idle;
-+      unsigned long flags;
-+
-+      /* cpu has to be offline */
-+      BUG_ON(cpu_online(this_cpu));
-+
-+      /*
-+       * Strictly not necessary since rest of the CPUs are stopped by now
-+       * and interrupts disabled on the current cpu.
-+       */
-+      time_grq_lock(rq, &flags);
-+
-+      __setscheduler(idle, SCHED_FIFO, MAX_RT_PRIO - 1);
-+
-+      activate_idle_task(idle);
-+      set_tsk_need_resched(rq->curr);
-+
-+      grq_unlock_irqrestore(&flags);
-+}
-+
-+/*
-+ * Ensures that the idle task is using init_mm right before its cpu goes
-+ * offline.
-+ */
-+void idle_task_exit(void)
-+{
-+      struct mm_struct *mm = current->active_mm;
-+
-+      BUG_ON(cpu_online(smp_processor_id()));
-+
-+      if (mm != &init_mm)
-+              switch_mm(mm, &init_mm, current);
-+      mmdrop(mm);
-+}
-+
-+#endif /* CONFIG_HOTPLUG_CPU */
-+
-+#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SYSCTL)
-+
-+static struct ctl_table sd_ctl_dir[] = {
-+      {
-+              .procname       = "sched_domain",
-+              .mode           = 0555,
-+      },
-+      {0, },
-+};
-+
-+static struct ctl_table sd_ctl_root[] = {
-+      {
-+              .ctl_name       = CTL_KERN,
-+              .procname       = "kernel",
-+              .mode           = 0555,
-+              .child          = sd_ctl_dir,
-+      },
-+      {0, },
-+};
-+
-+static struct ctl_table *sd_alloc_ctl_entry(int n)
-+{
-+      struct ctl_table *entry =
-+              kcalloc(n, sizeof(struct ctl_table), GFP_KERNEL);
-+
-+      return entry;
-+}
-+
-+static void sd_free_ctl_entry(struct ctl_table **tablep)
-+{
-+      struct ctl_table *entry;
-+
-+      /*
-+       * In the intermediate directories, both the child directory and
-+       * procname are dynamically allocated and could fail but the mode
-+       * will always be set. In the lowest directory the names are
-+       * static strings and all have proc handlers.
-+       */
-+      for (entry = *tablep; entry->mode; entry++) {
-+              if (entry->child)
-+                      sd_free_ctl_entry(&entry->child);
-+              if (entry->proc_handler == NULL)
-+                      kfree(entry->procname);
-+      }
-+
-+      kfree(*tablep);
-+      *tablep = NULL;
-+}
-+
-+static void
-+set_table_entry(struct ctl_table *entry,
-+              const char *procname, void *data, int maxlen,
-+              mode_t mode, proc_handler *proc_handler)
-+{
-+      entry->procname = procname;
-+      entry->data = data;
-+      entry->maxlen = maxlen;
-+      entry->mode = mode;
-+      entry->proc_handler = proc_handler;
-+}
-+
-+static struct ctl_table *
-+sd_alloc_ctl_domain_table(struct sched_domain *sd)
-+{
-+      struct ctl_table *table = sd_alloc_ctl_entry(13);
-+
-+      if (table == NULL)
-+              return NULL;
-+
-+      set_table_entry(&table[0], "min_interval", &sd->min_interval,
-+              sizeof(long), 0644, proc_doulongvec_minmax);
-+      set_table_entry(&table[1], "max_interval", &sd->max_interval,
-+              sizeof(long), 0644, proc_doulongvec_minmax);
-+      set_table_entry(&table[2], "busy_idx", &sd->busy_idx,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[3], "idle_idx", &sd->idle_idx,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[4], "newidle_idx", &sd->newidle_idx,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[5], "wake_idx", &sd->wake_idx,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[6], "forkexec_idx", &sd->forkexec_idx,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[7], "busy_factor", &sd->busy_factor,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[8], "imbalance_pct", &sd->imbalance_pct,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[9], "cache_nice_tries",
-+              &sd->cache_nice_tries,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[10], "flags", &sd->flags,
-+              sizeof(int), 0644, proc_dointvec_minmax);
-+      set_table_entry(&table[11], "name", sd->name,
-+              CORENAME_MAX_SIZE, 0444, proc_dostring);
-+      /* &table[12] is terminator */
-+
-+      return table;
-+}
-+
-+static ctl_table *sd_alloc_ctl_cpu_table(int cpu)
-+{
-+      struct ctl_table *entry, *table;
-+      struct sched_domain *sd;
-+      int domain_num = 0, i;
-+      char buf[32];
-+
-+      for_each_domain(cpu, sd)
-+              domain_num++;
-+      entry = table = sd_alloc_ctl_entry(domain_num + 1);
-+      if (table == NULL)
-+              return NULL;
-+
-+      i = 0;
-+      for_each_domain(cpu, sd) {
-+              snprintf(buf, 32, "domain%d", i);
-+              entry->procname = kstrdup(buf, GFP_KERNEL);
-+              entry->mode = 0555;
-+              entry->child = sd_alloc_ctl_domain_table(sd);
-+              entry++;
-+              i++;
-+      }
-+      return table;
-+}
-+
-+static struct ctl_table_header *sd_sysctl_header;
-+static void register_sched_domain_sysctl(void)
-+{
-+      int i, cpu_num = num_online_cpus();
-+      struct ctl_table *entry = sd_alloc_ctl_entry(cpu_num + 1);
-+      char buf[32];
-+
-+      WARN_ON(sd_ctl_dir[0].child);
-+      sd_ctl_dir[0].child = entry;
-+
-+      if (entry == NULL)
-+              return;
-+
-+      for_each_online_cpu(i) {
-+              snprintf(buf, 32, "cpu%d", i);
-+              entry->procname = kstrdup(buf, GFP_KERNEL);
-+              entry->mode = 0555;
-+              entry->child = sd_alloc_ctl_cpu_table(i);
-+              entry++;
-+      }
-+
-+      WARN_ON(sd_sysctl_header);
-+      sd_sysctl_header = register_sysctl_table(sd_ctl_root);
-+}
-+
-+/* may be called multiple times per register */
-+static void unregister_sched_domain_sysctl(void)
-+{
-+      if (sd_sysctl_header)
-+              unregister_sysctl_table(sd_sysctl_header);
-+      sd_sysctl_header = NULL;
-+      if (sd_ctl_dir[0].child)
-+              sd_free_ctl_entry(&sd_ctl_dir[0].child);
-+}
-+#else
-+static void register_sched_domain_sysctl(void)
-+{
-+}
-+static void unregister_sched_domain_sysctl(void)
-+{
-+}
-+#endif
-+
-+static void set_rq_online(struct rq *rq)
-+{
-+      if (!rq->online) {
-+              cpumask_set_cpu(rq->cpu, rq->rd->online);
-+              rq->online = 1;
-+      }
-+}
-+
-+static void set_rq_offline(struct rq *rq)
-+{
-+      if (rq->online) {
-+              cpumask_clear_cpu(rq->cpu, rq->rd->online);
-+              rq->online = 0;
-+      }
-+}
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+/*
-+ * This cpu is going down, so walk over the tasklist and find tasks that can
-+ * only run on this cpu and remove their affinity. Store their value in
-+ * unplugged_mask so it can be restored once their correct cpu is online. No
-+ * need to do anything special since they'll just move on next reschedule if
-+ * they're running.
-+ */
-+static void remove_cpu(unsigned long cpu)
-+{
-+      struct task_struct *p, *t;
-+
-+      read_lock(&tasklist_lock);
-+
-+      do_each_thread(t, p) {
-+              cpumask_t cpus_remaining;
-+
-+              cpus_and(cpus_remaining, p->cpus_allowed, cpu_online_map);
-+              cpu_clear(cpu, cpus_remaining);
-+              if (cpus_empty(cpus_remaining)) {
-+                      p->unplugged_mask = p->cpus_allowed;
-+                      p->cpus_allowed = cpu_possible_map;
-+              }
-+      } while_each_thread(t, p);
-+
-+      read_unlock(&tasklist_lock);
-+}
-+
-+/*
-+ * This cpu is coming up so add it to the cpus_allowed.
-+ */
-+static void add_cpu(unsigned long cpu)
-+{
-+      struct task_struct *p, *t;
-+
-+      read_lock(&tasklist_lock);
-+
-+      do_each_thread(t, p) {
-+              /* Have we taken all the cpus from the unplugged_mask back */
-+              if (cpus_empty(p->unplugged_mask))
-+                      continue;
-+
-+              /* Was this cpu in the unplugged_mask mask */
-+              if (cpu_isset(cpu, p->unplugged_mask)) {
-+                      cpu_set(cpu, p->cpus_allowed);
-+                      if (cpus_subset(p->unplugged_mask, p->cpus_allowed)) {
-+                              /*
-+                               * Have we set more than the unplugged_mask?
-+                               * If so, that means we have remnants set from
-+                               * the unplug/plug cycle and need to remove
-+                               * them. Then clear the unplugged_mask as we've
-+                               * set all the cpus back.
-+                               */
-+                              p->cpus_allowed = p->unplugged_mask;
-+                              cpus_clear(p->unplugged_mask);
-+                      }
-+              }
-+      } while_each_thread(t, p);
-+
-+      read_unlock(&tasklist_lock);
-+}
-+#else
-+static void add_cpu(unsigned long cpu)
-+{
-+}
-+#endif
-+
-+/*
-+ * migration_call - callback that gets triggered when a CPU is added.
-+ */
-+static int __cpuinit
-+migration_call(struct notifier_block *nfb, unsigned long action, void *hcpu)
-+{
-+      int cpu = (long)hcpu;
-+      unsigned long flags;
-+      struct rq *rq;
-+
-+      switch (action) {
-+
-+      case CPU_UP_PREPARE:
-+      case CPU_UP_PREPARE_FROZEN:
-+              break;
-+
-+      case CPU_ONLINE:
-+      case CPU_ONLINE_FROZEN:
-+              /* Update our root-domain */
-+              rq = cpu_rq(cpu);
-+              grq_lock_irqsave(&flags);
-+              if (rq->rd) {
-+                      BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span));
-+
-+                      set_rq_online(rq);
-+              }
-+              add_cpu(cpu);
-+              grq_unlock_irqrestore(&flags);
-+              break;
-+
-+#ifdef CONFIG_HOTPLUG_CPU
-+      case CPU_UP_CANCELED:
-+      case CPU_UP_CANCELED_FROZEN:
-+              break;
-+
-+      case CPU_DEAD:
-+      case CPU_DEAD_FROZEN:
-+              cpuset_lock(); /* around calls to cpuset_cpus_allowed_lock() */
-+              rq = cpu_rq(cpu);
-+              /* Idle task back to normal (off runqueue, low prio) */
-+              grq_lock_irq();
-+              remove_cpu(cpu);
-+              deactivate_task(rq->idle);
-+              rq->idle->static_prio = MAX_PRIO;
-+              __setscheduler(rq->idle, SCHED_NORMAL, 0);
-+              rq->idle->prio = PRIO_LIMIT;
-+              update_rq_clock(rq);
-+              grq_unlock_irq();
-+              cpuset_unlock();
-+              break;
-+
-+      case CPU_DYING:
-+      case CPU_DYING_FROZEN:
-+              rq = cpu_rq(cpu);
-+              grq_lock_irqsave(&flags);
-+              if (rq->rd) {
-+                      BUG_ON(!cpumask_test_cpu(cpu, rq->rd->span));
-+                      set_rq_offline(rq);
-+              }
-+              grq_unlock_irqrestore(&flags);
-+              break;
-+#endif
-+      }
-+      return NOTIFY_OK;
-+}
-+
-+/*
-+ * Register at high priority so that task migration (migrate_all_tasks)
-+ * happens before everything else.  This has to be lower priority than
-+ * the notifier in the perf_counter subsystem, though.
-+ */
-+static struct notifier_block __cpuinitdata migration_notifier = {
-+      .notifier_call = migration_call,
-+      .priority = 10
-+};
-+
-+int __init migration_init(void)
-+{
-+      void *cpu = (void *)(long)smp_processor_id();
-+      int err;
-+
-+      /* Start one for the boot CPU: */
-+      err = migration_call(&migration_notifier, CPU_UP_PREPARE, cpu);
-+      BUG_ON(err == NOTIFY_BAD);
-+      migration_call(&migration_notifier, CPU_ONLINE, cpu);
-+      register_cpu_notifier(&migration_notifier);
-+
-+      return 0;
-+}
-+early_initcall(migration_init);
-+#endif
-+
-+/*
-+ * sched_domains_mutex serializes calls to arch_init_sched_domains,
-+ * detach_destroy_domains and partition_sched_domains.
-+ */
-+static DEFINE_MUTEX(sched_domains_mutex);
-+
-+#ifdef CONFIG_SMP
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+
-+static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level,
-+                                struct cpumask *groupmask)
-+{
-+      struct sched_group *group = sd->groups;
-+      char str[256];
-+
-+      cpulist_scnprintf(str, sizeof(str), sched_domain_span(sd));
-+      cpumask_clear(groupmask);
-+
-+      printk(KERN_DEBUG "%*s domain %d: ", level, "", level);
-+
-+      if (!(sd->flags & SD_LOAD_BALANCE)) {
-+              printk("does not load-balance\n");
-+              if (sd->parent)
-+                      printk(KERN_ERR "ERROR: !SD_LOAD_BALANCE domain"
-+                                      " has parent");
-+              return -1;
-+      }
-+
-+      printk(KERN_CONT "span %s level %s\n", str, sd->name);
-+
-+      if (!cpumask_test_cpu(cpu, sched_domain_span(sd))) {
-+              printk(KERN_ERR "ERROR: domain->span does not contain "
-+                              "CPU%d\n", cpu);
-+      }
-+      if (!cpumask_test_cpu(cpu, sched_group_cpus(group))) {
-+              printk(KERN_ERR "ERROR: domain->groups does not contain"
-+                              " CPU%d\n", cpu);
-+      }
-+
-+      printk(KERN_DEBUG "%*s groups:", level + 1, "");
-+      do {
-+              if (!group) {
-+                      printk("\n");
-+                      printk(KERN_ERR "ERROR: group is NULL\n");
-+                      break;
-+              }
-+
-+              if (!group->__cpu_power) {
-+                      printk(KERN_CONT "\n");
-+                      printk(KERN_ERR "ERROR: domain->cpu_power not "
-+                                      "set\n");
-+                      break;
-+              }
-+
-+              if (!cpumask_weight(sched_group_cpus(group))) {
-+                      printk(KERN_CONT "\n");
-+                      printk(KERN_ERR "ERROR: empty group\n");
-+                      break;
-+              }
-+
-+              if (cpumask_intersects(groupmask, sched_group_cpus(group))) {
-+                      printk(KERN_CONT "\n");
-+                      printk(KERN_ERR "ERROR: repeated CPUs\n");
-+                      break;
-+              }
-+
-+              cpumask_or(groupmask, groupmask, sched_group_cpus(group));
-+
-+              cpulist_scnprintf(str, sizeof(str), sched_group_cpus(group));
-+
-+              printk(KERN_CONT " %s", str);
-+              if (group->__cpu_power != SCHED_LOAD_SCALE) {
-+                      printk(KERN_CONT " (__cpu_power = %d)",
-+                              group->__cpu_power);
-+              }
-+
-+              group = group->next;
-+      } while (group != sd->groups);
-+      printk(KERN_CONT "\n");
-+
-+      if (!cpumask_equal(sched_domain_span(sd), groupmask))
-+              printk(KERN_ERR "ERROR: groups don't span domain->span\n");
-+
-+      if (sd->parent &&
-+          !cpumask_subset(groupmask, sched_domain_span(sd->parent)))
-+              printk(KERN_ERR "ERROR: parent span is not a superset "
-+                      "of domain->span\n");
-+      return 0;
-+}
-+
-+static void sched_domain_debug(struct sched_domain *sd, int cpu)
-+{
-+      cpumask_var_t groupmask;
-+      int level = 0;
-+
-+      if (!sd) {
-+              printk(KERN_DEBUG "CPU%d attaching NULL sched-domain.\n", cpu);
-+              return;
-+      }
-+
-+      printk(KERN_DEBUG "CPU%d attaching sched-domain:\n", cpu);
-+
-+      if (!alloc_cpumask_var(&groupmask, GFP_KERNEL)) {
-+              printk(KERN_DEBUG "Cannot load-balance (out of memory)\n");
-+              return;
-+      }
-+
-+      for (;;) {
-+              if (sched_domain_debug_one(sd, cpu, level, groupmask))
-+                      break;
-+              level++;
-+              sd = sd->parent;
-+              if (!sd)
-+                      break;
-+      }
-+      free_cpumask_var(groupmask);
-+}
-+#else /* !CONFIG_SCHED_DEBUG */
-+# define sched_domain_debug(sd, cpu) do { } while (0)
-+#endif /* CONFIG_SCHED_DEBUG */
-+
-+static int sd_degenerate(struct sched_domain *sd)
-+{
-+      if (cpumask_weight(sched_domain_span(sd)) == 1)
-+              return 1;
-+
-+      /* Following flags need at least 2 groups */
-+      if (sd->flags & (SD_LOAD_BALANCE |
-+                       SD_BALANCE_NEWIDLE |
-+                       SD_BALANCE_FORK |
-+                       SD_BALANCE_EXEC |
-+                       SD_SHARE_CPUPOWER |
-+                       SD_SHARE_PKG_RESOURCES)) {
-+              if (sd->groups != sd->groups->next)
-+                      return 0;
-+      }
-+
-+      /* Following flags don't use groups */
-+      if (sd->flags & (SD_WAKE_IDLE |
-+                       SD_WAKE_AFFINE |
-+                       SD_WAKE_BALANCE))
-+              return 0;
-+
-+      return 1;
-+}
-+
-+static int
-+sd_parent_degenerate(struct sched_domain *sd, struct sched_domain *parent)
-+{
-+      unsigned long cflags = sd->flags, pflags = parent->flags;
-+
-+      if (sd_degenerate(parent))
-+              return 1;
-+
-+      if (!cpumask_equal(sched_domain_span(sd), sched_domain_span(parent)))
-+              return 0;
-+
-+      /* Does parent contain flags not in child? */
-+      /* WAKE_BALANCE is a subset of WAKE_AFFINE */
-+      if (cflags & SD_WAKE_AFFINE)
-+              pflags &= ~SD_WAKE_BALANCE;
-+      /* Flags needing groups don't count if only 1 group in parent */
-+      if (parent->groups == parent->groups->next) {
-+              pflags &= ~(SD_LOAD_BALANCE |
-+                              SD_BALANCE_NEWIDLE |
-+                              SD_BALANCE_FORK |
-+                              SD_BALANCE_EXEC |
-+                              SD_SHARE_CPUPOWER |
-+                              SD_SHARE_PKG_RESOURCES);
-+              if (nr_node_ids == 1)
-+                      pflags &= ~SD_SERIALIZE;
-+      }
-+      if (~cflags & pflags)
-+              return 0;
-+
-+      return 1;
-+}
-+
-+static void free_rootdomain(struct root_domain *rd)
-+{
-+      free_cpumask_var(rd->rto_mask);
-+      free_cpumask_var(rd->online);
-+      free_cpumask_var(rd->span);
-+      kfree(rd);
-+}
-+
-+static void rq_attach_root(struct rq *rq, struct root_domain *rd)
-+{
-+      struct root_domain *old_rd = NULL;
-+      unsigned long flags;
-+
-+      grq_lock_irqsave(&flags);
-+
-+      if (rq->rd) {
-+              old_rd = rq->rd;
-+
-+              if (cpumask_test_cpu(rq->cpu, old_rd->online))
-+                      set_rq_offline(rq);
-+
-+              cpumask_clear_cpu(rq->cpu, old_rd->span);
-+
-+              /*
-+               * If we dont want to free the old_rt yet then
-+               * set old_rd to NULL to skip the freeing later
-+               * in this function:
-+               */
-+              if (!atomic_dec_and_test(&old_rd->refcount))
-+                      old_rd = NULL;
-+      }
-+
-+      atomic_inc(&rd->refcount);
-+      rq->rd = rd;
-+
-+      cpumask_set_cpu(rq->cpu, rd->span);
-+      if (cpumask_test_cpu(rq->cpu, cpu_online_mask))
-+              set_rq_online(rq);
-+
-+      grq_unlock_irqrestore(&flags);
-+
-+      if (old_rd)
-+              free_rootdomain(old_rd);
-+}
-+
-+static int init_rootdomain(struct root_domain *rd, bool bootmem)
-+{
-+      gfp_t gfp = GFP_KERNEL;
-+
-+      memset(rd, 0, sizeof(*rd));
-+
-+      if (bootmem)
-+              gfp = GFP_NOWAIT;
-+
-+      if (!alloc_cpumask_var(&rd->span, gfp))
-+              goto out;
-+      if (!alloc_cpumask_var(&rd->online, gfp))
-+              goto free_span;
-+      if (!alloc_cpumask_var(&rd->rto_mask, gfp))
-+              goto free_online;
-+
-+      return 0;
-+
-+free_online:
-+      free_cpumask_var(rd->online);
-+free_span:
-+      free_cpumask_var(rd->span);
-+out:
-+      return -ENOMEM;
-+}
-+
-+static void init_defrootdomain(void)
-+{
-+      init_rootdomain(&def_root_domain, true);
-+
-+      atomic_set(&def_root_domain.refcount, 1);
-+}
-+
-+static struct root_domain *alloc_rootdomain(void)
-+{
-+      struct root_domain *rd;
-+
-+      rd = kmalloc(sizeof(*rd), GFP_KERNEL);
-+      if (!rd)
-+              return NULL;
-+
-+      if (init_rootdomain(rd, false) != 0) {
-+              kfree(rd);
-+              return NULL;
-+      }
-+
-+      return rd;
-+}
-+
-+/*
-+ * Attach the domain 'sd' to 'cpu' as its base domain. Callers must
-+ * hold the hotplug lock.
-+ */
-+static void
-+cpu_attach_domain(struct sched_domain *sd, struct root_domain *rd, int cpu)
-+{
-+      struct rq *rq = cpu_rq(cpu);
-+      struct sched_domain *tmp;
-+
-+      /* Remove the sched domains which do not contribute to scheduling. */
-+      for (tmp = sd; tmp; ) {
-+              struct sched_domain *parent = tmp->parent;
-+              if (!parent)
-+                      break;
-+
-+              if (sd_parent_degenerate(tmp, parent)) {
-+                      tmp->parent = parent->parent;
-+                      if (parent->parent)
-+                              parent->parent->child = tmp;
-+              } else
-+                      tmp = tmp->parent;
-+      }
-+
-+      if (sd && sd_degenerate(sd)) {
-+              sd = sd->parent;
-+              if (sd)
-+                      sd->child = NULL;
-+      }
-+
-+      sched_domain_debug(sd, cpu);
-+
-+      rq_attach_root(rq, rd);
-+      rcu_assign_pointer(rq->sd, sd);
-+}
-+
-+/* cpus with isolated domains */
-+static cpumask_var_t cpu_isolated_map;
-+
-+/* Setup the mask of cpus configured for isolated domains */
-+static int __init isolated_cpu_setup(char *str)
-+{
-+      cpulist_parse(str, cpu_isolated_map);
-+      return 1;
-+}
-+
-+__setup("isolcpus=", isolated_cpu_setup);
-+
-+/*
-+ * init_sched_build_groups takes the cpumask we wish to span, and a pointer
-+ * to a function which identifies what group(along with sched group) a CPU
-+ * belongs to. The return value of group_fn must be a >= 0 and < nr_cpu_ids
-+ * (due to the fact that we keep track of groups covered with a struct cpumask).
-+ *
-+ * init_sched_build_groups will build a circular linked list of the groups
-+ * covered by the given span, and will set each group's ->cpumask correctly,
-+ * and ->cpu_power to 0.
-+ */
-+static void
-+init_sched_build_groups(const struct cpumask *span,
-+                      const struct cpumask *cpu_map,
-+                      int (*group_fn)(int cpu, const struct cpumask *cpu_map,
-+                                      struct sched_group **sg,
-+                                      struct cpumask *tmpmask),
-+                      struct cpumask *covered, struct cpumask *tmpmask)
-+{
-+      struct sched_group *first = NULL, *last = NULL;
-+      int i;
-+
-+      cpumask_clear(covered);
-+
-+      for_each_cpu(i, span) {
-+              struct sched_group *sg;
-+              int group = group_fn(i, cpu_map, &sg, tmpmask);
-+              int j;
-+
-+              if (cpumask_test_cpu(i, covered))
-+                      continue;
-+
-+              cpumask_clear(sched_group_cpus(sg));
-+              sg->__cpu_power = 0;
-+
-+              for_each_cpu(j, span) {
-+                      if (group_fn(j, cpu_map, NULL, tmpmask) != group)
-+                              continue;
-+
-+                      cpumask_set_cpu(j, covered);
-+                      cpumask_set_cpu(j, sched_group_cpus(sg));
-+              }
-+              if (!first)
-+                      first = sg;
-+              if (last)
-+                      last->next = sg;
-+              last = sg;
-+      }
-+      last->next = first;
-+}
-+
-+#define SD_NODES_PER_DOMAIN 16
-+
-+#ifdef CONFIG_NUMA
-+
-+/**
-+ * find_next_best_node - find the next node to include in a sched_domain
-+ * @node: node whose sched_domain we're building
-+ * @used_nodes: nodes already in the sched_domain
-+ *
-+ * Find the next node to include in a given scheduling domain. Simply
-+ * finds the closest node not already in the @used_nodes map.
-+ *
-+ * Should use nodemask_t.
-+ */
-+static int find_next_best_node(int node, nodemask_t *used_nodes)
-+{
-+      int i, n, val, min_val, best_node = 0;
-+
-+      min_val = INT_MAX;
-+
-+      for (i = 0; i < nr_node_ids; i++) {
-+              /* Start at @node */
-+              n = (node + i) % nr_node_ids;
-+
-+              if (!nr_cpus_node(n))
-+                      continue;
-+
-+              /* Skip already used nodes */
-+              if (node_isset(n, *used_nodes))
-+                      continue;
-+
-+              /* Simple min distance search */
-+              val = node_distance(node, n);
-+
-+              if (val < min_val) {
-+                      min_val = val;
-+                      best_node = n;
-+              }
-+      }
-+
-+      node_set(best_node, *used_nodes);
-+      return best_node;
-+}
-+
-+/**
-+ * sched_domain_node_span - get a cpumask for a node's sched_domain
-+ * @node: node whose cpumask we're constructing
-+ * @span: resulting cpumask
-+ *
-+ * Given a node, construct a good cpumask for its sched_domain to span. It
-+ * should be one that prevents unnecessary balancing, but also spreads tasks
-+ * out optimally.
-+ */
-+static void sched_domain_node_span(int node, struct cpumask *span)
-+{
-+      nodemask_t used_nodes;
-+      int i;
-+
-+      cpumask_clear(span);
-+      nodes_clear(used_nodes);
-+
-+      cpumask_or(span, span, cpumask_of_node(node));
-+      node_set(node, used_nodes);
-+
-+      for (i = 1; i < SD_NODES_PER_DOMAIN; i++) {
-+              int next_node = find_next_best_node(node, &used_nodes);
-+
-+              cpumask_or(span, span, cpumask_of_node(next_node));
-+      }
-+}
-+#endif /* CONFIG_NUMA */
-+
-+int sched_smt_power_savings = 0, sched_mc_power_savings = 0;
-+
-+/*
-+ * The cpus mask in sched_group and sched_domain hangs off the end.
-+ *
-+ * ( See the the comments in include/linux/sched.h:struct sched_group
-+ *   and struct sched_domain. )
-+ */
-+struct static_sched_group {
-+      struct sched_group sg;
-+      DECLARE_BITMAP(cpus, CONFIG_NR_CPUS);
-+};
-+
-+struct static_sched_domain {
-+      struct sched_domain sd;
-+      DECLARE_BITMAP(span, CONFIG_NR_CPUS);
-+};
-+
-+/*
-+ * SMT sched-domains:
-+ */
-+#ifdef CONFIG_SCHED_SMT
-+static DEFINE_PER_CPU(struct static_sched_domain, cpu_domains);
-+static DEFINE_PER_CPU(struct static_sched_group, sched_group_cpus);
-+
-+static int
-+cpu_to_cpu_group(int cpu, const struct cpumask *cpu_map,
-+               struct sched_group **sg, struct cpumask *unused)
-+{
-+      if (sg)
-+              *sg = &per_cpu(sched_group_cpus, cpu).sg;
-+      return cpu;
-+}
-+#endif /* CONFIG_SCHED_SMT */
-+
-+/*
-+ * multi-core sched-domains:
-+ */
-+#ifdef CONFIG_SCHED_MC
-+static DEFINE_PER_CPU(struct static_sched_domain, core_domains);
-+static DEFINE_PER_CPU(struct static_sched_group, sched_group_core);
-+#endif /* CONFIG_SCHED_MC */
-+
-+#if defined(CONFIG_SCHED_MC) && defined(CONFIG_SCHED_SMT)
-+static int
-+cpu_to_core_group(int cpu, const struct cpumask *cpu_map,
-+                struct sched_group **sg, struct cpumask *mask)
-+{
-+      int group;
-+
-+      cpumask_and(mask, topology_thread_cpumask(cpu), cpu_map);
-+      group = cpumask_first(mask);
-+      if (sg)
-+              *sg = &per_cpu(sched_group_core, group).sg;
-+      return group;
-+}
-+#elif defined(CONFIG_SCHED_MC)
-+static int
-+cpu_to_core_group(int cpu, const struct cpumask *cpu_map,
-+                struct sched_group **sg, struct cpumask *unused)
-+{
-+      if (sg)
-+              *sg = &per_cpu(sched_group_core, cpu).sg;
-+      return cpu;
-+}
-+#endif
-+
-+static DEFINE_PER_CPU(struct static_sched_domain, phys_domains);
-+static DEFINE_PER_CPU(struct static_sched_group, sched_group_phys);
-+
-+static int
-+cpu_to_phys_group(int cpu, const struct cpumask *cpu_map,
-+                struct sched_group **sg, struct cpumask *mask)
-+{
-+      int group;
-+#ifdef CONFIG_SCHED_MC
-+      cpumask_and(mask, cpu_coregroup_mask(cpu), cpu_map);
-+      group = cpumask_first(mask);
-+#elif defined(CONFIG_SCHED_SMT)
-+      cpumask_and(mask, topology_thread_cpumask(cpu), cpu_map);
-+      group = cpumask_first(mask);
-+#else
-+      group = cpu;
-+#endif
-+      if (sg)
-+              *sg = &per_cpu(sched_group_phys, group).sg;
-+      return group;
-+}
-+
-+/**
-+ * group_first_cpu - Returns the first cpu in the cpumask of a sched_group.
-+ * @group: The group whose first cpu is to be returned.
-+ */
-+static inline unsigned int group_first_cpu(struct sched_group *group)
-+{
-+      return cpumask_first(sched_group_cpus(group));
-+}
-+
-+#ifdef CONFIG_NUMA
-+/*
-+ * The init_sched_build_groups can't handle what we want to do with node
-+ * groups, so roll our own. Now each node has its own list of groups which
-+ * gets dynamically allocated.
-+ */
-+static DEFINE_PER_CPU(struct static_sched_domain, node_domains);
-+static struct sched_group ***sched_group_nodes_bycpu;
-+
-+static DEFINE_PER_CPU(struct static_sched_domain, allnodes_domains);
-+static DEFINE_PER_CPU(struct static_sched_group, sched_group_allnodes);
-+
-+static int cpu_to_allnodes_group(int cpu, const struct cpumask *cpu_map,
-+                               struct sched_group **sg,
-+                               struct cpumask *nodemask)
-+{
-+      int group;
-+
-+      cpumask_and(nodemask, cpumask_of_node(cpu_to_node(cpu)), cpu_map);
-+      group = cpumask_first(nodemask);
-+
-+      if (sg)
-+              *sg = &per_cpu(sched_group_allnodes, group).sg;
-+      return group;
-+}
-+
-+static void init_numa_sched_groups_power(struct sched_group *group_head)
-+{
-+      struct sched_group *sg = group_head;
-+      int j;
-+
-+      if (!sg)
-+              return;
-+      do {
-+              for_each_cpu(j, sched_group_cpus(sg)) {
-+                      struct sched_domain *sd;
-+
-+                      sd = &per_cpu(phys_domains, j).sd;
-+                      if (j != group_first_cpu(sd->groups)) {
-+                              /*
-+                               * Only add "power" once for each
-+                               * physical package.
-+                               */
-+                              continue;
-+                      }
-+
-+                      sg_inc_cpu_power(sg, sd->groups->__cpu_power);
-+              }
-+              sg = sg->next;
-+      } while (sg != group_head);
-+}
-+#endif /* CONFIG_NUMA */
-+
-+#ifdef CONFIG_NUMA
-+/* Free memory allocated for various sched_group structures */
-+static void free_sched_groups(const struct cpumask *cpu_map,
-+                            struct cpumask *nodemask)
-+{
-+      int cpu, i;
-+
-+      for_each_cpu(cpu, cpu_map) {
-+              struct sched_group **sched_group_nodes
-+                      = sched_group_nodes_bycpu[cpu];
-+
-+              if (!sched_group_nodes)
-+                      continue;
-+
-+              for (i = 0; i < nr_node_ids; i++) {
-+                      struct sched_group *oldsg, *sg = sched_group_nodes[i];
-+
-+                      cpumask_and(nodemask, cpumask_of_node(i), cpu_map);
-+                      if (cpumask_empty(nodemask))
-+                              continue;
-+
-+                      if (sg == NULL)
-+                              continue;
-+                      sg = sg->next;
-+next_sg:
-+                      oldsg = sg;
-+                      sg = sg->next;
-+                      kfree(oldsg);
-+                      if (oldsg != sched_group_nodes[i])
-+                              goto next_sg;
-+              }
-+              kfree(sched_group_nodes);
-+              sched_group_nodes_bycpu[cpu] = NULL;
-+      }
-+}
-+#else /* !CONFIG_NUMA */
-+static void free_sched_groups(const struct cpumask *cpu_map,
-+                            struct cpumask *nodemask)
-+{
-+}
-+#endif /* CONFIG_NUMA */
-+
-+/*
-+ * Initialize sched groups cpu_power.
-+ *
-+ * cpu_power indicates the capacity of sched group, which is used while
-+ * distributing the load between different sched groups in a sched domain.
-+ * Typically cpu_power for all the groups in a sched domain will be same unless
-+ * there are asymmetries in the topology. If there are asymmetries, group
-+ * having more cpu_power will pickup more load compared to the group having
-+ * less cpu_power.
-+ *
-+ * cpu_power will be a multiple of SCHED_LOAD_SCALE. This multiple represents
-+ * the maximum number of tasks a group can handle in the presence of other idle
-+ * or lightly loaded groups in the same sched domain.
-+ */
-+static void init_sched_groups_power(int cpu, struct sched_domain *sd)
-+{
-+      struct sched_domain *child;
-+      struct sched_group *group;
-+
-+      WARN_ON(!sd || !sd->groups);
-+
-+      if (cpu != group_first_cpu(sd->groups))
-+              return;
-+
-+      child = sd->child;
-+
-+      sd->groups->__cpu_power = 0;
-+
-+      /*
-+       * For perf policy, if the groups in child domain share resources
-+       * (for example cores sharing some portions of the cache hierarchy
-+       * or SMT), then set this domain groups cpu_power such that each group
-+       * can handle only one task, when there are other idle groups in the
-+       * same sched domain.
-+       */
-+      if (!child || (!(sd->flags & SD_POWERSAVINGS_BALANCE) &&
-+                     (child->flags &
-+                      (SD_SHARE_CPUPOWER | SD_SHARE_PKG_RESOURCES)))) {
-+              sg_inc_cpu_power(sd->groups, SCHED_LOAD_SCALE);
-+              return;
-+      }
-+
-+      /*
-+       * add cpu_power of each child group to this groups cpu_power
-+       */
-+      group = child->groups;
-+      do {
-+              sg_inc_cpu_power(sd->groups, group->__cpu_power);
-+              group = group->next;
-+      } while (group != child->groups);
-+}
-+
-+/*
-+ * Initializers for schedule domains
-+ * Non-inlined to reduce accumulated stack pressure in build_sched_domains()
-+ */
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+# define SD_INIT_NAME(sd, type)               sd->name = #type
-+#else
-+# define SD_INIT_NAME(sd, type)               do { } while (0)
-+#endif
-+
-+#define       SD_INIT(sd, type)       sd_init_##type(sd)
-+
-+#define SD_INIT_FUNC(type)    \
-+static noinline void sd_init_##type(struct sched_domain *sd)  \
-+{                                                             \
-+      memset(sd, 0, sizeof(*sd));                             \
-+      *sd = SD_##type##_INIT;                                 \
-+      sd->level = SD_LV_##type;                               \
-+      SD_INIT_NAME(sd, type);                                 \
-+}
-+
-+SD_INIT_FUNC(CPU)
-+#ifdef CONFIG_NUMA
-+ SD_INIT_FUNC(ALLNODES)
-+ SD_INIT_FUNC(NODE)
-+#endif
-+#ifdef CONFIG_SCHED_SMT
-+ SD_INIT_FUNC(SIBLING)
-+#endif
-+#ifdef CONFIG_SCHED_MC
-+ SD_INIT_FUNC(MC)
-+#endif
-+
-+static int default_relax_domain_level = -1;
-+
-+static int __init setup_relax_domain_level(char *str)
-+{
-+      unsigned long val;
-+
-+      val = simple_strtoul(str, NULL, 0);
-+      if (val < SD_LV_MAX)
-+              default_relax_domain_level = val;
-+
-+      return 1;
-+}
-+__setup("relax_domain_level=", setup_relax_domain_level);
-+
-+static void set_domain_attribute(struct sched_domain *sd,
-+                               struct sched_domain_attr *attr)
-+{
-+      int request;
-+
-+      if (!attr || attr->relax_domain_level < 0) {
-+              if (default_relax_domain_level < 0)
-+                      return;
-+              else
-+                      request = default_relax_domain_level;
-+      } else
-+              request = attr->relax_domain_level;
-+      if (request < sd->level) {
-+              /* turn off idle balance on this domain */
-+              sd->flags &= ~(SD_WAKE_IDLE|SD_BALANCE_NEWIDLE);
-+      } else {
-+              /* turn on idle balance on this domain */
-+              sd->flags |= (SD_WAKE_IDLE_FAR|SD_BALANCE_NEWIDLE);
-+      }
-+}
-+
-+/*
-+ * Build sched domains for a given set of cpus and attach the sched domains
-+ * to the individual cpus
-+ */
-+static int __build_sched_domains(const struct cpumask *cpu_map,
-+                               struct sched_domain_attr *attr)
-+{
-+      int i, err = -ENOMEM;
-+      struct root_domain *rd;
-+      cpumask_var_t nodemask, this_sibling_map, this_core_map, send_covered,
-+              tmpmask;
-+#ifdef CONFIG_NUMA
-+      cpumask_var_t domainspan, covered, notcovered;
-+      struct sched_group **sched_group_nodes = NULL;
-+      int sd_allnodes = 0;
-+
-+      if (!alloc_cpumask_var(&domainspan, GFP_KERNEL))
-+              goto out;
-+      if (!alloc_cpumask_var(&covered, GFP_KERNEL))
-+              goto free_domainspan;
-+      if (!alloc_cpumask_var(&notcovered, GFP_KERNEL))
-+              goto free_covered;
-+#endif
-+
-+      if (!alloc_cpumask_var(&nodemask, GFP_KERNEL))
-+              goto free_notcovered;
-+      if (!alloc_cpumask_var(&this_sibling_map, GFP_KERNEL))
-+              goto free_nodemask;
-+      if (!alloc_cpumask_var(&this_core_map, GFP_KERNEL))
-+              goto free_this_sibling_map;
-+      if (!alloc_cpumask_var(&send_covered, GFP_KERNEL))
-+              goto free_this_core_map;
-+      if (!alloc_cpumask_var(&tmpmask, GFP_KERNEL))
-+              goto free_send_covered;
-+
-+#ifdef CONFIG_NUMA
-+      /*
-+       * Allocate the per-node list of sched groups
-+       */
-+      sched_group_nodes = kcalloc(nr_node_ids, sizeof(struct sched_group *),
-+                                  GFP_KERNEL);
-+      if (!sched_group_nodes) {
-+              printk(KERN_WARNING "Can not alloc sched group node list\n");
-+              goto free_tmpmask;
-+      }
-+#endif
-+
-+      rd = alloc_rootdomain();
-+      if (!rd) {
-+              printk(KERN_WARNING "Cannot alloc root domain\n");
-+              goto free_sched_groups;
-+      }
-+
-+#ifdef CONFIG_NUMA
-+      sched_group_nodes_bycpu[cpumask_first(cpu_map)] = sched_group_nodes;
-+#endif
-+
-+      /*
-+       * Set up domains for cpus specified by the cpu_map.
-+       */
-+      for_each_cpu(i, cpu_map) {
-+              struct sched_domain *sd = NULL, *p;
-+
-+              cpumask_and(nodemask, cpumask_of_node(cpu_to_node(i)), cpu_map);
-+
-+#ifdef CONFIG_NUMA
-+              if (cpumask_weight(cpu_map) >
-+                              SD_NODES_PER_DOMAIN*cpumask_weight(nodemask)) {
-+                      sd = &per_cpu(allnodes_domains, i).sd;
-+                      SD_INIT(sd, ALLNODES);
-+                      set_domain_attribute(sd, attr);
-+                      cpumask_copy(sched_domain_span(sd), cpu_map);
-+                      cpu_to_allnodes_group(i, cpu_map, &sd->groups, tmpmask);
-+                      p = sd;
-+                      sd_allnodes = 1;
-+              } else
-+                      p = NULL;
-+
-+              sd = &per_cpu(node_domains, i).sd;
-+              SD_INIT(sd, NODE);
-+              set_domain_attribute(sd, attr);
-+              sched_domain_node_span(cpu_to_node(i), sched_domain_span(sd));
-+              sd->parent = p;
-+              if (p)
-+                      p->child = sd;
-+              cpumask_and(sched_domain_span(sd),
-+                          sched_domain_span(sd), cpu_map);
-+#endif
-+
-+              p = sd;
-+              sd = &per_cpu(phys_domains, i).sd;
-+              SD_INIT(sd, CPU);
-+              set_domain_attribute(sd, attr);
-+              cpumask_copy(sched_domain_span(sd), nodemask);
-+              sd->parent = p;
-+              if (p)
-+                      p->child = sd;
-+              cpu_to_phys_group(i, cpu_map, &sd->groups, tmpmask);
-+
-+#ifdef CONFIG_SCHED_MC
-+              p = sd;
-+              sd = &per_cpu(core_domains, i).sd;
-+              SD_INIT(sd, MC);
-+              set_domain_attribute(sd, attr);
-+              cpumask_and(sched_domain_span(sd), cpu_map,
-+                                                 cpu_coregroup_mask(i));
-+              sd->parent = p;
-+              p->child = sd;
-+              cpu_to_core_group(i, cpu_map, &sd->groups, tmpmask);
-+#endif
-+
-+#ifdef CONFIG_SCHED_SMT
-+              p = sd;
-+              sd = &per_cpu(cpu_domains, i).sd;
-+              SD_INIT(sd, SIBLING);
-+              set_domain_attribute(sd, attr);
-+              cpumask_and(sched_domain_span(sd),
-+                          topology_thread_cpumask(i), cpu_map);
-+              sd->parent = p;
-+              p->child = sd;
-+              cpu_to_cpu_group(i, cpu_map, &sd->groups, tmpmask);
-+#endif
-+      }
-+
-+#ifdef CONFIG_SCHED_SMT
-+      /* Set up CPU (sibling) groups */
-+      for_each_cpu(i, cpu_map) {
-+              cpumask_and(this_sibling_map,
-+                          topology_thread_cpumask(i), cpu_map);
-+              if (i != cpumask_first(this_sibling_map))
-+                      continue;
-+
-+              init_sched_build_groups(this_sibling_map, cpu_map,
-+                                      &cpu_to_cpu_group,
-+                                      send_covered, tmpmask);
-+      }
-+#endif
-+
-+#ifdef CONFIG_SCHED_MC
-+      /* Set up multi-core groups */
-+      for_each_cpu(i, cpu_map) {
-+              cpumask_and(this_core_map, cpu_coregroup_mask(i), cpu_map);
-+              if (i != cpumask_first(this_core_map))
-+                      continue;
-+
-+              init_sched_build_groups(this_core_map, cpu_map,
-+                                      &cpu_to_core_group,
-+                                      send_covered, tmpmask);
-+      }
-+#endif
-+
-+      /* Set up physical groups */
-+      for (i = 0; i < nr_node_ids; i++) {
-+              cpumask_and(nodemask, cpumask_of_node(i), cpu_map);
-+              if (cpumask_empty(nodemask))
-+                      continue;
-+
-+              init_sched_build_groups(nodemask, cpu_map,
-+                                      &cpu_to_phys_group,
-+                                      send_covered, tmpmask);
-+      }
-+
-+#ifdef CONFIG_NUMA
-+      /* Set up node groups */
-+      if (sd_allnodes) {
-+              init_sched_build_groups(cpu_map, cpu_map,
-+                                      &cpu_to_allnodes_group,
-+                                      send_covered, tmpmask);
-+      }
-+
-+      for (i = 0; i < nr_node_ids; i++) {
-+              /* Set up node groups */
-+              struct sched_group *sg, *prev;
-+              int j;
-+
-+              cpumask_clear(covered);
-+              cpumask_and(nodemask, cpumask_of_node(i), cpu_map);
-+              if (cpumask_empty(nodemask)) {
-+                      sched_group_nodes[i] = NULL;
-+                      continue;
-+              }
-+
-+              sched_domain_node_span(i, domainspan);
-+              cpumask_and(domainspan, domainspan, cpu_map);
-+
-+              sg = kmalloc_node(sizeof(struct sched_group) + cpumask_size(),
-+                                GFP_KERNEL, i);
-+              if (!sg) {
-+                      printk(KERN_WARNING "Can not alloc domain group for "
-+                              "node %d\n", i);
-+                      goto error;
-+              }
-+              sched_group_nodes[i] = sg;
-+              for_each_cpu(j, nodemask) {
-+                      struct sched_domain *sd;
-+
-+                      sd = &per_cpu(node_domains, j).sd;
-+                      sd->groups = sg;
-+              }
-+              sg->__cpu_power = 0;
-+              cpumask_copy(sched_group_cpus(sg), nodemask);
-+              sg->next = sg;
-+              cpumask_or(covered, covered, nodemask);
-+              prev = sg;
-+
-+              for (j = 0; j < nr_node_ids; j++) {
-+                      int n = (i + j) % nr_node_ids;
-+
-+                      cpumask_complement(notcovered, covered);
-+                      cpumask_and(tmpmask, notcovered, cpu_map);
-+                      cpumask_and(tmpmask, tmpmask, domainspan);
-+                      if (cpumask_empty(tmpmask))
-+                              break;
-+
-+                      cpumask_and(tmpmask, tmpmask, cpumask_of_node(n));
-+                      if (cpumask_empty(tmpmask))
-+                              continue;
-+
-+                      sg = kmalloc_node(sizeof(struct sched_group) +
-+                                        cpumask_size(),
-+                                        GFP_KERNEL, i);
-+                      if (!sg) {
-+                              printk(KERN_WARNING
-+                              "Can not alloc domain group for node %d\n", j);
-+                              goto error;
-+                      }
-+                      sg->__cpu_power = 0;
-+                      cpumask_copy(sched_group_cpus(sg), tmpmask);
-+                      sg->next = prev->next;
-+                      cpumask_or(covered, covered, tmpmask);
-+                      prev->next = sg;
-+                      prev = sg;
-+              }
-+      }
-+#endif
-+
-+      /* Calculate CPU power for physical packages and nodes */
-+#ifdef CONFIG_SCHED_SMT
-+      for_each_cpu(i, cpu_map) {
-+              struct sched_domain *sd = &per_cpu(cpu_domains, i).sd;
-+
-+              init_sched_groups_power(i, sd);
-+      }
-+#endif
-+#ifdef CONFIG_SCHED_MC
-+      for_each_cpu(i, cpu_map) {
-+              struct sched_domain *sd = &per_cpu(core_domains, i).sd;
-+
-+              init_sched_groups_power(i, sd);
-+      }
-+#endif
-+
-+      for_each_cpu(i, cpu_map) {
-+              struct sched_domain *sd = &per_cpu(phys_domains, i).sd;
-+
-+              init_sched_groups_power(i, sd);
-+      }
-+
-+#ifdef CONFIG_NUMA
-+      for (i = 0; i < nr_node_ids; i++)
-+              init_numa_sched_groups_power(sched_group_nodes[i]);
-+
-+      if (sd_allnodes) {
-+              struct sched_group *sg;
-+
-+              cpu_to_allnodes_group(cpumask_first(cpu_map), cpu_map, &sg,
-+                                                              tmpmask);
-+              init_numa_sched_groups_power(sg);
-+      }
-+#endif
-+
-+      /* Attach the domains */
-+      for_each_cpu(i, cpu_map) {
-+              struct sched_domain *sd;
-+#ifdef CONFIG_SCHED_SMT
-+              sd = &per_cpu(cpu_domains, i).sd;
-+#elif defined(CONFIG_SCHED_MC)
-+              sd = &per_cpu(core_domains, i).sd;
-+#else
-+              sd = &per_cpu(phys_domains, i).sd;
-+#endif
-+              cpu_attach_domain(sd, rd, i);
-+      }
-+
-+      err = 0;
-+
-+free_tmpmask:
-+      free_cpumask_var(tmpmask);
-+free_send_covered:
-+      free_cpumask_var(send_covered);
-+free_this_core_map:
-+      free_cpumask_var(this_core_map);
-+free_this_sibling_map:
-+      free_cpumask_var(this_sibling_map);
-+free_nodemask:
-+      free_cpumask_var(nodemask);
-+free_notcovered:
-+#ifdef CONFIG_NUMA
-+      free_cpumask_var(notcovered);
-+free_covered:
-+      free_cpumask_var(covered);
-+free_domainspan:
-+      free_cpumask_var(domainspan);
-+out:
-+#endif
-+      return err;
-+
-+free_sched_groups:
-+#ifdef CONFIG_NUMA
-+      kfree(sched_group_nodes);
-+#endif
-+      goto free_tmpmask;
-+
-+#ifdef CONFIG_NUMA
-+error:
-+      free_sched_groups(cpu_map, tmpmask);
-+      free_rootdomain(rd);
-+      goto free_tmpmask;
-+#endif
-+}
-+
-+static int build_sched_domains(const struct cpumask *cpu_map)
-+{
-+      return __build_sched_domains(cpu_map, NULL);
-+}
-+
-+static struct cpumask *doms_cur;      /* current sched domains */
-+static int ndoms_cur;         /* number of sched domains in 'doms_cur' */
-+static struct sched_domain_attr *dattr_cur;
-+                              /* attribues of custom domains in 'doms_cur' */
-+
-+/*
-+ * Special case: If a kmalloc of a doms_cur partition (array of
-+ * cpumask) fails, then fallback to a single sched domain,
-+ * as determined by the single cpumask fallback_doms.
-+ */
-+static cpumask_var_t fallback_doms;
-+
-+/*
-+ * arch_update_cpu_topology lets virtualized architectures update the
-+ * cpu core maps. It is supposed to return 1 if the topology changed
-+ * or 0 if it stayed the same.
-+ */
-+int __attribute__((weak)) arch_update_cpu_topology(void)
-+{
-+      return 0;
-+}
-+
-+/*
-+ * Set up scheduler domains and groups. Callers must hold the hotplug lock.
-+ * For now this just excludes isolated cpus, but could be used to
-+ * exclude other special cases in the future.
-+ */
-+static int arch_init_sched_domains(const struct cpumask *cpu_map)
-+{
-+      int err;
-+
-+      arch_update_cpu_topology();
-+      ndoms_cur = 1;
-+      doms_cur = kmalloc(cpumask_size(), GFP_KERNEL);
-+      if (!doms_cur)
-+              doms_cur = fallback_doms;
-+      cpumask_andnot(doms_cur, cpu_map, cpu_isolated_map);
-+      dattr_cur = NULL;
-+      err = build_sched_domains(doms_cur);
-+      register_sched_domain_sysctl();
-+
-+      return err;
-+}
-+
-+static void arch_destroy_sched_domains(const struct cpumask *cpu_map,
-+                                     struct cpumask *tmpmask)
-+{
-+      free_sched_groups(cpu_map, tmpmask);
-+}
-+
-+/*
-+ * Detach sched domains from a group of cpus specified in cpu_map
-+ * These cpus will now be attached to the NULL domain
-+ */
-+static void detach_destroy_domains(const struct cpumask *cpu_map)
-+{
-+      /* Save because hotplug lock held. */
-+      static DECLARE_BITMAP(tmpmask, CONFIG_NR_CPUS);
-+      int i;
-+
-+      for_each_cpu(i, cpu_map)
-+              cpu_attach_domain(NULL, &def_root_domain, i);
-+      synchronize_sched();
-+      arch_destroy_sched_domains(cpu_map, to_cpumask(tmpmask));
-+}
-+
-+/* handle null as "default" */
-+static int dattrs_equal(struct sched_domain_attr *cur, int idx_cur,
-+                      struct sched_domain_attr *new, int idx_new)
-+{
-+      struct sched_domain_attr tmp;
-+
-+      /* fast path */
-+      if (!new && !cur)
-+              return 1;
-+
-+      tmp = SD_ATTR_INIT;
-+      return !memcmp(cur ? (cur + idx_cur) : &tmp,
-+                      new ? (new + idx_new) : &tmp,
-+                      sizeof(struct sched_domain_attr));
-+}
-+
-+/*
-+ * Partition sched domains as specified by the 'ndoms_new'
-+ * cpumasks in the array doms_new[] of cpumasks. This compares
-+ * doms_new[] to the current sched domain partitioning, doms_cur[].
-+ * It destroys each deleted domain and builds each new domain.
-+ *
-+ * 'doms_new' is an array of cpumask's of length 'ndoms_new'.
-+ * The masks don't intersect (don't overlap.) We should setup one
-+ * sched domain for each mask. CPUs not in any of the cpumasks will
-+ * not be load balanced. If the same cpumask appears both in the
-+ * current 'doms_cur' domains and in the new 'doms_new', we can leave
-+ * it as it is.
-+ *
-+ * The passed in 'doms_new' should be kmalloc'd. This routine takes
-+ * ownership of it and will kfree it when done with it. If the caller
-+ * failed the kmalloc call, then it can pass in doms_new == NULL &&
-+ * ndoms_new == 1, and partition_sched_domains() will fallback to
-+ * the single partition 'fallback_doms', it also forces the domains
-+ * to be rebuilt.
-+ *
-+ * If doms_new == NULL it will be replaced with cpu_online_mask.
-+ * ndoms_new == 0 is a special case for destroying existing domains,
-+ * and it will not create the default domain.
-+ *
-+ * Call with hotplug lock held
-+ */
-+/* FIXME: Change to struct cpumask *doms_new[] */
-+void partition_sched_domains(int ndoms_new, struct cpumask *doms_new,
-+                           struct sched_domain_attr *dattr_new)
-+{
-+      int i, j, n;
-+      int new_topology;
-+
-+      mutex_lock(&sched_domains_mutex);
-+
-+      /* always unregister in case we don't destroy any domains */
-+      unregister_sched_domain_sysctl();
-+
-+      /* Let architecture update cpu core mappings. */
-+      new_topology = arch_update_cpu_topology();
-+
-+      n = doms_new ? ndoms_new : 0;
-+
-+      /* Destroy deleted domains */
-+      for (i = 0; i < ndoms_cur; i++) {
-+              for (j = 0; j < n && !new_topology; j++) {
-+                      if (cpumask_equal(&doms_cur[i], &doms_new[j])
-+                          && dattrs_equal(dattr_cur, i, dattr_new, j))
-+                              goto match1;
-+              }
-+              /* no match - a current sched domain not in new doms_new[] */
-+              detach_destroy_domains(doms_cur + i);
-+match1:
-+              ;
-+      }
-+
-+      if (doms_new == NULL) {
-+              ndoms_cur = 0;
-+              doms_new = fallback_doms;
-+              cpumask_andnot(&doms_new[0], cpu_online_mask, cpu_isolated_map);
-+              WARN_ON_ONCE(dattr_new);
-+      }
-+
-+      /* Build new domains */
-+      for (i = 0; i < ndoms_new; i++) {
-+              for (j = 0; j < ndoms_cur && !new_topology; j++) {
-+                      if (cpumask_equal(&doms_new[i], &doms_cur[j])
-+                          && dattrs_equal(dattr_new, i, dattr_cur, j))
-+                              goto match2;
-+              }
-+              /* no match - add a new doms_new */
-+              __build_sched_domains(doms_new + i,
-+                                      dattr_new ? dattr_new + i : NULL);
-+match2:
-+              ;
-+      }
-+
-+      /* Remember the new sched domains */
-+      if (doms_cur != fallback_doms)
-+              kfree(doms_cur);
-+      kfree(dattr_cur);       /* kfree(NULL) is safe */
-+      doms_cur = doms_new;
-+      dattr_cur = dattr_new;
-+      ndoms_cur = ndoms_new;
-+
-+      register_sched_domain_sysctl();
-+
-+      mutex_unlock(&sched_domains_mutex);
-+}
-+
-+#if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
-+static void arch_reinit_sched_domains(void)
-+{
-+      get_online_cpus();
-+
-+      /* Destroy domains first to force the rebuild */
-+      partition_sched_domains(0, NULL, NULL);
-+
-+      rebuild_sched_domains();
-+      put_online_cpus();
-+}
-+
-+static ssize_t sched_power_savings_store(const char *buf, size_t count, int smt)
-+{
-+      unsigned int level = 0;
-+
-+      if (sscanf(buf, "%u", &level) != 1)
-+              return -EINVAL;
-+
-+      /*
-+       * level is always be positive so don't check for
-+       * level < POWERSAVINGS_BALANCE_NONE which is 0
-+       * What happens on 0 or 1 byte write,
-+       * need to check for count as well?
-+       */
-+
-+      if (level >= MAX_POWERSAVINGS_BALANCE_LEVELS)
-+              return -EINVAL;
-+
-+      if (smt)
-+              sched_smt_power_savings = level;
-+      else
-+              sched_mc_power_savings = level;
-+
-+      arch_reinit_sched_domains();
-+
-+      return count;
-+}
-+
-+#ifdef CONFIG_SCHED_MC
-+static ssize_t sched_mc_power_savings_show(struct sysdev_class *class,
-+                                         char *page)
-+{
-+      return sprintf(page, "%u\n", sched_mc_power_savings);
-+}
-+static ssize_t sched_mc_power_savings_store(struct sysdev_class *class,
-+                                          const char *buf, size_t count)
-+{
-+      return sched_power_savings_store(buf, count, 0);
-+}
-+static SYSDEV_CLASS_ATTR(sched_mc_power_savings, 0644,
-+                       sched_mc_power_savings_show,
-+                       sched_mc_power_savings_store);
-+#endif
-+
-+#ifdef CONFIG_SCHED_SMT
-+static ssize_t sched_smt_power_savings_show(struct sysdev_class *dev,
-+                                          char *page)
-+{
-+      return sprintf(page, "%u\n", sched_smt_power_savings);
-+}
-+static ssize_t sched_smt_power_savings_store(struct sysdev_class *dev,
-+                                           const char *buf, size_t count)
-+{
-+      return sched_power_savings_store(buf, count, 1);
-+}
-+static SYSDEV_CLASS_ATTR(sched_smt_power_savings, 0644,
-+                 sched_smt_power_savings_show,
-+                 sched_smt_power_savings_store);
-+#endif
-+
-+int __init sched_create_sysfs_power_savings_entries(struct sysdev_class *cls)
-+{
-+      int err = 0;
-+
-+#ifdef CONFIG_SCHED_SMT
-+      if (smt_capable())
-+              err = sysfs_create_file(&cls->kset.kobj,
-+                                      &attr_sched_smt_power_savings.attr);
-+#endif
-+#ifdef CONFIG_SCHED_MC
-+      if (!err && mc_capable())
-+              err = sysfs_create_file(&cls->kset.kobj,
-+                                      &attr_sched_mc_power_savings.attr);
-+#endif
-+      return err;
-+}
-+#endif /* CONFIG_SCHED_MC || CONFIG_SCHED_SMT */
-+
-+#ifndef CONFIG_CPUSETS
-+/*
-+ * Add online and remove offline CPUs from the scheduler domains.
-+ * When cpusets are enabled they take over this function.
-+ */
-+static int update_sched_domains(struct notifier_block *nfb,
-+                              unsigned long action, void *hcpu)
-+{
-+      switch (action) {
-+      case CPU_ONLINE:
-+      case CPU_ONLINE_FROZEN:
-+      case CPU_DEAD:
-+      case CPU_DEAD_FROZEN:
-+              partition_sched_domains(1, NULL, NULL);
-+              return NOTIFY_OK;
-+
-+      default:
-+              return NOTIFY_DONE;
-+      }
-+}
-+#endif
-+
-+static int update_runtime(struct notifier_block *nfb,
-+                              unsigned long action, void *hcpu)
-+{
-+      switch (action) {
-+      case CPU_DOWN_PREPARE:
-+      case CPU_DOWN_PREPARE_FROZEN:
-+              return NOTIFY_OK;
-+
-+      case CPU_DOWN_FAILED:
-+      case CPU_DOWN_FAILED_FROZEN:
-+      case CPU_ONLINE:
-+      case CPU_ONLINE_FROZEN:
-+              return NOTIFY_OK;
-+
-+      default:
-+              return NOTIFY_DONE;
-+      }
-+}
-+
-+void __init sched_init_smp(void)
-+{
-+      cpumask_var_t non_isolated_cpus;
-+
-+      alloc_cpumask_var(&non_isolated_cpus, GFP_KERNEL);
-+
-+#if defined(CONFIG_NUMA)
-+      sched_group_nodes_bycpu = kzalloc(nr_cpu_ids * sizeof(void **),
-+                                                              GFP_KERNEL);
-+      BUG_ON(sched_group_nodes_bycpu == NULL);
-+#endif
-+      get_online_cpus();
-+      mutex_lock(&sched_domains_mutex);
-+      arch_init_sched_domains(cpu_online_mask);
-+      cpumask_andnot(non_isolated_cpus, cpu_possible_mask, cpu_isolated_map);
-+      if (cpumask_empty(non_isolated_cpus))
-+              cpumask_set_cpu(smp_processor_id(), non_isolated_cpus);
-+      mutex_unlock(&sched_domains_mutex);
-+      put_online_cpus();
-+
-+#ifndef CONFIG_CPUSETS
-+      /* XXX: Theoretical race here - CPU may be hotplugged now */
-+      hotcpu_notifier(update_sched_domains, 0);
-+#endif
-+
-+      /* RT runtime code needs to handle some hotplug events */
-+      hotcpu_notifier(update_runtime, 0);
-+
-+      /* Move init over to a non-isolated CPU */
-+      if (set_cpus_allowed_ptr(current, non_isolated_cpus) < 0)
-+              BUG();
-+      free_cpumask_var(non_isolated_cpus);
-+
-+      alloc_cpumask_var(&fallback_doms, GFP_KERNEL);
-+
-+      /*
-+       * Assume that every added cpu gives us slightly less overall latency
-+       * allowing us to increase the base rr_interval, but in a non linear
-+       * fashion.
-+       */
-+      rr_interval *= 1 + ilog2(num_online_cpus());
-+}
-+#else
-+void __init sched_init_smp(void)
-+{
-+}
-+#endif /* CONFIG_SMP */
-+
-+unsigned int sysctl_timer_migration = 1;
-+
-+int in_sched_functions(unsigned long addr)
-+{
-+      return in_lock_functions(addr) ||
-+              (addr >= (unsigned long)__sched_text_start
-+              && addr < (unsigned long)__sched_text_end);
-+}
-+
-+void __init sched_init(void)
-+{
-+      int i;
-+      int highest_cpu = 0;
-+
-+      prio_ratios[0] = 100;
-+      for (i = 1 ; i < PRIO_RANGE ; i++)
-+              prio_ratios[i] = prio_ratios[i - 1] * 11 / 10;
-+
-+#ifdef CONFIG_SMP
-+      init_defrootdomain();
-+      cpus_clear(grq.cpu_idle_map);
-+#endif
-+      spin_lock_init(&grq.lock);
-+      for_each_possible_cpu(i) {
-+              struct rq *rq;
-+
-+              rq = cpu_rq(i);
-+              INIT_LIST_HEAD(&rq->queue);
-+              rq->rq_deadline = 0;
-+              rq->rq_prio = 0;
-+              rq->cpu = i;
-+              rq->user_pc = rq->nice_pc = rq->softirq_pc = rq->system_pc =
-+                            rq->iowait_pc = rq->idle_pc = 0;
-+#ifdef CONFIG_SMP
-+              rq->sd = NULL;
-+              rq->rd = NULL;
-+              rq->online = 0;
-+              INIT_LIST_HEAD(&rq->migration_queue);
-+              rq_attach_root(rq, &def_root_domain);
-+#endif
-+              atomic_set(&rq->nr_iowait, 0);
-+              highest_cpu = i;
-+      }
-+      grq.iso_ticks = grq.nr_running = grq.nr_uninterruptible = 0;
-+      for (i = 0; i < PRIO_LIMIT; i++)
-+              INIT_LIST_HEAD(grq.queue + i);
-+      bitmap_zero(grq.prio_bitmap, PRIO_LIMIT);
-+      /* delimiter for bitsearch */
-+      __set_bit(PRIO_LIMIT, grq.prio_bitmap);
-+
-+#ifdef CONFIG_SMP
-+      nr_cpu_ids = highest_cpu + 1;
-+#endif
-+
-+#ifdef CONFIG_PREEMPT_NOTIFIERS
-+      INIT_HLIST_HEAD(&init_task.preempt_notifiers);
-+#endif
-+
-+#ifdef CONFIG_RT_MUTEXES
-+      plist_head_init(&init_task.pi_waiters, &init_task.pi_lock);
-+#endif
-+
-+      /*
-+       * The boot idle thread does lazy MMU switching as well:
-+       */
-+      atomic_inc(&init_mm.mm_count);
-+      enter_lazy_tlb(&init_mm, current);
-+
-+      /*
-+       * Make us the idle thread. Technically, schedule() should not be
-+       * called from this thread, however somewhere below it might be,
-+       * but because we are the idle thread, we just pick up running again
-+       * when this runqueue becomes "idle".
-+       */
-+      init_idle(current, smp_processor_id());
-+
-+      /* Allocate the nohz_cpu_mask if CONFIG_CPUMASK_OFFSTACK */
-+      alloc_cpumask_var(&nohz_cpu_mask, GFP_NOWAIT);
-+#ifdef CONFIG_SMP
-+#ifdef CONFIG_NO_HZ
-+      alloc_cpumask_var(&nohz.cpu_mask, GFP_NOWAIT);
-+      alloc_cpumask_var(&nohz.ilb_grp_nohz_mask, GFP_NOWAIT);
-+#endif
-+      alloc_cpumask_var(&cpu_isolated_map, GFP_NOWAIT);
-+#endif /* SMP */
-+      perf_counter_init();
-+}
-+
-+#ifdef CONFIG_DEBUG_SPINLOCK_SLEEP
-+void __might_sleep(char *file, int line)
-+{
-+#ifdef in_atomic
-+      static unsigned long prev_jiffy;        /* ratelimiting */
-+
-+      if ((in_atomic() || irqs_disabled()) &&
-+          system_state == SYSTEM_RUNNING && !oops_in_progress) {
-+              if (time_before(jiffies, prev_jiffy + HZ) && prev_jiffy)
-+                      return;
-+              prev_jiffy = jiffies;
-+              printk(KERN_ERR "BUG: sleeping function called from invalid"
-+                              " context at %s:%d\n", file, line);
-+              printk("in_atomic():%d, irqs_disabled():%d\n",
-+                      in_atomic(), irqs_disabled());
-+              debug_show_held_locks(current);
-+              if (irqs_disabled())
-+                      print_irqtrace_events(current);
-+              dump_stack();
-+      }
-+#endif
-+}
-+EXPORT_SYMBOL(__might_sleep);
-+#endif
-+
-+#ifdef CONFIG_MAGIC_SYSRQ
-+void normalize_rt_tasks(void)
-+{
-+      struct task_struct *g, *p;
-+      unsigned long flags;
-+      struct rq *rq;
-+      int queued;
-+
-+      read_lock_irq(&tasklist_lock);
-+
-+      do_each_thread(g, p) {
-+              if (!rt_task(p) && !iso_task(p))
-+                      continue;
-+
-+              spin_lock_irqsave(&p->pi_lock, flags);
-+              rq = __task_grq_lock(p);
-+              update_rq_clock(rq);
-+
-+              queued = task_queued_only(p);
-+              if (queued)
-+                      dequeue_task(p);
-+              __setscheduler(p, SCHED_NORMAL, 0);
-+              if (task_running(p))
-+                      resched_task(p);
-+              if (queued) {
-+                      enqueue_task(p);
-+                      try_preempt(p);
-+              }
-+
-+              __task_grq_unlock();
-+              spin_unlock_irqrestore(&p->pi_lock, flags);
-+      } while_each_thread(g, p);
-+
-+      read_unlock_irq(&tasklist_lock);
-+}
-+#endif /* CONFIG_MAGIC_SYSRQ */
-+
-+#ifdef CONFIG_IA64
-+/*
-+ * These functions are only useful for the IA64 MCA handling.
-+ *
-+ * They can only be called when the whole system has been
-+ * stopped - every CPU needs to be quiescent, and no scheduling
-+ * activity can take place. Using them for anything else would
-+ * be a serious bug, and as a result, they aren't even visible
-+ * under any other configuration.
-+ */
-+
-+/**
-+ * curr_task - return the current task for a given cpu.
-+ * @cpu: the processor in question.
-+ *
-+ * ONLY VALID WHEN THE WHOLE SYSTEM IS STOPPED!
-+ */
-+struct task_struct *curr_task(int cpu)
-+{
-+      return cpu_curr(cpu);
-+}
-+
-+/**
-+ * set_curr_task - set the current task for a given cpu.
-+ * @cpu: the processor in question.
-+ * @p: the task pointer to set.
-+ *
-+ * Description: This function must only be used when non-maskable interrupts
-+ * are serviced on a separate stack.  It allows the architecture to switch the
-+ * notion of the current task on a cpu in a non-blocking manner.  This function
-+ * must be called with all CPU's synchronized, and interrupts disabled, the
-+ * and caller must save the original value of the current task (see
-+ * curr_task() above) and restore that value before reenabling interrupts and
-+ * re-starting the system.
-+ *
-+ * ONLY VALID WHEN THE WHOLE SYSTEM IS STOPPED!
-+ */
-+void set_curr_task(int cpu, struct task_struct *p)
-+{
-+      cpu_curr(cpu) = p;
-+}
-+
-+#endif
-+
-+/*
-+ * Use precise platform statistics if available:
-+ */
-+#ifdef CONFIG_VIRT_CPU_ACCOUNTING
-+cputime_t task_utime(struct task_struct *p)
-+{
-+      return p->utime;
-+}
-+
-+cputime_t task_stime(struct task_struct *p)
-+{
-+      return p->stime;
-+}
-+#else
-+cputime_t task_utime(struct task_struct *p)
-+{
-+      clock_t utime = cputime_to_clock_t(p->utime),
-+              total = utime + cputime_to_clock_t(p->stime);
-+      u64 temp;
-+
-+      temp = (u64)nsec_to_clock_t(p->se.sum_exec_runtime);
-+
-+      if (total) {
-+              temp *= utime;
-+              do_div(temp, total);
-+      }
-+      utime = (clock_t)temp;
-+
-+      p->prev_utime = max(p->prev_utime, clock_t_to_cputime(utime));
-+      return p->prev_utime;
-+}
-+
-+cputime_t task_stime(struct task_struct *p)
-+{
-+      clock_t stime;
-+
-+      stime = nsec_to_clock_t(p->se.sum_exec_runtime) -
-+                      cputime_to_clock_t(task_utime(p));
-+
-+      if (stime >= 0)
-+              p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
-+
-+      return p->prev_stime;
-+}
-+#endif
-+
-+inline cputime_t task_gtime(struct task_struct *p)
-+{
-+      return p->gtime;
-+}
-+
-+void __cpuinit init_idle_bootup_task(struct task_struct *idle)
-+{}
-+
-+#ifdef CONFIG_SCHED_DEBUG
-+void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
-+{}
-+
-+void proc_sched_set_task(struct task_struct *p)
-+{}
-+#endif
---- a/kernel/sysctl.c
-+++ b/kernel/sysctl.c
-@@ -86,6 +86,8 @@ extern int percpu_pagelist_fraction;
- extern int compat_log;
- extern int latencytop_enabled;
- extern int sysctl_nr_open_min, sysctl_nr_open_max;
-+extern int rr_interval;
-+extern int sched_iso_cpu;
- #ifndef CONFIG_MMU
- extern int sysctl_nr_trim_pages;
- #endif
-@@ -103,7 +105,8 @@ static int zero;
- static int __maybe_unused one = 1;
- static int __maybe_unused two = 2;
- static unsigned long one_ul = 1;
--static int one_hundred = 100;
-+static int __read_mostly one_hundred = 100;
-+static int __maybe_unused __read_mostly five_thousand = 5000;
- /* this is needed for the proc_doulongvec_minmax of vm_dirty_bytes */
- static unsigned long dirty_bytes_min = 2 * PAGE_SIZE;
-@@ -238,7 +241,7 @@ static struct ctl_table root_table[] = {
-       { .ctl_name = 0 }
- };
--#ifdef CONFIG_SCHED_DEBUG
-+#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SCHED_CFS)
- static int min_sched_granularity_ns = 100000;         /* 100 usecs */
- static int max_sched_granularity_ns = NSEC_PER_SEC;   /* 1 second */
- static int min_wakeup_granularity_ns;                 /* 0 usecs */
-@@ -246,7 +249,7 @@ static int max_wakeup_granularity_ns = N
- #endif
- static struct ctl_table kern_table[] = {
--#ifdef CONFIG_SCHED_DEBUG
-+#if defined(CONFIG_SCHED_DEBUG) && defined(CONFIG_SCHED_CFS)
-       {
-               .ctl_name       = CTL_UNNUMBERED,
-               .procname       = "sched_min_granularity_ns",
-@@ -342,6 +345,7 @@ static struct ctl_table kern_table[] = {
-               .extra2         = &one,
-       },
- #endif
-+#ifdef CONFIG_SCHED_CFS
-       {
-               .ctl_name       = CTL_UNNUMBERED,
-               .procname       = "sched_rt_period_us",
-@@ -366,6 +370,7 @@ static struct ctl_table kern_table[] = {
-               .mode           = 0644,
-               .proc_handler   = &proc_dointvec,
-       },
-+#endif
- #ifdef CONFIG_PROVE_LOCKING
-       {
-               .ctl_name       = CTL_UNNUMBERED,
-@@ -798,6 +803,30 @@ static struct ctl_table kern_table[] = {
-               .proc_handler   = &proc_dointvec,
-       },
- #endif
-+#ifdef CONFIG_SCHED_BFS
-+      {
-+              .ctl_name       = CTL_UNNUMBERED,
-+              .procname       = "rr_interval",
-+              .data           = &rr_interval,
-+              .maxlen         = sizeof (int),
-+              .mode           = 0644,
-+              .proc_handler   = &proc_dointvec_minmax,
-+              .strategy       = &sysctl_intvec,
-+              .extra1         = &one,
-+              .extra2         = &five_thousand,
-+      },
-+      {
-+              .ctl_name       = CTL_UNNUMBERED,
-+              .procname       = "iso_cpu",
-+              .data           = &sched_iso_cpu,
-+              .maxlen         = sizeof (int),
-+              .mode           = 0644,
-+              .proc_handler   = &proc_dointvec_minmax,
-+              .strategy       = &sysctl_intvec,
-+              .extra1         = &zero,
-+              .extra2         = &one_hundred,
-+      },
-+#endif
- #if defined(CONFIG_S390) && defined(CONFIG_SMP)
-       {
-               .ctl_name       = KERN_SPIN_RETRY,
---- a/kernel/workqueue.c
-+++ b/kernel/workqueue.c
-@@ -317,7 +317,9 @@ static int worker_thread(void *__cwq)
-       if (cwq->wq->freezeable)
-               set_freezable();
-+#ifdef CONFIG_SCHED_CFS
-       set_user_nice(current, -5);
-+#endif
-       for (;;) {
-               prepare_to_wait(&cwq->more_work, &wait, TASK_INTERRUPTIBLE);
diff --git a/target/linux/generic-2.6/patches-2.6.31/400-ledtrig_morse.patch b/target/linux/generic-2.6/patches-2.6.31/400-ledtrig_morse.patch
deleted file mode 100644 (file)
index 18c504f..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -297,4 +297,8 @@ config LEDS_TRIGGER_DEFAULT_ON
- comment "iptables trigger is under Netfilter config (LED target)"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_MORSE
-+      tristate "LED Morse Trigger"
-+      depends on LEDS_TRIGGERS
-+
- endif # NEW_LEDS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -39,3 +39,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += 
- 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_MORSE)      += ledtrig-morse.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/402-ledtrig_netdev.patch b/target/linux/generic-2.6/patches-2.6.31/402-ledtrig_netdev.patch
deleted file mode 100644 (file)
index 0f5478e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -301,4 +301,11 @@ config LEDS_TRIGGER_MORSE
-       tristate "LED Morse Trigger"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_NETDEV
-+      tristate "LED Netdev Trigger"
-+      depends on NET && LEDS_TRIGGERS
-+      help
-+        This allows LEDs to be controlled by network device activity.
-+        If unsure, say Y.
-+
- endif # NEW_LEDS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -40,3 +40,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += 
- obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledtrig-gpio.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
- obj-$(CONFIG_LEDS_TRIGGER_MORSE)      += ledtrig-morse.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV)      += ledtrig-netdev.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/410-gpio_buttons.patch b/target/linux/generic-2.6/patches-2.6.31/410-gpio_buttons.patch
deleted file mode 100644 (file)
index 688f6fe..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/drivers/input/misc/Kconfig
-+++ b/drivers/input/misc/Kconfig
-@@ -269,4 +269,21 @@ config INPUT_DM355EVM
-         To compile this driver as a module, choose M here: the
-         module will be called dm355evm_keys.
-+
-+config INPUT_GPIO_BUTTONS
-+      tristate "Polled GPIO buttons interface"
-+      depends on GENERIC_GPIO
-+      select INPUT_POLLDEV
-+      help
-+        This driver implements support for buttons connected
-+        to GPIO pins of various CPUs (and some other chips).
-+
-+        Say Y here if your device has buttons connected
-+        directly to such GPIO pins.  Your board-specific
-+        setup logic must also provide a platform device,
-+        with configuration data saying which GPIOs are used.
-+
-+        To compile this driver as a module, choose M here: the
-+        module will be called gpio-buttons.
-+
- endif
---- a/drivers/input/misc/Makefile
-+++ b/drivers/input/misc/Makefile
-@@ -26,3 +26,4 @@ obj-$(CONFIG_INPUT_TWL4030_PWRBUTTON)        +=
- obj-$(CONFIG_INPUT_UINPUT)            += uinput.o
- obj-$(CONFIG_INPUT_WISTRON_BTNS)      += wistron_btns.o
- obj-$(CONFIG_INPUT_YEALINK)           += yealink.o
-+obj-$(CONFIG_INPUT_GPIO_BUTTONS)      += gpio_buttons.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/420-gpiodev.patch b/target/linux/generic-2.6/patches-2.6.31/420-gpiodev.patch
deleted file mode 100644 (file)
index 5a364d6..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -1029,6 +1029,14 @@ config CS5535_GPIO
-         If compiled as a module, it will be called cs5535_gpio.
-+config GPIO_DEVICE
-+      tristate "GPIO device support"
-+      depends on GENERIC_GPIO
-+      help
-+        Say Y to enable Linux GPIO device support.  This allows control of
-+        GPIO pins using a character device
-+
-+
- config RAW_DRIVER
-       tristate "RAW driver (/dev/raw/rawN)"
-       depends on BLOCK
---- a/drivers/char/Makefile
-+++ b/drivers/char/Makefile
-@@ -95,6 +95,7 @@ obj-$(CONFIG_SCx200_GPIO)    += scx200_gpio
- obj-$(CONFIG_PC8736x_GPIO)    += pc8736x_gpio.o
- obj-$(CONFIG_NSC_GPIO)                += nsc_gpio.o
- obj-$(CONFIG_CS5535_GPIO)     += cs5535_gpio.o
-+obj-$(CONFIG_GPIO_DEVICE)     += gpio_dev.o
- obj-$(CONFIG_GPIO_TB0219)     += tb0219.o
- obj-$(CONFIG_TELCLOCK)                += tlclk.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/430-scsi_header_fix.patch b/target/linux/generic-2.6/patches-2.6.31/430-scsi_header_fix.patch
deleted file mode 100644 (file)
index 575bec9..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/scsi/scsi.h
-+++ b/include/scsi/scsi.h
-@@ -142,10 +142,10 @@ struct scsi_cmnd;
- /* defined in T10 SCSI Primary Commands-2 (SPC2) */
- struct scsi_varlen_cdb_hdr {
--      u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
--      u8 control;
--      u8 misc[5];
--      u8 additional_cdb_length;         /* total cdb length - 8 */
-+      __u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
-+      __u8 control;
-+      __u8 misc[5];
-+      __u8 additional_cdb_length;         /* total cdb length - 8 */
-       __be16 service_action;
-       /* service specific data follows */
- };
diff --git a/target/linux/generic-2.6/patches-2.6.31/510-yaffs_support.patch b/target/linux/generic-2.6/patches-2.6.31/510-yaffs_support.patch
deleted file mode 100644 (file)
index 08a1efc..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -188,6 +188,7 @@ source "fs/sysv/Kconfig"
- source "fs/ufs/Kconfig"
- source "fs/exofs/Kconfig"
- source "fs/nilfs2/Kconfig"
-+source "fs/yaffs2/Kconfig"
- endif # MISC_FILESYSTEMS
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -125,3 +125,4 @@ obj-$(CONFIG_OCFS2_FS)             += ocfs2/
- obj-$(CONFIG_BTRFS_FS)                += btrfs/
- obj-$(CONFIG_GFS2_FS)           += gfs2/
- obj-$(CONFIG_EXOFS_FS)          += exofs/
-+obj-$(CONFIG_YAFFS_FS)                += yaffs2/
diff --git a/target/linux/generic-2.6/patches-2.6.31/511-yaffs-cvs-2009-04-24.patch b/target/linux/generic-2.6/patches-2.6.31/511-yaffs-cvs-2009-04-24.patch
deleted file mode 100644 (file)
index 5c70e79..0000000
+++ /dev/null
@@ -1,12344 +0,0 @@
---- a/fs/yaffs2/devextras.h
-+++ b/fs/yaffs2/devextras.h
-@@ -14,194 +14,135 @@
-  */
- /*
-- * This file is just holds extra declarations used during development.
-- * Most of these are from kernel includes placed here so we can use them in
-- * applications.
-+ * This file is just holds extra declarations of macros that would normally
-+ * be providesd in the Linux kernel. These macros have been written from
-+ * scratch but are functionally equivalent to the Linux ones.
-  *
-  */
- #ifndef __EXTRAS_H__
- #define __EXTRAS_H__
--#if defined WIN32
--#define __inline__ __inline
--#define new newHack
--#endif
--
--#if !(defined __KERNEL__) || (defined WIN32)
--/* User space defines */
-+#if !(defined __KERNEL__)
-+/* Definition of types */
- typedef unsigned char __u8;
- typedef unsigned short __u16;
- typedef unsigned __u32;
-+#endif
-+
- /*
-- * Simple doubly linked list implementation.
-- *
-- * Some of the internal functions ("__xxx") are useful when
-- * manipulating whole lists rather than single entries, as
-- * sometimes we already know the next/prev entries and we can
-- * generate better code by using them directly rather than
-- * using the generic single-entry routines.
-+ * This is a simple doubly linked list implementation that matches the
-+ * way the Linux kernel doubly linked list implementation works.
-  */
--#define prefetch(x) 1
--
--struct list_head {
--      struct list_head *next, *prev;
-+struct ylist_head {
-+      struct ylist_head *next; /* next in chain */
-+      struct ylist_head *prev; /* previous in chain */
- };
--#define LIST_HEAD_INIT(name) { &(name), &(name) }
--#define LIST_HEAD(name) \
--      struct list_head name = LIST_HEAD_INIT(name)
-+/* Initialise a static list */
-+#define YLIST_HEAD(name) \
-+struct ylist_head name = { &(name), &(name)}
-+
--#define INIT_LIST_HEAD(ptr) do { \
--      (ptr)->next = (ptr); (ptr)->prev = (ptr); \
-+
-+/* Initialise a list head to an empty list */
-+#define YINIT_LIST_HEAD(p) \
-+do { \
-+      (p)->next = (p);\
-+      (p)->prev = (p); \
- } while (0)
--/*
-- * Insert a new entry between two known consecutive entries.
-- *
-- * This is only for internal list manipulation where we know
-- * the prev/next entries already!
-- */
--static __inline__ void __list_add(struct list_head *new,
--                                struct list_head *prev,
--                                struct list_head *next)
--{
--      next->prev = new;
--      new->next = next;
--      new->prev = prev;
--      prev->next = new;
--}
--/**
-- * list_add - add a new entry
-- * @new: new entry to be added
-- * @head: list head to add it after
-- *
-- * Insert a new entry after the specified head.
-- * This is good for implementing stacks.
-- */
--static __inline__ void list_add(struct list_head *new, struct list_head *head)
-+/* Add an element to a list */
-+static __inline__ void ylist_add(struct ylist_head *newEntry,
-+                              struct ylist_head *list)
- {
--      __list_add(new, head, head->next);
--}
-+      struct ylist_head *listNext = list->next;
-+
-+      list->next = newEntry;
-+      newEntry->prev = list;
-+      newEntry->next = listNext;
-+      listNext->prev = newEntry;
--/**
-- * list_add_tail - add a new entry
-- * @new: new entry to be added
-- * @head: list head to add it before
-- *
-- * Insert a new entry before the specified head.
-- * This is useful for implementing queues.
-- */
--static __inline__ void list_add_tail(struct list_head *new,
--                                   struct list_head *head)
--{
--      __list_add(new, head->prev, head);
- }
--/*
-- * Delete a list entry by making the prev/next entries
-- * point to each other.
-- *
-- * This is only for internal list manipulation where we know
-- * the prev/next entries already!
-- */
--static __inline__ void __list_del(struct list_head *prev,
--                                struct list_head *next)
-+static __inline__ void ylist_add_tail(struct ylist_head *newEntry,
-+                               struct ylist_head *list)
- {
--      next->prev = prev;
--      prev->next = next;
-+      struct ylist_head *listPrev = list->prev;
-+
-+      list->prev = newEntry;
-+      newEntry->next = list;
-+      newEntry->prev = listPrev;
-+      listPrev->next = newEntry;
-+
- }
--/**
-- * list_del - deletes entry from list.
-- * @entry: the element to delete from the list.
-- * Note: list_empty on entry does not return true after this, the entry is
-- * in an undefined state.
-- */
--static __inline__ void list_del(struct list_head *entry)
-+
-+/* Take an element out of its current list, with or without
-+ * reinitialising the links.of the entry*/
-+static __inline__ void ylist_del(struct ylist_head *entry)
- {
--      __list_del(entry->prev, entry->next);
-+      struct ylist_head *listNext = entry->next;
-+      struct ylist_head *listPrev = entry->prev;
-+
-+      listNext->prev = listPrev;
-+      listPrev->next = listNext;
-+
- }
--/**
-- * list_del_init - deletes entry from list and reinitialize it.
-- * @entry: the element to delete from the list.
-- */
--static __inline__ void list_del_init(struct list_head *entry)
-+static __inline__ void ylist_del_init(struct ylist_head *entry)
- {
--      __list_del(entry->prev, entry->next);
--      INIT_LIST_HEAD(entry);
-+      ylist_del(entry);
-+      entry->next = entry->prev = entry;
- }
--/**
-- * list_empty - tests whether a list is empty
-- * @head: the list to test.
-- */
--static __inline__ int list_empty(struct list_head *head)
-+
-+/* Test if the list is empty */
-+static __inline__ int ylist_empty(struct ylist_head *entry)
- {
--      return head->next == head;
-+      return (entry->next == entry);
- }
--/**
-- * list_splice - join two lists
-- * @list: the new list to add.
-- * @head: the place to add it in the first list.
-+
-+/* ylist_entry takes a pointer to a list entry and offsets it to that
-+ * we can find a pointer to the object it is embedded in.
-  */
--static __inline__ void list_splice(struct list_head *list,
--                                 struct list_head *head)
--{
--      struct list_head *first = list->next;
--      if (first != list) {
--              struct list_head *last = list->prev;
--              struct list_head *at = head->next;
--
--              first->prev = head;
--              head->next = first;
--
--              last->next = at;
--              at->prev = last;
--      }
--}
--/**
-- * list_entry - get the struct for this entry
-- * @ptr:      the &struct list_head pointer.
-- * @type:     the type of the struct this is embedded in.
-- * @member:   the name of the list_struct within the struct.
-- */
--#define list_entry(ptr, type, member) \
--      ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
--
--/**
-- * list_for_each      -       iterate over a list
-- * @pos:      the &struct list_head to use as a loop counter.
-- * @head:     the head for your list.
-- */
--#define list_for_each(pos, head) \
--      for (pos = (head)->next, prefetch(pos->next); pos != (head); \
--              pos = pos->next, prefetch(pos->next))
--
--/**
-- * list_for_each_safe -       iterate over a list safe against removal
-- *                              of list entry
-- * @pos:      the &struct list_head to use as a loop counter.
-- * @n:                another &struct list_head to use as temporary storage
-- * @head:     the head for your list.
-- */
--#define list_for_each_safe(pos, n, head) \
--      for (pos = (head)->next, n = pos->next; pos != (head); \
--              pos = n, n = pos->next)
-+#define ylist_entry(entry, type, member) \
-+      ((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))
--/*
-- * File types
-+
-+/* ylist_for_each and list_for_each_safe  iterate over lists.
-+ * ylist_for_each_safe uses temporary storage to make the list delete safe
-  */
-+
-+#define ylist_for_each(itervar, list) \
-+      for (itervar = (list)->next; itervar != (list); itervar = itervar->next)
-+
-+#define ylist_for_each_safe(itervar, saveVar, list) \
-+      for (itervar = (list)->next, saveVar = (list)->next->next; \
-+              itervar != (list); itervar = saveVar, saveVar = saveVar->next)
-+
-+
-+#if !(defined __KERNEL__)
-+
-+
-+#ifndef WIN32
-+#include <sys/stat.h>
-+#endif
-+
-+
-+#ifdef CONFIG_YAFFS_PROVIDE_DEFS
-+/* File types */
-+
-+
- #define DT_UNKNOWN    0
- #define DT_FIFO               1
- #define DT_CHR                2
-@@ -212,6 +153,7 @@ static __inline__ void list_splice(struc
- #define DT_SOCK               12
- #define DT_WHT                14
-+
- #ifndef WIN32
- #include <sys/stat.h>
- #endif
-@@ -227,10 +169,6 @@ static __inline__ void list_splice(struc
- #define ATTR_ATIME    16
- #define ATTR_MTIME    32
- #define ATTR_CTIME    64
--#define ATTR_ATIME_SET        128
--#define ATTR_MTIME_SET        256
--#define ATTR_FORCE    512     /* Not a change, but a change it */
--#define ATTR_ATTR_FLAG        1024
- struct iattr {
-       unsigned int ia_valid;
-@@ -244,21 +182,15 @@ struct iattr {
-       unsigned int ia_attr_flags;
- };
--#define KERN_DEBUG
-+#endif
- #else
--#ifndef WIN32
- #include <linux/types.h>
--#include <linux/list.h>
- #include <linux/fs.h>
- #include <linux/stat.h>
--#endif
- #endif
--#if defined WIN32
--#undef new
--#endif
- #endif
---- a/fs/yaffs2/Kconfig
-+++ b/fs/yaffs2/Kconfig
-@@ -5,7 +5,7 @@
- config YAFFS_FS
-       tristate "YAFFS2 file system support"
-       default n
--      depends on MTD
-+      depends on MTD_BLOCK
-       select YAFFS_YAFFS1
-       select YAFFS_YAFFS2
-       help
-@@ -43,7 +43,8 @@ config YAFFS_9BYTE_TAGS
-         format that you need to continue to support.  New data written
-         also uses the older-style format.  Note: Use of this option
-         generally requires that MTD's oob layout be adjusted to use the
--        older-style format.  See notes on tags formats and MTD versions.
-+        older-style format.  See notes on tags formats and MTD versions
-+        in yaffs_mtdif1.c.
-         If unsure, say N.
-@@ -109,26 +110,6 @@ config YAFFS_DISABLE_LAZY_LOAD
-         If unsure, say N.
--config YAFFS_CHECKPOINT_RESERVED_BLOCKS
--      int "Reserved blocks for checkpointing"
--      depends on YAFFS_YAFFS2
--      default 10
--      help
--          Give the number of Blocks to reserve for checkpointing.
--        Checkpointing saves the state at unmount so that mounting is
--        much faster as a scan of all the flash to regenerate this state
--        is not needed.  These Blocks are reserved per partition, so if
--        you have very small partitions the default (10) may be a mess
--        for you.  You can set this value to 0, but that does not mean
--        checkpointing is disabled at all. There only won't be any
--        specially reserved blocks for checkpointing, so if there is
--        enough free space on the filesystem, it will be used for
--        checkpointing.
--
--        If unsure, leave at default (10), but don't wonder if there are
--        always 2MB used on your large page device partition (10 x 2k
--        pagesize). When using small partitions or when being very small
--        on space, you probably want to set this to zero.
- config YAFFS_DISABLE_WIDE_TNODES
-       bool "Turn off wide tnodes"
---- a/fs/yaffs2/Makefile
-+++ b/fs/yaffs2/Makefile
-@@ -5,7 +5,6 @@
- obj-$(CONFIG_YAFFS_FS) += yaffs.o
- yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o
--yaffs-y += yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
-+yaffs-y += yaffs_packedtags1.o yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
- yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o
--yaffs-y += yaffs_mtdif1.o yaffs_packedtags1.o
--yaffs-y += yaffs_mtdif.o yaffs_mtdif2.o
-+yaffs-y += yaffs_mtdif.o yaffs_mtdif1.o yaffs_mtdif2.o
---- a/fs/yaffs2/moduleconfig.h
-+++ b/fs/yaffs2/moduleconfig.h
-@@ -27,12 +27,12 @@
- /* Default: Not selected */
- /* Meaning: Yaffs does its own ECC, rather than using MTD ECC */
--//#define CONFIG_YAFFS_DOES_ECC
-+/* #define CONFIG_YAFFS_DOES_ECC */
- /* Default: Not selected */
- /* Meaning: ECC byte order is 'wrong'.  Only meaningful if */
- /*          CONFIG_YAFFS_DOES_ECC is set */
--//#define CONFIG_YAFFS_ECC_WRONG_ORDER
-+/* #define CONFIG_YAFFS_ECC_WRONG_ORDER */
- /* Default: Selected */
- /* Meaning: Disables testing whether chunks are erased before writing to them*/
-@@ -54,11 +54,11 @@ that you need to continue to support.  N
- older-style format.
- Note: Use of this option generally requires that MTD's oob layout be
- adjusted to use the older-style format.  See notes on tags formats and
--MTD versions.
-+MTD versions in yaffs_mtdif1.c.
- */
- /* Default: Not selected */
- /* Meaning: Use older-style on-NAND data format with pageStatus byte */
--#define CONFIG_YAFFS_9BYTE_TAGS
-+/* #define CONFIG_YAFFS_9BYTE_TAGS */
- #endif /* YAFFS_OUT_OF_TREE */
---- a/fs/yaffs2/yaffs_checkptrw.c
-+++ b/fs/yaffs2/yaffs_checkptrw.c
-@@ -12,48 +12,43 @@
-  */
- const char *yaffs_checkptrw_c_version =
--    "$Id: yaffs_checkptrw.c,v 1.14 2007-05-15 20:07:40 charles Exp $";
-+      "$Id: yaffs_checkptrw.c,v 1.18 2009-03-06 17:20:49 wookey Exp $";
- #include "yaffs_checkptrw.h"
--
-+#include "yaffs_getblockinfo.h"
- static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
- {
--
-       int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-       T(YAFFS_TRACE_CHECKPOINT,
-               (TSTR("checkpt blocks available = %d" TENDSTR),
-               blocksAvailable));
--
-       return (blocksAvailable <= 0) ? 0 : 1;
- }
- static int yaffs_CheckpointErase(yaffs_Device *dev)
- {
--
-       int i;
--
--      if(!dev->eraseBlockInNAND)
-+      if (!dev->eraseBlockInNAND)
-               return 0;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
--              dev->internalStartBlock,dev->internalEndBlock));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checking blocks %d to %d"TENDSTR),
-+              dev->internalStartBlock, dev->internalEndBlock));
--      for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--              if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
--                      if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
-+      for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+              if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("erasing checkpt block %d"TENDSTR), i));
-+                      if (dev->eraseBlockInNAND(dev, i - dev->blockOffset /* realign */)) {
-                               bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
-                               dev->nErasedBlocks++;
-                               dev->nFreeChunks += dev->nChunksPerBlock;
--                      }
--                      else {
--                              dev->markNANDBlockBad(dev,i);
-+                      } else {
-+                              dev->markNANDBlockBad(dev, i);
-                               bi->blockState = YAFFS_BLOCK_STATE_DEAD;
-                       }
-               }
-@@ -71,23 +66,23 @@ static void yaffs_CheckpointFindNextEras
-       int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-       T(YAFFS_TRACE_CHECKPOINT,
-               (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
--              dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
-+              dev->nErasedBlocks, dev->nReservedBlocks, blocksAvailable, dev->checkpointNextBlock));
--      if(dev->checkpointNextBlock >= 0 &&
--         dev->checkpointNextBlock <= dev->internalEndBlock &&
--         blocksAvailable > 0){
--
--              for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
--                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--                      if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
-+      if (dev->checkpointNextBlock >= 0 &&
-+                      dev->checkpointNextBlock <= dev->internalEndBlock &&
-+                      blocksAvailable > 0) {
-+
-+              for (i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++) {
-+                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+                      if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
-                               dev->checkpointNextBlock = i + 1;
-                               dev->checkpointCurrentBlock = i;
--                              T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
-+                              T(YAFFS_TRACE_CHECKPOINT, (TSTR("allocating checkpt block %d"TENDSTR), i));
-                               return;
-                       }
-               }
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("out of checkpt blocks"TENDSTR)));
-       dev->checkpointNextBlock = -1;
-       dev->checkpointCurrentBlock = -1;
-@@ -98,30 +93,31 @@ static void yaffs_CheckpointFindNextChec
-       int  i;
-       yaffs_ExtendedTags tags;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start:  blocks %d next %d" TENDSTR),
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("find next checkpt block: start:  blocks %d next %d" TENDSTR),
-               dev->blocksInCheckpoint, dev->checkpointNextBlock));
--      if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
--              for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
-+      if (dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
-+              for (i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++) {
-                       int chunk = i * dev->nChunksPerBlock;
-                       int realignedChunk = chunk - dev->chunkOffset;
--                      dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
--                              i, tags.objectId,tags.sequenceNumber,tags.eccResult));
-+                      dev->readChunkWithTagsFromNAND(dev, realignedChunk,
-+                                      NULL, &tags);
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
-+                              i, tags.objectId, tags.sequenceNumber, tags.eccResult));
--                      if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
-+                      if (tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA) {
-                               /* Right kind of block */
-                               dev->checkpointNextBlock = tags.objectId;
-                               dev->checkpointCurrentBlock = i;
-                               dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
-                               dev->blocksInCheckpoint++;
--                              T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
-+                              T(YAFFS_TRACE_CHECKPOINT, (TSTR("found checkpt block %d"TENDSTR), i));
-                               return;
-                       }
-               }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("found no more checkpt blocks"TENDSTR)));
-       dev->checkpointNextBlock = -1;
-       dev->checkpointCurrentBlock = -1;
-@@ -133,17 +129,17 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-       /* Got the functions we need? */
-       if (!dev->writeChunkWithTagsToNAND ||
--          !dev->readChunkWithTagsFromNAND ||
--          !dev->eraseBlockInNAND ||
--          !dev->markNANDBlockBad)
-+                      !dev->readChunkWithTagsFromNAND ||
-+                      !dev->eraseBlockInNAND ||
-+                      !dev->markNANDBlockBad)
-               return 0;
--      if(forWriting && !yaffs_CheckpointSpaceOk(dev))
-+      if (forWriting && !yaffs_CheckpointSpaceOk(dev))
-               return 0;
--      if(!dev->checkpointBuffer)
--              dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-+              dev->checkpointBuffer = YMALLOC_DMA(dev->totalBytesPerChunk);
-+      if (!dev->checkpointBuffer)
-               return 0;
-@@ -159,12 +155,10 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-       dev->checkpointNextBlock = dev->internalStartBlock;
-       /* Erase all the blocks in the checkpoint area */
--      if(forWriting){
--              memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-+      if (forWriting) {
-+              memset(dev->checkpointBuffer, 0, dev->nDataBytesPerChunk);
-               dev->checkpointByteOffset = 0;
-               return yaffs_CheckpointErase(dev);
--
--
-       } else {
-               int i;
-               /* Set to a value that will kick off a read */
-@@ -174,7 +168,7 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-               dev->blocksInCheckpoint = 0;
-               dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
-               dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
--              for(i = 0; i < dev->checkpointMaxBlocks; i++)
-+              for (i = 0; i < dev->checkpointMaxBlocks; i++)
-                       dev->checkpointBlockList[i] = -1;
-       }
-@@ -191,18 +185,17 @@ int yaffs_GetCheckpointSum(yaffs_Device 
- static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
- {
--
-       int chunk;
-       int realignedChunk;
-       yaffs_ExtendedTags tags;
--      if(dev->checkpointCurrentBlock < 0){
-+      if (dev->checkpointCurrentBlock < 0) {
-               yaffs_CheckpointFindNextErasedBlock(dev);
-               dev->checkpointCurrentChunk = 0;
-       }
--      if(dev->checkpointCurrentBlock < 0)
-+      if (dev->checkpointCurrentBlock < 0)
-               return 0;
-       tags.chunkDeleted = 0;
-@@ -210,10 +203,10 @@ static int yaffs_CheckpointFlushBuffer(y
-       tags.chunkId = dev->checkpointPageSequence + 1;
-       tags.sequenceNumber =  YAFFS_SEQUENCE_CHECKPOINT_DATA;
-       tags.byteCount = dev->nDataBytesPerChunk;
--      if(dev->checkpointCurrentChunk == 0){
-+      if (dev->checkpointCurrentChunk == 0) {
-               /* First chunk we write for the block? Set block state to
-                  checkpoint */
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointCurrentBlock);
-               bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
-               dev->blocksInCheckpoint++;
-       }
-@@ -221,28 +214,29 @@ static int yaffs_CheckpointFlushBuffer(y
-       chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
--              chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
-+              chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk, tags.objectId, tags.chunkId));
-       realignedChunk = chunk - dev->chunkOffset;
--      dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
-+      dev->writeChunkWithTagsToNAND(dev, realignedChunk,
-+                      dev->checkpointBuffer, &tags);
-       dev->checkpointByteOffset = 0;
-       dev->checkpointPageSequence++;
-       dev->checkpointCurrentChunk++;
--      if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
-+      if (dev->checkpointCurrentChunk >= dev->nChunksPerBlock) {
-               dev->checkpointCurrentChunk = 0;
-               dev->checkpointCurrentBlock = -1;
-       }
--      memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-+      memset(dev->checkpointBuffer, 0, dev->nDataBytesPerChunk);
-       return 1;
- }
--int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
-+int yaffs_CheckpointWrite(yaffs_Device *dev, const void *data, int nBytes)
- {
--      int i=0;
-+      int i = 0;
-       int ok = 1;
-@@ -250,17 +244,14 @@ int yaffs_CheckpointWrite(yaffs_Device *
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-               return 0;
--      if(!dev->checkpointOpenForWrite)
-+      if (!dev->checkpointOpenForWrite)
-               return -1;
--      while(i < nBytes && ok) {
--
--
--
--              dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
-+      while (i < nBytes && ok) {
-+              dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes;
-               dev->checkpointSum += *dataBytes;
-               dev->checkpointXor ^= *dataBytes;
-@@ -270,18 +261,17 @@ int yaffs_CheckpointWrite(yaffs_Device *
-               dev->checkpointByteCount++;
--              if(dev->checkpointByteOffset < 0 ||
-+              if (dev->checkpointByteOffset < 0 ||
-                  dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
-                       ok = yaffs_CheckpointFlushBuffer(dev);
--
-       }
--      return  i;
-+      return i;
- }
- int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
- {
--      int i=0;
-+      int i = 0;
-       int ok = 1;
-       yaffs_ExtendedTags tags;
-@@ -291,52 +281,54 @@ int yaffs_CheckpointRead(yaffs_Device *d
-       __u8 *dataBytes = (__u8 *)data;
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-               return 0;
--      if(dev->checkpointOpenForWrite)
-+      if (dev->checkpointOpenForWrite)
-               return -1;
--      while(i < nBytes && ok) {
-+      while (i < nBytes && ok) {
--              if(dev->checkpointByteOffset < 0 ||
--                 dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
-+              if (dev->checkpointByteOffset < 0 ||
-+                      dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
--                      if(dev->checkpointCurrentBlock < 0){
-+                      if (dev->checkpointCurrentBlock < 0) {
-                               yaffs_CheckpointFindNextCheckpointBlock(dev);
-                               dev->checkpointCurrentChunk = 0;
-                       }
--                      if(dev->checkpointCurrentBlock < 0)
-+                      if (dev->checkpointCurrentBlock < 0)
-                               ok = 0;
-                       else {
--
--                              chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
--                                        dev->checkpointCurrentChunk;
-+                              chunk = dev->checkpointCurrentBlock *
-+                                      dev->nChunksPerBlock +
-+                                      dev->checkpointCurrentChunk;
-                               realignedChunk = chunk - dev->chunkOffset;
--                              /* read in the next chunk */
--                              /* printf("read checkpoint page %d\n",dev->checkpointPage); */
--                              dev->readChunkWithTagsFromNAND(dev, realignedChunk,
--                                                             dev->checkpointBuffer,
--                                                            &tags);
--
--                              if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
--                                 tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
--                                 ok = 0;
-+                              /* read in the next chunk */
-+                              /* printf("read checkpoint page %d\n",dev->checkpointPage); */
-+                              dev->readChunkWithTagsFromNAND(dev,
-+                                              realignedChunk,
-+                                              dev->checkpointBuffer,
-+                                              &tags);
-+
-+                              if (tags.chunkId != (dev->checkpointPageSequence + 1) ||
-+                                      tags.eccResult > YAFFS_ECC_RESULT_FIXED ||
-+                                      tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
-+                                      ok = 0;
-                               dev->checkpointByteOffset = 0;
-                               dev->checkpointPageSequence++;
-                               dev->checkpointCurrentChunk++;
--                              if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
-+                              if (dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
-                                       dev->checkpointCurrentBlock = -1;
-                       }
-               }
--              if(ok){
-+              if (ok) {
-                       *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
-                       dev->checkpointSum += *dataBytes;
-                       dev->checkpointXor ^= *dataBytes;
-@@ -353,17 +345,17 @@ int yaffs_CheckpointRead(yaffs_Device *d
- int yaffs_CheckpointClose(yaffs_Device *dev)
- {
--      if(dev->checkpointOpenForWrite){
--              if(dev->checkpointByteOffset != 0)
-+      if (dev->checkpointOpenForWrite) {
-+              if (dev->checkpointByteOffset != 0)
-                       yaffs_CheckpointFlushBuffer(dev);
-       } else {
-               int i;
--              for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
--                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
--                      if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
-+              for (i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++) {
-+                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointBlockList[i]);
-+                      if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
-                               bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
-                       else {
--                              // Todo this looks odd...
-+                              /* Todo this looks odd... */
-                       }
-               }
-               YFREE(dev->checkpointBlockList);
-@@ -374,27 +366,25 @@ int yaffs_CheckpointClose(yaffs_Device *
-       dev->nErasedBlocks -= dev->blocksInCheckpoint;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint byte count %d" TENDSTR),
-                       dev->checkpointByteCount));
--      if(dev->checkpointBuffer){
-+      if (dev->checkpointBuffer) {
-               /* free the buffer */
-               YFREE(dev->checkpointBuffer);
-               dev->checkpointBuffer = NULL;
-               return 1;
--      }
--      else
-+      } else
-               return 0;
--
- }
- int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
- {
-       /* Erase the first checksum block */
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint invalidate"TENDSTR)));
--      if(!yaffs_CheckpointSpaceOk(dev))
-+      if (!yaffs_CheckpointSpaceOk(dev))
-               return 0;
-       return yaffs_CheckpointErase(dev);
---- a/fs/yaffs2/yaffs_checkptrw.h
-+++ b/fs/yaffs2/yaffs_checkptrw.h
-@@ -20,9 +20,9 @@
- int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting);
--int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes);
-+int yaffs_CheckpointWrite(yaffs_Device *dev, const void *data, int nBytes);
--int yaffs_CheckpointRead(yaffs_Device *dev,void *data, int nBytes);
-+int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes);
- int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum);
---- a/fs/yaffs2/yaffs_ecc.c
-+++ b/fs/yaffs2/yaffs_ecc.c
-@@ -29,7 +29,7 @@
-  */
- const char *yaffs_ecc_c_version =
--    "$Id: yaffs_ecc.c,v 1.9 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_ecc.c,v 1.11 2009-03-06 17:20:50 wookey Exp $";
- #include "yportenv.h"
-@@ -109,12 +109,10 @@ void yaffs_ECCCalculate(const unsigned c
-               b = column_parity_table[*data++];
-               col_parity ^= b;
--              if (b & 0x01)   // odd number of bits in the byte
--              {
-+              if (b & 0x01) {         /* odd number of bits in the byte */
-                       line_parity ^= i;
-                       line_parity_prime ^= ~i;
-               }
--
-       }
-       ecc[2] = (~col_parity) | 0x03;
-@@ -158,7 +156,7 @@ void yaffs_ECCCalculate(const unsigned c
-       ecc[0] = ~t;
- #ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
--      // Swap the bytes into the wrong order
-+      /* Swap the bytes into the wrong order */
-       t = ecc[0];
-       ecc[0] = ecc[1];
-       ecc[1] = t;
-@@ -189,7 +187,7 @@ int yaffs_ECCCorrect(unsigned char *data
-               unsigned bit;
- #ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
--              // swap the bytes to correct for the wrong order
-+              /* swap the bytes to correct for the wrong order */
-               unsigned char t;
-               t = d0;
-@@ -251,7 +249,7 @@ int yaffs_ECCCorrect(unsigned char *data
-  * ECCxxxOther does ECC calcs on arbitrary n bytes of data
-  */
- void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
--                           yaffs_ECCOther * eccOther)
-+                              yaffs_ECCOther *eccOther)
- {
-       unsigned int i;
-@@ -278,8 +276,8 @@ void yaffs_ECCCalculateOther(const unsig
- }
- int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
--                        yaffs_ECCOther * read_ecc,
--                        const yaffs_ECCOther * test_ecc)
-+                      yaffs_ECCOther *read_ecc,
-+                      const yaffs_ECCOther *test_ecc)
- {
-       unsigned char cDelta;   /* column parity delta */
-       unsigned lDelta;        /* line parity delta */
-@@ -294,8 +292,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-               return 0; /* no error */
-       if (lDelta == ~lDeltaPrime &&
--          (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
--      {
-+          (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15)) {
-               /* Single bit (recoverable) error in data */
-               bit = 0;
-@@ -307,7 +304,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-               if (cDelta & 0x02)
-                       bit |= 0x01;
--              if(lDelta >= nBytes)
-+              if (lDelta >= nBytes)
-                       return -1;
-               data[lDelta] ^= (1 << bit);
-@@ -316,7 +313,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-       }
-       if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
--           yaffs_CountBits(cDelta)) == 1) {
-+                      yaffs_CountBits(cDelta)) == 1) {
-               /* Reccoverable error in ecc */
-               *read_ecc = *test_ecc;
-@@ -326,6 +323,4 @@ int yaffs_ECCCorrectOther(unsigned char 
-       /* Unrecoverable error */
-       return -1;
--
- }
--
---- a/fs/yaffs2/yaffs_ecc.h
-+++ b/fs/yaffs2/yaffs_ecc.h
-@@ -13,15 +13,15 @@
-  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-  */
-- /*
--  * This code implements the ECC algorithm used in SmartMedia.
--  *
--  * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
--  * The two unused bit are set to 1.
--  * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
--  * blocks are used on a 512-byte NAND page.
--  *
--  */
-+/*
-+ * This code implements the ECC algorithm used in SmartMedia.
-+ *
-+ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
-+ * The two unused bit are set to 1.
-+ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
-+ * blocks are used on a 512-byte NAND page.
-+ *
-+ */
- #ifndef __YAFFS_ECC_H__
- #define __YAFFS_ECC_H__
-@@ -34,11 +34,11 @@ typedef struct {
- void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc);
- int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
--                   const unsigned char *test_ecc);
-+              const unsigned char *test_ecc);
- void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
--                           yaffs_ECCOther * ecc);
-+                      yaffs_ECCOther *ecc);
- int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
--                        yaffs_ECCOther * read_ecc,
--                        const yaffs_ECCOther * test_ecc);
-+                      yaffs_ECCOther *read_ecc,
-+                      const yaffs_ECCOther *test_ecc);
- #endif
---- a/fs/yaffs2/yaffs_fs.c
-+++ b/fs/yaffs2/yaffs_fs.c
-@@ -1,7 +1,7 @@
- /*
-  * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
-  *
-- * Copyright (C) 2002-2007 Aleph One Ltd.
-+ * Copyright (C) 2002-2009 Aleph One Ltd.
-  *   for Toby Churchill Ltd and Brightstar Engineering
-  *
-  * Created by Charles Manning <charles@aleph1.co.uk>
-@@ -32,18 +32,17 @@
-  */
- const char *yaffs_fs_c_version =
--    "$Id: yaffs_fs.c,v 1.63 2007-09-19 20:35:40 imcd Exp $";
-+    "$Id: yaffs_fs.c,v 1.79 2009-03-17 01:12:00 wookey Exp $";
- extern const char *yaffs_guts_c_version;
- #include <linux/version.h>
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
- #include <linux/config.h>
- #endif
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/slab.h>
- #include <linux/init.h>
--#include <linux/list.h>
- #include <linux/fs.h>
- #include <linux/proc_fs.h>
- #include <linux/smp_lock.h>
-@@ -53,10 +52,12 @@ extern const char *yaffs_guts_c_version;
- #include <linux/string.h>
- #include <linux/ctype.h>
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#include "asm/div64.h"
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #include <linux/statfs.h>     /* Added NCB 15-8-2003 */
--#include <asm/statfs.h>
-+#include <linux/statfs.h>
- #define UnlockPage(p) unlock_page(p)
- #define Page_Uptodate(page)   test_bit(PG_uptodate, &(page)->flags)
-@@ -69,22 +70,45 @@ extern const char *yaffs_guts_c_version;
- #define       BDEVNAME_SIZE           0
- #define       yaffs_devname(sb, buf)  kdevname(sb->s_dev)
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0))
- /* added NCB 26/5/2006 for 2.4.25-vrs2-tcl1 kernel */
- #define __user
- #endif
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26))
-+#define YPROC_ROOT  (&proc_root)
-+#else
-+#define YPROC_ROOT  NULL
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- #define WRITE_SIZE_STR "writesize"
--#define WRITE_SIZE(mtd) (mtd)->writesize
-+#define WRITE_SIZE(mtd) ((mtd)->writesize)
- #else
- #define WRITE_SIZE_STR "oobblock"
--#define WRITE_SIZE(mtd) (mtd)->oobblock
-+#define WRITE_SIZE(mtd) ((mtd)->oobblock)
- #endif
--#include <asm/uaccess.h>
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 27))
-+#define YAFFS_USE_WRITE_BEGIN_END 1
-+#else
-+#define YAFFS_USE_WRITE_BEGIN_END 0
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28))
-+static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
-+{
-+      uint64_t result = partition_size;
-+      do_div(result, block_size);
-+      return (uint32_t)result;
-+}
-+#else
-+#define YCALCBLOCKS(s, b) ((s)/(b))
-+#endif
-+
-+#include <linux/uaccess.h>
- #include "yportenv.h"
- #include "yaffs_guts.h"
-@@ -96,28 +120,44 @@ extern const char *yaffs_guts_c_version;
- unsigned int yaffs_traceMask = YAFFS_TRACE_BAD_BLOCKS;
- unsigned int yaffs_wr_attempts = YAFFS_WR_ATTEMPTS;
-+unsigned int yaffs_auto_checkpoint = 1;
- /* Module Parameters */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
--module_param(yaffs_traceMask,uint,0644);
--module_param(yaffs_wr_attempts,uint,0644);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-+module_param(yaffs_traceMask, uint, 0644);
-+module_param(yaffs_wr_attempts, uint, 0644);
-+module_param(yaffs_auto_checkpoint, uint, 0644);
-+#else
-+MODULE_PARM(yaffs_traceMask, "i");
-+MODULE_PARM(yaffs_wr_attempts, "i");
-+MODULE_PARM(yaffs_auto_checkpoint, "i");
-+#endif
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25))
-+/* use iget and read_inode */
-+#define Y_IGET(sb, inum) iget((sb), (inum))
-+static void yaffs_read_inode(struct inode *inode);
-+
- #else
--MODULE_PARM(yaffs_traceMask,"i");
--MODULE_PARM(yaffs_wr_attempts,"i");
-+/* Call local equivalent */
-+#define YAFFS_USE_OWN_IGET
-+#define Y_IGET(sb, inum) yaffs_iget((sb), (inum))
-+
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino);
- #endif
- /*#define T(x) printk x */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
--#define yaffs_InodeToObjectLV(iptr) (iptr)->i_private
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18))
-+#define yaffs_InodeToObjectLV(iptr) ((iptr)->i_private)
- #else
--#define yaffs_InodeToObjectLV(iptr) (iptr)->u.generic_ip
-+#define yaffs_InodeToObjectLV(iptr) ((iptr)->u.generic_ip)
- #endif
- #define yaffs_InodeToObject(iptr) ((yaffs_Object *)(yaffs_InodeToObjectLV(iptr)))
- #define yaffs_DentryToObject(dptr) yaffs_InodeToObject((dptr)->d_inode)
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #define yaffs_SuperToDevice(sb)       ((yaffs_Device *)sb->s_fs_info)
- #else
- #define yaffs_SuperToDevice(sb)       ((yaffs_Device *)sb->u.generic_sbp)
-@@ -126,47 +166,49 @@ MODULE_PARM(yaffs_wr_attempts,"i");
- static void yaffs_put_super(struct super_block *sb);
- static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
--                              loff_t * pos);
-+                              loff_t *pos);
-+static ssize_t yaffs_hold_space(struct file *f);
-+static void yaffs_release_space(struct file *f);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_file_flush(struct file *file, fl_owner_t id);
- #else
- static int yaffs_file_flush(struct file *file);
- #endif
- static int yaffs_sync_object(struct file *file, struct dentry *dentry,
--                           int datasync);
-+                              int datasync);
- static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
-                       struct nameidata *n);
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
--                                 struct nameidata *n);
-+                                      struct nameidata *n);
- #else
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode);
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry);
- #endif
- static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
--                    struct dentry *dentry);
-+                      struct dentry *dentry);
- static int yaffs_unlink(struct inode *dir, struct dentry *dentry);
- static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
--                       const char *symname);
-+                      const char *symname);
- static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     dev_t dev);
-+                      dev_t dev);
- #else
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     int dev);
-+                      int dev);
- #endif
- static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
-                       struct inode *new_dir, struct dentry *new_dentry);
- static int yaffs_setattr(struct dentry *dentry, struct iattr *attr);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_sync_fs(struct super_block *sb, int wait);
- static void yaffs_write_super(struct super_block *sb);
- #else
-@@ -174,33 +216,47 @@ static int yaffs_sync_fs(struct super_bl
- static int yaffs_write_super(struct super_block *sb);
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf);
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf);
- #else
- static int yaffs_statfs(struct super_block *sb, struct statfs *buf);
- #endif
--static void yaffs_read_inode(struct inode *inode);
-+#ifdef YAFFS_HAS_PUT_INODE
- static void yaffs_put_inode(struct inode *inode);
-+#endif
-+
- static void yaffs_delete_inode(struct inode *);
- static void yaffs_clear_inode(struct inode *);
- static int yaffs_readpage(struct file *file, struct page *page);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_writepage(struct page *page, struct writeback_control *wbc);
- #else
- static int yaffs_writepage(struct page *page);
- #endif
-+
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END != 0)
-+static int yaffs_write_begin(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned flags,
-+                              struct page **pagep, void **fsdata);
-+static int yaffs_write_end(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned copied,
-+                              struct page *pg, void *fsdadata);
-+#else
- static int yaffs_prepare_write(struct file *f, struct page *pg,
--                             unsigned offset, unsigned to);
-+                              unsigned offset, unsigned to);
- static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
--                            unsigned to);
-+                              unsigned to);
--static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
--                        int buflen);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
-+#endif
-+
-+static int yaffs_readlink(struct dentry *dentry, char __user *buffer,
-+                              int buflen);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
- static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
- #else
- static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
-@@ -209,12 +265,17 @@ static int yaffs_follow_link(struct dent
- static struct address_space_operations yaffs_file_address_operations = {
-       .readpage = yaffs_readpage,
-       .writepage = yaffs_writepage,
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+      .write_begin = yaffs_write_begin,
-+      .write_end = yaffs_write_end,
-+#else
-       .prepare_write = yaffs_prepare_write,
-       .commit_write = yaffs_commit_write,
-+#endif
- };
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22))
--static struct file_operations yaffs_file_operations = {
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
-+static const struct file_operations yaffs_file_operations = {
-       .read = do_sync_read,
-       .write = do_sync_write,
-       .aio_read = generic_file_aio_read,
-@@ -224,11 +285,12 @@ static struct file_operations yaffs_file
-       .fsync = yaffs_sync_object,
-       .splice_read = generic_file_splice_read,
-       .splice_write = generic_file_splice_write,
-+      .llseek = generic_file_llseek,
- };
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18))
--static struct file_operations yaffs_file_operations = {
-+static const struct file_operations yaffs_file_operations = {
-       .read = do_sync_read,
-       .write = do_sync_write,
-       .aio_read = generic_file_aio_read,
-@@ -241,29 +303,29 @@ static struct file_operations yaffs_file
- #else
--static struct file_operations yaffs_file_operations = {
-+static const struct file_operations yaffs_file_operations = {
-       .read = generic_file_read,
-       .write = generic_file_write,
-       .mmap = generic_file_mmap,
-       .flush = yaffs_file_flush,
-       .fsync = yaffs_sync_object,
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       .sendfile = generic_file_sendfile,
- #endif
- };
- #endif
--static struct inode_operations yaffs_file_inode_operations = {
-+static const struct inode_operations yaffs_file_inode_operations = {
-       .setattr = yaffs_setattr,
- };
--static struct inode_operations yaffs_symlink_inode_operations = {
-+static const struct inode_operations yaffs_symlink_inode_operations = {
-       .readlink = yaffs_readlink,
-       .follow_link = yaffs_follow_link,
-       .setattr = yaffs_setattr,
- };
--static struct inode_operations yaffs_dir_inode_operations = {
-+static const struct inode_operations yaffs_dir_inode_operations = {
-       .create = yaffs_create,
-       .lookup = yaffs_lookup,
-       .link = yaffs_link,
-@@ -276,16 +338,21 @@ static struct inode_operations yaffs_dir
-       .setattr = yaffs_setattr,
- };
--static struct file_operations yaffs_dir_operations = {
-+static const struct file_operations yaffs_dir_operations = {
-       .read = generic_read_dir,
-       .readdir = yaffs_readdir,
-       .fsync = yaffs_sync_object,
- };
--static struct super_operations yaffs_super_ops = {
-+static const struct super_operations yaffs_super_ops = {
-       .statfs = yaffs_statfs,
-+
-+#ifndef YAFFS_USE_OWN_IGET
-       .read_inode = yaffs_read_inode,
-+#endif
-+#ifdef YAFFS_HAS_PUT_INODE
-       .put_inode = yaffs_put_inode,
-+#endif
-       .put_super = yaffs_put_super,
-       .delete_inode = yaffs_delete_inode,
-       .clear_inode = yaffs_clear_inode,
-@@ -293,22 +360,21 @@ static struct super_operations yaffs_sup
-       .write_super = yaffs_write_super,
- };
--static void yaffs_GrossLock(yaffs_Device * dev)
-+static void yaffs_GrossLock(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locking\n"));
--
-+      T(YAFFS_TRACE_OS, ("yaffs locking %p\n", current));
-       down(&dev->grossLock);
-+      T(YAFFS_TRACE_OS, ("yaffs locked %p\n", current));
- }
--static void yaffs_GrossUnlock(yaffs_Device * dev)
-+static void yaffs_GrossUnlock(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs unlocking\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs unlocking %p\n", current));
-       up(&dev->grossLock);
--
- }
--static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
--                        int buflen)
-+static int yaffs_readlink(struct dentry *dentry, char __user *buffer,
-+                      int buflen)
- {
-       unsigned char *alias;
-       int ret;
-@@ -329,7 +395,7 @@ static int yaffs_readlink(struct dentry 
-       return ret;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
- static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
- #else
- static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
-@@ -345,32 +411,31 @@ static int yaffs_follow_link(struct dent
-       yaffs_GrossUnlock(dev);
--      if (!alias)
--        {
-+      if (!alias) {
-               ret = -ENOMEM;
-               goto out;
--        }
-+      }
-       ret = vfs_follow_link(nd, alias);
-       kfree(alias);
- out:
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
--      return ERR_PTR (ret);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
-+      return ERR_PTR(ret);
- #else
-       return ret;
- #endif
- }
- struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
--                            yaffs_Object * obj);
-+                              yaffs_Object *obj);
- /*
-  * Lookup is used to find objects in the fs
-  */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
--                                 struct nameidata *n)
-+                              struct nameidata *n)
- #else
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry)
- #endif
-@@ -383,12 +448,11 @@ static struct dentry *yaffs_lookup(struc
-       yaffs_GrossLock(dev);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_lookup for %d:%s\n",
--         yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
-+              ("yaffs_lookup for %d:%s\n",
-+              yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
--      obj =
--          yaffs_FindObjectByName(yaffs_InodeToObject(dir),
--                                 dentry->d_name.name);
-+      obj = yaffs_FindObjectByName(yaffs_InodeToObject(dir),
-+                                      dentry->d_name.name);
-       obj = yaffs_GetEquivalentObject(obj);   /* in case it was a hardlink */
-@@ -397,13 +461,13 @@ static struct dentry *yaffs_lookup(struc
-       if (obj) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_lookup found %d\n", obj->objectId));
-+                      ("yaffs_lookup found %d\n", obj->objectId));
-               inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
-               if (inode) {
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG "yaffs_loookup dentry \n"));
-+                              ("yaffs_loookup dentry \n"));
- /* #if 0 asserted by NCB for 2.5/6 compatability - falls through to
-  * d_add even if NULL inode */
- #if 0
-@@ -416,7 +480,7 @@ static struct dentry *yaffs_lookup(struc
-               }
-       } else {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_lookup not found\n"));
-+              T(YAFFS_TRACE_OS, ("yaffs_lookup not found\n"));
-       }
-@@ -425,20 +489,22 @@ static struct dentry *yaffs_lookup(struc
-       d_add(dentry, inode);
-       return NULL;
--      /*      return (ERR_PTR(-EIO)); */
--
- }
-+
-+#ifdef YAFFS_HAS_PUT_INODE
-+
- /* For now put inode is just for debugging
-  * Put inode is called when the inode **structure** is put.
-  */
- static void yaffs_put_inode(struct inode *inode)
- {
-       T(YAFFS_TRACE_OS,
--        ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count)));
-+              ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count)));
- }
-+#endif
- /* clear is called to tell the fs to release any per-inode data it holds */
- static void yaffs_clear_inode(struct inode *inode)
-@@ -449,9 +515,9 @@ static void yaffs_clear_inode(struct ino
-       obj = yaffs_InodeToObject(inode);
-       T(YAFFS_TRACE_OS,
--        ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count),
--         obj ? "object exists" : "null object"));
-+              ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count),
-+              obj ? "object exists" : "null object"));
-       if (obj) {
-               dev = obj->myDev;
-@@ -486,23 +552,23 @@ static void yaffs_delete_inode(struct in
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count),
--         obj ? "object exists" : "null object"));
-+              ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count),
-+              obj ? "object exists" : "null object"));
-       if (obj) {
-               dev = obj->myDev;
-               yaffs_GrossLock(dev);
--              yaffs_DeleteFile(obj);
-+              yaffs_DeleteObject(obj);
-               yaffs_GrossUnlock(dev);
-       }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
--        truncate_inode_pages (&inode->i_data, 0);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
-+      truncate_inode_pages(&inode->i_data, 0);
- #endif
-       clear_inode(inode);
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_file_flush(struct file *file, fl_owner_t id)
- #else
- static int yaffs_file_flush(struct file *file)
-@@ -513,8 +579,8 @@ static int yaffs_file_flush(struct file 
-       yaffs_Device *dev = obj->myDev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_file_flush object %d (%s)\n", obj->objectId,
--         obj->dirty ? "dirty" : "clean"));
-+              ("yaffs_file_flush object %d (%s)\n", obj->objectId,
-+              obj->dirty ? "dirty" : "clean"));
-       yaffs_GrossLock(dev);
-@@ -535,15 +601,15 @@ static int yaffs_readpage_nolock(struct 
-       yaffs_Device *dev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage at %08x, size %08x\n",
--                         (unsigned)(pg->index << PAGE_CACHE_SHIFT),
--                         (unsigned)PAGE_CACHE_SIZE));
-+      T(YAFFS_TRACE_OS, ("yaffs_readpage at %08x, size %08x\n",
-+                      (unsigned)(pg->index << PAGE_CACHE_SHIFT),
-+                      (unsigned)PAGE_CACHE_SIZE));
-       obj = yaffs_DentryToObject(f->f_dentry);
-       dev = obj->myDev;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       BUG_ON(!PageLocked(pg));
- #else
-       if (!PageLocked(pg))
-@@ -555,9 +621,9 @@ static int yaffs_readpage_nolock(struct 
-       yaffs_GrossLock(dev);
--      ret =
--          yaffs_ReadDataFromFile(obj, pg_buf, pg->index << PAGE_CACHE_SHIFT,
--                                 PAGE_CACHE_SIZE);
-+      ret = yaffs_ReadDataFromFile(obj, pg_buf,
-+                              pg->index << PAGE_CACHE_SHIFT,
-+                              PAGE_CACHE_SIZE);
-       yaffs_GrossUnlock(dev);
-@@ -575,7 +641,7 @@ static int yaffs_readpage_nolock(struct 
-       flush_dcache_page(pg);
-       kunmap(pg);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage done\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_readpage done\n"));
-       return ret;
- }
-@@ -593,7 +659,7 @@ static int yaffs_readpage(struct file *f
- /* writepage inspired by/stolen from smbfs */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_writepage(struct page *page, struct writeback_control *wbc)
- #else
- static int yaffs_writepage(struct page *page)
-@@ -616,12 +682,11 @@ static int yaffs_writepage(struct page *
-       if (offset > inode->i_size) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_writepage at %08x, inode size = %08x!!!\n",
--                 (unsigned)(page->index << PAGE_CACHE_SHIFT),
--                 (unsigned)inode->i_size));
-+                      ("yaffs_writepage at %08x, inode size = %08x!!!\n",
-+                      (unsigned)(page->index << PAGE_CACHE_SHIFT),
-+                      (unsigned)inode->i_size));
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "                -> don't care!!\n"));
-+                      ("                -> don't care!!\n"));
-               unlock_page(page);
-               return 0;
-       }
-@@ -629,11 +694,10 @@ static int yaffs_writepage(struct page *
-       end_index = inode->i_size >> PAGE_CACHE_SHIFT;
-       /* easy case */
--      if (page->index < end_index) {
-+      if (page->index < end_index)
-               nBytes = PAGE_CACHE_SIZE;
--      } else {
-+      else
-               nBytes = inode->i_size & (PAGE_CACHE_SIZE - 1);
--      }
-       get_page(page);
-@@ -643,19 +707,18 @@ static int yaffs_writepage(struct page *
-       yaffs_GrossLock(obj->myDev);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_writepage at %08x, size %08x\n",
--         (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
-+              ("yaffs_writepage at %08x, size %08x\n",
-+              (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "writepag0: obj = %05x, ino = %05x\n",
--         (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-+              ("writepag0: obj = %05x, ino = %05x\n",
-+              (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
--      nWritten =
--          yaffs_WriteDataToFile(obj, buffer, page->index << PAGE_CACHE_SHIFT,
--                                nBytes, 0);
-+      nWritten = yaffs_WriteDataToFile(obj, buffer,
-+                      page->index << PAGE_CACHE_SHIFT, nBytes, 0);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "writepag1: obj = %05x, ino = %05x\n",
--         (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-+              ("writepag1: obj = %05x, ino = %05x\n",
-+              (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-       yaffs_GrossUnlock(obj->myDev);
-@@ -667,100 +730,207 @@ static int yaffs_writepage(struct page *
-       return (nWritten == nBytes) ? 0 : -ENOSPC;
- }
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+static int yaffs_write_begin(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned flags,
-+                              struct page **pagep, void **fsdata)
-+{
-+      struct page *pg = NULL;
-+      pgoff_t index = pos >> PAGE_CACHE_SHIFT;
-+      uint32_t offset = pos & (PAGE_CACHE_SIZE - 1);
-+      uint32_t to = offset + len;
-+
-+      int ret = 0;
-+      int space_held = 0;
-+
-+      T(YAFFS_TRACE_OS, ("start yaffs_write_begin\n"));
-+      /* Get a page */
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28)
-+      pg = grab_cache_page_write_begin(mapping, index, flags);
-+#else
-+      pg = __grab_cache_page(mapping, index);
-+#endif
-+
-+      *pagep = pg;
-+      if (!pg) {
-+              ret =  -ENOMEM;
-+              goto out;
-+      }
-+      /* Get fs space */
-+      space_held = yaffs_hold_space(filp);
-+
-+      if (!space_held) {
-+              ret = -ENOSPC;
-+              goto out;
-+      }
-+
-+      /* Update page if required */
-+
-+      if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
-+              ret = yaffs_readpage_nolock(filp, pg);
-+
-+      if (ret)
-+              goto out;
-+
-+      /* Happy path return */
-+      T(YAFFS_TRACE_OS, ("end yaffs_write_begin - ok\n"));
-+
-+      return 0;
-+
-+out:
-+      T(YAFFS_TRACE_OS, ("end yaffs_write_begin fail returning %d\n", ret));
-+      if (space_held)
-+              yaffs_release_space(filp);
-+      if (pg) {
-+              unlock_page(pg);
-+              page_cache_release(pg);
-+      }
-+      return ret;
-+}
-+
-+#else
-+
- static int yaffs_prepare_write(struct file *f, struct page *pg,
--                             unsigned offset, unsigned to)
-+                              unsigned offset, unsigned to)
- {
-+      T(YAFFS_TRACE_OS, ("yaffs_prepair_write\n"));
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_prepair_write\n"));
-       if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
-               return yaffs_readpage_nolock(f, pg);
--
-       return 0;
-+}
-+#endif
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+static int yaffs_write_end(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned copied,
-+                              struct page *pg, void *fsdadata)
-+{
-+      int ret = 0;
-+      void *addr, *kva;
-+      uint32_t offset_into_page = pos & (PAGE_CACHE_SIZE - 1);
-+
-+      kva = kmap(pg);
-+      addr = kva + offset_into_page;
-+
-+      T(YAFFS_TRACE_OS,
-+              ("yaffs_write_end addr %x pos %x nBytes %d\n",
-+              (unsigned) addr,
-+              (int)pos, copied));
-+
-+      ret = yaffs_file_write(filp, addr, copied, &pos);
-+
-+      if (ret != copied) {
-+              T(YAFFS_TRACE_OS,
-+                      ("yaffs_write_end not same size ret %d  copied %d\n",
-+                      ret, copied));
-+              SetPageError(pg);
-+              ClearPageUptodate(pg);
-+      } else {
-+              SetPageUptodate(pg);
-+      }
-+
-+      kunmap(pg);
-+      yaffs_release_space(filp);
-+      unlock_page(pg);
-+      page_cache_release(pg);
-+      return ret;
- }
-+#else
- static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
--                            unsigned to)
-+                              unsigned to)
- {
-+      void *addr, *kva;
--      void *addr = page_address(pg) + offset;
-       loff_t pos = (((loff_t) pg->index) << PAGE_CACHE_SHIFT) + offset;
-       int nBytes = to - offset;
-       int nWritten;
-       unsigned spos = pos;
--      unsigned saddr = (unsigned)addr;
-+      unsigned saddr;
-+
-+      kva = kmap(pg);
-+      addr = kva + offset;
-+
-+      saddr = (unsigned) addr;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_commit_write addr %x pos %x nBytes %d\n", saddr,
--         spos, nBytes));
-+              ("yaffs_commit_write addr %x pos %x nBytes %d\n",
-+              saddr, spos, nBytes));
-       nWritten = yaffs_file_write(f, addr, nBytes, &pos);
-       if (nWritten != nBytes) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_commit_write not same size nWritten %d  nBytes %d\n",
--                 nWritten, nBytes));
-+                      ("yaffs_commit_write not same size nWritten %d  nBytes %d\n",
-+                      nWritten, nBytes));
-               SetPageError(pg);
-               ClearPageUptodate(pg);
-       } else {
-               SetPageUptodate(pg);
-       }
-+      kunmap(pg);
-+
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_commit_write returning %d\n",
--         nWritten == nBytes ? 0 : nWritten));
-+              ("yaffs_commit_write returning %d\n",
-+              nWritten == nBytes ? 0 : nWritten));
-       return nWritten == nBytes ? 0 : nWritten;
--
- }
-+#endif
-+
--static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object * obj)
-+static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj)
- {
-       if (inode && obj) {
-               /* Check mode against the variant type and attempt to repair if broken. */
--              __u32 mode = obj->yst_mode;
--              switch( obj->variantType ){
--              case YAFFS_OBJECT_TYPE_FILE :
--                      if( ! S_ISREG(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFREG;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_SYMLINK :
--                      if( ! S_ISLNK(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFLNK;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_DIRECTORY :
--                      if( ! S_ISDIR(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFDIR;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_UNKNOWN :
--              case YAFFS_OBJECT_TYPE_HARDLINK :
--              case YAFFS_OBJECT_TYPE_SPECIAL :
--              default:
--                      /* TODO? */
--                      break;
--              }
-+              __u32 mode = obj->yst_mode;
-+              switch (obj->variantType) {
-+              case YAFFS_OBJECT_TYPE_FILE:
-+                      if (!S_ISREG(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFREG;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_SYMLINK:
-+                      if (!S_ISLNK(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFLNK;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_DIRECTORY:
-+                      if (!S_ISDIR(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFDIR;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_UNKNOWN:
-+              case YAFFS_OBJECT_TYPE_HARDLINK:
-+              case YAFFS_OBJECT_TYPE_SPECIAL:
-+              default:
-+                      /* TODO? */
-+                      break;
-+              }
-+
-+              inode->i_flags |= S_NOATIME;
-               inode->i_ino = obj->objectId;
-               inode->i_mode = obj->yst_mode;
-               inode->i_uid = obj->yst_uid;
-               inode->i_gid = obj->yst_gid;
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
-               inode->i_blksize = inode->i_sb->s_blocksize;
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-               inode->i_rdev = old_decode_dev(obj->yst_rdev);
-               inode->i_atime.tv_sec = (time_t) (obj->yst_atime);
-@@ -781,26 +951,25 @@ static void yaffs_FillInodeFromObject(st
-               inode->i_nlink = yaffs_GetObjectLinkCount(obj);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
--                 inode->i_mode, inode->i_uid, inode->i_gid,
--                 (int)inode->i_size, atomic_read(&inode->i_count)));
-+                      ("yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
-+                      inode->i_mode, inode->i_uid, inode->i_gid,
-+                      (int)inode->i_size, atomic_read(&inode->i_count)));
-               switch (obj->yst_mode & S_IFMT) {
-               default:        /* fifo, device or socket */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-                       init_special_inode(inode, obj->yst_mode,
--                                         old_decode_dev(obj->yst_rdev));
-+                                      old_decode_dev(obj->yst_rdev));
- #else
-                       init_special_inode(inode, obj->yst_mode,
--                                         (dev_t) (obj->yst_rdev));
-+                                      (dev_t) (obj->yst_rdev));
- #endif
-                       break;
-               case S_IFREG:   /* file */
-                       inode->i_op = &yaffs_file_inode_operations;
-                       inode->i_fop = &yaffs_file_operations;
-                       inode->i_mapping->a_ops =
--                          &yaffs_file_address_operations;
-+                              &yaffs_file_address_operations;
-                       break;
-               case S_IFDIR:   /* directory */
-                       inode->i_op = &yaffs_dir_inode_operations;
-@@ -817,34 +986,36 @@ static void yaffs_FillInodeFromObject(st
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_FileInode invalid parameters\n"));
-+                      ("yaffs_FileInode invalid parameters\n"));
-       }
- }
- struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
--                            yaffs_Object * obj)
-+                              yaffs_Object *obj)
- {
-       struct inode *inode;
-       if (!sb) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_get_inode for NULL super_block!!\n"));
-+                      ("yaffs_get_inode for NULL super_block!!\n"));
-               return NULL;
-       }
-       if (!obj) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_get_inode for NULL object!!\n"));
-+                      ("yaffs_get_inode for NULL object!!\n"));
-               return NULL;
-       }
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_get_inode for object %d\n", obj->objectId));
-+              ("yaffs_get_inode for object %d\n", obj->objectId));
--      inode = iget(sb, obj->objectId);
-+      inode = Y_IGET(sb, obj->objectId);
-+      if (IS_ERR(inode))
-+              return NULL;
-       /* NB Side effect: iget calls back to yaffs_read_inode(). */
-       /* iget also increments the inode's i_count */
-@@ -854,7 +1025,7 @@ struct inode *yaffs_get_inode(struct sup
- }
- static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
--                              loff_t * pos)
-+                              loff_t *pos)
- {
-       yaffs_Object *obj;
-       int nWritten, ipos;
-@@ -869,28 +1040,26 @@ static ssize_t yaffs_file_write(struct f
-       inode = f->f_dentry->d_inode;
--      if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND) {
-+      if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND)
-               ipos = inode->i_size;
--      } else {
-+      else
-               ipos = *pos;
--      }
--      if (!obj) {
-+      if (!obj)
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_file_write: hey obj is null!\n"));
--      } else {
-+                      ("yaffs_file_write: hey obj is null!\n"));
-+      else
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_file_write about to write writing %d bytes"
--                 "to object %d at %d\n",
--                 n, obj->objectId, ipos));
--      }
-+                      ("yaffs_file_write about to write writing %zu bytes"
-+                      "to object %d at %d\n",
-+                      n, obj->objectId, ipos));
-       nWritten = yaffs_WriteDataToFile(obj, buf, ipos, n, 0);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_file_write writing %d bytes, %d written at %d\n",
--         n, nWritten, ipos));
-+              ("yaffs_file_write writing %zu bytes, %d written at %d\n",
-+              n, nWritten, ipos));
-+
-       if (nWritten > 0) {
-               ipos += nWritten;
-               *pos = ipos;
-@@ -899,10 +1068,9 @@ static ssize_t yaffs_file_write(struct f
-                       inode->i_blocks = (ipos + 511) >> 9;
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG
--                         "yaffs_file_write size updated to %d bytes, "
--                         "%d blocks\n",
--                         ipos, (int)(inode->i_blocks)));
-+                              ("yaffs_file_write size updated to %d bytes, "
-+                              "%d blocks\n",
-+                              ipos, (int)(inode->i_blocks)));
-               }
-       }
-@@ -910,13 +1078,54 @@ static ssize_t yaffs_file_write(struct f
-       return nWritten == 0 ? -ENOSPC : nWritten;
- }
-+/* Space holding and freeing is done to ensure we have space available for write_begin/end */
-+/* For now we just assume few parallel writes and check against a small number. */
-+/* Todo: need to do this with a counter to handle parallel reads better */
-+
-+static ssize_t yaffs_hold_space(struct file *f)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev;
-+
-+      int nFreeChunks;
-+
-+
-+      obj = yaffs_DentryToObject(f->f_dentry);
-+
-+      dev = obj->myDev;
-+
-+      yaffs_GrossLock(dev);
-+
-+      nFreeChunks = yaffs_GetNumberOfFreeChunks(dev);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      return (nFreeChunks > 20) ? 1 : 0;
-+}
-+
-+static void yaffs_release_space(struct file *f)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev;
-+
-+
-+      obj = yaffs_DentryToObject(f->f_dentry);
-+
-+      dev = obj->myDev;
-+
-+      yaffs_GrossLock(dev);
-+
-+
-+      yaffs_GrossUnlock(dev);
-+}
-+
- static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir)
- {
-       yaffs_Object *obj;
-       yaffs_Device *dev;
-       struct inode *inode = f->f_dentry->d_inode;
-       unsigned long offset, curoffs;
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *l;
-       char name[YAFFS_MAX_NAME_LENGTH + 1];
-@@ -932,24 +1141,20 @@ static int yaffs_readdir(struct file *f,
-       if (offset == 0) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_readdir: entry . ino %d \n",
--                 (int)inode->i_ino));
--              if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR)
--                  < 0) {
-+                      ("yaffs_readdir: entry . ino %d \n",
-+                      (int)inode->i_ino));
-+              if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR) < 0)
-                       goto out;
--              }
-               offset++;
-               f->f_pos++;
-       }
-       if (offset == 1) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_readdir: entry .. ino %d \n",
--                 (int)f->f_dentry->d_parent->d_inode->i_ino));
--              if (filldir
--                  (dirent, "..", 2, offset,
--                   f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
-+                      ("yaffs_readdir: entry .. ino %d \n",
-+                      (int)f->f_dentry->d_parent->d_inode->i_ino));
-+              if (filldir(dirent, "..", 2, offset,
-+                      f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
-                       goto out;
--              }
-               offset++;
-               f->f_pos++;
-       }
-@@ -965,35 +1170,32 @@ static int yaffs_readdir(struct file *f,
-               f->f_version = inode->i_version;
-       }
--      list_for_each(i, &obj->variant.directoryVariant.children) {
-+      ylist_for_each(i, &obj->variant.directoryVariant.children) {
-               curoffs++;
-               if (curoffs >= offset) {
--                      l = list_entry(i, yaffs_Object, siblings);
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-                       yaffs_GetObjectName(l, name,
-                                           YAFFS_MAX_NAME_LENGTH + 1);
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG "yaffs_readdir: %s inode %d\n", name,
-+                        ("yaffs_readdir: %s inode %d\n", name,
-                          yaffs_GetObjectInode(l)));
-                       if (filldir(dirent,
--                                  name,
--                                  strlen(name),
--                                  offset,
--                                  yaffs_GetObjectInode(l),
--                                  yaffs_GetObjectType(l))
--                          < 0) {
-+                                      name,
-+                                      strlen(name),
-+                                      offset,
-+                                      yaffs_GetObjectInode(l),
-+                                      yaffs_GetObjectType(l)) < 0)
-                               goto up_and_out;
--                      }
-                       offset++;
-                       f->f_pos++;
-               }
-       }
--      up_and_out:
--      out:
--
-+up_and_out:
-+out:
-       yaffs_GrossUnlock(dev);
-       return 0;
-@@ -1002,12 +1204,19 @@ static int yaffs_readdir(struct file *f,
- /*
-  * File creation. Allocate an inode, and we're done..
-  */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
-+#define YCRED(x) x
-+#else
-+#define YCRED(x) (x->cred)
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     dev_t rdev)
-+                      dev_t rdev)
- #else
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     int rdev)
-+                      int rdev)
- #endif
- {
-       struct inode *inode;
-@@ -1018,25 +1227,25 @@ static int yaffs_mknod(struct inode *dir
-       yaffs_Object *parent = yaffs_InodeToObject(dir);
-       int error = -ENOSPC;
--      uid_t uid = current->fsuid;
--      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
-+      uid_t uid = YCRED(current)->fsuid;
-+      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
--      if((dir->i_mode & S_ISGID) && S_ISDIR(mode))
-+      if ((dir->i_mode & S_ISGID) && S_ISDIR(mode))
-               mode |= S_ISGID;
-       if (parent) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: parent object %d type %d\n",
--                 parent->objectId, parent->variantType));
-+                      ("yaffs_mknod: parent object %d type %d\n",
-+                      parent->objectId, parent->variantType));
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: could not get parent object\n"));
-+                      ("yaffs_mknod: could not get parent object\n"));
-               return -EPERM;
-       }
-       T(YAFFS_TRACE_OS, ("yaffs_mknod: making oject for %s, "
--                         "mode %x dev %x\n",
--                         dentry->d_name.name, mode, rdev));
-+                      "mode %x dev %x\n",
-+                      dentry->d_name.name, mode, rdev));
-       dev = parent->myDev;
-@@ -1045,33 +1254,28 @@ static int yaffs_mknod(struct inode *dir
-       switch (mode & S_IFMT) {
-       default:
-               /* Special (socket, fifo, device...) */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG
--                                 "yaffs_mknod: making special\n"));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
--              obj =
--                  yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
--                                     gid, old_encode_dev(rdev));
--#else
--              obj =
--                  yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
--                                     gid, rdev);
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making special\n"));
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-+              obj = yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
-+                              gid, old_encode_dev(rdev));
-+#else
-+              obj = yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
-+                              gid, rdev);
- #endif
-               break;
-       case S_IFREG:           /* file          */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
--              obj =
--                  yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
--                                  gid);
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making file\n"));
-+              obj = yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
-+                              gid);
-               break;
-       case S_IFDIR:           /* directory */
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: making directory\n"));
--              obj =
--                  yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
--                                       uid, gid);
-+                      ("yaffs_mknod: making directory\n"));
-+              obj = yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
-+                                      uid, gid);
-               break;
-       case S_IFLNK:           /* symlink */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making symlink\n"));
-               obj = NULL;     /* Do we ever get here? */
-               break;
-       }
-@@ -1083,12 +1287,12 @@ static int yaffs_mknod(struct inode *dir
-               inode = yaffs_get_inode(dir->i_sb, mode, rdev, obj);
-               d_instantiate(dentry, inode);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod created object %d count = %d\n",
--                 obj->objectId, atomic_read(&inode->i_count)));
-+                      ("yaffs_mknod created object %d count = %d\n",
-+                      obj->objectId, atomic_read(&inode->i_count)));
-               error = 0;
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod failed making object\n"));
-+                      ("yaffs_mknod failed making object\n"));
-               error = -ENOMEM;
-       }
-@@ -1098,25 +1302,19 @@ static int yaffs_mknod(struct inode *dir
- static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
- {
-       int retVal;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mkdir\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_mkdir\n"));
-       retVal = yaffs_mknod(dir, dentry, mode | S_IFDIR, 0);
--#if 0
--      /* attempt to fix dir bug - didn't work */
--      if (!retVal) {
--              dget(dentry);
--      }
--#endif
-       return retVal;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
-                       struct nameidata *n)
- #else
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode)
- #endif
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_create\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_create\n"));
-       return yaffs_mknod(dir, dentry, mode | S_IFREG, 0);
- }
-@@ -1127,8 +1325,8 @@ static int yaffs_unlink(struct inode *di
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_unlink %d:%s\n", (int)(dir->i_ino),
--         dentry->d_name.name));
-+              ("yaffs_unlink %d:%s\n", (int)(dir->i_ino),
-+              dentry->d_name.name));
-       dev = yaffs_InodeToObject(dir)->myDev;
-@@ -1151,82 +1349,74 @@ static int yaffs_unlink(struct inode *di
-  * Create a link...
-  */
- static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
--                    struct dentry *dentry)
-+                      struct dentry *dentry)
- {
-       struct inode *inode = old_dentry->d_inode;
-       yaffs_Object *obj = NULL;
-       yaffs_Object *link = NULL;
-       yaffs_Device *dev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_link\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_link\n"));
-       obj = yaffs_InodeToObject(inode);
-       dev = obj->myDev;
-       yaffs_GrossLock(dev);
--      if (!S_ISDIR(inode->i_mode))    /* Don't link directories */
--      {
--              link =
--                  yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
--                             obj);
--      }
-+      if (!S_ISDIR(inode->i_mode))            /* Don't link directories */
-+              link = yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
-+                      obj);
-       if (link) {
-               old_dentry->d_inode->i_nlink = yaffs_GetObjectLinkCount(obj);
-               d_instantiate(dentry, old_dentry->d_inode);
-               atomic_inc(&old_dentry->d_inode->i_count);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_link link count %d i_count %d\n",
--                 old_dentry->d_inode->i_nlink,
--                 atomic_read(&old_dentry->d_inode->i_count)));
--
-+                      ("yaffs_link link count %d i_count %d\n",
-+                      old_dentry->d_inode->i_nlink,
-+                      atomic_read(&old_dentry->d_inode->i_count)));
-       }
-       yaffs_GrossUnlock(dev);
--      if (link) {
--
-+      if (link)
-               return 0;
--      }
-       return -EPERM;
- }
- static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
--                       const char *symname)
-+                              const char *symname)
- {
-       yaffs_Object *obj;
-       yaffs_Device *dev;
--      uid_t uid = current->fsuid;
--      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
-+      uid_t uid = YCRED(current)->fsuid;
-+      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_symlink\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_symlink\n"));
-       dev = yaffs_InodeToObject(dir)->myDev;
-       yaffs_GrossLock(dev);
-       obj = yaffs_MknodSymLink(yaffs_InodeToObject(dir), dentry->d_name.name,
--                               S_IFLNK | S_IRWXUGO, uid, gid, symname);
-+                              S_IFLNK | S_IRWXUGO, uid, gid, symname);
-       yaffs_GrossUnlock(dev);
-       if (obj) {
--
-               struct inode *inode;
-               inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
-               d_instantiate(dentry, inode);
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink created OK\n"));
-+              T(YAFFS_TRACE_OS, ("symlink created OK\n"));
-               return 0;
-       } else {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink not created\n"));
--
-+              T(YAFFS_TRACE_OS, ("symlink not created\n"));
-       }
-       return -ENOMEM;
- }
- static int yaffs_sync_object(struct file *file, struct dentry *dentry,
--                           int datasync)
-+                              int datasync)
- {
-       yaffs_Object *obj;
-@@ -1236,7 +1426,7 @@ static int yaffs_sync_object(struct file
-       dev = obj->myDev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_object\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_sync_object\n"));
-       yaffs_GrossLock(dev);
-       yaffs_FlushFile(obj, 1);
-       yaffs_GrossUnlock(dev);
-@@ -1255,41 +1445,36 @@ static int yaffs_rename(struct inode *ol
-       int retVal = YAFFS_FAIL;
-       yaffs_Object *target;
--        T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_rename\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_rename\n"));
-       dev = yaffs_InodeToObject(old_dir)->myDev;
-       yaffs_GrossLock(dev);
-       /* Check if the target is an existing directory that is not empty. */
--      target =
--          yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
--                                 new_dentry->d_name.name);
-+      target = yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
-+                              new_dentry->d_name.name);
--      if (target &&
--          target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
--          !list_empty(&target->variant.directoryVariant.children)) {
-+      if (target && target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-+              !ylist_empty(&target->variant.directoryVariant.children)) {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "target is non-empty dir\n"));
-+              T(YAFFS_TRACE_OS, ("target is non-empty dir\n"));
-               retVal = YAFFS_FAIL;
-       } else {
--
-               /* Now does unlinking internally using shadowing mechanism */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "calling yaffs_RenameObject\n"));
--
--              retVal =
--                  yaffs_RenameObject(yaffs_InodeToObject(old_dir),
--                                     old_dentry->d_name.name,
--                                     yaffs_InodeToObject(new_dir),
--                                     new_dentry->d_name.name);
-+              T(YAFFS_TRACE_OS, ("calling yaffs_RenameObject\n"));
-+              retVal = yaffs_RenameObject(yaffs_InodeToObject(old_dir),
-+                              old_dentry->d_name.name,
-+                              yaffs_InodeToObject(new_dir),
-+                              new_dentry->d_name.name);
-       }
-       yaffs_GrossUnlock(dev);
-       if (retVal == YAFFS_OK) {
--              if(target) {
-+              if (target) {
-                       new_dentry->d_inode->i_nlink--;
-                       mark_inode_dirty(new_dentry->d_inode);
-               }
-@@ -1298,7 +1483,6 @@ static int yaffs_rename(struct inode *ol
-       } else {
-               return -ENOTEMPTY;
-       }
--
- }
- static int yaffs_setattr(struct dentry *dentry, struct iattr *attr)
-@@ -1308,15 +1492,15 @@ static int yaffs_setattr(struct dentry *
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_setattr of object %d\n",
--         yaffs_InodeToObject(inode)->objectId));
--
--      if ((error = inode_change_ok(inode, attr)) == 0) {
-+              ("yaffs_setattr of object %d\n",
-+              yaffs_InodeToObject(inode)->objectId));
-+      error = inode_change_ok(inode, attr);
-+      if (error == 0) {
-               dev = yaffs_InodeToObject(inode)->myDev;
-               yaffs_GrossLock(dev);
-               if (yaffs_SetAttributes(yaffs_InodeToObject(inode), attr) ==
--                  YAFFS_OK) {
-+                              YAFFS_OK) {
-                       error = 0;
-               } else {
-                       error = -EPERM;
-@@ -1328,12 +1512,12 @@ static int yaffs_setattr(struct dentry *
-       return error;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf)
- {
-       yaffs_Device *dev = yaffs_DentryToObject(dentry)->myDev;
-       struct super_block *sb = dentry->d_sb;
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf)
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
-@@ -1343,32 +1527,53 @@ static int yaffs_statfs(struct super_blo
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
- #endif
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_statfs\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_statfs\n"));
-       yaffs_GrossLock(dev);
-       buf->f_type = YAFFS_MAGIC;
-       buf->f_bsize = sb->s_blocksize;
-       buf->f_namelen = 255;
--      if (sb->s_blocksize > dev->nDataBytesPerChunk) {
-+
-+      if (dev->nDataBytesPerChunk & (dev->nDataBytesPerChunk - 1)) {
-+              /* Do this if chunk size is not a power of 2 */
-+
-+              uint64_t bytesInDev;
-+              uint64_t bytesFree;
-+
-+              bytesInDev = ((uint64_t)((dev->endBlock - dev->startBlock + 1))) *
-+                      ((uint64_t)(dev->nChunksPerBlock * dev->nDataBytesPerChunk));
-+
-+              do_div(bytesInDev, sb->s_blocksize); /* bytesInDev becomes the number of blocks */
-+              buf->f_blocks = bytesInDev;
-+
-+              bytesFree  = ((uint64_t)(yaffs_GetNumberOfFreeChunks(dev))) *
-+                      ((uint64_t)(dev->nDataBytesPerChunk));
-+
-+              do_div(bytesFree, sb->s_blocksize);
-+
-+              buf->f_bfree = bytesFree;
-+
-+      } else if (sb->s_blocksize > dev->nDataBytesPerChunk) {
-               buf->f_blocks =
--                  (dev->endBlock - dev->startBlock +
--                   1) * dev->nChunksPerBlock / (sb->s_blocksize /
--                                                dev->nDataBytesPerChunk);
-+                      (dev->endBlock - dev->startBlock + 1) *
-+                      dev->nChunksPerBlock /
-+                      (sb->s_blocksize / dev->nDataBytesPerChunk);
-               buf->f_bfree =
--                  yaffs_GetNumberOfFreeChunks(dev) / (sb->s_blocksize /
--                                                      dev->nDataBytesPerChunk);
-+                      yaffs_GetNumberOfFreeChunks(dev) /
-+                      (sb->s_blocksize / dev->nDataBytesPerChunk);
-       } else {
--
-               buf->f_blocks =
--                  (dev->endBlock - dev->startBlock +
--                   1) * dev->nChunksPerBlock * (dev->nDataBytesPerChunk /
--                                                sb->s_blocksize);
-+                      (dev->endBlock - dev->startBlock + 1) *
-+                      dev->nChunksPerBlock *
-+                      (dev->nDataBytesPerChunk / sb->s_blocksize);
-+
-               buf->f_bfree =
--                  yaffs_GetNumberOfFreeChunks(dev) * (dev->nDataBytesPerChunk /
--                                                      sb->s_blocksize);
-+                      yaffs_GetNumberOfFreeChunks(dev) *
-+                      (dev->nDataBytesPerChunk / sb->s_blocksize);
-       }
-+
-       buf->f_files = 0;
-       buf->f_ffree = 0;
-       buf->f_bavail = buf->f_bfree;
-@@ -1378,18 +1583,19 @@ static int yaffs_statfs(struct super_blo
- }
--/**
- static int yaffs_do_sync_fs(struct super_block *sb)
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_do_sync_fs\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_do_sync_fs\n"));
--      if(sb->s_dirt) {
-+      if (sb->s_dirt) {
-               yaffs_GrossLock(dev);
--              if(dev)
-+              if (dev) {
-+                      yaffs_FlushEntireDeviceCache(dev);
-                       yaffs_CheckpointSave(dev);
-+              }
-               yaffs_GrossUnlock(dev);
-@@ -1397,35 +1603,73 @@ static int yaffs_do_sync_fs(struct super
-       }
-       return 0;
- }
--**/
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static void yaffs_write_super(struct super_block *sb)
- #else
- static int yaffs_write_super(struct super_block *sb)
- #endif
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_write_super\n"));
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
--      return 0; /* yaffs_do_sync_fs(sb);*/
-+      T(YAFFS_TRACE_OS, ("yaffs_write_super\n"));
-+      if (yaffs_auto_checkpoint >= 2)
-+              yaffs_do_sync_fs(sb);
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18))
-+      return 0;
- #endif
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_sync_fs(struct super_block *sb, int wait)
- #else
- static int yaffs_sync_fs(struct super_block *sb)
- #endif
- {
-+      T(YAFFS_TRACE_OS, ("yaffs_sync_fs\n"));
-+
-+      if (yaffs_auto_checkpoint >= 1)
-+              yaffs_do_sync_fs(sb);
-+
-+      return 0;
-+}
-+
-+#ifdef YAFFS_USE_OWN_IGET
-+
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+      yaffs_Object *obj;
-+      yaffs_Device *dev = yaffs_SuperToDevice(sb);
-+
-+      T(YAFFS_TRACE_OS,
-+              ("yaffs_iget for %lu\n", ino));
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_fs\n"));
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      /* NB This is called as a side effect of other functions, but
-+       * we had to release the lock to prevent deadlocks, so
-+       * need to lock again.
-+       */
--      return 0; /* yaffs_do_sync_fs(sb);*/
-+      yaffs_GrossLock(dev);
-+      obj = yaffs_FindObjectByNumber(dev, inode->i_ino);
-+
-+      yaffs_FillInodeFromObject(inode, obj);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      unlock_new_inode(inode);
-+      return inode;
- }
-+#else
- static void yaffs_read_inode(struct inode *inode)
- {
-@@ -1438,7 +1682,7 @@ static void yaffs_read_inode(struct inod
-       yaffs_Device *dev = yaffs_SuperToDevice(inode->i_sb);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_read_inode for %d\n", (int)inode->i_ino));
-+              ("yaffs_read_inode for %d\n", (int)inode->i_ino));
-       yaffs_GrossLock(dev);
-@@ -1449,18 +1693,20 @@ static void yaffs_read_inode(struct inod
-       yaffs_GrossUnlock(dev);
- }
--static LIST_HEAD(yaffs_dev_list);
-+#endif
-+
-+static YLIST_HEAD(yaffs_dev_list);
--#if 0 // not used
-+#if 0 /* not used */
- static int yaffs_remount_fs(struct super_block *sb, int *flags, char *data)
- {
-       yaffs_Device    *dev = yaffs_SuperToDevice(sb);
--      if( *flags & MS_RDONLY ) {
-+      if (*flags & MS_RDONLY) {
-               struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
-               T(YAFFS_TRACE_OS,
--                      (KERN_DEBUG "yaffs_remount_fs: %s: RO\n", dev->name ));
-+                      ("yaffs_remount_fs: %s: RO\n", dev->name));
-               yaffs_GrossLock(dev);
-@@ -1472,10 +1718,9 @@ static int yaffs_remount_fs(struct super
-                       mtd->sync(mtd);
-               yaffs_GrossUnlock(dev);
--      }
--      else {
-+      } else {
-               T(YAFFS_TRACE_OS,
--                      (KERN_DEBUG "yaffs_remount_fs: %s: RW\n", dev->name ));
-+                      ("yaffs_remount_fs: %s: RW\n", dev->name));
-       }
-       return 0;
-@@ -1486,7 +1731,7 @@ static void yaffs_put_super(struct super
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_put_super\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_put_super\n"));
-       yaffs_GrossLock(dev);
-@@ -1494,18 +1739,17 @@ static void yaffs_put_super(struct super
-       yaffs_CheckpointSave(dev);
--      if (dev->putSuperFunc) {
-+      if (dev->putSuperFunc)
-               dev->putSuperFunc(sb);
--      }
-       yaffs_Deinitialise(dev);
-       yaffs_GrossUnlock(dev);
-       /* we assume this is protected by lock_kernel() in mount/umount */
--      list_del(&dev->devList);
-+      ylist_del(&dev->devList);
--      if(dev->spareBuffer){
-+      if (dev->spareBuffer) {
-               YFREE(dev->spareBuffer);
-               dev->spareBuffer = NULL;
-       }
-@@ -1516,12 +1760,10 @@ static void yaffs_put_super(struct super
- static void yaffs_MTDPutSuper(struct super_block *sb)
- {
--
-       struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
--      if (mtd->sync) {
-+      if (mtd->sync)
-               mtd->sync(mtd);
--      }
-       put_mtd_device(mtd);
- }
-@@ -1531,9 +1773,9 @@ static void yaffs_MarkSuperBlockDirty(vo
- {
-       struct super_block *sb = (struct super_block *)vsb;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_MarkSuperBlockDirty() sb = %p\n",sb));
--//    if(sb)
--//            sb->s_dirt = 1;
-+      T(YAFFS_TRACE_OS, ("yaffs_MarkSuperBlockDirty() sb = %p\n", sb));
-+      if (sb)
-+              sb->s_dirt = 1;
- }
- typedef struct {
-@@ -1546,48 +1788,48 @@ typedef struct {
- #define MAX_OPT_LEN 20
- static int yaffs_parse_options(yaffs_options *options, const char *options_str)
- {
--      char cur_opt[MAX_OPT_LEN+1];
-+      char cur_opt[MAX_OPT_LEN + 1];
-       int p;
-       int error = 0;
-       /* Parse through the options which is a comma seperated list */
--      while(options_str && *options_str && !error){
--              memset(cur_opt,0,MAX_OPT_LEN+1);
-+      while (options_str && *options_str && !error) {
-+              memset(cur_opt, 0, MAX_OPT_LEN + 1);
-               p = 0;
--              while(*options_str && *options_str != ','){
--                      if(p < MAX_OPT_LEN){
-+              while (*options_str && *options_str != ',') {
-+                      if (p < MAX_OPT_LEN) {
-                               cur_opt[p] = *options_str;
-                               p++;
-                       }
-                       options_str++;
-               }
--              if(!strcmp(cur_opt,"inband-tags"))
-+              if (!strcmp(cur_opt, "inband-tags"))
-                       options->inband_tags = 1;
--              else if(!strcmp(cur_opt,"no-cache"))
-+              else if (!strcmp(cur_opt, "no-cache"))
-                       options->no_cache = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint-read"))
-+              else if (!strcmp(cur_opt, "no-checkpoint-read"))
-                       options->skip_checkpoint_read = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint-write"))
-+              else if (!strcmp(cur_opt, "no-checkpoint-write"))
-                       options->skip_checkpoint_write = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint")){
-+              else if (!strcmp(cur_opt, "no-checkpoint")) {
-                       options->skip_checkpoint_read = 1;
-                       options->skip_checkpoint_write = 1;
-               } else {
--                      printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",cur_opt);
-+                      printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",
-+                                      cur_opt);
-                       error = 1;
-               }
--
-       }
-       return error;
- }
- static struct super_block *yaffs_internal_read_super(int yaffsVersion,
--                                                   struct super_block *sb,
--                                                   void *data, int silent)
-+                                              struct super_block *sb,
-+                                              void *data, int silent)
- {
-       int nBlocks;
-       struct inode *inode = NULL;
-@@ -1602,6 +1844,7 @@ static struct super_block *yaffs_interna
-       sb->s_magic = YAFFS_MAGIC;
-       sb->s_op = &yaffs_super_ops;
-+      sb->s_flags |= MS_NOATIME;
-       if (!sb)
-               printk(KERN_INFO "yaffs: sb is NULL\n");
-@@ -1614,14 +1857,14 @@ static struct super_block *yaffs_interna
-                      sb->s_dev,
-                      yaffs_devname(sb, devname_buf));
--      if(!data_str)
-+      if (!data_str)
-               data_str = "";
--      printk(KERN_INFO "yaffs: passed flags \"%s\"\n",data_str);
-+      printk(KERN_INFO "yaffs: passed flags \"%s\"\n", data_str);
--      memset(&options,0,sizeof(options));
-+      memset(&options, 0, sizeof(options));
--      if(yaffs_parse_options(&options,data_str)){
-+      if (yaffs_parse_options(&options, data_str)) {
-               /* Option parsing failed */
-               return NULL;
-       }
-@@ -1645,9 +1888,9 @@ static struct super_block *yaffs_interna
-                              yaffs_devname(sb, devname_buf)));
-       /* Check it's an mtd device..... */
--      if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR) {
-+      if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR)
-               return NULL;    /* This isn't an mtd device */
--      }
-+
-       /* Get the device */
-       mtd = get_mtd_device(NULL, MINOR(sb->s_dev));
-       if (!mtd) {
-@@ -1673,29 +1916,23 @@ static struct super_block *yaffs_interna
-       T(YAFFS_TRACE_OS, (" %s %d\n", WRITE_SIZE_STR, WRITE_SIZE(mtd)));
-       T(YAFFS_TRACE_OS, (" oobsize %d\n", mtd->oobsize));
-       T(YAFFS_TRACE_OS, (" erasesize %d\n", mtd->erasesize));
--      T(YAFFS_TRACE_OS, (" size %d\n", mtd->size));
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
-+      T(YAFFS_TRACE_OS, (" size %u\n", mtd->size));
-+#else
-+      T(YAFFS_TRACE_OS, (" size %lld\n", mtd->size));
-+#endif
- #ifdef CONFIG_YAFFS_AUTO_YAFFS2
--      if (yaffsVersion == 1 &&
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--          mtd->writesize >= 2048) {
--#else
--          mtd->oobblock >= 2048) {
--#endif
--          T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs2\n"));
--          yaffsVersion = 2;
-+      if (yaffsVersion == 1 && WRITE_SIZE(mtd) >= 2048) {
-+              T(YAFFS_TRACE_ALWAYS, ("yaffs: auto selecting yaffs2\n"));
-+              yaffsVersion = 2;
-       }
-       /* Added NCB 26/5/2006 for completeness */
--      if (yaffsVersion == 2 &&
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--          mtd->writesize == 512) {
--#else
--          mtd->oobblock == 512) {
--#endif
--          T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs1\n"));
--          yaffsVersion = 1;
-+      if (yaffsVersion == 2 && !options.inband_tags && WRITE_SIZE(mtd) == 512) {
-+              T(YAFFS_TRACE_ALWAYS, ("yaffs: auto selecting yaffs1\n"));
-+              yaffsVersion = 1;
-       }
- #endif
-@@ -1707,7 +1944,7 @@ static struct super_block *yaffs_interna
-                   !mtd->block_markbad ||
-                   !mtd->read ||
-                   !mtd->write ||
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-                   !mtd->read_oob || !mtd->write_oob) {
- #else
-                   !mtd->write_ecc ||
-@@ -1719,12 +1956,9 @@ static struct super_block *yaffs_interna
-                       return NULL;
-               }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--              if (mtd->writesize < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
--#else
--              if (mtd->oobblock < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
--#endif
--                  mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) {
-+              if ((WRITE_SIZE(mtd) < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
-+                  mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) &&
-+                  !options.inband_tags) {
-                       T(YAFFS_TRACE_ALWAYS,
-                         ("yaffs: MTD device does not have the "
-                          "right page sizes\n"));
-@@ -1735,7 +1969,7 @@ static struct super_block *yaffs_interna
-               if (!mtd->erase ||
-                   !mtd->read ||
-                   !mtd->write ||
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-                   !mtd->read_oob || !mtd->write_oob) {
- #else
-                   !mtd->write_ecc ||
-@@ -1761,7 +1995,7 @@ static struct super_block *yaffs_interna
-        * Set the yaffs_Device up for mtd
-        */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       sb->s_fs_info = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
- #else
-       sb->u.generic_sbp = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
-@@ -1780,13 +2014,15 @@ static struct super_block *yaffs_interna
-       /* Set up the memory size parameters.... */
--      nBlocks = mtd->size / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
-+      nBlocks = YCALCBLOCKS(mtd->size, (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK));
-+
-       dev->startBlock = 0;
-       dev->endBlock = nBlocks - 1;
-       dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
--      dev->nDataBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-+      dev->totalBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-       dev->nReservedBlocks = 5;
-       dev->nShortOpCaches = (options.no_cache) ? 0 : 10;
-+      dev->inbandTags = options.inband_tags;
-       /* ... and the functions. */
-       if (yaffsVersion == 2) {
-@@ -1798,20 +2034,19 @@ static struct super_block *yaffs_interna
-               dev->queryNANDBlock = nandmtd2_QueryNANDBlock;
-               dev->spareBuffer = YMALLOC(mtd->oobsize);
-               dev->isYaffs2 = 1;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--              dev->nDataBytesPerChunk = mtd->writesize;
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+              dev->totalBytesPerChunk = mtd->writesize;
-               dev->nChunksPerBlock = mtd->erasesize / mtd->writesize;
- #else
--              dev->nDataBytesPerChunk = mtd->oobblock;
-+              dev->totalBytesPerChunk = mtd->oobblock;
-               dev->nChunksPerBlock = mtd->erasesize / mtd->oobblock;
- #endif
--              nBlocks = mtd->size / mtd->erasesize;
-+              nBlocks = YCALCBLOCKS(mtd->size, mtd->erasesize);
--              dev->nCheckpointReservedBlocks = CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS;
-               dev->startBlock = 0;
-               dev->endBlock = nBlocks - 1;
-       } else {
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-               /* use the MTD interface in yaffs_mtdif1.c */
-               dev->writeChunkWithTagsToNAND =
-                       nandmtd1_WriteChunkWithTagsToNAND;
-@@ -1847,7 +2082,7 @@ static struct super_block *yaffs_interna
-       dev->skipCheckpointWrite = options.skip_checkpoint_write;
-       /* we assume this is protected by lock_kernel() in mount/umount */
--      list_add_tail(&dev->devList, &yaffs_dev_list);
-+      ylist_add_tail(&dev->devList, &yaffs_dev_list);
-       init_MUTEX(&dev->grossLock);
-@@ -1884,20 +2119,23 @@ static struct super_block *yaffs_interna
-               return NULL;
-       }
-       sb->s_root = root;
-+      sb->s_dirt = !dev->isCheckpointed;
-+      T(YAFFS_TRACE_ALWAYS,
-+        ("yaffs_read_super: isCheckpointed %d\n", dev->isCheckpointed));
-       T(YAFFS_TRACE_OS, ("yaffs_read_super: done\n"));
-       return sb;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_internal_read_super_mtd(struct super_block *sb, void *data,
-                                        int silent)
- {
-       return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_read_super(struct file_system_type *fs,
-                           int flags, const char *dev_name,
-                           void *data, struct vfsmount *mnt)
-@@ -1938,14 +2176,14 @@ static DECLARE_FSTYPE(yaffs_fs_type, "ya
- #ifdef CONFIG_YAFFS_YAFFS2
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data,
-                                         int silent)
- {
-       return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs2_read_super(struct file_system_type *fs,
-                       int flags, const char *dev_name, void *data,
-                       struct vfsmount *mnt)
-@@ -1990,12 +2228,12 @@ static char *yaffs_dump_dev(char *buf, y
- {
-       buf += sprintf(buf, "startBlock......... %d\n", dev->startBlock);
-       buf += sprintf(buf, "endBlock........... %d\n", dev->endBlock);
-+      buf += sprintf(buf, "totalBytesPerChunk. %d\n", dev->totalBytesPerChunk);
-       buf += sprintf(buf, "nDataBytesPerChunk. %d\n", dev->nDataBytesPerChunk);
-       buf += sprintf(buf, "chunkGroupBits..... %d\n", dev->chunkGroupBits);
-       buf += sprintf(buf, "chunkGroupSize..... %d\n", dev->chunkGroupSize);
-       buf += sprintf(buf, "nErasedBlocks...... %d\n", dev->nErasedBlocks);
-       buf += sprintf(buf, "nReservedBlocks.... %d\n", dev->nReservedBlocks);
--      buf += sprintf(buf, "nCheckptResBlocks.. %d\n", dev->nCheckpointReservedBlocks);
-       buf += sprintf(buf, "blocksInCheckpoint. %d\n", dev->blocksInCheckpoint);
-       buf += sprintf(buf, "nTnodesCreated..... %d\n", dev->nTnodesCreated);
-       buf += sprintf(buf, "nFreeTnodes........ %d\n", dev->nFreeTnodes);
-@@ -2006,10 +2244,8 @@ static char *yaffs_dump_dev(char *buf, y
-       buf += sprintf(buf, "nPageReads......... %d\n", dev->nPageReads);
-       buf += sprintf(buf, "nBlockErasures..... %d\n", dev->nBlockErasures);
-       buf += sprintf(buf, "nGCCopies.......... %d\n", dev->nGCCopies);
--      buf +=
--          sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
--      buf +=
--          sprintf(buf, "passiveGCs......... %d\n",
-+      buf += sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
-+      buf += sprintf(buf, "passiveGCs......... %d\n",
-                   dev->passiveGarbageCollections);
-       buf += sprintf(buf, "nRetriedWrites..... %d\n", dev->nRetriedWrites);
-       buf += sprintf(buf, "nShortOpCaches..... %d\n", dev->nShortOpCaches);
-@@ -2025,6 +2261,7 @@ static char *yaffs_dump_dev(char *buf, y
-           sprintf(buf, "nBackgroudDeletions %d\n", dev->nBackgroundDeletions);
-       buf += sprintf(buf, "useNANDECC......... %d\n", dev->useNANDECC);
-       buf += sprintf(buf, "isYaffs2........... %d\n", dev->isYaffs2);
-+      buf += sprintf(buf, "inbandTags......... %d\n", dev->inbandTags);
-       return buf;
- }
-@@ -2033,7 +2270,7 @@ static int yaffs_proc_read(char *page,
-                          char **start,
-                          off_t offset, int count, int *eof, void *data)
- {
--      struct list_head *item;
-+      struct ylist_head *item;
-       char *buf = page;
-       int step = offset;
-       int n = 0;
-@@ -2057,8 +2294,8 @@ static int yaffs_proc_read(char *page,
-       lock_kernel();
-       /* Locate and print the Nth entry.  Order N-squared but N is small. */
--      list_for_each(item, &yaffs_dev_list) {
--              yaffs_Device *dev = list_entry(item, yaffs_Device, devList);
-+      ylist_for_each(item, &yaffs_dev_list) {
-+              yaffs_Device *dev = ylist_entry(item, yaffs_Device, devList);
-               if (n < step) {
-                       n++;
-                       continue;
-@@ -2119,7 +2356,7 @@ static int yaffs_proc_write(struct file 
-       char *end;
-       char *mask_name;
-       const char *x;
--      char substring[MAX_MASK_NAME_LENGTH+1];
-+      char substring[MAX_MASK_NAME_LENGTH + 1];
-       int i;
-       int done = 0;
-       int add, len = 0;
-@@ -2129,9 +2366,8 @@ static int yaffs_proc_write(struct file 
-       while (!done && (pos < count)) {
-               done = 1;
--              while ((pos < count) && isspace(buf[pos])) {
-+              while ((pos < count) && isspace(buf[pos]))
-                       pos++;
--              }
-               switch (buf[pos]) {
-               case '+':
-@@ -2148,20 +2384,21 @@ static int yaffs_proc_write(struct file 
-               mask_name = NULL;
-               mask_bitfield = simple_strtoul(buf + pos, &end, 0);
-+
-               if (end > buf + pos) {
-                       mask_name = "numeral";
-                       len = end - (buf + pos);
-                       pos += len;
-                       done = 0;
-               } else {
--                      for(x = buf + pos, i = 0;
--                          (*x == '_' || (*x >='a' && *x <= 'z')) &&
--                          i <MAX_MASK_NAME_LENGTH; x++, i++, pos++)
--                          substring[i] = *x;
-+                      for (x = buf + pos, i = 0;
-+                          (*x == '_' || (*x >= 'a' && *x <= 'z')) &&
-+                          i < MAX_MASK_NAME_LENGTH; x++, i++, pos++)
-+                              substring[i] = *x;
-                       substring[i] = '\0';
-                       for (i = 0; mask_flags[i].mask_name != NULL; i++) {
--                              if(strcmp(substring,mask_flags[i].mask_name) == 0){
-+                              if (strcmp(substring, mask_flags[i].mask_name) == 0) {
-                                       mask_name = mask_flags[i].mask_name;
-                                       mask_bitfield = mask_flags[i].mask_bitfield;
-                                       done = 0;
-@@ -2172,7 +2409,7 @@ static int yaffs_proc_write(struct file 
-               if (mask_name != NULL) {
-                       done = 0;
--                      switch(add) {
-+                      switch (add) {
-                       case '-':
-                               rg &= ~mask_bitfield;
-                               break;
-@@ -2191,13 +2428,13 @@ static int yaffs_proc_write(struct file 
-       yaffs_traceMask = rg | YAFFS_TRACE_ALWAYS;
--      printk("new trace = 0x%08X\n",yaffs_traceMask);
-+      printk(KERN_DEBUG "new trace = 0x%08X\n", yaffs_traceMask);
-       if (rg & YAFFS_TRACE_ALWAYS) {
-               for (i = 0; mask_flags[i].mask_name != NULL; i++) {
-                       char flag;
-                       flag = ((rg & mask_flags[i].mask_bitfield) == mask_flags[i].mask_bitfield) ? '+' : '-';
--                      printk("%c%s\n", flag, mask_flags[i].mask_name);
-+                      printk(KERN_DEBUG "%c%s\n", flag, mask_flags[i].mask_name);
-               }
-       }
-@@ -2211,12 +2448,8 @@ struct file_system_to_install {
- };
- static struct file_system_to_install fs_to_install[] = {
--//#ifdef CONFIG_YAFFS_YAFFS1
-       {&yaffs_fs_type, 0},
--//#endif
--//#ifdef CONFIG_YAFFS_YAFFS2
-       {&yaffs2_fs_type, 0},
--//#endif
-       {NULL, 0}
- };
-@@ -2231,15 +2464,14 @@ static int __init init_yaffs_fs(void)
-       /* Install the proc_fs entry */
-       my_proc_entry = create_proc_entry("yaffs",
-                                              S_IRUGO | S_IFREG,
--                                             &proc_root);
-+                                             YPROC_ROOT);
-       if (my_proc_entry) {
-               my_proc_entry->write_proc = yaffs_proc_write;
-               my_proc_entry->read_proc = yaffs_proc_read;
-               my_proc_entry->data = NULL;
--      } else {
-+      } else
-               return -ENOMEM;
--      }
-       /* Now add the file system entries */
-@@ -2247,9 +2479,8 @@ static int __init init_yaffs_fs(void)
-       while (fsinst->fst && !error) {
-               error = register_filesystem(fsinst->fst);
--              if (!error) {
-+              if (!error)
-                       fsinst->installed = 1;
--              }
-               fsinst++;
-       }
-@@ -2277,7 +2508,7 @@ static void __exit exit_yaffs_fs(void)
-       T(YAFFS_TRACE_ALWAYS, ("yaffs " __DATE__ " " __TIME__
-                              " removing. \n"));
--      remove_proc_entry("yaffs", &proc_root);
-+      remove_proc_entry("yaffs", YPROC_ROOT);
-       fsinst = fs_to_install;
-@@ -2288,7 +2519,6 @@ static void __exit exit_yaffs_fs(void)
-               }
-               fsinst++;
-       }
--
- }
- module_init(init_yaffs_fs)
---- /dev/null
-+++ b/fs/yaffs2/yaffs_getblockinfo.h
-@@ -0,0 +1,34 @@
-+/*
-+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
-+ *
-+ * Copyright (C) 2002-2007 Aleph One Ltd.
-+ *   for Toby Churchill Ltd and Brightstar Engineering
-+ *
-+ * Created by Charles Manning <charles@aleph1.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 2.1 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-+ */
-+
-+#ifndef __YAFFS_GETBLOCKINFO_H__
-+#define __YAFFS_GETBLOCKINFO_H__
-+
-+#include "yaffs_guts.h"
-+
-+/* Function to manipulate block info */
-+static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
-+{
-+      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
-+              T(YAFFS_TRACE_ERROR,
-+                (TSTR
-+                 ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
-+                 blk));
-+              YBUG();
-+      }
-+      return &dev->blockInfo[blk - dev->internalStartBlock];
-+}
-+
-+#endif
---- a/fs/yaffs2/yaffs_guts.c
-+++ b/fs/yaffs2/yaffs_guts.c
-@@ -12,16 +12,17 @@
-  */
- const char *yaffs_guts_c_version =
--    "$Id: yaffs_guts.c,v 1.49 2007-05-15 20:07:40 charles Exp $";
-+    "$Id: yaffs_guts.c,v 1.82 2009-03-09 04:24:17 charles Exp $";
- #include "yportenv.h"
- #include "yaffsinterface.h"
- #include "yaffs_guts.h"
- #include "yaffs_tagsvalidity.h"
-+#include "yaffs_getblockinfo.h"
- #include "yaffs_tagscompat.h"
--#ifndef  CONFIG_YAFFS_USE_OWN_SORT
-+#ifndef CONFIG_YAFFS_USE_OWN_SORT
- #include "yaffs_qsort.h"
- #endif
- #include "yaffs_nand.h"
-@@ -32,116 +33,116 @@ const char *yaffs_guts_c_version =
- #include "yaffs_packedtags2.h"
--#ifdef CONFIG_YAFFS_WINCE
--void yfsd_LockYAFFS(BOOL fsLockOnly);
--void yfsd_UnlockYAFFS(BOOL fsLockOnly);
--#endif
--
- #define YAFFS_PASSIVE_GC_CHUNKS 2
- #include "yaffs_ecc.h"
- /* Robustification (if it ever comes about...) */
--static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_ExtendedTags * tags);
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_ExtendedTags * tags);
-+static void yaffs_RetireBlock(yaffs_Device *dev, int blockInNAND);
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND,
-+              int erasedOk);
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags);
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                              const yaffs_ExtendedTags *tags);
- /* Other local prototypes */
--static int yaffs_UnlinkObject( yaffs_Object *obj);
-+static int yaffs_UnlinkObject(yaffs_Object *obj);
- static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
- static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
--static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
--                                           const __u8 * buffer,
--                                           yaffs_ExtendedTags * tags,
--                                           int useReserve);
--static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
--                                int chunkInNAND, int inScan);
--
--static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
--                                         yaffs_ObjectType type);
--static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
--                                     yaffs_Object * obj);
--static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
--                                  int force, int isShrink, int shadows);
--static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
-+static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device *dev,
-+                                      const __u8 *buffer,
-+                                      yaffs_ExtendedTags *tags,
-+                                      int useReserve);
-+static int yaffs_PutChunkIntoFile(yaffs_Object *in, int chunkInInode,
-+                              int chunkInNAND, int inScan);
-+
-+static yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
-+                                      yaffs_ObjectType type);
-+static void yaffs_AddObjectToDirectory(yaffs_Object *directory,
-+                              yaffs_Object *obj);
-+static int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name,
-+                              int force, int isShrink, int shadows);
-+static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj);
- static int yaffs_CheckStructures(void);
--static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
--                            int chunkOffset, int *limit);
--static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
--
--static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
--
--static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
--static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
--                                  int lineNo);
-+static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level,
-+                      int chunkOffset, int *limit);
-+static int yaffs_DoGenericObjectDeletion(yaffs_Object *in);
-+
-+static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device *dev, int blockNo);
--static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND);
--static int yaffs_UnlinkWorker(yaffs_Object * obj);
--static void yaffs_DestroyObject(yaffs_Object * obj);
-+static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
-+                              int chunkInNAND);
--static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
--                         int chunkInObject);
-+static int yaffs_UnlinkWorker(yaffs_Object *obj);
--loff_t yaffs_GetFileSize(yaffs_Object * obj);
-+static int yaffs_TagsMatch(const yaffs_ExtendedTags *tags, int objectId,
-+                      int chunkInObject);
--static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
-+static int yaffs_AllocateChunk(yaffs_Device *dev, int useReserve,
-+                              yaffs_BlockInfo **blockUsedPtr);
--static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
-+static void yaffs_VerifyFreeChunks(yaffs_Device *dev);
- static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in);
-+static void yaffs_VerifyDirectory(yaffs_Object *directory);
- #ifdef YAFFS_PARANOID
--static int yaffs_CheckFileSanity(yaffs_Object * in);
-+static int yaffs_CheckFileSanity(yaffs_Object *in);
- #else
- #define yaffs_CheckFileSanity(in)
- #endif
--static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
--static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
-+static void yaffs_InvalidateWholeChunkCache(yaffs_Object *in);
-+static void yaffs_InvalidateChunkCache(yaffs_Object *object, int chunkId);
- static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
--static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
--                               yaffs_ExtendedTags * tags);
-+static int yaffs_FindChunkInFile(yaffs_Object *in, int chunkInInode,
-+                              yaffs_ExtendedTags *tags);
--static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos);
--static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
--                                        yaffs_FileStructure * fStruct,
--                                        __u32 chunkId);
-+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn,
-+              unsigned pos);
-+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId);
- /* Function to calculate chunk and offset */
--static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
-+static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, int *chunkOut,
-+              __u32 *offsetOut)
- {
--      if(dev->chunkShift){
--              /* Easy-peasy power of 2 case */
--              *chunk  = (__u32)(addr >> dev->chunkShift);
--              *offset = (__u32)(addr & dev->chunkMask);
--      }
--      else if(dev->crumbsPerChunk)
--      {
--              /* Case where we're using "crumbs" */
--              *offset = (__u32)(addr & dev->crumbMask);
--              addr >>= dev->crumbShift;
--              *chunk = ((__u32)addr)/dev->crumbsPerChunk;
--              *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
-+      int chunk;
-+      __u32 offset;
-+
-+      chunk  = (__u32)(addr >> dev->chunkShift);
-+
-+      if (dev->chunkDiv == 1) {
-+              /* easy power of 2 case */
-+              offset = (__u32)(addr & dev->chunkMask);
-+      } else {
-+              /* Non power-of-2 case */
-+
-+              loff_t chunkBase;
-+
-+              chunk /= dev->chunkDiv;
-+
-+              chunkBase = ((loff_t)chunk) * dev->nDataBytesPerChunk;
-+              offset = (__u32)(addr - chunkBase);
-       }
--      else
--              YBUG();
-+
-+      *chunkOut = chunk;
-+      *offsetOut = offset;
- }
--/* Function to return the number of shifts for a power of 2 greater than or equal
-- * to the given number
-+/* Function to return the number of shifts for a power of 2 greater than or
-+ * equal to the given number
-  * Note we don't try to cater for all possible numbers and this does not have to
-  * be hellishly efficient.
-  */
-@@ -153,13 +154,14 @@ static __u32 ShiftsGE(__u32 x)
-       nShifts = extraBits = 0;
--      while(x>1){
--              if(x & 1) extraBits++;
--              x>>=1;
-+      while (x > 1) {
-+              if (x & 1)
-+                      extraBits++;
-+              x >>= 1;
-               nShifts++;
-       }
--      if(extraBits)
-+      if (extraBits)
-               nShifts++;
-       return nShifts;
-@@ -168,16 +170,17 @@ static __u32 ShiftsGE(__u32 x)
- /* Function to return the number of shifts to get a 1 in bit 0
-  */
--static __u32 ShiftDiv(__u32 x)
-+static __u32 Shifts(__u32 x)
- {
-       int nShifts;
-       nShifts =  0;
--      if(!x) return 0;
-+      if (!x)
-+              return 0;
--      while( !(x&1)){
--              x>>=1;
-+      while (!(x&1)) {
-+              x >>= 1;
-               nShifts++;
-       }
-@@ -195,21 +198,25 @@ static int yaffs_InitialiseTempBuffers(y
-       int i;
-       __u8 *buf = (__u8 *)1;
--      memset(dev->tempBuffer,0,sizeof(dev->tempBuffer));
-+      memset(dev->tempBuffer, 0, sizeof(dev->tempBuffer));
-       for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
-               dev->tempBuffer[i].line = 0;    /* not in use */
-               dev->tempBuffer[i].buffer = buf =
--                  YMALLOC_DMA(dev->nDataBytesPerChunk);
-+                  YMALLOC_DMA(dev->totalBytesPerChunk);
-       }
-       return buf ? YAFFS_OK : YAFFS_FAIL;
--
- }
--static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
-+__u8 *yaffs_GetTempBuffer(yaffs_Device *dev, int lineNo)
- {
-       int i, j;
-+
-+      dev->tempInUse++;
-+      if (dev->tempInUse > dev->maxTemp)
-+              dev->maxTemp = dev->tempInUse;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].line == 0) {
-                       dev->tempBuffer[i].line = lineNo;
-@@ -227,9 +234,9 @@ static __u8 *yaffs_GetTempBuffer(yaffs_D
-       T(YAFFS_TRACE_BUFFERS,
-         (TSTR("Out of temp buffers at line %d, other held by lines:"),
-          lineNo));
--      for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-+      for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
-               T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
--      }
-+
-       T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
-       /*
-@@ -242,10 +249,13 @@ static __u8 *yaffs_GetTempBuffer(yaffs_D
- }
--static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
-+void yaffs_ReleaseTempBuffer(yaffs_Device *dev, __u8 *buffer,
-                                   int lineNo)
- {
-       int i;
-+
-+      dev->tempInUse--;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].buffer == buffer) {
-                       dev->tempBuffer[i].line = 0;
-@@ -267,27 +277,26 @@ static void yaffs_ReleaseTempBuffer(yaff
- /*
-  * Determine if we have a managed buffer.
-  */
--int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
-+int yaffs_IsManagedTempBuffer(yaffs_Device *dev, const __u8 *buffer)
- {
-       int i;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].buffer == buffer)
-                       return 1;
-+      }
-+      for (i = 0; i < dev->nShortOpCaches; i++) {
-+              if (dev->srCache[i].data == buffer)
-+                      return 1;
-       }
--    for (i = 0; i < dev->nShortOpCaches; i++) {
--        if( dev->srCache[i].data == buffer )
--            return 1;
--
--    }
--
--    if (buffer == dev->checkpointBuffer)
--      return 1;
--
--    T(YAFFS_TRACE_ALWAYS,
--        (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
--    return 0;
-+      if (buffer == dev->checkpointBuffer)
-+              return 1;
-+
-+      T(YAFFS_TRACE_ALWAYS,
-+              (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
-+      return 0;
- }
-@@ -296,62 +305,63 @@ int yaffs_IsManagedTempBuffer(yaffs_Devi
-  * Chunk bitmap manipulations
-  */
--static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
-+static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device *dev, int blk)
- {
-       if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
--                 blk));
-+                      (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
-+                      blk));
-               YBUG();
-       }
-       return dev->chunkBits +
--          (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
-+              (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
- }
- static Y_INLINE void yaffs_VerifyChunkBitId(yaffs_Device *dev, int blk, int chunk)
- {
--      if(blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
--         chunk < 0 || chunk >= dev->nChunksPerBlock) {
--         T(YAFFS_TRACE_ERROR,
--          (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),blk,chunk));
--          YBUG();
-+      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
-+                      chunk < 0 || chunk >= dev->nChunksPerBlock) {
-+              T(YAFFS_TRACE_ERROR,
-+              (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),
-+                      blk, chunk));
-+              YBUG();
-       }
- }
--static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
-+static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       memset(blkBits, 0, dev->chunkBitmapStride);
- }
--static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       blkBits[chunk / 8] &= ~(1 << (chunk & 7));
- }
--static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE void yaffs_SetChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       blkBits[chunk / 8] |= (1 << (chunk & 7));
- }
--static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
- }
--static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
-+static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       int i;
-@@ -363,17 +373,17 @@ static Y_INLINE int yaffs_StillSomeChunk
-       return 0;
- }
--static int yaffs_CountChunkBits(yaffs_Device * dev, int blk)
-+static int yaffs_CountChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       int i;
-       int n = 0;
-       for (i = 0; i < dev->chunkBitmapStride; i++) {
-               __u8 x = *blkBits;
--              while(x){
--                      if(x & 1)
-+              while (x) {
-+                      if (x & 1)
-                               n++;
--                      x >>=1;
-+                      x >>= 1;
-               }
-               blkBits++;
-@@ -400,7 +410,7 @@ static int yaffs_SkipNANDVerification(ya
-       return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_NAND));
- }
--static const char * blockStateName[] = {
-+static const char *blockStateName[] = {
- "Unknown",
- "Needs scanning",
- "Scanning",
-@@ -413,64 +423,65 @@ static const char * blockStateName[] = {
- "Dead"
- };
--static void yaffs_VerifyBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-+static void yaffs_VerifyBlock(yaffs_Device *dev, yaffs_BlockInfo *bi, int n)
- {
-       int actuallyUsed;
-       int inUse;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Report illegal runtime states */
--      if(bi->blockState <0 || bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has undefined state %d"TENDSTR),n,bi->blockState));
-+      if (bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has undefined state %d"TENDSTR), n, bi->blockState));
--      switch(bi->blockState){
--       case YAFFS_BLOCK_STATE_UNKNOWN:
--       case YAFFS_BLOCK_STATE_SCANNING:
--       case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has bad run-state %s"TENDSTR),
--              n,blockStateName[bi->blockState]));
-+      switch (bi->blockState) {
-+      case YAFFS_BLOCK_STATE_UNKNOWN:
-+      case YAFFS_BLOCK_STATE_SCANNING:
-+      case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has bad run-state %s"TENDSTR),
-+              n, blockStateName[bi->blockState]));
-       }
-       /* Check pages in use and soft deletions are legal */
-       actuallyUsed = bi->pagesInUse - bi->softDeletions;
--      if(bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
-+      if (bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
-          bi->softDeletions < 0 || bi->softDeletions > dev->nChunksPerBlock ||
-          actuallyUsed < 0 || actuallyUsed > dev->nChunksPerBlock)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
--              n,bi->pagesInUse,bi->softDeletions));
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
-+              n, bi->pagesInUse, bi->softDeletions));
-       /* Check chunk bitmap legal */
--      inUse = yaffs_CountChunkBits(dev,n);
--      if(inUse != bi->pagesInUse)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
--                      n,bi->pagesInUse,inUse));
-+      inUse = yaffs_CountChunkBits(dev, n);
-+      if (inUse != bi->pagesInUse)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
-+                      n, bi->pagesInUse, inUse));
-       /* Check that the sequence number is valid.
-        * Ten million is legal, but is very unlikely
-        */
--      if(dev->isYaffs2 &&
-+      if (dev->isYaffs2 &&
-          (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
--         (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000 ))
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has suspect sequence number of %d"TENDSTR),
--              n,bi->sequenceNumber));
--
-+         (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000))
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has suspect sequence number of %d"TENDSTR),
-+              n, bi->sequenceNumber));
- }
--static void yaffs_VerifyCollectedBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-+static void yaffs_VerifyCollectedBlock(yaffs_Device *dev, yaffs_BlockInfo *bi,
-+              int n)
- {
--      yaffs_VerifyBlock(dev,bi,n);
-+      yaffs_VerifyBlock(dev, bi, n);
-       /* After collection the block should be in the erased state */
--      /* TODO: This will need to change if we do partial gc */
-+      /* This will need to change if we do partial gc */
--      if(bi->blockState != YAFFS_BLOCK_STATE_EMPTY){
--              T(YAFFS_TRACE_ERROR,(TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
--                      n,bi->blockState));
-+      if (bi->blockState != YAFFS_BLOCK_STATE_COLLECTING &&
-+                      bi->blockState != YAFFS_BLOCK_STATE_EMPTY) {
-+              T(YAFFS_TRACE_ERROR, (TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
-+                      n, bi->blockState));
-       }
- }
-@@ -480,52 +491,49 @@ static void yaffs_VerifyBlocks(yaffs_Dev
-       int nBlocksPerState[YAFFS_NUMBER_OF_BLOCK_STATES];
-       int nIllegalBlockStates = 0;
--
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
--      memset(nBlocksPerState,0,sizeof(nBlocksPerState));
--
-+      memset(nBlocksPerState, 0, sizeof(nBlocksPerState));
--      for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++){
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--              yaffs_VerifyBlock(dev,bi,i);
-+      for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+              yaffs_VerifyBlock(dev, bi, i);
--              if(bi->blockState >=0 && bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
-+              if (bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
-                       nBlocksPerState[bi->blockState]++;
-               else
-                       nIllegalBlockStates++;
--
-       }
--      T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
--      T(YAFFS_TRACE_VERIFY,(TSTR("Block summary"TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR(""TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR("Block summary"TENDSTR)));
--      T(YAFFS_TRACE_VERIFY,(TSTR("%d blocks have illegal states"TENDSTR),nIllegalBlockStates));
--      if(nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Too many allocating blocks"TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR("%d blocks have illegal states"TENDSTR), nIllegalBlockStates));
-+      if (nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Too many allocating blocks"TENDSTR)));
--      for(i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
-+      for (i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
-               T(YAFFS_TRACE_VERIFY,
-                 (TSTR("%s %d blocks"TENDSTR),
--                blockStateName[i],nBlocksPerState[i]));
-+                blockStateName[i], nBlocksPerState[i]));
--      if(dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
-+      if (dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Checkpoint block count wrong dev %d count %d"TENDSTR),
-                dev->blocksInCheckpoint, nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT]));
--      if(dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
-+      if (dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Erased block count wrong dev %d count %d"TENDSTR),
-                dev->nErasedBlocks, nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY]));
--      if(nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
-+      if (nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Too many collecting blocks %d (max is 1)"TENDSTR),
-                nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING]));
--      T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR(""TENDSTR)));
- }
-@@ -535,26 +543,26 @@ static void yaffs_VerifyBlocks(yaffs_Dev
-  */
- static void yaffs_VerifyObjectHeader(yaffs_Object *obj, yaffs_ObjectHeader *oh, yaffs_ExtendedTags *tags, int parentCheck)
- {
--      if(yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
--      if(!(tags && obj && oh)){
--              T(YAFFS_TRACE_VERIFY,
--                              (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
--                              (__u32)tags,(__u32)obj,(__u32)oh));
-+      if (!(tags && obj && oh)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                              (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
-+                              (__u32)tags, (__u32)obj, (__u32)oh));
-               return;
-       }
--      if(oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
--         oh->type > YAFFS_OBJECT_TYPE_MAX)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
--               tags->objectId, oh->type));
--
--      if(tags->objectId != obj->objectId)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
--               tags->objectId, obj->objectId));
-+      if (oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
-+                      oh->type > YAFFS_OBJECT_TYPE_MAX)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
-+                      tags->objectId, oh->type));
-+
-+      if (tags->objectId != obj->objectId)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
-+                      tags->objectId, obj->objectId));
-       /*
-@@ -563,46 +571,43 @@ static void yaffs_VerifyObjectHeader(yaf
-        * Tests do not apply to the root object.
-        */
--      if(parentCheck && tags->objectId > 1 && !obj->parent)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
--               tags->objectId, oh->parentObjectId));
--
--
--      if(parentCheck && obj->parent &&
--         oh->parentObjectId != obj->parent->objectId &&
--         (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
--          obj->parent->objectId != YAFFS_OBJECTID_DELETED))
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
--               tags->objectId, oh->parentObjectId, obj->parent->objectId));
-+      if (parentCheck && tags->objectId > 1 && !obj->parent)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
-+                      tags->objectId, oh->parentObjectId));
-+      if (parentCheck && obj->parent &&
-+                      oh->parentObjectId != obj->parent->objectId &&
-+                      (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
-+                      obj->parent->objectId != YAFFS_OBJECTID_DELETED))
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
-+                      tags->objectId, oh->parentObjectId, obj->parent->objectId));
--      if(tags->objectId > 1 && oh->name[0] == 0) /* Null name */
-+      if (tags->objectId > 1 && oh->name[0] == 0) /* Null name */
-               T(YAFFS_TRACE_VERIFY,
--              (TSTR("Obj %d header name is NULL"TENDSTR),
--               obj->objectId));
-+                      (TSTR("Obj %d header name is NULL"TENDSTR),
-+                      obj->objectId));
--      if(tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
-+      if (tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
-               T(YAFFS_TRACE_VERIFY,
--              (TSTR("Obj %d header name is 0xFF"TENDSTR),
--               obj->objectId));
-+                      (TSTR("Obj %d header name is 0xFF"TENDSTR),
-+                      obj->objectId));
- }
--static int yaffs_VerifyTnodeWorker(yaffs_Object * obj, yaffs_Tnode * tn,
--                                      __u32 level, int chunkOffset)
-+static int yaffs_VerifyTnodeWorker(yaffs_Object *obj, yaffs_Tnode *tn,
-+                                      __u32 level, int chunkOffset)
- {
-       int i;
-       yaffs_Device *dev = obj->myDev;
-       int ok = 1;
--      int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-       if (tn) {
-               if (level > 0) {
--                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
-+                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
-                               if (tn->internal[i]) {
-                                       ok = yaffs_VerifyTnodeWorker(obj,
-                                                       tn->internal[i],
-@@ -611,20 +616,19 @@ static int yaffs_VerifyTnodeWorker(yaffs
-                               }
-                       }
-               } else if (level == 0) {
--                      int i;
-                       yaffs_ExtendedTags tags;
-                       __u32 objectId = obj->objectId;
-                       chunkOffset <<=  YAFFS_TNODES_LEVEL0_BITS;
--                      for(i = 0; i < YAFFS_NTNODES_LEVEL0; i++){
--                              __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                      for (i = 0; i < YAFFS_NTNODES_LEVEL0; i++) {
-+                              __u32 theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
--                              if(theChunk > 0){
-+                              if (theChunk > 0) {
-                                       /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),tags.objectId,tags.chunkId,theChunk)); */
--                                      yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
--                                      if(tags.objectId != objectId || tags.chunkId != chunkOffset){
--                                              T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-+                                      yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, &tags);
-+                                      if (tags.objectId != objectId || tags.chunkId != chunkOffset) {
-+                                              T(~0, (TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-                                                       objectId, chunkOffset, theChunk,
-                                                       tags.objectId, tags.chunkId));
-                                       }
-@@ -646,13 +650,15 @@ static void yaffs_VerifyFile(yaffs_Objec
-       __u32 lastChunk;
-       __u32 x;
-       __u32 i;
--      int ok;
-       yaffs_Device *dev;
-       yaffs_ExtendedTags tags;
-       yaffs_Tnode *tn;
-       __u32 objectId;
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (!obj)
-+              return;
-+
-+      if (yaffs_SkipVerification(obj->myDev))
-               return;
-       dev = obj->myDev;
-@@ -662,17 +668,17 @@ static void yaffs_VerifyFile(yaffs_Objec
-       lastChunk =  obj->variant.fileVariant.fileSize / dev->nDataBytesPerChunk + 1;
-       x = lastChunk >> YAFFS_TNODES_LEVEL0_BITS;
-       requiredTallness = 0;
--      while (x> 0) {
-+      while (x > 0) {
-               x >>= YAFFS_TNODES_INTERNAL_BITS;
-               requiredTallness++;
-       }
-       actualTallness = obj->variant.fileVariant.topLevel;
--      if(requiredTallness > actualTallness )
-+      if (requiredTallness > actualTallness)
-               T(YAFFS_TRACE_VERIFY,
-               (TSTR("Obj %d had tnode tallness %d, needs to be %d"TENDSTR),
--               obj->objectId,actualTallness, requiredTallness));
-+               obj->objectId, actualTallness, requiredTallness));
-       /* Check that the chunks in the tnode tree are all correct.
-@@ -680,39 +686,31 @@ static void yaffs_VerifyFile(yaffs_Objec
-        * checking the tags for every chunk match.
-        */
--      if(yaffs_SkipNANDVerification(dev))
-+      if (yaffs_SkipNANDVerification(dev))
-               return;
--      for(i = 1; i <= lastChunk; i++){
--              tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant,i);
-+      for (i = 1; i <= lastChunk; i++) {
-+              tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant, i);
-               if (tn) {
--                      __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
--                      if(theChunk > 0){
-+                      __u32 theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-+                      if (theChunk > 0) {
-                               /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),objectId,i,theChunk)); */
--                              yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
--                              if(tags.objectId != objectId || tags.chunkId != i){
--                                      T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-+                              yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, &tags);
-+                              if (tags.objectId != objectId || tags.chunkId != i) {
-+                                      T(~0, (TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-                                               objectId, i, theChunk,
-                                               tags.objectId, tags.chunkId));
-                               }
-                       }
-               }
--
-       }
--
- }
--static void yaffs_VerifyDirectory(yaffs_Object *obj)
--{
--      if(obj && yaffs_SkipVerification(obj->myDev))
--              return;
--
--}
- static void yaffs_VerifyHardLink(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
-       /* Verify sane equivalent object */
-@@ -720,7 +718,7 @@ static void yaffs_VerifyHardLink(yaffs_O
- static void yaffs_VerifySymlink(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
-       /* Verify symlink string */
-@@ -728,7 +726,7 @@ static void yaffs_VerifySymlink(yaffs_Ob
- static void yaffs_VerifySpecial(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
- }
-@@ -740,14 +738,19 @@ static void yaffs_VerifyObject(yaffs_Obj
-       __u32 chunkMax;
-       __u32 chunkIdOk;
--      __u32 chunkIsLive;
-+      __u32 chunkInRange;
-+      __u32 chunkShouldNotBeDeleted;
-+      __u32 chunkValid;
-+
-+      if (!obj)
-+              return;
--      if(!obj)
-+      if (obj->beingCreated)
-               return;
-       dev = obj->myDev;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Check sane object header chunk */
-@@ -755,50 +758,54 @@ static void yaffs_VerifyObject(yaffs_Obj
-       chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
-       chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
--      chunkIdOk = (obj->chunkId >= chunkMin && obj->chunkId <= chunkMax);
--      chunkIsLive = chunkIdOk &&
-+      chunkInRange = (((unsigned)(obj->hdrChunk)) >= chunkMin && ((unsigned)(obj->hdrChunk)) <= chunkMax);
-+      chunkIdOk = chunkInRange || obj->hdrChunk == 0;
-+      chunkValid = chunkInRange &&
-                       yaffs_CheckChunkBit(dev,
--                                          obj->chunkId / dev->nChunksPerBlock,
--                                          obj->chunkId % dev->nChunksPerBlock);
--      if(!obj->fake &&
--          (!chunkIdOk || !chunkIsLive)) {
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
--         obj->objectId,obj->chunkId,
--         chunkIdOk ? "" : ",out of range",
--         chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
-+                                      obj->hdrChunk / dev->nChunksPerBlock,
-+                                      obj->hdrChunk % dev->nChunksPerBlock);
-+      chunkShouldNotBeDeleted = chunkInRange && !chunkValid;
-+
-+      if (!obj->fake &&
-+                      (!chunkIdOk || chunkShouldNotBeDeleted)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
-+                      obj->objectId, obj->hdrChunk,
-+                      chunkIdOk ? "" : ",out of range",
-+                      chunkShouldNotBeDeleted ? ",marked as deleted" : ""));
-       }
--      if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
-+      if (chunkValid && !yaffs_SkipNANDVerification(dev)) {
-               yaffs_ExtendedTags tags;
-               yaffs_ObjectHeader *oh;
--              __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
-+              __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-               oh = (yaffs_ObjectHeader *)buffer;
--              yaffs_ReadChunkWithTagsFromNAND(dev, obj->chunkId,buffer, &tags);
-+              yaffs_ReadChunkWithTagsFromNAND(dev, obj->hdrChunk, buffer,
-+                              &tags);
--              yaffs_VerifyObjectHeader(obj,oh,&tags,1);
-+              yaffs_VerifyObjectHeader(obj, oh, &tags, 1);
--              yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
-+              yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-       }
-       /* Verify it has a parent */
--      if(obj && !obj->fake &&
--         (!obj->parent || obj->parent->myDev != dev)){
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
--         obj->objectId,obj->parent));
-+      if (obj && !obj->fake &&
-+                      (!obj->parent || obj->parent->myDev != dev)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
-+                      obj->objectId, obj->parent));
-       }
-       /* Verify parent is a directory */
--      if(obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY){
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
--         obj->objectId,obj->parent->variantType));
-+      if (obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
-+                      obj->objectId, obj->parent->variantType));
-       }
--      switch(obj->variantType){
-+      switch (obj->variantType) {
-       case YAFFS_OBJECT_TYPE_FILE:
-               yaffs_VerifyFile(obj);
-               break;
-@@ -818,33 +825,30 @@ static void yaffs_VerifyObject(yaffs_Obj
-       default:
-               T(YAFFS_TRACE_VERIFY,
-               (TSTR("Obj %d has illegaltype %d"TENDSTR),
--              obj->objectId,obj->variantType));
-+              obj->objectId, obj->variantType));
-               break;
-       }
--
--
- }
- static void yaffs_VerifyObjects(yaffs_Device *dev)
- {
-       yaffs_Object *obj;
-       int i;
--      struct list_head *lh;
-+      struct ylist_head *lh;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Iterate through the objects in each hash entry */
--       for(i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++){
--              list_for_each(lh, &dev->objectBucket[i].list) {
-+      for (i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++) {
-+              ylist_for_each(lh, &dev->objectBucket[i].list) {
-                       if (lh) {
--                              obj = list_entry(lh, yaffs_Object, hashLink);
-+                              obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               yaffs_VerifyObject(obj);
-                       }
-               }
--       }
--
-+      }
- }
-@@ -855,19 +859,20 @@ static void yaffs_VerifyObjects(yaffs_De
- static Y_INLINE int yaffs_HashFunction(int n)
- {
-       n = abs(n);
--      return (n % YAFFS_NOBJECT_BUCKETS);
-+      return n % YAFFS_NOBJECT_BUCKETS;
- }
- /*
-- * Access functions to useful fake objects
-+ * Access functions to useful fake objects.
-+ * Note that root might have a presence in NAND if permissions are set.
-  */
--yaffs_Object *yaffs_Root(yaffs_Device * dev)
-+yaffs_Object *yaffs_Root(yaffs_Device *dev)
- {
-       return dev->rootDir;
- }
--yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
-+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev)
- {
-       return dev->lostNFoundDir;
- }
-@@ -877,7 +882,7 @@ yaffs_Object *yaffs_LostNFound(yaffs_Dev
-  *  Erased NAND checking functions
-  */
--int yaffs_CheckFF(__u8 * buffer, int nBytes)
-+int yaffs_CheckFF(__u8 *buffer, int nBytes)
- {
-       /* Horrible, slow implementation */
-       while (nBytes--) {
-@@ -889,9 +894,8 @@ int yaffs_CheckFF(__u8 * buffer, int nBy
- }
- static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND)
-+                              int chunkInNAND)
- {
--
-       int retval = YAFFS_OK;
-       __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
-       yaffs_ExtendedTags tags;
-@@ -899,10 +903,9 @@ static int yaffs_CheckChunkErased(struct
-       result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
--      if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
-+      if (tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
-               retval = YAFFS_FAIL;
--
-       if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
-               T(YAFFS_TRACE_NANDACCESS,
-                 (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
-@@ -915,11 +918,10 @@ static int yaffs_CheckChunkErased(struct
- }
--
- static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
--                                           const __u8 * data,
--                                           yaffs_ExtendedTags * tags,
--                                           int useReserve)
-+                                      const __u8 *data,
-+                                      yaffs_ExtendedTags *tags,
-+                                      int useReserve)
- {
-       int attempts = 0;
-       int writeOk = 0;
-@@ -972,7 +974,7 @@ static int yaffs_WriteNewChunkWithTagsTo
-                       erasedOk = yaffs_CheckChunkErased(dev, chunk);
-                       if (erasedOk != YAFFS_OK) {
-                               T(YAFFS_TRACE_ERROR,
--                              (TSTR ("**>> yaffs chunk %d was not erased"
-+                              (TSTR("**>> yaffs chunk %d was not erased"
-                               TENDSTR), chunk));
-                               /* try another chunk */
-@@ -992,7 +994,11 @@ static int yaffs_WriteNewChunkWithTagsTo
-               /* Copy the data into the robustification buffer */
-               yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
--      } while (writeOk != YAFFS_OK && attempts < yaffs_wr_attempts);
-+      } while (writeOk != YAFFS_OK &&
-+              (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
-+
-+      if (!writeOk)
-+              chunk = -1;
-       if (attempts > 1) {
-               T(YAFFS_TRACE_ERROR,
-@@ -1009,13 +1015,35 @@ static int yaffs_WriteNewChunkWithTagsTo
-  * Block retiring for handling a broken block.
-  */
--static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
-+static void yaffs_RetireBlock(yaffs_Device *dev, int blockInNAND)
- {
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
-       yaffs_InvalidateCheckpoint(dev);
--      yaffs_MarkBlockBad(dev, blockInNAND);
-+      if (yaffs_MarkBlockBad(dev, blockInNAND) != YAFFS_OK) {
-+              if (yaffs_EraseBlockInNAND(dev, blockInNAND) != YAFFS_OK) {
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR(
-+                              "yaffs: Failed to mark bad and erase block %d"
-+                              TENDSTR), blockInNAND));
-+              } else {
-+                      yaffs_ExtendedTags tags;
-+                      int chunkId = blockInNAND * dev->nChunksPerBlock;
-+
-+                      __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-+
-+                      memset(buffer, 0xff, dev->nDataBytesPerChunk);
-+                      yaffs_InitialiseTags(&tags);
-+                      tags.sequenceNumber = YAFFS_SEQUENCE_BAD_BLOCK;
-+                      if (dev->writeChunkWithTagsToNAND(dev, chunkId -
-+                              dev->chunkOffset, buffer, &tags) != YAFFS_OK)
-+                              T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Failed to "
-+                                      TCONT("write bad block marker to block %d")
-+                                      TENDSTR), blockInNAND));
-+
-+                      yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-+              }
-+      }
-       bi->blockState = YAFFS_BLOCK_STATE_DEAD;
-       bi->gcPrioritise = 0;
-@@ -1029,49 +1057,45 @@ static void yaffs_RetireBlock(yaffs_Devi
-  *
-  */
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_ExtendedTags * tags)
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags)
- {
- }
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_ExtendedTags * tags)
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                              const yaffs_ExtendedTags *tags)
- {
- }
- void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
- {
--      if(!bi->gcPrioritise){
-+      if (!bi->gcPrioritise) {
-               bi->gcPrioritise = 1;
-               dev->hasPendingPrioritisedGCs = 1;
--              bi->chunkErrorStrikes ++;
-+              bi->chunkErrorStrikes++;
--              if(bi->chunkErrorStrikes > 3){
-+              if (bi->chunkErrorStrikes > 3) {
-                       bi->needsRetiring = 1; /* Too many stikes, so retire this */
-                       T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
-               }
--
-       }
- }
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND,
-+              int erasedOk)
- {
--
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
--      yaffs_HandleChunkError(dev,bi);
-+      yaffs_HandleChunkError(dev, bi);
--
--      if(erasedOk ) {
-+      if (erasedOk) {
-               /* Was an actual write failure, so mark the block for retirement  */
-               bi->needsRetiring = 1;
-               T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
-                 (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
--
--
-       }
-       /* Delete the chunk */
-@@ -1081,12 +1105,12 @@ static void yaffs_HandleWriteChunkError(
- /*---------------- Name handling functions ------------*/
--static __u16 yaffs_CalcNameSum(const YCHAR * name)
-+static __u16 yaffs_CalcNameSum(const YCHAR *name)
- {
-       __u16 sum = 0;
-       __u16 i = 1;
--      YUCHAR *bname = (YUCHAR *) name;
-+      const YUCHAR *bname = (const YUCHAR *) name;
-       if (bname) {
-               while ((*bname) && (i < (YAFFS_MAX_NAME_LENGTH/2))) {
-@@ -1102,14 +1126,14 @@ static __u16 yaffs_CalcNameSum(const YCH
-       return sum;
- }
--static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
-+static void yaffs_SetObjectName(yaffs_Object *obj, const YCHAR *name)
- {
- #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
--      if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
-+      memset(obj->shortName, 0, sizeof(YCHAR) * (YAFFS_SHORT_NAME_LENGTH+1));
-+      if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH)
-               yaffs_strcpy(obj->shortName, name);
--      } else {
-+      else
-               obj->shortName[0] = _Y('\0');
--      }
- #endif
-       obj->sum = yaffs_CalcNameSum(name);
- }
-@@ -1126,7 +1150,7 @@ static void yaffs_SetObjectName(yaffs_Ob
-  * Don't use this function directly
-  */
--static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
-+static int yaffs_CreateTnodes(yaffs_Device *dev, int nTnodes)
- {
-       int i;
-       int tnodeSize;
-@@ -1143,6 +1167,9 @@ static int yaffs_CreateTnodes(yaffs_Devi
-        * Must be a multiple of 32-bits  */
-       tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-       /* make these things */
-       newTnodes = YMALLOC(nTnodes * tnodeSize);
-@@ -1150,7 +1177,7 @@ static int yaffs_CreateTnodes(yaffs_Devi
-       if (!newTnodes) {
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
-+                      (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
-               return YAFFS_FAIL;
-       }
-@@ -1170,7 +1197,7 @@ static int yaffs_CreateTnodes(yaffs_Devi
-       dev->freeTnodes = newTnodes;
- #else
-       /* New hookup for wide tnodes */
--      for(i = 0; i < nTnodes -1; i++) {
-+      for (i = 0; i < nTnodes - 1; i++) {
-               curr = (yaffs_Tnode *) &mem[i * tnodeSize];
-               next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
-               curr->internal[0] = next;
-@@ -1197,7 +1224,6 @@ static int yaffs_CreateTnodes(yaffs_Devi
-                 (TSTR
-                  ("yaffs: Could not add tnodes to management list" TENDSTR)));
-                  return YAFFS_FAIL;
--
-       } else {
-               tnl->tnodes = newTnodes;
-               tnl->next = dev->allocatedTnodeList;
-@@ -1211,14 +1237,13 @@ static int yaffs_CreateTnodes(yaffs_Devi
- /* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
--static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
-+static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device *dev)
- {
-       yaffs_Tnode *tn = NULL;
-       /* If there are none left make more */
--      if (!dev->freeTnodes) {
-+      if (!dev->freeTnodes)
-               yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
--      }
-       if (dev->freeTnodes) {
-               tn = dev->freeTnodes;
-@@ -1233,21 +1258,27 @@ static yaffs_Tnode *yaffs_GetTnodeRaw(ya
-               dev->nFreeTnodes--;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
-+
-       return tn;
- }
--static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
-+static yaffs_Tnode *yaffs_GetTnode(yaffs_Device *dev)
- {
-       yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
--      if(tn)
--              memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-+      if (tn)
-+              memset(tn, 0, tnodeSize);
-       return tn;
- }
- /* FreeTnode frees up a tnode and puts it back on the free list */
--static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
-+static void yaffs_FreeTnode(yaffs_Device *dev, yaffs_Tnode *tn)
- {
-       if (tn) {
- #ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
-@@ -1262,9 +1293,10 @@ static void yaffs_FreeTnode(yaffs_Device
-               dev->freeTnodes = tn;
-               dev->nFreeTnodes++;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
- }
--static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
-+static void yaffs_DeinitialiseTnodes(yaffs_Device *dev)
- {
-       /* Free the list of allocated tnodes */
-       yaffs_TnodeList *tmp;
-@@ -1282,71 +1314,72 @@ static void yaffs_DeinitialiseTnodes(yaf
-       dev->nFreeTnodes = 0;
- }
--static void yaffs_InitialiseTnodes(yaffs_Device * dev)
-+static void yaffs_InitialiseTnodes(yaffs_Device *dev)
- {
-       dev->allocatedTnodeList = NULL;
-       dev->freeTnodes = NULL;
-       dev->nFreeTnodes = 0;
-       dev->nTnodesCreated = 0;
--
- }
--void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
-+void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos,
-+              unsigned val)
- {
--  __u32 *map = (__u32 *)tn;
--  __u32 bitInMap;
--  __u32 bitInWord;
--  __u32 wordInMap;
--  __u32 mask;
-+      __u32 *map = (__u32 *)tn;
-+      __u32 bitInMap;
-+      __u32 bitInWord;
-+      __u32 wordInMap;
-+      __u32 mask;
--  pos &= YAFFS_TNODES_LEVEL0_MASK;
--  val >>= dev->chunkGroupBits;
-+      pos &= YAFFS_TNODES_LEVEL0_MASK;
-+      val >>= dev->chunkGroupBits;
--  bitInMap = pos * dev->tnodeWidth;
--  wordInMap = bitInMap /32;
--  bitInWord = bitInMap & (32 -1);
-+      bitInMap = pos * dev->tnodeWidth;
-+      wordInMap = bitInMap / 32;
-+      bitInWord = bitInMap & (32 - 1);
--  mask = dev->tnodeMask << bitInWord;
-+      mask = dev->tnodeMask << bitInWord;
--  map[wordInMap] &= ~mask;
--  map[wordInMap] |= (mask & (val << bitInWord));
-+      map[wordInMap] &= ~mask;
-+      map[wordInMap] |= (mask & (val << bitInWord));
--  if(dev->tnodeWidth > (32-bitInWord)) {
--    bitInWord = (32 - bitInWord);
--    wordInMap++;;
--    mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
--    map[wordInMap] &= ~mask;
--    map[wordInMap] |= (mask & (val >> bitInWord));
--  }
-+      if (dev->tnodeWidth > (32 - bitInWord)) {
-+              bitInWord = (32 - bitInWord);
-+              wordInMap++;;
-+              mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
-+              map[wordInMap] &= ~mask;
-+              map[wordInMap] |= (mask & (val >> bitInWord));
-+      }
- }
--static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
-+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn,
-+              unsigned pos)
- {
--  __u32 *map = (__u32 *)tn;
--  __u32 bitInMap;
--  __u32 bitInWord;
--  __u32 wordInMap;
--  __u32 val;
-+      __u32 *map = (__u32 *)tn;
-+      __u32 bitInMap;
-+      __u32 bitInWord;
-+      __u32 wordInMap;
-+      __u32 val;
--  pos &= YAFFS_TNODES_LEVEL0_MASK;
-+      pos &= YAFFS_TNODES_LEVEL0_MASK;
--  bitInMap = pos * dev->tnodeWidth;
--  wordInMap = bitInMap /32;
--  bitInWord = bitInMap & (32 -1);
-+      bitInMap = pos * dev->tnodeWidth;
-+      wordInMap = bitInMap / 32;
-+      bitInWord = bitInMap & (32 - 1);
--  val = map[wordInMap] >> bitInWord;
-+      val = map[wordInMap] >> bitInWord;
--  if(dev->tnodeWidth > (32-bitInWord)) {
--    bitInWord = (32 - bitInWord);
--    wordInMap++;;
--    val |= (map[wordInMap] << bitInWord);
--  }
-+      if      (dev->tnodeWidth > (32 - bitInWord)) {
-+              bitInWord = (32 - bitInWord);
-+              wordInMap++;;
-+              val |= (map[wordInMap] << bitInWord);
-+      }
--  val &= dev->tnodeMask;
--  val <<= dev->chunkGroupBits;
-+      val &= dev->tnodeMask;
-+      val <<= dev->chunkGroupBits;
--  return val;
-+      return val;
- }
- /* ------------------- End of individual tnode manipulation -----------------*/
-@@ -1357,24 +1390,21 @@ static __u32 yaffs_GetChunkGroupBase(yaf
-  */
- /* FindLevel0Tnode finds the level 0 tnode, if one exists. */
--static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
--                                        yaffs_FileStructure * fStruct,
--                                        __u32 chunkId)
-+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId)
- {
--
-       yaffs_Tnode *tn = fStruct->top;
-       __u32 i;
-       int requiredTallness;
-       int level = fStruct->topLevel;
-       /* Check sane level and chunk Id */
--      if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
-+      if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL)
-               return NULL;
--      }
--      if (chunkId > YAFFS_MAX_CHUNK_ID) {
-+      if (chunkId > YAFFS_MAX_CHUNK_ID)
-               return NULL;
--      }
-       /* First check we're tall enough (ie enough topLevel) */
-@@ -1385,22 +1415,17 @@ static yaffs_Tnode *yaffs_FindLevel0Tnod
-               requiredTallness++;
-       }
--      if (requiredTallness > fStruct->topLevel) {
--              /* Not tall enough, so we can't find it, return NULL. */
--              return NULL;
--      }
-+      if (requiredTallness > fStruct->topLevel)
-+              return NULL; /* Not tall enough, so we can't find it */
-       /* Traverse down to level 0 */
-       while (level > 0 && tn) {
--              tn = tn->
--                  internal[(chunkId >>
--                             ( YAFFS_TNODES_LEVEL0_BITS +
--                               (level - 1) *
--                               YAFFS_TNODES_INTERNAL_BITS)
--                            ) &
--                           YAFFS_TNODES_INTERNAL_MASK];
-+              tn = tn->internal[(chunkId >>
-+                      (YAFFS_TNODES_LEVEL0_BITS +
-+                              (level - 1) *
-+                              YAFFS_TNODES_INTERNAL_BITS)) &
-+                      YAFFS_TNODES_INTERNAL_MASK];
-               level--;
--
-       }
-       return tn;
-@@ -1417,12 +1442,11 @@ static yaffs_Tnode *yaffs_FindLevel0Tnod
-  *  be plugged into the ttree.
-  */
--static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
--                                             yaffs_FileStructure * fStruct,
--                                             __u32 chunkId,
--                                             yaffs_Tnode *passedTn)
-+static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId,
-+                                      yaffs_Tnode *passedTn)
- {
--
-       int requiredTallness;
-       int i;
-       int l;
-@@ -1432,13 +1456,11 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       /* Check sane level and page Id */
--      if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
-+      if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL)
-               return NULL;
--      }
--      if (chunkId > YAFFS_MAX_CHUNK_ID) {
-+      if (chunkId > YAFFS_MAX_CHUNK_ID)
-               return NULL;
--      }
-       /* First check we're tall enough (ie enough topLevel) */
-@@ -1451,7 +1473,7 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       if (requiredTallness > fStruct->topLevel) {
--              /* Not tall enough,gotta make the tree taller */
-+              /* Not tall enough, gotta make the tree taller */
-               for (i = fStruct->topLevel; i < requiredTallness; i++) {
-                       tn = yaffs_GetTnode(dev);
-@@ -1473,27 +1495,27 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       l = fStruct->topLevel;
-       tn = fStruct->top;
--      if(l > 0) {
-+      if (l > 0) {
-               while (l > 0 && tn) {
-                       x = (chunkId >>
--                           ( YAFFS_TNODES_LEVEL0_BITS +
-+                           (YAFFS_TNODES_LEVEL0_BITS +
-                             (l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
-                           YAFFS_TNODES_INTERNAL_MASK;
--                      if((l>1) && !tn->internal[x]){
-+                      if ((l > 1) && !tn->internal[x]) {
-                               /* Add missing non-level-zero tnode */
-                               tn->internal[x] = yaffs_GetTnode(dev);
--                      } else if(l == 1) {
-+                      } else if (l == 1) {
-                               /* Looking from level 1 at level 0 */
--                              if (passedTn) {
-+                              if (passedTn) {
-                                       /* If we already have one, then release it.*/
--                                      if(tn->internal[x])
--                                              yaffs_FreeTnode(dev,tn->internal[x]);
-+                                      if (tn->internal[x])
-+                                              yaffs_FreeTnode(dev, tn->internal[x]);
-                                       tn->internal[x] = passedTn;
--                              } else if(!tn->internal[x]) {
-+                              } else if (!tn->internal[x]) {
-                                       /* Don't have one, none passed in */
-                                       tn->internal[x] = yaffs_GetTnode(dev);
-                               }
-@@ -1504,31 +1526,29 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-               }
-       } else {
-               /* top is level 0 */
--              if(passedTn) {
--                      memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
--                      yaffs_FreeTnode(dev,passedTn);
-+              if (passedTn) {
-+                      memcpy(tn, passedTn, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+                      yaffs_FreeTnode(dev, passedTn);
-               }
-       }
-       return tn;
- }
--static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
--                                yaffs_ExtendedTags * tags, int objectId,
--                                int chunkInInode)
-+static int yaffs_FindChunkInGroup(yaffs_Device *dev, int theChunk,
-+                              yaffs_ExtendedTags *tags, int objectId,
-+                              int chunkInInode)
- {
-       int j;
-       for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
--              if (yaffs_CheckChunkBit
--                  (dev, theChunk / dev->nChunksPerBlock,
--                   theChunk % dev->nChunksPerBlock)) {
-+              if (yaffs_CheckChunkBit(dev, theChunk / dev->nChunksPerBlock,
-+                              theChunk % dev->nChunksPerBlock)) {
-                       yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
-                                                       tags);
-                       if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
-                               /* found it; */
-                               return theChunk;
--
-                       }
-               }
-               theChunk++;
-@@ -1543,7 +1563,7 @@ static int yaffs_FindChunkInGroup(yaffs_
-  * Returns 0 if it stopped early due to hitting the limit and the delete is incomplete.
-  */
--static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
-+static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level,
-                             int chunkOffset, int *limit)
- {
-       int i;
-@@ -1557,7 +1577,6 @@ static int yaffs_DeleteWorker(yaffs_Obje
-       if (tn) {
-               if (level > 0) {
--
-                       for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
-                            i--) {
-                               if (tn->internal[i]) {
-@@ -1565,17 +1584,17 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               allDone = 0;
-                                       } else {
-                                               allDone =
--                                                  yaffs_DeleteWorker(in,
--                                                                     tn->
--                                                                     internal
--                                                                     [i],
--                                                                     level -
--                                                                     1,
--                                                                     (chunkOffset
-+                                                      yaffs_DeleteWorker(in,
-+                                                              tn->
-+                                                              internal
-+                                                              [i],
-+                                                              level -
-+                                                              1,
-+                                                              (chunkOffset
-                                                                       <<
-                                                                       YAFFS_TNODES_INTERNAL_BITS)
--                                                                     + i,
--                                                                     limit);
-+                                                              + i,
-+                                                              limit);
-                                       }
-                                       if (allDone) {
-                                               yaffs_FreeTnode(dev,
-@@ -1584,27 +1603,25 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               tn->internal[i] = NULL;
-                                       }
-                               }
--
-                       }
-                       return (allDone) ? 1 : 0;
-               } else if (level == 0) {
-                       int hitLimit = 0;
-                       for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0 && !hitLimit;
--                           i--) {
--                              theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                                      i--) {
-+                              theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-                               if (theChunk) {
--                                      chunkInInode =
--                                          (chunkOffset <<
--                                           YAFFS_TNODES_LEVEL0_BITS) + i;
-+                                      chunkInInode = (chunkOffset <<
-+                                              YAFFS_TNODES_LEVEL0_BITS) + i;
-                                       foundChunk =
--                                          yaffs_FindChunkInGroup(dev,
--                                                                 theChunk,
--                                                                 &tags,
--                                                                 in->objectId,
--                                                                 chunkInInode);
-+                                              yaffs_FindChunkInGroup(dev,
-+                                                              theChunk,
-+                                                              &tags,
-+                                                              in->objectId,
-+                                                              chunkInInode);
-                                       if (foundChunk > 0) {
-                                               yaffs_DeleteChunk(dev,
-@@ -1613,14 +1630,13 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               in->nDataChunks--;
-                                               if (limit) {
-                                                       *limit = *limit - 1;
--                                                      if (*limit <= 0) {
-+                                                      if (*limit <= 0)
-                                                               hitLimit = 1;
--                                                      }
-                                               }
-                                       }
--                                      yaffs_PutLevel0Tnode(dev,tn,i,0);
-+                                      yaffs_PutLevel0Tnode(dev, tn, i, 0);
-                               }
-                       }
-@@ -1634,9 +1650,8 @@ static int yaffs_DeleteWorker(yaffs_Obje
- }
--static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
-+static void yaffs_SoftDeleteChunk(yaffs_Device *dev, int chunk)
- {
--
-       yaffs_BlockInfo *theBlock;
-       T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
-@@ -1654,7 +1669,7 @@ static void yaffs_SoftDeleteChunk(yaffs_
-  * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
-  */
--static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
-+static int yaffs_SoftDeleteWorker(yaffs_Object *in, yaffs_Tnode *tn,
-                                 __u32 level, int chunkOffset)
- {
-       int i;
-@@ -1691,14 +1706,14 @@ static int yaffs_SoftDeleteWorker(yaffs_
-               } else if (level == 0) {
-                       for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
--                              theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                              theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-                               if (theChunk) {
-                                       /* Note this does not find the real chunk, only the chunk group.
-                                        * We make an assumption that a chunk group is not larger than
-                                        * a block.
-                                        */
-                                       yaffs_SoftDeleteChunk(dev, theChunk);
--                                      yaffs_PutLevel0Tnode(dev,tn,i,0);
-+                                      yaffs_PutLevel0Tnode(dev, tn, i, 0);
-                               }
-                       }
-@@ -1712,7 +1727,7 @@ static int yaffs_SoftDeleteWorker(yaffs_
- }
--static void yaffs_SoftDeleteFile(yaffs_Object * obj)
-+static void yaffs_SoftDeleteFile(yaffs_Object *obj)
- {
-       if (obj->deleted &&
-           obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
-@@ -1746,8 +1761,8 @@ static void yaffs_SoftDeleteFile(yaffs_O
-  * by a special case.
-  */
--static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
--                                    __u32 level, int del0)
-+static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device *dev, yaffs_Tnode *tn,
-+                              __u32 level, int del0)
- {
-       int i;
-       int hasData;
-@@ -1763,9 +1778,8 @@ static yaffs_Tnode *yaffs_PruneWorker(ya
-                                                     (i == 0) ? del0 : 1);
-                       }
--                      if (tn->internal[i]) {
-+                      if (tn->internal[i])
-                               hasData++;
--                      }
-               }
-               if (hasData == 0 && del0) {
-@@ -1781,8 +1795,8 @@ static yaffs_Tnode *yaffs_PruneWorker(ya
- }
--static int yaffs_PruneFileStructure(yaffs_Device * dev,
--                                  yaffs_FileStructure * fStruct)
-+static int yaffs_PruneFileStructure(yaffs_Device *dev,
-+                              yaffs_FileStructure *fStruct)
- {
-       int i;
-       int hasData;
-@@ -1805,9 +1819,8 @@ static int yaffs_PruneFileStructure(yaff
-                       hasData = 0;
-                       for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
--                              if (tn->internal[i]) {
-+                              if (tn->internal[i])
-                                       hasData++;
--                              }
-                       }
-                       if (!hasData) {
-@@ -1828,7 +1841,7 @@ static int yaffs_PruneFileStructure(yaff
- /* yaffs_CreateFreeObjects creates a bunch more objects and
-  * adds them to the object free list.
-  */
--static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
-+static int yaffs_CreateFreeObjects(yaffs_Device *dev, int nObjects)
- {
-       int i;
-       yaffs_Object *newObjects;
-@@ -1842,9 +1855,9 @@ static int yaffs_CreateFreeObjects(yaffs
-       list = YMALLOC(sizeof(yaffs_ObjectList));
-       if (!newObjects || !list) {
--              if(newObjects)
-+              if (newObjects)
-                       YFREE(newObjects);
--              if(list)
-+              if (list)
-                       YFREE(list);
-               T(YAFFS_TRACE_ALLOCATE,
-                 (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
-@@ -1854,7 +1867,7 @@ static int yaffs_CreateFreeObjects(yaffs
-       /* Hook them into the free list */
-       for (i = 0; i < nObjects - 1; i++) {
-               newObjects[i].siblings.next =
--                  (struct list_head *)(&newObjects[i + 1]);
-+                              (struct ylist_head *)(&newObjects[i + 1]);
-       }
-       newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
-@@ -1873,85 +1886,109 @@ static int yaffs_CreateFreeObjects(yaffs
- /* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
--static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
-+static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device *dev)
- {
-       yaffs_Object *tn = NULL;
-+#ifdef VALGRIND_TEST
-+      tn = YMALLOC(sizeof(yaffs_Object));
-+#else
-       /* If there are none left make more */
--      if (!dev->freeObjects) {
-+      if (!dev->freeObjects)
-               yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
--      }
-       if (dev->freeObjects) {
-               tn = dev->freeObjects;
-               dev->freeObjects =
--                  (yaffs_Object *) (dev->freeObjects->siblings.next);
-+                      (yaffs_Object *) (dev->freeObjects->siblings.next);
-               dev->nFreeObjects--;
--
-+      }
-+#endif
-+      if (tn) {
-               /* Now sweeten it up... */
-               memset(tn, 0, sizeof(yaffs_Object));
-+              tn->beingCreated = 1;
-+
-               tn->myDev = dev;
--              tn->chunkId = -1;
-+              tn->hdrChunk = 0;
-               tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
--              INIT_LIST_HEAD(&(tn->hardLinks));
--              INIT_LIST_HEAD(&(tn->hashLink));
--              INIT_LIST_HEAD(&tn->siblings);
-+              YINIT_LIST_HEAD(&(tn->hardLinks));
-+              YINIT_LIST_HEAD(&(tn->hashLink));
-+              YINIT_LIST_HEAD(&tn->siblings);
-+
-+
-+              /* Now make the directory sane */
-+              if (dev->rootDir) {
-+                      tn->parent = dev->rootDir;
-+                      ylist_add(&(tn->siblings), &dev->rootDir->variant.directoryVariant.children);
-+              }
-               /* Add it to the lost and found directory.
-                * NB Can't put root or lostNFound in lostNFound so
-                * check if lostNFound exists first
-                */
--              if (dev->lostNFoundDir) {
-+              if (dev->lostNFoundDir)
-                       yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
--              }
-+
-+              tn->beingCreated = 0;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
-+
-       return tn;
- }
--static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
-+static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device *dev, int number,
-                                              __u32 mode)
- {
-       yaffs_Object *obj =
-           yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
-       if (obj) {
--              obj->fake = 1;          /* it is fake so it has no NAND presence... */
-+              obj->fake = 1;          /* it is fake so it might have no NAND presence... */
-               obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
-               obj->unlinkAllowed = 0; /* ... or unlink it */
-               obj->deleted = 0;
-               obj->unlinked = 0;
-               obj->yst_mode = mode;
-               obj->myDev = dev;
--              obj->chunkId = 0;       /* Not a valid chunk. */
-+              obj->hdrChunk = 0;      /* Not a valid chunk. */
-       }
-       return obj;
- }
--static void yaffs_UnhashObject(yaffs_Object * tn)
-+static void yaffs_UnhashObject(yaffs_Object *tn)
- {
-       int bucket;
-       yaffs_Device *dev = tn->myDev;
-       /* If it is still linked into the bucket list, free from the list */
--      if (!list_empty(&tn->hashLink)) {
--              list_del_init(&tn->hashLink);
-+      if (!ylist_empty(&tn->hashLink)) {
-+              ylist_del_init(&tn->hashLink);
-               bucket = yaffs_HashFunction(tn->objectId);
-               dev->objectBucket[bucket].count--;
-       }
--
- }
- /*  FreeObject frees up a Object and puts it back on the free list */
--static void yaffs_FreeObject(yaffs_Object * tn)
-+static void yaffs_FreeObject(yaffs_Object *tn)
- {
--
-       yaffs_Device *dev = tn->myDev;
--#ifdef  __KERNEL__
-+#ifdef __KERNEL__
-+      T(YAFFS_TRACE_OS, (TSTR("FreeObject %p inode %p"TENDSTR), tn, tn->myInode));
-+#endif
-+
-+      if (tn->parent)
-+              YBUG();
-+      if (!ylist_empty(&tn->siblings))
-+              YBUG();
-+
-+
-+#ifdef __KERNEL__
-       if (tn->myInode) {
-               /* We're still hooked up to a cached inode.
-                * Don't delete now, but mark for later deletion
-@@ -1963,24 +2000,28 @@ static void yaffs_FreeObject(yaffs_Objec
-       yaffs_UnhashObject(tn);
-+#ifdef VALGRIND_TEST
-+      YFREE(tn);
-+#else
-       /* Link into the free list. */
--      tn->siblings.next = (struct list_head *)(dev->freeObjects);
-+      tn->siblings.next = (struct ylist_head *)(dev->freeObjects);
-       dev->freeObjects = tn;
-       dev->nFreeObjects++;
-+#endif
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
- }
- #ifdef __KERNEL__
--void yaffs_HandleDeferedFree(yaffs_Object * obj)
-+void yaffs_HandleDeferedFree(yaffs_Object *obj)
- {
--      if (obj->deferedFree) {
-+      if (obj->deferedFree)
-               yaffs_FreeObject(obj);
--      }
- }
- #endif
--static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
-+static void yaffs_DeinitialiseObjects(yaffs_Device *dev)
- {
-       /* Free the list of allocated Objects */
-@@ -1998,7 +2039,7 @@ static void yaffs_DeinitialiseObjects(ya
-       dev->nFreeObjects = 0;
- }
--static void yaffs_InitialiseObjects(yaffs_Device * dev)
-+static void yaffs_InitialiseObjects(yaffs_Device *dev)
- {
-       int i;
-@@ -2007,15 +2048,14 @@ static void yaffs_InitialiseObjects(yaff
-       dev->nFreeObjects = 0;
-       for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
--              INIT_LIST_HEAD(&dev->objectBucket[i].list);
-+              YINIT_LIST_HEAD(&dev->objectBucket[i].list);
-               dev->objectBucket[i].count = 0;
-       }
--
- }
--static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
-+static int yaffs_FindNiceObjectBucket(yaffs_Device *dev)
- {
--      static int x = 0;
-+      static int x;
-       int i;
-       int l = 999;
-       int lowest = 999999;
-@@ -2049,7 +2089,7 @@ static int yaffs_FindNiceObjectBucket(ya
-       return l;
- }
--static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
-+static int yaffs_CreateNewObjectNumber(yaffs_Device *dev)
- {
-       int bucket = yaffs_FindNiceObjectBucket(dev);
-@@ -2058,7 +2098,7 @@ static int yaffs_CreateNewObjectNumber(y
-        */
-       int found = 0;
--      struct list_head *i;
-+      struct ylist_head *i;
-       __u32 n = (__u32) bucket;
-@@ -2068,41 +2108,38 @@ static int yaffs_CreateNewObjectNumber(y
-               found = 1;
-               n += YAFFS_NOBJECT_BUCKETS;
-               if (1 || dev->objectBucket[bucket].count > 0) {
--                      list_for_each(i, &dev->objectBucket[bucket].list) {
-+                      ylist_for_each(i, &dev->objectBucket[bucket].list) {
-                               /* If there is already one in the list */
--                              if (i
--                                  && list_entry(i, yaffs_Object,
--                                                hashLink)->objectId == n) {
-+                              if (i && ylist_entry(i, yaffs_Object,
-+                                              hashLink)->objectId == n) {
-                                       found = 0;
-                               }
-                       }
-               }
-       }
--
-       return n;
- }
--static void yaffs_HashObject(yaffs_Object * in)
-+static void yaffs_HashObject(yaffs_Object *in)
- {
-       int bucket = yaffs_HashFunction(in->objectId);
-       yaffs_Device *dev = in->myDev;
--      list_add(&in->hashLink, &dev->objectBucket[bucket].list);
-+      ylist_add(&in->hashLink, &dev->objectBucket[bucket].list);
-       dev->objectBucket[bucket].count++;
--
- }
--yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
-+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev, __u32 number)
- {
-       int bucket = yaffs_HashFunction(number);
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *in;
--      list_for_each(i, &dev->objectBucket[bucket].list) {
-+      ylist_for_each(i, &dev->objectBucket[bucket].list) {
-               /* Look if it is in the list */
-               if (i) {
--                      in = list_entry(i, yaffs_Object, hashLink);
-+                      in = ylist_entry(i, yaffs_Object, hashLink);
-                       if (in->objectId == number) {
- #ifdef __KERNEL__
-                               /* Don't tell the VFS about this one if it is defered free */
-@@ -2118,31 +2155,27 @@ yaffs_Object *yaffs_FindObjectByNumber(y
-       return NULL;
- }
--yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
-+yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
-                                   yaffs_ObjectType type)
- {
--
-       yaffs_Object *theObject;
--      yaffs_Tnode *tn;
-+      yaffs_Tnode *tn = NULL;
--      if (number < 0) {
-+      if (number < 0)
-               number = yaffs_CreateNewObjectNumber(dev);
--      }
-       theObject = yaffs_AllocateEmptyObject(dev);
--      if(!theObject)
-+      if (!theObject)
-               return NULL;
--      if(type == YAFFS_OBJECT_TYPE_FILE){
-+      if (type == YAFFS_OBJECT_TYPE_FILE) {
-               tn = yaffs_GetTnode(dev);
--              if(!tn){
-+              if (!tn) {
-                       yaffs_FreeObject(theObject);
-                       return NULL;
-               }
-       }
--
--
-       if (theObject) {
-               theObject->fake = 0;
-               theObject->renameAllowed = 1;
-@@ -2171,8 +2204,8 @@ yaffs_Object *yaffs_CreateNewObject(yaff
-                       theObject->variant.fileVariant.top = tn;
-                       break;
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
--                      INIT_LIST_HEAD(&theObject->variant.directoryVariant.
--                                     children);
-+                      YINIT_LIST_HEAD(&theObject->variant.directoryVariant.
-+                                      children);
-                       break;
-               case YAFFS_OBJECT_TYPE_SYMLINK:
-               case YAFFS_OBJECT_TYPE_HARDLINK:
-@@ -2188,32 +2221,30 @@ yaffs_Object *yaffs_CreateNewObject(yaff
-       return theObject;
- }
--static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
-+static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device *dev,
-                                                     int number,
-                                                     yaffs_ObjectType type)
- {
-       yaffs_Object *theObject = NULL;
--      if (number > 0) {
-+      if (number > 0)
-               theObject = yaffs_FindObjectByNumber(dev, number);
--      }
--      if (!theObject) {
-+      if (!theObject)
-               theObject = yaffs_CreateNewObject(dev, number, type);
--      }
-       return theObject;
- }
--static YCHAR *yaffs_CloneString(const YCHAR * str)
-+static YCHAR *yaffs_CloneString(const YCHAR *str)
- {
-       YCHAR *newStr = NULL;
-       if (str && *str) {
-               newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
--              if(newStr)
-+              if (newStr)
-                       yaffs_strcpy(newStr, str);
-       }
-@@ -2229,29 +2260,31 @@ static YCHAR *yaffs_CloneString(const YC
-  */
- static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
--                                     yaffs_Object * parent,
--                                     const YCHAR * name,
-+                                     yaffs_Object *parent,
-+                                     const YCHAR *name,
-                                      __u32 mode,
-                                      __u32 uid,
-                                      __u32 gid,
--                                     yaffs_Object * equivalentObject,
--                                     const YCHAR * aliasString, __u32 rdev)
-+                                     yaffs_Object *equivalentObject,
-+                                     const YCHAR *aliasString, __u32 rdev)
- {
-       yaffs_Object *in;
--      YCHAR *str;
-+      YCHAR *str = NULL;
-       yaffs_Device *dev = parent->myDev;
-       /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
--      if (yaffs_FindObjectByName(parent, name)) {
-+      if (yaffs_FindObjectByName(parent, name))
-               return NULL;
--      }
-       in = yaffs_CreateNewObject(dev, -1, type);
--      if(type == YAFFS_OBJECT_TYPE_SYMLINK){
-+      if (!in)
-+              return YAFFS_FAIL;
-+
-+      if (type == YAFFS_OBJECT_TYPE_SYMLINK) {
-               str = yaffs_CloneString(aliasString);
--              if(!str){
-+              if (!str) {
-                       yaffs_FreeObject(in);
-                       return NULL;
-               }
-@@ -2260,7 +2293,7 @@ static yaffs_Object *yaffs_MknodObject(y
-       if (in) {
--              in->chunkId = -1;
-+              in->hdrChunk = 0;
-               in->valid = 1;
-               in->variantType = type;
-@@ -2293,10 +2326,10 @@ static yaffs_Object *yaffs_MknodObject(y
-                       break;
-               case YAFFS_OBJECT_TYPE_HARDLINK:
-                       in->variant.hardLinkVariant.equivalentObject =
--                          equivalentObject;
-+                              equivalentObject;
-                       in->variant.hardLinkVariant.equivalentObjectId =
--                          equivalentObject->objectId;
--                      list_add(&in->hardLinks, &equivalentObject->hardLinks);
-+                              equivalentObject->objectId;
-+                      ylist_add(&in->hardLinks, &equivalentObject->hardLinks);
-                       break;
-               case YAFFS_OBJECT_TYPE_FILE:
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -2308,7 +2341,7 @@ static yaffs_Object *yaffs_MknodObject(y
-               if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
-                       /* Could not create the object header, fail the creation */
--                      yaffs_DestroyObject(in);
-+                      yaffs_DeleteObject(in);
-                       in = NULL;
-               }
-@@ -2317,38 +2350,38 @@ static yaffs_Object *yaffs_MknodObject(y
-       return in;
- }
--yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
--                            __u32 mode, __u32 uid, __u32 gid)
-+yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name,
-+                      __u32 mode, __u32 uid, __u32 gid)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
--                               uid, gid, NULL, NULL, 0);
-+                              uid, gid, NULL, NULL, 0);
- }
--yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
--                                 __u32 mode, __u32 uid, __u32 gid)
-+yaffs_Object *yaffs_MknodDirectory(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
-                                mode, uid, gid, NULL, NULL, 0);
- }
--yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
--                               __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
-+yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
-                                uid, gid, NULL, NULL, rdev);
- }
--yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
--                               __u32 mode, __u32 uid, __u32 gid,
--                               const YCHAR * alias)
-+yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid,
-+                              const YCHAR *alias)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
--                               uid, gid, NULL, alias, 0);
-+                              uid, gid, NULL, alias, 0);
- }
- /* yaffs_Link returns the object id of the equivalent object.*/
--yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
--                       yaffs_Object * equivalentObject)
-+yaffs_Object *yaffs_Link(yaffs_Object *parent, const YCHAR *name,
-+                      yaffs_Object *equivalentObject)
- {
-       /* Get the real object in case we were fed a hard link as an equivalent object */
-       equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
-@@ -2363,33 +2396,31 @@ yaffs_Object *yaffs_Link(yaffs_Object * 
- }
--static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
--                                const YCHAR * newName, int force, int shadows)
-+static int yaffs_ChangeObjectName(yaffs_Object *obj, yaffs_Object *newDir,
-+                              const YCHAR *newName, int force, int shadows)
- {
-       int unlinkOp;
-       int deleteOp;
-       yaffs_Object *existingTarget;
--      if (newDir == NULL) {
-+      if (newDir == NULL)
-               newDir = obj->parent;   /* use the old directory */
--      }
-       if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
--                 ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
-+                 ("tragedy: yaffs_ChangeObjectName: newDir is not a directory"
-                   TENDSTR)));
-               YBUG();
-       }
-       /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
--      if (obj->myDev->isYaffs2) {
-+      if (obj->myDev->isYaffs2)
-               unlinkOp = (newDir == obj->myDev->unlinkedDir);
--      } else {
-+      else
-               unlinkOp = (newDir == obj->myDev->unlinkedDir
-                           && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
--      }
-       deleteOp = (newDir == obj->myDev->deletedDir);
-@@ -2415,40 +2446,40 @@ static int yaffs_ChangeObjectName(yaffs_
-                       obj->unlinked = 1;
-               /* If it is a deletion then we mark it as a shrink for gc purposes. */
--              if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
-+              if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows) >= 0)
-                       return YAFFS_OK;
-       }
-       return YAFFS_FAIL;
- }
--int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
--                     yaffs_Object * newDir, const YCHAR * newName)
-+int yaffs_RenameObject(yaffs_Object *oldDir, const YCHAR *oldName,
-+              yaffs_Object *newDir, const YCHAR *newName)
- {
--      yaffs_Object *obj;
--      yaffs_Object *existingTarget;
-+      yaffs_Object *obj = NULL;
-+      yaffs_Object *existingTarget = NULL;
-       int force = 0;
-+
-+      if (!oldDir || oldDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-+              YBUG();
-+      if (!newDir || newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-+              YBUG();
-+
- #ifdef CONFIG_YAFFS_CASE_INSENSITIVE
-       /* Special case for case insemsitive systems (eg. WinCE).
-        * While look-up is case insensitive, the name isn't.
-        * Therefore we might want to change x.txt to X.txt
-       */
--      if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
-+      if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0)
-               force = 1;
--      }
- #endif
-+      else if (yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
-+              /* ENAMETOOLONG */
-+              return YAFFS_FAIL;
-+
-       obj = yaffs_FindObjectByName(oldDir, oldName);
--      /* Check new name to long. */
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
--          yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
--        /* ENAMETOOLONG */
--        return YAFFS_FAIL;
--      else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
--               yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
--        /* ENAMETOOLONG */
--        return YAFFS_FAIL;
-       if (obj && obj->renameAllowed) {
-@@ -2456,8 +2487,8 @@ int yaffs_RenameObject(yaffs_Object * ol
-               existingTarget = yaffs_FindObjectByName(newDir, newName);
-               if (existingTarget &&
--                  existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
--                  !list_empty(&existingTarget->variant.directoryVariant.children)) {
-+                      existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-+                      !ylist_empty(&existingTarget->variant.directoryVariant.children)) {
-                       /* There is a target that is a non-empty directory, so we fail */
-                       return YAFFS_FAIL;      /* EEXIST or ENOTEMPTY */
-               } else if (existingTarget && existingTarget != obj) {
-@@ -2465,7 +2496,7 @@ int yaffs_RenameObject(yaffs_Object * ol
-                        * but only if it isn't the same object
-                        */
-                       yaffs_ChangeObjectName(obj, newDir, newName, force,
--                                             existingTarget->objectId);
-+                                              existingTarget->objectId);
-                       yaffs_UnlinkObject(existingTarget);
-               }
-@@ -2476,7 +2507,7 @@ int yaffs_RenameObject(yaffs_Object * ol
- /*------------------------- Block Management and Page Allocation ----------------*/
--static int yaffs_InitialiseBlocks(yaffs_Device * dev)
-+static int yaffs_InitialiseBlocks(yaffs_Device *dev)
- {
-       int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-@@ -2487,23 +2518,20 @@ static int yaffs_InitialiseBlocks(yaffs_
-       /* If the first allocation strategy fails, thry the alternate one */
-       dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
--      if(!dev->blockInfo){
-+      if (!dev->blockInfo) {
-               dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
-               dev->blockInfoAlt = 1;
--      }
--      else
-+      } else
-               dev->blockInfoAlt = 0;
--      if(dev->blockInfo){
--
-+      if (dev->blockInfo) {
-               /* Set up dynamic blockinfo stuff. */
-               dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
-               dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
--              if(!dev->chunkBits){
-+              if (!dev->chunkBits) {
-                       dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
-                       dev->chunkBitsAlt = 1;
--              }
--              else
-+              } else
-                       dev->chunkBitsAlt = 0;
-       }
-@@ -2514,30 +2542,29 @@ static int yaffs_InitialiseBlocks(yaffs_
-       }
-       return YAFFS_FAIL;
--
- }
--static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
-+static void yaffs_DeinitialiseBlocks(yaffs_Device *dev)
- {
--      if(dev->blockInfoAlt && dev->blockInfo)
-+      if (dev->blockInfoAlt && dev->blockInfo)
-               YFREE_ALT(dev->blockInfo);
--      else if(dev->blockInfo)
-+      else if (dev->blockInfo)
-               YFREE(dev->blockInfo);
-       dev->blockInfoAlt = 0;
-       dev->blockInfo = NULL;
--      if(dev->chunkBitsAlt && dev->chunkBits)
-+      if (dev->chunkBitsAlt && dev->chunkBits)
-               YFREE_ALT(dev->chunkBits);
--      else if(dev->chunkBits)
-+      else if (dev->chunkBits)
-               YFREE(dev->chunkBits);
-       dev->chunkBitsAlt = 0;
-       dev->chunkBits = NULL;
- }
--static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
--                                          yaffs_BlockInfo * bi)
-+static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device *dev,
-+                                      yaffs_BlockInfo *bi)
- {
-       int i;
-       __u32 seq;
-@@ -2556,7 +2583,7 @@ static int yaffs_BlockNotDisqualifiedFro
-               seq = dev->sequenceNumber;
-               for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
--                   i++) {
-+                              i++) {
-                       b = yaffs_GetBlockInfo(dev, i);
-                       if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
-                           (b->pagesInUse - b->softDeletions) <
-@@ -2571,38 +2598,36 @@ static int yaffs_BlockNotDisqualifiedFro
-        * discarded pages.
-        */
-       return (bi->sequenceNumber <= dev->oldestDirtySequence);
--
- }
- /* FindDiretiestBlock is used to select the dirtiest block (or close enough)
-  * for garbage collection.
-  */
--static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
--                                             int aggressive)
-+static int yaffs_FindBlockForGarbageCollection(yaffs_Device *dev,
-+                                      int aggressive)
- {
--
-       int b = dev->currentDirtyChecker;
-       int i;
-       int iterations;
-       int dirtiest = -1;
-       int pagesInUse = 0;
--      int prioritised=0;
-+      int prioritised = 0;
-       yaffs_BlockInfo *bi;
-       int pendingPrioritisedExist = 0;
-       /* First let's see if we need to grab a prioritised block */
--      if(dev->hasPendingPrioritisedGCs){
--              for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
-+      if (dev->hasPendingPrioritisedGCs) {
-+              for (i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++) {
-                       bi = yaffs_GetBlockInfo(dev, i);
--                      //yaffs_VerifyBlock(dev,bi,i);
-+                      /* yaffs_VerifyBlock(dev,bi,i); */
--                      if(bi->gcPrioritise) {
-+                      if (bi->gcPrioritise) {
-                               pendingPrioritisedExist = 1;
--                              if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
--                                 yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
-+                              if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
-+                                 yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-                                       pagesInUse = (bi->pagesInUse - bi->softDeletions);
-                                       dirtiest = i;
-                                       prioritised = 1;
-@@ -2611,7 +2636,7 @@ static int yaffs_FindBlockForGarbageColl
-                       }
-               }
--              if(!pendingPrioritisedExist) /* None found, so we can clear this */
-+              if (!pendingPrioritisedExist) /* None found, so we can clear this */
-                       dev->hasPendingPrioritisedGCs = 0;
-       }
-@@ -2623,31 +2648,28 @@ static int yaffs_FindBlockForGarbageColl
-       dev->nonAggressiveSkip--;
--      if (!aggressive && (dev->nonAggressiveSkip > 0)) {
-+      if (!aggressive && (dev->nonAggressiveSkip > 0))
-               return -1;
--      }
--      if(!prioritised)
-+      if (!prioritised)
-               pagesInUse =
--                      (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
-+                      (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
--      if (aggressive) {
-+      if (aggressive)
-               iterations =
-                   dev->internalEndBlock - dev->internalStartBlock + 1;
--      } else {
-+      else {
-               iterations =
-                   dev->internalEndBlock - dev->internalStartBlock + 1;
-               iterations = iterations / 16;
--              if (iterations > 200) {
-+              if (iterations > 200)
-                       iterations = 200;
--              }
-       }
-       for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
-               b++;
--              if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
-+              if (b < dev->internalStartBlock || b > dev->internalEndBlock)
-                       b = dev->internalStartBlock;
--              }
-               if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
-                       T(YAFFS_TRACE_ERROR,
-@@ -2657,17 +2679,9 @@ static int yaffs_FindBlockForGarbageColl
-               bi = yaffs_GetBlockInfo(dev, b);
--#if 0
--              if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
--                      dirtiest = b;
--                      pagesInUse = 0;
--              }
--              else
--#endif
--
-               if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
--                     (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
--                      yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-+                      (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
-+                              yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-                       dirtiest = b;
-                       pagesInUse = (bi->pagesInUse - bi->softDeletions);
-               }
-@@ -2678,19 +2692,18 @@ static int yaffs_FindBlockForGarbageColl
-       if (dirtiest > 0) {
-               T(YAFFS_TRACE_GC,
-                 (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
--                 dev->nChunksPerBlock - pagesInUse,prioritised));
-+                 dev->nChunksPerBlock - pagesInUse, prioritised));
-       }
-       dev->oldestDirtySequence = 0;
--      if (dirtiest > 0) {
-+      if (dirtiest > 0)
-               dev->nonAggressiveSkip = 4;
--      }
-       return dirtiest;
- }
--static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
-+static void yaffs_BlockBecameDirty(yaffs_Device *dev, int blockNo)
- {
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
-@@ -2752,7 +2765,7 @@ static void yaffs_BlockBecameDirty(yaffs
-       }
- }
--static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
-+static int yaffs_FindBlockForAllocation(yaffs_Device *dev)
- {
-       int i;
-@@ -2763,7 +2776,7 @@ static int yaffs_FindBlockForAllocation(
-                * Can't get space to gc
-                */
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
-+                (TSTR("yaffs tragedy: no more erased blocks" TENDSTR)));
-               return -1;
-       }
-@@ -2794,31 +2807,74 @@ static int yaffs_FindBlockForAllocation(
-       T(YAFFS_TRACE_ALWAYS,
-         (TSTR
--         ("yaffs tragedy: no more eraased blocks, but there should have been %d"
-+         ("yaffs tragedy: no more erased blocks, but there should have been %d"
-           TENDSTR), dev->nErasedBlocks));
-       return -1;
- }
--// Check if there's space to allocate...
--// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
--static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
-+
-+static int yaffs_CalcCheckpointBlocksRequired(yaffs_Device *dev)
-+{
-+      if (!dev->nCheckpointBlocksRequired &&
-+         dev->isYaffs2) {
-+              /* Not a valid value so recalculate */
-+              int nBytes = 0;
-+              int nBlocks;
-+              int devBlocks = (dev->endBlock - dev->startBlock + 1);
-+              int tnodeSize;
-+
-+              tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+
-+              if (tnodeSize < sizeof(yaffs_Tnode))
-+                      tnodeSize = sizeof(yaffs_Tnode);
-+
-+              nBytes += sizeof(yaffs_CheckpointValidity);
-+              nBytes += sizeof(yaffs_CheckpointDevice);
-+              nBytes += devBlocks * sizeof(yaffs_BlockInfo);
-+              nBytes += devBlocks * dev->chunkBitmapStride;
-+              nBytes += (sizeof(yaffs_CheckpointObject) + sizeof(__u32)) * (dev->nObjectsCreated - dev->nFreeObjects);
-+              nBytes += (tnodeSize + sizeof(__u32)) * (dev->nTnodesCreated - dev->nFreeTnodes);
-+              nBytes += sizeof(yaffs_CheckpointValidity);
-+              nBytes += sizeof(__u32); /* checksum*/
-+
-+              /* Round up and add 2 blocks to allow for some bad blocks, so add 3 */
-+
-+              nBlocks = (nBytes/(dev->nDataBytesPerChunk * dev->nChunksPerBlock)) + 3;
-+
-+              dev->nCheckpointBlocksRequired = nBlocks;
-+      }
-+
-+      return dev->nCheckpointBlocksRequired;
-+}
-+
-+/*
-+ * Check if there's space to allocate...
-+ * Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
-+ */
-+static int yaffs_CheckSpaceForAllocation(yaffs_Device *dev)
- {
-       int reservedChunks;
-       int reservedBlocks = dev->nReservedBlocks;
-       int checkpointBlocks;
--      checkpointBlocks =  dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
--      if(checkpointBlocks < 0)
-+      if (dev->isYaffs2) {
-+              checkpointBlocks =  yaffs_CalcCheckpointBlocksRequired(dev) -
-+                                  dev->blocksInCheckpoint;
-+              if (checkpointBlocks < 0)
-+                      checkpointBlocks = 0;
-+      } else {
-               checkpointBlocks = 0;
-+      }
-       reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
-       return (dev->nFreeChunks > reservedChunks);
- }
--static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
-+static int yaffs_AllocateChunk(yaffs_Device *dev, int useReserve,
-+              yaffs_BlockInfo **blockUsedPtr)
- {
-       int retVal;
-       yaffs_BlockInfo *bi;
-@@ -2835,7 +2891,7 @@ static int yaffs_AllocateChunk(yaffs_Dev
-       }
-       if (dev->nErasedBlocks < dev->nReservedBlocks
--          && dev->allocationPage == 0) {
-+                      && dev->allocationPage == 0) {
-               T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
-       }
-@@ -2844,10 +2900,10 @@ static int yaffs_AllocateChunk(yaffs_Dev
-               bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
-               retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
--                  dev->allocationPage;
-+                      dev->allocationPage;
-               bi->pagesInUse++;
-               yaffs_SetChunkBit(dev, dev->allocationBlock,
--                                dev->allocationPage);
-+                              dev->allocationPage);
-               dev->allocationPage++;
-@@ -2859,43 +2915,43 @@ static int yaffs_AllocateChunk(yaffs_Dev
-                       dev->allocationBlock = -1;
-               }
--              if(blockUsedPtr)
-+              if (blockUsedPtr)
-                       *blockUsedPtr = bi;
-               return retVal;
-       }
-       T(YAFFS_TRACE_ERROR,
--        (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-+                      (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-       return -1;
- }
--static int yaffs_GetErasedChunks(yaffs_Device * dev)
-+static int yaffs_GetErasedChunks(yaffs_Device *dev)
- {
-       int n;
-       n = dev->nErasedBlocks * dev->nChunksPerBlock;
--      if (dev->allocationBlock > 0) {
-+      if (dev->allocationBlock > 0)
-               n += (dev->nChunksPerBlock - dev->allocationPage);
--      }
-       return n;
- }
--static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
-+static int yaffs_GarbageCollectBlock(yaffs_Device *dev, int block,
-+              int wholeBlock)
- {
-       int oldChunk;
-       int newChunk;
--      int chunkInBlock;
-       int markNAND;
-       int retVal = YAFFS_OK;
-       int cleanups = 0;
-       int i;
-       int isCheckpointBlock;
-       int matchingChunk;
-+      int maxCopies;
-       int chunksBefore = yaffs_GetErasedChunks(dev);
-       int chunksAfter;
-@@ -2911,8 +2967,11 @@ static int yaffs_GarbageCollectBlock(yaf
-       bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
-       T(YAFFS_TRACE_TRACING,
--        (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
--         bi->pagesInUse, bi->hasShrinkHeader));
-+                      (TSTR("Collecting block %d, in use %d, shrink %d, wholeBlock %d" TENDSTR),
-+                       block,
-+                       bi->pagesInUse,
-+                       bi->hasShrinkHeader,
-+                       wholeBlock));
-       /*yaffs_VerifyFreeChunks(dev); */
-@@ -2926,26 +2985,33 @@ static int yaffs_GarbageCollectBlock(yaf
-       dev->isDoingGC = 1;
-       if (isCheckpointBlock ||
--          !yaffs_StillSomeChunkBits(dev, block)) {
-+                      !yaffs_StillSomeChunkBits(dev, block)) {
-               T(YAFFS_TRACE_TRACING,
--                (TSTR
--                 ("Collecting block %d that has no chunks in use" TENDSTR),
--                 block));
-+                              (TSTR
-+                               ("Collecting block %d that has no chunks in use" TENDSTR),
-+                               block));
-               yaffs_BlockBecameDirty(dev, block);
-       } else {
-               __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
--              yaffs_VerifyBlock(dev,bi,block);
-+              yaffs_VerifyBlock(dev, bi, block);
--              for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
--                   chunkInBlock < dev->nChunksPerBlock
--                   && yaffs_StillSomeChunkBits(dev, block);
--                   chunkInBlock++, oldChunk++) {
--                      if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
-+              maxCopies = (wholeBlock) ? dev->nChunksPerBlock : 10;
-+              oldChunk = block * dev->nChunksPerBlock + dev->gcChunk;
-+
-+              for (/* init already done */;
-+                   retVal == YAFFS_OK &&
-+                   dev->gcChunk < dev->nChunksPerBlock &&
-+                   (bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) &&
-+                   maxCopies > 0;
-+                   dev->gcChunk++, oldChunk++) {
-+                      if (yaffs_CheckChunkBit(dev, block, dev->gcChunk)) {
-                               /* This page is in use and might need to be copied off */
-+                              maxCopies--;
-+
-                               markNAND = 1;
-                               yaffs_InitialiseTags(&tags);
-@@ -2959,22 +3025,22 @@ static int yaffs_GarbageCollectBlock(yaf
-                               T(YAFFS_TRACE_GC_DETAIL,
-                                 (TSTR
--                                 ("Collecting page %d, %d %d %d " TENDSTR),
--                                 chunkInBlock, tags.objectId, tags.chunkId,
-+                                 ("Collecting chunk in block %d, %d %d %d " TENDSTR),
-+                                 dev->gcChunk, tags.objectId, tags.chunkId,
-                                  tags.byteCount));
--                              if(object && !yaffs_SkipVerification(dev)){
--                                      if(tags.chunkId == 0)
--                                              matchingChunk = object->chunkId;
--                                      else if(object->softDeleted)
-+                              if (object && !yaffs_SkipVerification(dev)) {
-+                                      if (tags.chunkId == 0)
-+                                              matchingChunk = object->hdrChunk;
-+                                      else if (object->softDeleted)
-                                               matchingChunk = oldChunk; /* Defeat the test */
-                                       else
--                                              matchingChunk = yaffs_FindChunkInFile(object,tags.chunkId,NULL);
-+                                              matchingChunk = yaffs_FindChunkInFile(object, tags.chunkId, NULL);
--                                      if(oldChunk != matchingChunk)
-+                                      if (oldChunk != matchingChunk)
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR("gc: page in gc mismatch: %d %d %d %d"TENDSTR),
--                                                oldChunk,matchingChunk,tags.objectId, tags.chunkId));
-+                                                oldChunk, matchingChunk, tags.objectId, tags.chunkId));
-                               }
-@@ -2986,9 +3052,11 @@ static int yaffs_GarbageCollectBlock(yaf
-                                           tags.objectId, tags.chunkId, tags.byteCount));
-                               }
--                              if (object && object->deleted
--                                  && tags.chunkId != 0) {
--                                      /* Data chunk in a deleted file, throw it away
-+                              if (object &&
-+                                  object->deleted &&
-+                                  object->softDeleted &&
-+                                  tags.chunkId != 0) {
-+                                      /* Data chunk in a soft deleted file, throw it away
-                                        * It's a soft deleted data chunk,
-                                        * No need to copy this, just forget about it and
-                                        * fix up the object.
-@@ -3003,13 +3071,12 @@ static int yaffs_GarbageCollectBlock(yaf
-                                               cleanups++;
-                                       }
-                                       markNAND = 0;
--                              } else if (0
--                                         /* Todo object && object->deleted && object->nDataChunks == 0 */
--                                         ) {
-+                              } else if (0) {
-+                                      /* Todo object && object->deleted && object->nDataChunks == 0 */
-                                       /* Deleted object header with no data chunks.
-                                        * Can be discarded and the file deleted.
-                                        */
--                                      object->chunkId = 0;
-+                                      object->hdrChunk = 0;
-                                       yaffs_FreeTnode(object->myDev,
-                                                       object->variant.
-                                                       fileVariant.top);
-@@ -3031,17 +3098,14 @@ static int yaffs_GarbageCollectBlock(yaf
-                                                * We need to nuke the shrinkheader flags first
-                                                * We no longer want the shrinkHeader flag since its work is done
-                                                * and if it is left in place it will mess up scanning.
--                                               * Also, clear out any shadowing stuff
-                                                */
-                                               yaffs_ObjectHeader *oh;
-                                               oh = (yaffs_ObjectHeader *)buffer;
-                                               oh->isShrink = 0;
--                                              oh->shadowsObject = -1;
--                                              tags.extraShadows = 0;
-                                               tags.extraIsShrinkHeader = 0;
--                                              yaffs_VerifyObjectHeader(object,oh,&tags,1);
-+                                              yaffs_VerifyObjectHeader(object, oh, &tags, 1);
-                                       }
-                                       newChunk =
-@@ -3055,7 +3119,7 @@ static int yaffs_GarbageCollectBlock(yaf
-                                               if (tags.chunkId == 0) {
-                                                       /* It's a header */
--                                                      object->chunkId =  newChunk;
-+                                                      object->hdrChunk =  newChunk;
-                                                       object->serial =   tags.serialNumber;
-                                               } else {
-                                                       /* It's a data chunk */
-@@ -3067,7 +3131,8 @@ static int yaffs_GarbageCollectBlock(yaf
-                                       }
-                               }
--                              yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-+                              if (retVal == YAFFS_OK)
-+                                      yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-                       }
-               }
-@@ -3098,18 +3163,25 @@ static int yaffs_GarbageCollectBlock(yaf
-       }
--      yaffs_VerifyCollectedBlock(dev,bi,block);
-+      yaffs_VerifyCollectedBlock(dev, bi, block);
--      if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
-+      chunksAfter = yaffs_GetErasedChunks(dev);
-+      if (chunksBefore >= chunksAfter) {
-               T(YAFFS_TRACE_GC,
-                 (TSTR
-                  ("gc did not increase free chunks before %d after %d"
-                   TENDSTR), chunksBefore, chunksAfter));
-       }
-+      /* If the gc completed then clear the current gcBlock so that we find another. */
-+      if (bi->blockState != YAFFS_BLOCK_STATE_COLLECTING) {
-+              dev->gcBlock = -1;
-+              dev->gcChunk = 0;
-+      }
-+
-       dev->isDoingGC = 0;
--      return YAFFS_OK;
-+      return retVal;
- }
- /* New garbage collector
-@@ -3121,7 +3193,7 @@ static int yaffs_GarbageCollectBlock(yaf
-  * The idea is to help clear out space in a more spread-out manner.
-  * Dunno if it really does anything useful.
-  */
--static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
-+static int yaffs_CheckGarbageCollection(yaffs_Device *dev)
- {
-       int block;
-       int aggressive;
-@@ -3142,8 +3214,8 @@ static int yaffs_CheckGarbageCollection(
-       do {
-               maxTries++;
--              checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
--              if(checkpointBlockAdjust < 0)
-+              checkpointBlockAdjust = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
-+              if (checkpointBlockAdjust < 0)
-                       checkpointBlockAdjust = 0;
-               if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust + 2)) {
-@@ -3154,20 +3226,24 @@ static int yaffs_CheckGarbageCollection(
-                       aggressive = 0;
-               }
--              block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-+              if (dev->gcBlock <= 0) {
-+                      dev->gcBlock = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-+                      dev->gcChunk = 0;
-+              }
-+
-+              block = dev->gcBlock;
-               if (block > 0) {
-                       dev->garbageCollections++;
--                      if (!aggressive) {
-+                      if (!aggressive)
-                               dev->passiveGarbageCollections++;
--                      }
-                       T(YAFFS_TRACE_GC,
-                         (TSTR
-                          ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
-                          dev->nErasedBlocks, aggressive));
--                      gcOk = yaffs_GarbageCollectBlock(dev, block);
-+                      gcOk = yaffs_GarbageCollectBlock(dev, block, aggressive);
-               }
-               if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
-@@ -3176,15 +3252,16 @@ static int yaffs_CheckGarbageCollection(
-                          ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
-                           TENDSTR), dev->nErasedBlocks, maxTries, block));
-               }
--      } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
--               && (maxTries < 2));
-+      } while ((dev->nErasedBlocks < dev->nReservedBlocks) &&
-+               (block > 0) &&
-+               (maxTries < 2));
-       return aggressive ? gcOk : YAFFS_OK;
- }
- /*-------------------------  TAGS --------------------------------*/
--static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
-+static int yaffs_TagsMatch(const yaffs_ExtendedTags *tags, int objectId,
-                          int chunkInObject)
- {
-       return (tags->chunkId == chunkInObject &&
-@@ -3195,8 +3272,8 @@ static int yaffs_TagsMatch(const yaffs_E
- /*-------------------- Data file manipulation -----------------*/
--static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
--                               yaffs_ExtendedTags * tags)
-+static int yaffs_FindChunkInFile(yaffs_Object *in, int chunkInInode,
-+                               yaffs_ExtendedTags *tags)
- {
-       /*Get the Tnode, then get the level 0 offset chunk offset */
-       yaffs_Tnode *tn;
-@@ -3214,7 +3291,7 @@ static int yaffs_FindChunkInFile(yaffs_O
-       tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
-       if (tn) {
--              theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+              theChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-               retVal =
-                   yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
-@@ -3223,8 +3300,8 @@ static int yaffs_FindChunkInFile(yaffs_O
-       return retVal;
- }
--static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
--                                        yaffs_ExtendedTags * tags)
-+static int yaffs_FindAndDeleteChunkInFile(yaffs_Object *in, int chunkInInode,
-+                                        yaffs_ExtendedTags *tags)
- {
-       /* Get the Tnode, then get the level 0 offset chunk offset */
-       yaffs_Tnode *tn;
-@@ -3243,29 +3320,23 @@ static int yaffs_FindAndDeleteChunkInFil
-       if (tn) {
--              theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+              theChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-               retVal =
-                   yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
-                                          chunkInInode);
-               /* Delete the entry in the filestructure (if found) */
--              if (retVal != -1) {
--                      yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
--              }
--      } else {
--              /*T(("No level 0 found for %d\n", chunkInInode)); */
-+              if (retVal != -1)
-+                      yaffs_PutLevel0Tnode(dev, tn, chunkInInode, 0);
-       }
--      if (retVal == -1) {
--              /* T(("Could not find %d to delete\n",chunkInInode)); */
--      }
-       return retVal;
- }
- #ifdef YAFFS_PARANOID
--static int yaffs_CheckFileSanity(yaffs_Object * in)
-+static int yaffs_CheckFileSanity(yaffs_Object *in)
- {
-       int chunk;
-       int nChunks;
-@@ -3278,10 +3349,8 @@ static int yaffs_CheckFileSanity(yaffs_O
-       int theChunk;
-       int chunkDeleted;
--      if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
--              /* T(("Object not a file\n")); */
-+      if (in->variantType != YAFFS_OBJECT_TYPE_FILE)
-               return YAFFS_FAIL;
--      }
-       objId = in->objectId;
-       fSize = in->variant.fileVariant.fileSize;
-@@ -3294,7 +3363,7 @@ static int yaffs_CheckFileSanity(yaffs_O
-               if (tn) {
--                      theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
-+                      theChunk = yaffs_GetChunkGroupBase(dev, tn, chunk);
-                       if (yaffs_CheckChunkBits
-                           (dev, theChunk / dev->nChunksPerBlock,
-@@ -3323,7 +3392,7 @@ static int yaffs_CheckFileSanity(yaffs_O
- #endif
--static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
-+static int yaffs_PutChunkIntoFile(yaffs_Object *in, int chunkInInode,
-                                 int chunkInNAND, int inScan)
- {
-       /* NB inScan is zero unless scanning.
-@@ -3358,11 +3427,10 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                                       &in->variant.fileVariant,
-                                       chunkInInode,
-                                       NULL);
--      if (!tn) {
-+      if (!tn)
-               return YAFFS_FAIL;
--      }
--      existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+      existingChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-       if (inScan != 0) {
-               /* If we're scanning then we need to test for duplicates
-@@ -3374,7 +3442,7 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
-                */
--              if (existingChunk != 0) {
-+              if (existingChunk > 0) {
-                       /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
-                        *    thus we have to do a FindChunkInFile to get the real chunk id.
-                        *
-@@ -3411,8 +3479,10 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                        * not be loaded during a scan
-                        */
--                      newSerial = newTags.serialNumber;
--                      existingSerial = existingTags.serialNumber;
-+                      if (inScan > 0) {
-+                              newSerial = newTags.serialNumber;
-+                              existingSerial = existingTags.serialNumber;
-+                      }
-                       if ((inScan > 0) &&
-                           (in->myDev->isYaffs2 ||
-@@ -3437,24 +3507,23 @@ static int yaffs_PutChunkIntoFile(yaffs_
-       }
--      if (existingChunk == 0) {
-+      if (existingChunk == 0)
-               in->nDataChunks++;
--      }
--      yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
-+      yaffs_PutLevel0Tnode(dev, tn, chunkInInode, chunkInNAND);
-       return YAFFS_OK;
- }
--static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
--                                       __u8 * buffer)
-+static int yaffs_ReadChunkDataFromObject(yaffs_Object *in, int chunkInInode,
-+                                      __u8 *buffer)
- {
-       int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
--      if (chunkInNAND >= 0) {
-+      if (chunkInNAND >= 0)
-               return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
--                                                     buffer,NULL);
--      } else {
-+                                              buffer, NULL);
-+      else {
-               T(YAFFS_TRACE_NANDACCESS,
-                 (TSTR("Chunk %d not found zero instead" TENDSTR),
-                  chunkInNAND));
-@@ -3465,7 +3534,7 @@ static int yaffs_ReadChunkDataFromObject
- }
--void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
-+void yaffs_DeleteChunk(yaffs_Device *dev, int chunkId, int markNAND, int lyn)
- {
-       int block;
-       int page;
-@@ -3475,16 +3544,15 @@ void yaffs_DeleteChunk(yaffs_Device * de
-       if (chunkId <= 0)
-               return;
--
-       dev->nDeletions++;
-       block = chunkId / dev->nChunksPerBlock;
-       page = chunkId % dev->nChunksPerBlock;
--      if(!yaffs_CheckChunkBit(dev,block,page))
-+      if (!yaffs_CheckChunkBit(dev, block, page))
-               T(YAFFS_TRACE_VERIFY,
--                      (TSTR("Deleting invalid chunk %d"TENDSTR),
--                       chunkId));
-+                      (TSTR("Deleting invalid chunk %d"TENDSTR),
-+                       chunkId));
-       bi = yaffs_GetBlockInfo(dev, block);
-@@ -3524,14 +3592,12 @@ void yaffs_DeleteChunk(yaffs_Device * de
-                       yaffs_BlockBecameDirty(dev, block);
-               }
--      } else {
--              /* T(("Bad news deleting chunk %d\n",chunkId)); */
-       }
- }
--static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
--                                      const __u8 * buffer, int nBytes,
-+static int yaffs_WriteChunkDataToObject(yaffs_Object *in, int chunkInInode,
-+                                      const __u8 *buffer, int nBytes,
-                                       int useReserve)
- {
-       /* Find old chunk Need to do this to get serial number
-@@ -3561,6 +3627,12 @@ static int yaffs_WriteChunkDataToObject(
-           (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
-       newTags.byteCount = nBytes;
-+      if (nBytes < 1 || nBytes > dev->totalBytesPerChunk) {
-+              T(YAFFS_TRACE_ERROR,
-+              (TSTR("Writing %d bytes to chunk!!!!!!!!!" TENDSTR), nBytes));
-+              YBUG();
-+      }
-+
-       newChunkId =
-           yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
-                                             useReserve);
-@@ -3568,11 +3640,9 @@ static int yaffs_WriteChunkDataToObject(
-       if (newChunkId >= 0) {
-               yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
--              if (prevChunkId >= 0) {
-+              if (prevChunkId >= 0)
-                       yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
--              }
--
-               yaffs_CheckFileSanity(in);
-       }
-       return newChunkId;
-@@ -3582,7 +3652,7 @@ static int yaffs_WriteChunkDataToObject(
- /* UpdateObjectHeader updates the header on NAND for an object.
-  * If name is not NULL, then that new name is used.
-  */
--int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
-+int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name, int force,
-                            int isShrink, int shadows)
- {
-@@ -3603,9 +3673,12 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-       yaffs_ObjectHeader *oh = NULL;
--      yaffs_strcpy(oldName,"silly old name");
-+      yaffs_strcpy(oldName, _Y("silly old name"));
--      if (!in->fake || force) {
-+
-+      if (!in->fake ||
-+              in == dev->rootDir || /* The rootDir should also be saved */
-+              force) {
-               yaffs_CheckGarbageCollection(dev);
-               yaffs_CheckObjectDetailsLoaded(in);
-@@ -3613,13 +3686,13 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
-               oh = (yaffs_ObjectHeader *) buffer;
--              prevChunkId = in->chunkId;
-+              prevChunkId = in->hdrChunk;
--              if (prevChunkId >= 0) {
-+              if (prevChunkId > 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
-                                                       buffer, &oldTags);
--                      yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
-+                      yaffs_VerifyObjectHeader(in, oh, &oldTags, 0);
-                       memcpy(oldName, oh->name, sizeof(oh->name));
-               }
-@@ -3628,7 +3701,7 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               oh->type = in->variantType;
-               oh->yst_mode = in->yst_mode;
--              oh->shadowsObject = shadows;
-+              oh->shadowsObject = oh->inbandShadowsObject = shadows;
- #ifdef CONFIG_YAFFS_WINCE
-               oh->win_atime[0] = in->win_atime[0];
-@@ -3645,20 +3718,18 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               oh->yst_ctime = in->yst_ctime;
-               oh->yst_rdev = in->yst_rdev;
- #endif
--              if (in->parent) {
-+              if (in->parent)
-                       oh->parentObjectId = in->parent->objectId;
--              } else {
-+              else
-                       oh->parentObjectId = 0;
--              }
-               if (name && *name) {
-                       memset(oh->name, 0, sizeof(oh->name));
-                       yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
--              } else if (prevChunkId>=0) {
-+              } else if (prevChunkId >= 0)
-                       memcpy(oh->name, oldName, sizeof(oh->name));
--              } else {
-+              else
-                       memset(oh->name, 0, sizeof(oh->name));
--              }
-               oh->isShrink = isShrink;
-@@ -3708,7 +3779,7 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
-               newTags.extraObjectType = in->variantType;
--              yaffs_VerifyObjectHeader(in,oh,&newTags,1);
-+              yaffs_VerifyObjectHeader(in, oh, &newTags, 1);
-               /* Create new chunk in NAND */
-               newChunkId =
-@@ -3717,20 +3788,20 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               if (newChunkId >= 0) {
--                      in->chunkId = newChunkId;
-+                      in->hdrChunk = newChunkId;
-                       if (prevChunkId >= 0) {
-                               yaffs_DeleteChunk(dev, prevChunkId, 1,
-                                                 __LINE__);
-                       }
--                      if(!yaffs_ObjectHasCachedWriteData(in))
-+                      if (!yaffs_ObjectHasCachedWriteData(in))
-                               in->dirty = 0;
-                       /* If this was a shrink, then mark the block that the chunk lives on */
-                       if (isShrink) {
-                               bi = yaffs_GetBlockInfo(in->myDev,
--                                                      newChunkId /in->myDev-> nChunksPerBlock);
-+                                      newChunkId / in->myDev->nChunksPerBlock);
-                               bi->hasShrinkHeader = 1;
-                       }
-@@ -3766,7 +3837,7 @@ static int yaffs_ObjectHasCachedWriteDat
-       yaffs_ChunkCache *cache;
-       int nCaches = obj->myDev->nShortOpCaches;
--      for(i = 0; i < nCaches; i++){
-+      for (i = 0; i < nCaches; i++) {
-               cache = &dev->srCache[i];
-               if (cache->object == obj &&
-                   cache->dirty)
-@@ -3777,7 +3848,7 @@ static int yaffs_ObjectHasCachedWriteDat
- }
--static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
-+static void yaffs_FlushFilesChunkCache(yaffs_Object *obj)
- {
-       yaffs_Device *dev = obj->myDev;
-       int lowest = -99;       /* Stop compiler whining. */
-@@ -3844,16 +3915,16 @@ void yaffs_FlushEntireDeviceCache(yaffs_
-        */
-       do {
-               obj = NULL;
--              for( i = 0; i < nCaches && !obj; i++) {
-+              for (i = 0; i < nCaches && !obj; i++) {
-                       if (dev->srCache[i].object &&
-                           dev->srCache[i].dirty)
-                               obj = dev->srCache[i].object;
-               }
--              if(obj)
-+              if (obj)
-                       yaffs_FlushFilesChunkCache(obj);
--      } while(obj);
-+      } while (obj);
- }
-@@ -3863,41 +3934,21 @@ void yaffs_FlushEntireDeviceCache(yaffs_
-  * Then look for the least recently used non-dirty one.
-  * Then look for the least recently used dirty one...., flush and look again.
-  */
--static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
-+static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device *dev)
- {
-       int i;
--      int usage;
--      int theOne;
-       if (dev->nShortOpCaches > 0) {
-               for (i = 0; i < dev->nShortOpCaches; i++) {
-                       if (!dev->srCache[i].object)
-                               return &dev->srCache[i];
-               }
-+      }
--              return NULL;
-+      return NULL;
-+}
--              theOne = -1;
--              usage = 0;      /* just to stop the compiler grizzling */
--
--              for (i = 0; i < dev->nShortOpCaches; i++) {
--                      if (!dev->srCache[i].dirty &&
--                          ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
--                           theOne < 0)) {
--                              usage = dev->srCache[i].lastUse;
--                              theOne = i;
--                      }
--              }
--
--
--              return theOne >= 0 ? &dev->srCache[theOne] : NULL;
--      } else {
--              return NULL;
--      }
--
--}
--
--static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
-+static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device *dev)
- {
-       yaffs_ChunkCache *cache;
-       yaffs_Object *theObj;
-@@ -3927,8 +3978,7 @@ static yaffs_ChunkCache *yaffs_GrabChunk
-                       for (i = 0; i < dev->nShortOpCaches; i++) {
-                               if (dev->srCache[i].object &&
-                                   !dev->srCache[i].locked &&
--                                  (dev->srCache[i].lastUse < usage || !cache))
--                              {
-+                                  (dev->srCache[i].lastUse < usage || !cache)) {
-                                       usage = dev->srCache[i].lastUse;
-                                       theObj = dev->srCache[i].object;
-                                       cache = &dev->srCache[i];
-@@ -3950,7 +4000,7 @@ static yaffs_ChunkCache *yaffs_GrabChunk
- }
- /* Find a cached chunk */
--static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
-+static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object *obj,
-                                             int chunkId)
- {
-       yaffs_Device *dev = obj->myDev;
-@@ -3969,7 +4019,7 @@ static yaffs_ChunkCache *yaffs_FindChunk
- }
- /* Mark the chunk for the least recently used algorithym */
--static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
-+static void yaffs_UseChunkCache(yaffs_Device *dev, yaffs_ChunkCache *cache,
-                               int isAWrite)
- {
-@@ -3977,9 +4027,9 @@ static void yaffs_UseChunkCache(yaffs_De
-               if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
-                       /* Reset the cache usages */
-                       int i;
--                      for (i = 1; i < dev->nShortOpCaches; i++) {
-+                      for (i = 1; i < dev->nShortOpCaches; i++)
-                               dev->srCache[i].lastUse = 0;
--                      }
-+
-                       dev->srLastUse = 0;
-               }
-@@ -3987,9 +4037,8 @@ static void yaffs_UseChunkCache(yaffs_De
-               cache->lastUse = dev->srLastUse;
--              if (isAWrite) {
-+              if (isAWrite)
-                       cache->dirty = 1;
--              }
-       }
- }
-@@ -3997,21 +4046,20 @@ static void yaffs_UseChunkCache(yaffs_De
-  * Do this when a whole page gets written,
-  * ie the short cache for this page is no longer valid.
-  */
--static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
-+static void yaffs_InvalidateChunkCache(yaffs_Object *object, int chunkId)
- {
-       if (object->myDev->nShortOpCaches > 0) {
-               yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
--              if (cache) {
-+              if (cache)
-                       cache->object = NULL;
--              }
-       }
- }
- /* Invalidate all the cache pages associated with this object
-  * Do this whenever ther file is deleted or resized.
-  */
--static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
-+static void yaffs_InvalidateWholeChunkCache(yaffs_Object *in)
- {
-       int i;
-       yaffs_Device *dev = in->myDev;
-@@ -4019,9 +4067,8 @@ static void yaffs_InvalidateWholeChunkCa
-       if (dev->nShortOpCaches > 0) {
-               /* Invalidate it. */
-               for (i = 0; i < dev->nShortOpCaches; i++) {
--                      if (dev->srCache[i].object == in) {
-+                      if (dev->srCache[i].object == in)
-                               dev->srCache[i].object = NULL;
--                      }
-               }
-       }
- }
-@@ -4029,18 +4076,18 @@ static void yaffs_InvalidateWholeChunkCa
- /*--------------------- Checkpointing --------------------*/
--static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
-+static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev, int head)
- {
-       yaffs_CheckpointValidity cp;
--      memset(&cp,0,sizeof(cp));
-+      memset(&cp, 0, sizeof(cp));
-       cp.structType = sizeof(cp);
-       cp.magic = YAFFS_MAGIC;
-       cp.version = YAFFS_CHECKPOINT_VERSION;
-       cp.head = (head) ? 1 : 0;
--      return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
-+      return (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp)) ?
-               1 : 0;
- }
-@@ -4049,9 +4096,9 @@ static int yaffs_ReadCheckpointValidityM
-       yaffs_CheckpointValidity cp;
-       int ok;
--      ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
--      if(ok)
-+      if (ok)
-               ok = (cp.structType == sizeof(cp)) &&
-                    (cp.magic == YAFFS_MAGIC) &&
-                    (cp.version == YAFFS_CHECKPOINT_VERSION) &&
-@@ -4100,21 +4147,21 @@ static int yaffs_WriteCheckpointDevice(y
-       int ok;
-       /* Write device runtime values*/
--      yaffs_DeviceToCheckpointDevice(&cp,dev);
-+      yaffs_DeviceToCheckpointDevice(&cp, dev);
-       cp.structType = sizeof(cp);
--      ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
-       /* Write block info */
--      if(ok) {
-+      if (ok) {
-               nBytes = nBlocks * sizeof(yaffs_BlockInfo);
--              ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
-+              ok = (yaffs_CheckpointWrite(dev, dev->blockInfo, nBytes) == nBytes);
-       }
-       /* Write chunk bits */
--      if(ok) {
-+      if (ok) {
-               nBytes = nBlocks * dev->chunkBitmapStride;
--              ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
-+              ok = (yaffs_CheckpointWrite(dev, dev->chunkBits, nBytes) == nBytes);
-       }
-       return   ok ? 1 : 0;
-@@ -4128,25 +4175,25 @@ static int yaffs_ReadCheckpointDevice(ya
-       int ok;
--      ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
--      if(!ok)
-+      ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
-+      if (!ok)
-               return 0;
--      if(cp.structType != sizeof(cp))
-+      if (cp.structType != sizeof(cp))
-               return 0;
--      yaffs_CheckpointDeviceToDevice(dev,&cp);
-+      yaffs_CheckpointDeviceToDevice(dev, &cp);
-       nBytes = nBlocks * sizeof(yaffs_BlockInfo);
--      ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
-+      ok = (yaffs_CheckpointRead(dev, dev->blockInfo, nBytes) == nBytes);
--      if(!ok)
-+      if (!ok)
-               return 0;
-       nBytes = nBlocks * dev->chunkBitmapStride;
--      ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
-+      ok = (yaffs_CheckpointRead(dev, dev->chunkBits, nBytes) == nBytes);
-       return ok ? 1 : 0;
- }
-@@ -4157,7 +4204,7 @@ static void yaffs_ObjectToCheckpointObje
-       cp->objectId = obj->objectId;
-       cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
--      cp->chunkId = obj->chunkId;
-+      cp->hdrChunk = obj->hdrChunk;
-       cp->variantType = obj->variantType;
-       cp->deleted = obj->deleted;
-       cp->softDeleted = obj->softDeleted;
-@@ -4168,20 +4215,28 @@ static void yaffs_ObjectToCheckpointObje
-       cp->serial = obj->serial;
-       cp->nDataChunks = obj->nDataChunks;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
--      else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-+      else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-               cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
- }
--static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
-+static int yaffs_CheckpointObjectToObject(yaffs_Object *obj, yaffs_CheckpointObject *cp)
- {
-       yaffs_Object *parent;
-+      if (obj->variantType != cp->variantType) {
-+              T(YAFFS_TRACE_ERROR, (TSTR("Checkpoint read object %d type %d "
-+                      TCONT("chunk %d does not match existing object type %d")
-+                      TENDSTR), cp->objectId, cp->variantType, cp->hdrChunk,
-+                      obj->variantType));
-+              return 0;
-+      }
-+
-       obj->objectId = cp->objectId;
--      if(cp->parentId)
-+      if (cp->parentId)
-               parent = yaffs_FindOrCreateObjectByNumber(
-                                       obj->myDev,
-                                       cp->parentId,
-@@ -4189,10 +4244,19 @@ static void yaffs_CheckpointObjectToObje
-       else
-               parent = NULL;
--      if(parent)
-+      if (parent) {
-+              if (parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR("Checkpoint read object %d parent %d type %d"
-+                              TCONT(" chunk %d Parent type, %d, not directory")
-+                              TENDSTR),
-+                              cp->objectId, cp->parentId, cp->variantType,
-+                              cp->hdrChunk, parent->variantType));
-+                      return 0;
-+              }
-               yaffs_AddObjectToDirectory(parent, obj);
-+      }
--      obj->chunkId = cp->chunkId;
-+      obj->hdrChunk = cp->hdrChunk;
-       obj->variantType = cp->variantType;
-       obj->deleted = cp->deleted;
-       obj->softDeleted = cp->softDeleted;
-@@ -4203,29 +4267,34 @@ static void yaffs_CheckpointObjectToObje
-       obj->serial = cp->serial;
-       obj->nDataChunks = cp->nDataChunks;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
--      else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-+      else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-               obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
--      if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
-+      if (obj->hdrChunk > 0)
-               obj->lazyLoaded = 1;
-+      return 1;
- }
--static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
--                                      __u32 level, int chunkOffset)
-+static int yaffs_CheckpointTnodeWorker(yaffs_Object *in, yaffs_Tnode *tn,
-+                                      __u32 level, int chunkOffset)
- {
-       int i;
-       yaffs_Device *dev = in->myDev;
-       int ok = 1;
--      int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-       if (tn) {
-               if (level > 0) {
--                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
-+                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
-                               if (tn->internal[i]) {
-                                       ok = yaffs_CheckpointTnodeWorker(in,
-                                                       tn->internal[i],
-@@ -4235,10 +4304,9 @@ static int yaffs_CheckpointTnodeWorker(y
-                       }
-               } else if (level == 0) {
-                       __u32 baseOffset = chunkOffset <<  YAFFS_TNODES_LEVEL0_BITS;
--                      /* printf("write tnode at %d\n",baseOffset); */
--                      ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
--                      if(ok)
--                              ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
-+                      ok = (yaffs_CheckpointWrite(dev, &baseOffset, sizeof(baseOffset)) == sizeof(baseOffset));
-+                      if (ok)
-+                              ok = (yaffs_CheckpointWrite(dev, tn, tnodeSize) == tnodeSize);
-               }
-       }
-@@ -4251,13 +4319,13 @@ static int yaffs_WriteCheckpointTnodes(y
-       __u32 endMarker = ~0;
-       int ok = 1;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-               ok = yaffs_CheckpointTnodeWorker(obj,
-                                           obj->variant.fileVariant.top,
-                                           obj->variant.fileVariant.topLevel,
-                                           0);
--              if(ok)
--                      ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
-+              if (ok)
-+                      ok = (yaffs_CheckpointWrite(obj->myDev, &endMarker, sizeof(endMarker)) ==
-                               sizeof(endMarker));
-       }
-@@ -4272,38 +4340,38 @@ static int yaffs_ReadCheckpointTnodes(ya
-       yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
-       yaffs_Tnode *tn;
-       int nread = 0;
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
--      ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
--      while(ok && (~baseChunk)){
-+      ok = (yaffs_CheckpointRead(dev, &baseChunk, sizeof(baseChunk)) == sizeof(baseChunk));
-+
-+      while (ok && (~baseChunk)) {
-               nread++;
-               /* Read level 0 tnode */
--              /* printf("read  tnode at %d\n",baseChunk); */
-               tn = yaffs_GetTnodeRaw(dev);
--              if(tn)
--                      ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
--                            (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+              if (tn)
-+                      ok = (yaffs_CheckpointRead(dev, tn, tnodeSize) == tnodeSize);
-               else
-                       ok = 0;
--              if(tn && ok){
-+              if (tn && ok)
-                       ok = yaffs_AddOrFindLevel0Tnode(dev,
--                                                      fileStructPtr,
--                                                      baseChunk,
--                                                      tn) ? 1 : 0;
-+                                                      fileStructPtr,
-+                                                      baseChunk,
-+                                                      tn) ? 1 : 0;
--              }
--
--              if(ok)
--                      ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-+              if (ok)
-+                      ok = (yaffs_CheckpointRead(dev, &baseChunk, sizeof(baseChunk)) == sizeof(baseChunk));
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(
-+      T(YAFFS_TRACE_CHECKPOINT, (
-               TSTR("Checkpoint read tnodes %d records, last %d. ok %d" TENDSTR),
--              nread,baseChunk,ok));
-+              nread, baseChunk, ok));
-       return ok ? 1 : 0;
- }
-@@ -4315,41 +4383,40 @@ static int yaffs_WriteCheckpointObjects(
-       yaffs_CheckpointObject cp;
-       int i;
-       int ok = 1;
--      struct list_head *lh;
-+      struct ylist_head *lh;
-       /* Iterate through the objects in each hash entry,
-        * dumping them to the checkpointing stream.
-        */
--       for(i = 0; ok &&  i <  YAFFS_NOBJECT_BUCKETS; i++){
--              list_for_each(lh, &dev->objectBucket[i].list) {
-+      for (i = 0; ok &&  i <  YAFFS_NOBJECT_BUCKETS; i++) {
-+              ylist_for_each(lh, &dev->objectBucket[i].list) {
-                       if (lh) {
--                              obj = list_entry(lh, yaffs_Object, hashLink);
-+                              obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               if (!obj->deferedFree) {
--                                      yaffs_ObjectToCheckpointObject(&cp,obj);
-+                                      yaffs_ObjectToCheckpointObject(&cp, obj);
-                                       cp.structType = sizeof(cp);
--                                      T(YAFFS_TRACE_CHECKPOINT,(
-+                                      T(YAFFS_TRACE_CHECKPOINT, (
-                                               TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
--                                              cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
-+                                              cp.objectId, cp.parentId, cp.variantType, cp.hdrChunk, (unsigned) obj));
--                                      ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+                                      ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
--                                      if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
-+                                      if (ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-                                               ok = yaffs_WriteCheckpointTnodes(obj);
--                                      }
-                               }
-                       }
-               }
--       }
-+      }
--       /* Dump end of list */
--      memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
-+      /* Dump end of list */
-+      memset(&cp, 0xFF, sizeof(yaffs_CheckpointObject));
-       cp.structType = sizeof(cp);
--      if(ok)
--              ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      if (ok)
-+              ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
-       return ok ? 1 : 0;
- }
-@@ -4362,38 +4429,39 @@ static int yaffs_ReadCheckpointObjects(y
-       int done = 0;
-       yaffs_Object *hardList = NULL;
--      while(ok && !done) {
--              ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
--              if(cp.structType != sizeof(cp)) {
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("struct size %d instead of %d ok %d"TENDSTR),
--                              cp.structType,sizeof(cp),ok));
-+      while (ok && !done) {
-+              ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
-+              if (cp.structType != sizeof(cp)) {
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("struct size %d instead of %d ok %d"TENDSTR),
-+                              cp.structType, sizeof(cp), ok));
-                       ok = 0;
-               }
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
--                      cp.objectId,cp.parentId,cp.variantType,cp.chunkId));
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
-+                      cp.objectId, cp.parentId, cp.variantType, cp.hdrChunk));
--              if(ok && cp.objectId == ~0)
-+              if (ok && cp.objectId == ~0)
-                       done = 1;
--              else if(ok){
--                      obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
--                      if(obj) {
--                              yaffs_CheckpointObjectToObject(obj,&cp);
--                              if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-+              else if (ok) {
-+                      obj = yaffs_FindOrCreateObjectByNumber(dev, cp.objectId, cp.variantType);
-+                      if (obj) {
-+                              ok = yaffs_CheckpointObjectToObject(obj, &cp);
-+                              if (!ok)
-+                                      break;
-+                              if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-                                       ok = yaffs_ReadCheckpointTnodes(obj);
--                              } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-+                              } else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-                                       obj->hardLinks.next =
--                                                  (struct list_head *)
--                                                  hardList;
-+                                              (struct ylist_head *) hardList;
-                                       hardList = obj;
-                               }
--
--                      }
-+                      } else
-+                              ok = 0;
-               }
-       }
--      if(ok)
--              yaffs_HardlinkFixup(dev,hardList);
-+      if (ok)
-+              yaffs_HardlinkFixup(dev, hardList);
-       return ok ? 1 : 0;
- }
-@@ -4403,11 +4471,11 @@ static int yaffs_WriteCheckpointSum(yaff
-       __u32 checkpointSum;
-       int ok;
--      yaffs_GetCheckpointSum(dev,&checkpointSum);
-+      yaffs_GetCheckpointSum(dev, &checkpointSum);
--      ok = (yaffs_CheckpointWrite(dev,&checkpointSum,sizeof(checkpointSum)) == sizeof(checkpointSum));
-+      ok = (yaffs_CheckpointWrite(dev, &checkpointSum, sizeof(checkpointSum)) == sizeof(checkpointSum));
--      if(!ok)
-+      if (!ok)
-               return 0;
-       return 1;
-@@ -4419,14 +4487,14 @@ static int yaffs_ReadCheckpointSum(yaffs
-       __u32 checkpointSum1;
-       int ok;
--      yaffs_GetCheckpointSum(dev,&checkpointSum0);
-+      yaffs_GetCheckpointSum(dev, &checkpointSum0);
--      ok = (yaffs_CheckpointRead(dev,&checkpointSum1,sizeof(checkpointSum1)) == sizeof(checkpointSum1));
-+      ok = (yaffs_CheckpointRead(dev, &checkpointSum1, sizeof(checkpointSum1)) == sizeof(checkpointSum1));
--      if(!ok)
-+      if (!ok)
-               return 0;
--      if(checkpointSum0 != checkpointSum1)
-+      if (checkpointSum0 != checkpointSum1)
-               return 0;
-       return 1;
-@@ -4435,46 +4503,43 @@ static int yaffs_ReadCheckpointSum(yaffs
- static int yaffs_WriteCheckpointData(yaffs_Device *dev)
- {
--
-       int ok = 1;
--      if(dev->skipCheckpointWrite || !dev->isYaffs2){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint write" TENDSTR)));
-+      if (dev->skipCheckpointWrite || !dev->isYaffs2) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("skipping checkpoint write" TENDSTR)));
-               ok = 0;
-       }
--      if(ok)
--              ok = yaffs_CheckpointOpen(dev,1);
-+      if (ok)
-+              ok = yaffs_CheckpointOpen(dev, 1);
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
--              ok = yaffs_WriteCheckpointValidityMarker(dev,1);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint validity" TENDSTR)));
-+              ok = yaffs_WriteCheckpointValidityMarker(dev, 1);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint device" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint device" TENDSTR)));
-               ok = yaffs_WriteCheckpointDevice(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint objects" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint objects" TENDSTR)));
-               ok = yaffs_WriteCheckpointObjects(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
--              ok = yaffs_WriteCheckpointValidityMarker(dev,0);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint validity" TENDSTR)));
-+              ok = yaffs_WriteCheckpointValidityMarker(dev, 0);
-       }
--      if(ok){
-+      if (ok)
-               ok = yaffs_WriteCheckpointSum(dev);
--      }
--
--      if(!yaffs_CheckpointClose(dev))
--               ok = 0;
-+      if (!yaffs_CheckpointClose(dev))
-+              ok = 0;
--      if(ok)
--              dev->isCheckpointed = 1;
--       else
--              dev->isCheckpointed = 0;
-+      if (ok)
-+              dev->isCheckpointed = 1;
-+      else
-+              dev->isCheckpointed = 0;
-       return dev->isCheckpointed;
- }
-@@ -4483,43 +4548,43 @@ static int yaffs_ReadCheckpointData(yaff
- {
-       int ok = 1;
--      if(dev->skipCheckpointRead || !dev->isYaffs2){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint read" TENDSTR)));
-+      if (dev->skipCheckpointRead || !dev->isYaffs2) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("skipping checkpoint read" TENDSTR)));
-               ok = 0;
-       }
--      if(ok)
--              ok = yaffs_CheckpointOpen(dev,0); /* open for read */
-+      if (ok)
-+              ok = yaffs_CheckpointOpen(dev, 0); /* open for read */
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
--              ok = yaffs_ReadCheckpointValidityMarker(dev,1);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint validity" TENDSTR)));
-+              ok = yaffs_ReadCheckpointValidityMarker(dev, 1);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint device" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint device" TENDSTR)));
-               ok = yaffs_ReadCheckpointDevice(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint objects" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint objects" TENDSTR)));
-               ok = yaffs_ReadCheckpointObjects(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
--              ok = yaffs_ReadCheckpointValidityMarker(dev,0);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint validity" TENDSTR)));
-+              ok = yaffs_ReadCheckpointValidityMarker(dev, 0);
-       }
--      if(ok){
-+      if (ok) {
-               ok = yaffs_ReadCheckpointSum(dev);
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint checksum %d" TENDSTR),ok));
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint checksum %d" TENDSTR), ok));
-       }
--      if(!yaffs_CheckpointClose(dev))
-+      if (!yaffs_CheckpointClose(dev))
-               ok = 0;
--      if(ok)
--              dev->isCheckpointed = 1;
--       else
--              dev->isCheckpointed = 0;
-+      if (ok)
-+              dev->isCheckpointed = 1;
-+      else
-+              dev->isCheckpointed = 0;
-       return ok ? 1 : 0;
-@@ -4527,11 +4592,11 @@ static int yaffs_ReadCheckpointData(yaff
- static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
- {
--      if(dev->isCheckpointed ||
--         dev->blocksInCheckpoint > 0){
-+      if (dev->isCheckpointed ||
-+                      dev->blocksInCheckpoint > 0) {
-               dev->isCheckpointed = 0;
-               yaffs_CheckpointInvalidateStream(dev);
--              if(dev->superBlock && dev->markSuperBlockDirty)
-+              if (dev->superBlock && dev->markSuperBlockDirty)
-                       dev->markSuperBlockDirty(dev->superBlock);
-       }
- }
-@@ -4540,18 +4605,18 @@ static void yaffs_InvalidateCheckpoint(y
- int yaffs_CheckpointSave(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("save entry: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       yaffs_VerifyObjects(dev);
-       yaffs_VerifyBlocks(dev);
-       yaffs_VerifyFreeChunks(dev);
--      if(!dev->isCheckpointed) {
-+      if (!dev->isCheckpointed) {
-               yaffs_InvalidateCheckpoint(dev);
-               yaffs_WriteCheckpointData(dev);
-       }
--      T(YAFFS_TRACE_ALWAYS,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_ALWAYS, (TSTR("save exit: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       return dev->isCheckpointed;
- }
-@@ -4559,17 +4624,17 @@ int yaffs_CheckpointSave(yaffs_Device *d
- int yaffs_CheckpointRestore(yaffs_Device *dev)
- {
-       int retval;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("restore entry: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       retval = yaffs_ReadCheckpointData(dev);
--      if(dev->isCheckpointed){
-+      if (dev->isCheckpointed) {
-               yaffs_VerifyObjects(dev);
-               yaffs_VerifyBlocks(dev);
-               yaffs_VerifyFreeChunks(dev);
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("restore exit: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       return retval;
- }
-@@ -4584,12 +4649,12 @@ int yaffs_CheckpointRestore(yaffs_Device
-  * Curve-balls: the first chunk might also be the last chunk.
-  */
--int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
--                         int nBytes)
-+int yaffs_ReadDataFromFile(yaffs_Object *in, __u8 *buffer, loff_t offset,
-+                      int nBytes)
- {
-       int chunk;
--      int start;
-+      __u32 start;
-       int nToCopy;
-       int n = nBytes;
-       int nDone = 0;
-@@ -4600,27 +4665,26 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-       dev = in->myDev;
-       while (n > 0) {
--              //chunk = offset / dev->nDataBytesPerChunk + 1;
--              //start = offset % dev->nDataBytesPerChunk;
--              yaffs_AddrToChunk(dev,offset,&chunk,&start);
-+              /* chunk = offset / dev->nDataBytesPerChunk + 1; */
-+              /* start = offset % dev->nDataBytesPerChunk; */
-+              yaffs_AddrToChunk(dev, offset, &chunk, &start);
-               chunk++;
-               /* OK now check for the curveball where the start and end are in
-                * the same chunk.
-                */
--              if ((start + n) < dev->nDataBytesPerChunk) {
-+              if ((start + n) < dev->nDataBytesPerChunk)
-                       nToCopy = n;
--              } else {
-+              else
-                       nToCopy = dev->nDataBytesPerChunk - start;
--              }
-               cache = yaffs_FindChunkCache(in, chunk);
-               /* If the chunk is already in the cache or it is less than a whole chunk
--               * then use the cache (if there is caching)
-+               * or we're using inband tags then use the cache (if there is caching)
-                * else bypass the cache.
-                */
--              if (cache || nToCopy != dev->nDataBytesPerChunk) {
-+              if (cache || nToCopy != dev->nDataBytesPerChunk || dev->inbandTags) {
-                       if (dev->nShortOpCaches > 0) {
-                               /* If we can't find the data in the cache, then load it up. */
-@@ -4641,14 +4705,9 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-                               cache->locked = 1;
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(buffer, &cache->data[start], nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-                               cache->locked = 0;
-                       } else {
-                               /* Read into the local buffer then copy..*/
-@@ -4657,41 +4716,19 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-                                   yaffs_GetTempBuffer(dev, __LINE__);
-                               yaffs_ReadChunkDataFromObject(in, chunk,
-                                                             localBuffer);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(buffer, &localBuffer[start], nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-+
-                               yaffs_ReleaseTempBuffer(dev, localBuffer,
-                                                       __LINE__);
-                       }
-               } else {
--#ifdef CONFIG_YAFFS_WINCE
--                      __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
--
--                      /* Under WinCE can't do direct transfer. Need to use a local buffer.
--                       * This is because we otherwise screw up WinCE's memory mapper
--                       */
--                      yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
--
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_UnlockYAFFS(TRUE);
--#endif
--                      memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_LockYAFFS(TRUE);
--                      yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
--#endif
--
--#else
-                       /* A full chunk. Read directly into the supplied buffer. */
-                       yaffs_ReadChunkDataFromObject(in, chunk, buffer);
--#endif
-+
-               }
-               n -= nToCopy;
-@@ -4704,28 +4741,37 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-       return nDone;
- }
--int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
--                        int nBytes, int writeThrough)
-+int yaffs_WriteDataToFile(yaffs_Object *in, const __u8 *buffer, loff_t offset,
-+                      int nBytes, int writeThrough)
- {
-       int chunk;
--      int start;
-+      __u32 start;
-       int nToCopy;
-       int n = nBytes;
-       int nDone = 0;
-       int nToWriteBack;
-       int startOfWrite = offset;
-       int chunkWritten = 0;
--      int nBytesRead;
-+      __u32 nBytesRead;
-+      __u32 chunkStart;
-       yaffs_Device *dev;
-       dev = in->myDev;
-       while (n > 0 && chunkWritten >= 0) {
--              //chunk = offset / dev->nDataBytesPerChunk + 1;
--              //start = offset % dev->nDataBytesPerChunk;
--              yaffs_AddrToChunk(dev,offset,&chunk,&start);
-+              /* chunk = offset / dev->nDataBytesPerChunk + 1; */
-+              /* start = offset % dev->nDataBytesPerChunk; */
-+              yaffs_AddrToChunk(dev, offset, &chunk, &start);
-+
-+              if (chunk * dev->nDataBytesPerChunk + start != offset ||
-+                              start >= dev->nDataBytesPerChunk) {
-+                      T(YAFFS_TRACE_ERROR, (
-+                         TSTR("AddrToChunk of offset %d gives chunk %d start %d"
-+                         TENDSTR),
-+                         (int)offset, chunk, start));
-+              }
-               chunk++;
-               /* OK now check for the curveball where the start and end are in
-@@ -4740,25 +4786,32 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                        * we need to write back as much as was there before.
-                        */
--                      nBytesRead =
--                          in->variant.fileVariant.fileSize -
--                          ((chunk - 1) * dev->nDataBytesPerChunk);
-+                      chunkStart = ((chunk - 1) * dev->nDataBytesPerChunk);
-+
-+                      if (chunkStart > in->variant.fileVariant.fileSize)
-+                              nBytesRead = 0; /* Past end of file */
-+                      else
-+                              nBytesRead = in->variant.fileVariant.fileSize - chunkStart;
--                      if (nBytesRead > dev->nDataBytesPerChunk) {
-+                      if (nBytesRead > dev->nDataBytesPerChunk)
-                               nBytesRead = dev->nDataBytesPerChunk;
--                      }
-                       nToWriteBack =
-                           (nBytesRead >
-                            (start + n)) ? nBytesRead : (start + n);
-+                      if (nToWriteBack < 0 || nToWriteBack > dev->nDataBytesPerChunk)
-+                              YBUG();
-+
-               } else {
-                       nToCopy = dev->nDataBytesPerChunk - start;
-                       nToWriteBack = dev->nDataBytesPerChunk;
-               }
--              if (nToCopy != dev->nDataBytesPerChunk) {
--                      /* An incomplete start or end chunk (or maybe both start and end chunk) */
-+              if (nToCopy != dev->nDataBytesPerChunk || dev->inbandTags) {
-+                      /* An incomplete start or end chunk (or maybe both start and end chunk),
-+                       * or we're using inband tags, so we want to use the cache buffers.
-+                       */
-                       if (dev->nShortOpCaches > 0) {
-                               yaffs_ChunkCache *cache;
-                               /* If we can't find the data in the cache, then load the cache */
-@@ -4775,10 +4828,9 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                                       yaffs_ReadChunkDataFromObject(in, chunk,
-                                                                     cache->
-                                                                     data);
--                              }
--                              else if(cache &&
--                                      !cache->dirty &&
--                                      !yaffs_CheckSpaceForAllocation(in->myDev)){
-+                              } else if (cache &&
-+                                      !cache->dirty &&
-+                                      !yaffs_CheckSpaceForAllocation(in->myDev)) {
-                                       /* Drop the cache if it was a read cache item and
-                                        * no space check has been made for it.
-                                        */
-@@ -4788,16 +4840,12 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                               if (cache) {
-                                       yaffs_UseChunkCache(dev, cache, 1);
-                                       cache->locked = 1;
--#ifdef CONFIG_YAFFS_WINCE
--                                      yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                                       memcpy(&cache->data[start], buffer,
-                                              nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                                      yfsd_LockYAFFS(TRUE);
--#endif
-+
-                                       cache->locked = 0;
-                                       cache->nBytes = nToWriteBack;
-@@ -4825,15 +4873,10 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                               yaffs_ReadChunkDataFromObject(in, chunk,
-                                                             localBuffer);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(&localBuffer[start], buffer, nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-                               chunkWritten =
-                                   yaffs_WriteChunkDataToObject(in, chunk,
-                                                                localBuffer,
-@@ -4846,31 +4889,15 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                       }
-               } else {
--
--#ifdef CONFIG_YAFFS_WINCE
--                      /* Under WinCE can't do direct transfer. Need to use a local buffer.
--                       * This is because we otherwise screw up WinCE's memory mapper
--                       */
--                      __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_UnlockYAFFS(TRUE);
--#endif
--                      memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_LockYAFFS(TRUE);
--#endif
--                      chunkWritten =
--                          yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
--                                                       dev->nDataBytesPerChunk,
--                                                       0);
--                      yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
--#else
-                       /* A full chunk. Write directly from the supplied buffer. */
-+
-+
-+
-                       chunkWritten =
-                           yaffs_WriteChunkDataToObject(in, chunk, buffer,
-                                                        dev->nDataBytesPerChunk,
-                                                        0);
--#endif
-+
-                       /* Since we've overwritten the cached data, we better invalidate it. */
-                       yaffs_InvalidateChunkCache(in, chunk);
-               }
-@@ -4886,9 +4913,8 @@ int yaffs_WriteDataToFile(yaffs_Object *
-       /* Update file object */
--      if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
-+      if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize)
-               in->variant.fileVariant.fileSize = (startOfWrite + nDone);
--      }
-       in->dirty = 1;
-@@ -4898,7 +4924,7 @@ int yaffs_WriteDataToFile(yaffs_Object *
- /* ---------------------- File resizing stuff ------------------ */
--static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
-+static void yaffs_PruneResizedChunks(yaffs_Object *in, int newSize)
- {
-       yaffs_Device *dev = in->myDev;
-@@ -4939,11 +4965,11 @@ static void yaffs_PruneResizedChunks(yaf
- }
--int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
-+int yaffs_ResizeFile(yaffs_Object *in, loff_t newSize)
- {
-       int oldFileSize = in->variant.fileVariant.fileSize;
--      int newSizeOfPartialChunk;
-+      __u32 newSizeOfPartialChunk;
-       int newFullChunks;
-       yaffs_Device *dev = in->myDev;
-@@ -4955,13 +4981,11 @@ int yaffs_ResizeFile(yaffs_Object * in, 
-       yaffs_CheckGarbageCollection(dev);
--      if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
--              return yaffs_GetFileSize(in);
--      }
-+      if (in->variantType != YAFFS_OBJECT_TYPE_FILE)
-+              return YAFFS_FAIL;
--      if (newSize == oldFileSize) {
--              return oldFileSize;
--      }
-+      if (newSize == oldFileSize)
-+              return YAFFS_OK;
-       if (newSize < oldFileSize) {
-@@ -4994,21 +5018,20 @@ int yaffs_ResizeFile(yaffs_Object * in, 
-       }
--
-       /* Write a new object header.
-        * show we've shrunk the file, if need be
-        * Do this only if the file is not in the deleted directories.
-        */
--      if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
--          in->parent->objectId != YAFFS_OBJECTID_DELETED) {
-+      if (in->parent &&
-+          in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
-+          in->parent->objectId != YAFFS_OBJECTID_DELETED)
-               yaffs_UpdateObjectHeader(in, NULL, 0,
-                                        (newSize < oldFileSize) ? 1 : 0, 0);
--      }
--      return newSize;
-+      return YAFFS_OK;
- }
--loff_t yaffs_GetFileSize(yaffs_Object * obj)
-+loff_t yaffs_GetFileSize(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-@@ -5024,7 +5047,7 @@ loff_t yaffs_GetFileSize(yaffs_Object * 
--int yaffs_FlushFile(yaffs_Object * in, int updateTime)
-+int yaffs_FlushFile(yaffs_Object *in, int updateTime)
- {
-       int retVal;
-       if (in->dirty) {
-@@ -5039,9 +5062,8 @@ int yaffs_FlushFile(yaffs_Object * in, i
- #endif
-               }
--              retVal =
--                  (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
--                   0) ? YAFFS_OK : YAFFS_FAIL;
-+              retVal = (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
-+                      0) ? YAFFS_OK : YAFFS_FAIL;
-       } else {
-               retVal = YAFFS_OK;
-       }
-@@ -5050,7 +5072,7 @@ int yaffs_FlushFile(yaffs_Object * in, i
- }
--static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
-+static int yaffs_DoGenericObjectDeletion(yaffs_Object *in)
- {
-       /* First off, invalidate the file's data in the cache, without flushing. */
-@@ -5058,13 +5080,13 @@ static int yaffs_DoGenericObjectDeletion
-       if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
-               /* Move to the unlinked directory so we have a record that it was deleted. */
--              yaffs_ChangeObjectName(in, in->myDev->deletedDir,"deleted", 0, 0);
-+              yaffs_ChangeObjectName(in, in->myDev->deletedDir, _Y("deleted"), 0, 0);
-       }
-       yaffs_RemoveObjectFromDirectory(in);
--      yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
--      in->chunkId = -1;
-+      yaffs_DeleteChunk(in->myDev, in->hdrChunk, 1, __LINE__);
-+      in->hdrChunk = 0;
-       yaffs_FreeObject(in);
-       return YAFFS_OK;
-@@ -5075,62 +5097,63 @@ static int yaffs_DoGenericObjectDeletion
-  * and the inode associated with the file.
-  * It does not delete the links associated with the file.
-  */
--static int yaffs_UnlinkFile(yaffs_Object * in)
-+static int yaffs_UnlinkFileIfNeeded(yaffs_Object *in)
- {
-       int retVal;
-       int immediateDeletion = 0;
--      if (1) {
- #ifdef __KERNEL__
--              if (!in->myInode) {
--                      immediateDeletion = 1;
--
--              }
-+      if (!in->myInode)
-+              immediateDeletion = 1;
- #else
--              if (in->inUse <= 0) {
--                      immediateDeletion = 1;
--
--              }
-+      if (in->inUse <= 0)
-+              immediateDeletion = 1;
- #endif
--              if (immediateDeletion) {
--                      retVal =
--                          yaffs_ChangeObjectName(in, in->myDev->deletedDir,
--                                                 "deleted", 0, 0);
--                      T(YAFFS_TRACE_TRACING,
--                        (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
--                         in->objectId));
--                      in->deleted = 1;
--                      in->myDev->nDeletedFiles++;
--                      if (0 && in->myDev->isYaffs2) {
--                              yaffs_ResizeFile(in, 0);
--                      }
--                      yaffs_SoftDeleteFile(in);
--              } else {
--                      retVal =
--                          yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
--                                                 "unlinked", 0, 0);
--              }
-+      if (immediateDeletion) {
-+              retVal =
-+                  yaffs_ChangeObjectName(in, in->myDev->deletedDir,
-+                                         _Y("deleted"), 0, 0);
-+              T(YAFFS_TRACE_TRACING,
-+                (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
-+                 in->objectId));
-+              in->deleted = 1;
-+              in->myDev->nDeletedFiles++;
-+              if (1 || in->myDev->isYaffs2)
-+                      yaffs_ResizeFile(in, 0);
-+              yaffs_SoftDeleteFile(in);
-+      } else {
-+              retVal =
-+                  yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
-+                                         _Y("unlinked"), 0, 0);
-       }
-+
-+
-       return retVal;
- }
--int yaffs_DeleteFile(yaffs_Object * in)
-+int yaffs_DeleteFile(yaffs_Object *in)
- {
-       int retVal = YAFFS_OK;
-+      int deleted = in->deleted;
-+
-+      yaffs_ResizeFile(in, 0);
-       if (in->nDataChunks > 0) {
--              /* Use soft deletion if there is data in the file */
--              if (!in->unlinked) {
--                      retVal = yaffs_UnlinkFile(in);
--              }
-+              /* Use soft deletion if there is data in the file.
-+               * That won't be the case if it has been resized to zero.
-+               */
-+              if (!in->unlinked)
-+                      retVal = yaffs_UnlinkFileIfNeeded(in);
-+
-               if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
-                       in->deleted = 1;
-+                      deleted = 1;
-                       in->myDev->nDeletedFiles++;
-                       yaffs_SoftDeleteFile(in);
-               }
--              return in->deleted ? YAFFS_OK : YAFFS_FAIL;
-+              return deleted ? YAFFS_OK : YAFFS_FAIL;
-       } else {
-               /* The file has no data chunks so we toss it immediately */
-               yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
-@@ -5141,62 +5164,75 @@ int yaffs_DeleteFile(yaffs_Object * in)
-       }
- }
--static int yaffs_DeleteDirectory(yaffs_Object * in)
-+static int yaffs_DeleteDirectory(yaffs_Object *in)
- {
-       /* First check that the directory is empty. */
--      if (list_empty(&in->variant.directoryVariant.children)) {
-+      if (ylist_empty(&in->variant.directoryVariant.children))
-               return yaffs_DoGenericObjectDeletion(in);
--      }
-       return YAFFS_FAIL;
- }
--static int yaffs_DeleteSymLink(yaffs_Object * in)
-+static int yaffs_DeleteSymLink(yaffs_Object *in)
- {
-       YFREE(in->variant.symLinkVariant.alias);
-       return yaffs_DoGenericObjectDeletion(in);
- }
--static int yaffs_DeleteHardLink(yaffs_Object * in)
-+static int yaffs_DeleteHardLink(yaffs_Object *in)
- {
-       /* remove this hardlink from the list assocaited with the equivalent
-        * object
-        */
--      list_del(&in->hardLinks);
-+      ylist_del_init(&in->hardLinks);
-       return yaffs_DoGenericObjectDeletion(in);
- }
--static void yaffs_DestroyObject(yaffs_Object * obj)
-+int yaffs_DeleteObject(yaffs_Object *obj)
- {
-+int retVal = -1;
-       switch (obj->variantType) {
-       case YAFFS_OBJECT_TYPE_FILE:
--              yaffs_DeleteFile(obj);
-+              retVal = yaffs_DeleteFile(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_DIRECTORY:
--              yaffs_DeleteDirectory(obj);
-+              return yaffs_DeleteDirectory(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_SYMLINK:
--              yaffs_DeleteSymLink(obj);
-+              retVal = yaffs_DeleteSymLink(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_HARDLINK:
--              yaffs_DeleteHardLink(obj);
-+              retVal = yaffs_DeleteHardLink(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_SPECIAL:
--              yaffs_DoGenericObjectDeletion(obj);
-+              retVal = yaffs_DoGenericObjectDeletion(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_UNKNOWN:
-+              retVal = 0;
-               break;          /* should not happen. */
-       }
-+
-+      return retVal;
- }
--static int yaffs_UnlinkWorker(yaffs_Object * obj)
-+static int yaffs_UnlinkWorker(yaffs_Object *obj)
- {
-+      int immediateDeletion = 0;
-+
-+#ifdef __KERNEL__
-+      if (!obj->myInode)
-+              immediateDeletion = 1;
-+#else
-+      if (obj->inUse <= 0)
-+              immediateDeletion = 1;
-+#endif
-+
-       if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-               return yaffs_DeleteHardLink(obj);
--      } else if (!list_empty(&obj->hardLinks)) {
-+      } else if (!ylist_empty(&obj->hardLinks)) {
-               /* Curve ball: We're unlinking an object that has a hardlink.
-                *
-                * This problem arises because we are not strictly following
-@@ -5215,24 +5251,24 @@ static int yaffs_UnlinkWorker(yaffs_Obje
-               int retVal;
-               YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
--              hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
-+              hl = ylist_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
--              list_del_init(&hl->hardLinks);
--              list_del_init(&hl->siblings);
-+              ylist_del_init(&hl->hardLinks);
-+              ylist_del_init(&hl->siblings);
-               yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
-               retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
--              if (retVal == YAFFS_OK) {
-+              if (retVal == YAFFS_OK)
-                       retVal = yaffs_DoGenericObjectDeletion(hl);
--              }
-+
-               return retVal;
--      } else {
-+      } else if (immediateDeletion) {
-               switch (obj->variantType) {
-               case YAFFS_OBJECT_TYPE_FILE:
--                      return yaffs_UnlinkFile(obj);
-+                      return yaffs_DeleteFile(obj);
-                       break;
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
-                       return yaffs_DeleteDirectory(obj);
-@@ -5248,21 +5284,22 @@ static int yaffs_UnlinkWorker(yaffs_Obje
-               default:
-                       return YAFFS_FAIL;
-               }
--      }
-+      } else
-+              return yaffs_ChangeObjectName(obj, obj->myDev->unlinkedDir,
-+                                         _Y("unlinked"), 0, 0);
- }
--static int yaffs_UnlinkObject( yaffs_Object *obj)
-+static int yaffs_UnlinkObject(yaffs_Object *obj)
- {
--      if (obj && obj->unlinkAllowed) {
-+      if (obj && obj->unlinkAllowed)
-               return yaffs_UnlinkWorker(obj);
--      }
-       return YAFFS_FAIL;
- }
--int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
-+int yaffs_Unlink(yaffs_Object *dir, const YCHAR *name)
- {
-       yaffs_Object *obj;
-@@ -5272,8 +5309,8 @@ int yaffs_Unlink(yaffs_Object * dir, con
- /*----------------------- Initialisation Scanning ---------------------- */
--static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
--                                     int backwardScanning)
-+static void yaffs_HandleShadowedObject(yaffs_Device *dev, int objId,
-+                              int backwardScanning)
- {
-       yaffs_Object *obj;
-@@ -5286,9 +5323,8 @@ static void yaffs_HandleShadowedObject(y
-               /* Handle YAFFS2 case (backward scanning)
-                * If the shadowed object exists then ignore.
-                */
--              if (yaffs_FindObjectByNumber(dev, objId)) {
-+              if (yaffs_FindObjectByNumber(dev, objId))
-                       return;
--              }
-       }
-       /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
-@@ -5297,6 +5333,8 @@ static void yaffs_HandleShadowedObject(y
-       obj =
-           yaffs_FindOrCreateObjectByNumber(dev, objId,
-                                            YAFFS_OBJECT_TYPE_FILE);
-+      if (!obj)
-+              return;
-       yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
-       obj->variant.fileVariant.shrinkSize = 0;
-       obj->valid = 1;         /* So that we don't read any other info for this file */
-@@ -5325,44 +5363,77 @@ static void yaffs_HardlinkFixup(yaffs_De
-               if (in) {
-                       /* Add the hardlink pointers */
-                       hl->variant.hardLinkVariant.equivalentObject = in;
--                      list_add(&hl->hardLinks, &in->hardLinks);
-+                      ylist_add(&hl->hardLinks, &in->hardLinks);
-               } else {
-                       /* Todo Need to report/handle this better.
-                        * Got a problem... hardlink to a non-existant object
-                        */
-                       hl->variant.hardLinkVariant.equivalentObject = NULL;
--                      INIT_LIST_HEAD(&hl->hardLinks);
-+                      YINIT_LIST_HEAD(&hl->hardLinks);
-               }
--
-       }
-+}
-+
-+
-+
-+
-+static int ybicmp(const void *a, const void *b)
-+{
-+      register int aseq = ((yaffs_BlockIndex *)a)->seq;
-+      register int bseq = ((yaffs_BlockIndex *)b)->seq;
-+      register int ablock = ((yaffs_BlockIndex *)a)->block;
-+      register int bblock = ((yaffs_BlockIndex *)b)->block;
-+      if (aseq == bseq)
-+              return ablock - bblock;
-+      else
-+              return aseq - bseq;
- }
-+struct yaffs_ShadowFixerStruct {
-+      int objectId;
-+      int shadowedId;
-+      struct yaffs_ShadowFixerStruct *next;
-+};
-+
-+static void yaffs_StripDeletedObjects(yaffs_Device *dev)
-+{
-+      /*
-+      *  Sort out state of unlinked and deleted objects after scanning.
-+      */
-+      struct ylist_head *i;
-+      struct ylist_head *n;
-+      yaffs_Object *l;
-+      /* Soft delete all the unlinked files */
-+      ylist_for_each_safe(i, n,
-+              &dev->unlinkedDir->variant.directoryVariant.children) {
-+              if (i) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      yaffs_DeleteObject(l);
-+              }
-+      }
--static int ybicmp(const void *a, const void *b){
--    register int aseq = ((yaffs_BlockIndex *)a)->seq;
--    register int bseq = ((yaffs_BlockIndex *)b)->seq;
--    register int ablock = ((yaffs_BlockIndex *)a)->block;
--    register int bblock = ((yaffs_BlockIndex *)b)->block;
--    if( aseq == bseq )
--        return ablock - bblock;
--    else
--        return aseq - bseq;
-+      ylist_for_each_safe(i, n,
-+              &dev->deletedDir->variant.directoryVariant.children) {
-+              if (i) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      yaffs_DeleteObject(l);
-+              }
-+      }
- }
--static int yaffs_Scan(yaffs_Device * dev)
-+static int yaffs_Scan(yaffs_Device *dev)
- {
-       yaffs_ExtendedTags tags;
-       int blk;
-       int blockIterator;
-       int startIterator;
-       int endIterator;
--      int nBlocksToScan = 0;
-       int result;
-       int chunk;
-@@ -5371,26 +5442,19 @@ static int yaffs_Scan(yaffs_Device * dev
-       yaffs_BlockState state;
-       yaffs_Object *hardList = NULL;
-       yaffs_BlockInfo *bi;
--      int sequenceNumber;
-+      __u32 sequenceNumber;
-       yaffs_ObjectHeader *oh;
-       yaffs_Object *in;
-       yaffs_Object *parent;
--      int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-       int alloc_failed = 0;
-+      struct yaffs_ShadowFixerStruct *shadowFixerList = NULL;
-+
-       __u8 *chunkData;
--      yaffs_BlockIndex *blockIndex = NULL;
--      if (dev->isYaffs2) {
--              T(YAFFS_TRACE_SCAN,
--                (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
--              return YAFFS_FAIL;
--      }
--
--      //TODO  Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
-       T(YAFFS_TRACE_SCAN,
-         (TSTR("yaffs_Scan starts  intstartblk %d intendblk %d..." TENDSTR),
-@@ -5400,12 +5464,6 @@ static int yaffs_Scan(yaffs_Device * dev
-       dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
--      if (dev->isYaffs2) {
--              blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
--              if(!blockIndex)
--                      return YAFFS_FAIL;
--      }
--
-       /* Scan all the blocks to determine their state */
-       for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
-               bi = yaffs_GetBlockInfo(dev, blk);
-@@ -5418,6 +5476,9 @@ static int yaffs_Scan(yaffs_Device * dev
-               bi->blockState = state;
-               bi->sequenceNumber = sequenceNumber;
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_BAD_BLOCK)
-+                      bi->blockState = state = YAFFS_BLOCK_STATE_DEAD;
-+
-               T(YAFFS_TRACE_SCAN_DEBUG,
-                 (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
-                  state, sequenceNumber));
-@@ -5430,70 +5491,21 @@ static int yaffs_Scan(yaffs_Device * dev
-                         (TSTR("Block empty " TENDSTR)));
-                       dev->nErasedBlocks++;
-                       dev->nFreeChunks += dev->nChunksPerBlock;
--              } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
--
--                      /* Determine the highest sequence number */
--                      if (dev->isYaffs2 &&
--                          sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
--                          sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
--
--                              blockIndex[nBlocksToScan].seq = sequenceNumber;
--                              blockIndex[nBlocksToScan].block = blk;
--
--                              nBlocksToScan++;
--
--                              if (sequenceNumber >= dev->sequenceNumber) {
--                                      dev->sequenceNumber = sequenceNumber;
--                              }
--                      } else if (dev->isYaffs2) {
--                              /* TODO: Nasty sequence number! */
--                              T(YAFFS_TRACE_SCAN,
--                                (TSTR
--                                 ("Block scanning block %d has bad sequence number %d"
--                                  TENDSTR), blk, sequenceNumber));
--
--                      }
-               }
-       }
--      /* Sort the blocks
--       * Dungy old bubble sort for now...
--       */
--      if (dev->isYaffs2) {
--              yaffs_BlockIndex temp;
--              int i;
--              int j;
--
--              for (i = 0; i < nBlocksToScan; i++)
--                      for (j = i + 1; j < nBlocksToScan; j++)
--                              if (blockIndex[i].seq > blockIndex[j].seq) {
--                                      temp = blockIndex[j];
--                                      blockIndex[j] = blockIndex[i];
--                                      blockIndex[i] = temp;
--                              }
--      }
--
--      /* Now scan the blocks looking at the data. */
--      if (dev->isYaffs2) {
--              startIterator = 0;
--              endIterator = nBlocksToScan - 1;
--              T(YAFFS_TRACE_SCAN_DEBUG,
--                (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
--      } else {
--              startIterator = dev->internalStartBlock;
--              endIterator = dev->internalEndBlock;
--      }
-+      startIterator = dev->internalStartBlock;
-+      endIterator = dev->internalEndBlock;
-       /* For each block.... */
-       for (blockIterator = startIterator; !alloc_failed && blockIterator <= endIterator;
-            blockIterator++) {
--              if (dev->isYaffs2) {
--                      /* get the block to scan in the correct order */
--                      blk = blockIndex[blockIterator].block;
--              } else {
--                      blk = blockIterator;
--              }
-+              YYIELD();
-+
-+              YYIELD();
-+
-+              blk = blockIterator;
-               bi = yaffs_GetBlockInfo(dev, blk);
-               state = bi->blockState;
-@@ -5511,7 +5523,7 @@ static int yaffs_Scan(yaffs_Device * dev
-                       /* Let's have a good look at this chunk... */
--                      if (!dev->isYaffs2 && tags.chunkDeleted) {
-+                      if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED || tags.chunkDeleted) {
-                               /* YAFFS1 only...
-                                * A deleted chunk
-                                */
-@@ -5540,18 +5552,6 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       dev->allocationBlockFinder = blk;
-                                       /* Set it to here to encourage the allocator to go forth from here. */
--                                      /* Yaffs2 sanity check:
--                                       * This should be the one with the highest sequence number
--                                       */
--                                      if (dev->isYaffs2
--                                          && (dev->sequenceNumber !=
--                                              bi->sequenceNumber)) {
--                                              T(YAFFS_TRACE_ALWAYS,
--                                                (TSTR
--                                                 ("yaffs: Allocation block %d was not highest sequence id:"
--                                                  " block seq = %d, dev seq = %d"
--                                                  TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
--                                      }
-                               }
-                               dev->nFreeChunks += (dev->nChunksPerBlock - c);
-@@ -5570,11 +5570,11 @@ static int yaffs_Scan(yaffs_Device * dev
-                                * the same chunkId).
-                                */
--                              if(!in)
-+                              if (!in)
-                                       alloc_failed = 1;
--                              if(in){
--                                      if(!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,1))
-+                              if (in) {
-+                                      if (!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk, 1))
-                                               alloc_failed = 1;
-                               }
-@@ -5617,7 +5617,7 @@ static int yaffs_Scan(yaffs_Device * dev
-                                        * deleted, and worse still it has changed type. Delete the old object.
-                                        */
--                                      yaffs_DestroyObject(in);
-+                                      yaffs_DeleteObject(in);
-                                       in = 0;
-                               }
-@@ -5627,14 +5627,20 @@ static int yaffs_Scan(yaffs_Device * dev
-                                                                     objectId,
-                                                                     oh->type);
--                              if(!in)
-+                              if (!in)
-                                       alloc_failed = 1;
-                               if (in && oh->shadowsObject > 0) {
--                                      yaffs_HandleShadowedObject(dev,
--                                                                 oh->
--                                                                 shadowsObject,
--                                                                 0);
-+
-+                                      struct yaffs_ShadowFixerStruct *fixer;
-+                                      fixer = YMALLOC(sizeof(struct yaffs_ShadowFixerStruct));
-+                                      if (fixer) {
-+                                              fixer->next = shadowFixerList;
-+                                              shadowFixerList = fixer;
-+                                              fixer->objectId = tags.objectId;
-+                                              fixer->shadowedId = oh->shadowsObject;
-+                                      }
-+
-                               }
-                               if (in && in->valid) {
-@@ -5643,12 +5649,10 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       unsigned existingSerial = in->serial;
-                                       unsigned newSerial = tags.serialNumber;
--                                      if (dev->isYaffs2 ||
--                                          ((existingSerial + 1) & 3) ==
--                                          newSerial) {
-+                                      if (((existingSerial + 1) & 3) == newSerial) {
-                                               /* Use new one - destroy the exisiting one */
-                                               yaffs_DeleteChunk(dev,
--                                                                in->chunkId,
-+                                                                in->hdrChunk,
-                                                                 1, __LINE__);
-                                               in->valid = 0;
-                                       } else {
-@@ -5681,7 +5685,8 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       in->yst_ctime = oh->yst_ctime;
-                                       in->yst_rdev = oh->yst_rdev;
- #endif
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-+                                      in->serial = tags.serialNumber;
-                               } else if (in && !in->valid) {
-                                       /* we need to load this info */
-@@ -5705,7 +5710,8 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       in->yst_ctime = oh->yst_ctime;
-                                       in->yst_rdev = oh->yst_rdev;
- #endif
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-+                                      in->serial = tags.serialNumber;
-                                       yaffs_SetObjectName(in, oh->name);
-                                       in->dirty = 0;
-@@ -5718,25 +5724,25 @@ static int yaffs_Scan(yaffs_Device * dev
-                                           yaffs_FindOrCreateObjectByNumber
-                                           (dev, oh->parentObjectId,
-                                            YAFFS_OBJECT_TYPE_DIRECTORY);
--                                      if (parent->variantType ==
-+                                      if (!parent)
-+                                              alloc_failed = 1;
-+                                      if (parent && parent->variantType ==
-                                           YAFFS_OBJECT_TYPE_UNKNOWN) {
-                                               /* Set up as a directory */
-                                               parent->variantType =
--                                                  YAFFS_OBJECT_TYPE_DIRECTORY;
--                                              INIT_LIST_HEAD(&parent->variant.
--                                                             directoryVariant.
--                                                             children);
--                                      } else if (parent->variantType !=
--                                                 YAFFS_OBJECT_TYPE_DIRECTORY)
--                                      {
-+                                                      YAFFS_OBJECT_TYPE_DIRECTORY;
-+                                              YINIT_LIST_HEAD(&parent->variant.
-+                                                              directoryVariant.
-+                                                              children);
-+                                      } else if (!parent || parent->variantType !=
-+                                                 YAFFS_OBJECT_TYPE_DIRECTORY) {
-                                               /* Hoosterman, another problem....
-                                                * We're trying to use a non-directory as a directory
-                                                */
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR
--                                                 ("yaffs tragedy: attempting to use non-directory as"
--                                                  " a directory in scan. Put in lost+found."
-+                                                 ("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
-                                                   TENDSTR)));
-                                               parent = dev->lostNFoundDir;
-                                       }
-@@ -5760,15 +5766,6 @@ static int yaffs_Scan(yaffs_Device * dev
-                                               /* Todo got a problem */
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_FILE:
--                                              if (dev->isYaffs2
--                                                  && oh->isShrink) {
--                                                      /* Prune back the shrunken chunks */
--                                                      yaffs_PruneResizedChunks
--                                                          (in, oh->fileSize);
--                                                      /* Mark the block as having a shrinkHeader */
--                                                      bi->hasShrinkHeader = 1;
--                                              }
--
-                                               if (dev->useHeaderFileSize)
-                                                       in->variant.fileVariant.
-@@ -5778,11 +5775,11 @@ static int yaffs_Scan(yaffs_Device * dev
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_HARDLINK:
-                                               in->variant.hardLinkVariant.
--                                                  equivalentObjectId =
--                                                  oh->equivalentObjectId;
-+                                                      equivalentObjectId =
-+                                                      oh->equivalentObjectId;
-                                               in->hardLinks.next =
--                                                  (struct list_head *)
--                                                  hardList;
-+                                                      (struct ylist_head *)
-+                                                      hardList;
-                                               hardList = in;
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -5794,15 +5791,17 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       case YAFFS_OBJECT_TYPE_SYMLINK:
-                                               in->variant.symLinkVariant.alias =
-                                                   yaffs_CloneString(oh->alias);
--                                              if(!in->variant.symLinkVariant.alias)
-+                                              if (!in->variant.symLinkVariant.alias)
-                                                       alloc_failed = 1;
-                                               break;
-                                       }
-+/*
-                                       if (parent == dev->deletedDir) {
-                                               yaffs_DestroyObject(in);
-                                               bi->hasShrinkHeader = 1;
-                                       }
-+*/
-                               }
-                       }
-               }
-@@ -5823,10 +5822,6 @@ static int yaffs_Scan(yaffs_Device * dev
-       }
--      if (blockIndex) {
--              YFREE(blockIndex);
--      }
--
-       /* Ok, we've done all the scanning.
-        * Fix up the hard link chains.
-@@ -5834,32 +5829,36 @@ static int yaffs_Scan(yaffs_Device * dev
-        * hardlinks.
-        */
--      yaffs_HardlinkFixup(dev,hardList);
-+      yaffs_HardlinkFixup(dev, hardList);
--      /* Handle the unlinked files. Since they were left in an unlinked state we should
--       * just delete them.
--       */
-+      /* Fix up any shadowed objects */
-       {
--              struct list_head *i;
--              struct list_head *n;
-+              struct yaffs_ShadowFixerStruct *fixer;
-+              yaffs_Object *obj;
--              yaffs_Object *l;
--              /* Soft delete all the unlinked files */
--              list_for_each_safe(i, n,
--                                 &dev->unlinkedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
--                      }
-+              while (shadowFixerList) {
-+                      fixer = shadowFixerList;
-+                      shadowFixerList = fixer->next;
-+                      /* Complete the rename transaction by deleting the shadowed object
-+                       * then setting the object header to unshadowed.
-+                       */
-+                      obj = yaffs_FindObjectByNumber(dev, fixer->shadowedId);
-+                      if (obj)
-+                              yaffs_DeleteObject(obj);
-+
-+                      obj = yaffs_FindObjectByNumber(dev, fixer->objectId);
-+
-+                      if (obj)
-+                              yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
-+
-+                      YFREE(fixer);
-               }
-       }
-       yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
--      if(alloc_failed){
-+      if (alloc_failed)
-               return YAFFS_FAIL;
--      }
-       T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
-@@ -5871,25 +5870,27 @@ static void yaffs_CheckObjectDetailsLoad
- {
-       __u8 *chunkData;
-       yaffs_ObjectHeader *oh;
--      yaffs_Device *dev = in->myDev;
-+      yaffs_Device *dev;
-       yaffs_ExtendedTags tags;
-       int result;
-       int alloc_failed = 0;
--      if(!in)
-+      if (!in)
-               return;
-+      dev = in->myDev;
-+
- #if 0
--      T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
-+      T(YAFFS_TRACE_SCAN, (TSTR("details for object %d %s loaded" TENDSTR),
-               in->objectId,
-               in->lazyLoaded ? "not yet" : "already"));
- #endif
--      if(in->lazyLoaded){
-+      if (in->lazyLoaded && in->hdrChunk > 0) {
-               in->lazyLoaded = 0;
-               chunkData = yaffs_GetTempBuffer(dev, __LINE__);
--              result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
-+              result = yaffs_ReadChunkWithTagsFromNAND(dev, in->hdrChunk, chunkData, &tags);
-               oh = (yaffs_ObjectHeader *) chunkData;
-               in->yst_mode = oh->yst_mode;
-@@ -5911,18 +5912,18 @@ static void yaffs_CheckObjectDetailsLoad
- #endif
-               yaffs_SetObjectName(in, oh->name);
--              if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
--                       in->variant.symLinkVariant.alias =
-+              if (in->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+                      in->variant.symLinkVariant.alias =
-                                                   yaffs_CloneString(oh->alias);
--                      if(!in->variant.symLinkVariant.alias)
-+                      if (!in->variant.symLinkVariant.alias)
-                               alloc_failed = 1; /* Not returned to caller */
-               }
--              yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
-+              yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-       }
- }
--static int yaffs_ScanBackwards(yaffs_Device * dev)
-+static int yaffs_ScanBackwards(yaffs_Device *dev)
- {
-       yaffs_ExtendedTags tags;
-       int blk;
-@@ -5938,7 +5939,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       yaffs_BlockState state;
-       yaffs_Object *hardList = NULL;
-       yaffs_BlockInfo *bi;
--      int sequenceNumber;
-+      __u32 sequenceNumber;
-       yaffs_ObjectHeader *oh;
-       yaffs_Object *in;
-       yaffs_Object *parent;
-@@ -5972,12 +5973,12 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
--      if(!blockIndex) {
-+      if (!blockIndex) {
-               blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
-               altBlockIndex = 1;
-       }
--      if(!blockIndex) {
-+      if (!blockIndex) {
-               T(YAFFS_TRACE_SCAN,
-                 (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
-               return YAFFS_FAIL;
-@@ -5999,15 +6000,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-               bi->blockState = state;
-               bi->sequenceNumber = sequenceNumber;
--              if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
-                       bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_BAD_BLOCK)
-+                      bi->blockState = state = YAFFS_BLOCK_STATE_DEAD;
-               T(YAFFS_TRACE_SCAN_DEBUG,
-                 (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
-                  state, sequenceNumber));
--              if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
-+              if (state == YAFFS_BLOCK_STATE_CHECKPOINT) {
-                       dev->blocksInCheckpoint++;
-               } else if (state == YAFFS_BLOCK_STATE_DEAD) {
-@@ -6021,8 +6024,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-               } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-                       /* Determine the highest sequence number */
--                      if (dev->isYaffs2 &&
--                          sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
-+                      if (sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
-                           sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-                               blockIndex[nBlocksToScan].seq = sequenceNumber;
-@@ -6030,10 +6032,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               nBlocksToScan++;
--                              if (sequenceNumber >= dev->sequenceNumber) {
-+                              if (sequenceNumber >= dev->sequenceNumber)
-                                       dev->sequenceNumber = sequenceNumber;
--                              }
--                      } else if (dev->isYaffs2) {
-+                      } else {
-                               /* TODO: Nasty sequence number! */
-                               T(YAFFS_TRACE_SCAN,
-                                 (TSTR
-@@ -6053,11 +6054,13 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       /* Sort the blocks */
- #ifndef CONFIG_YAFFS_USE_OWN_SORT
--      yaffs_qsort(blockIndex, nBlocksToScan,
--              sizeof(yaffs_BlockIndex), ybicmp);
-+      {
-+              /* Use qsort now. */
-+              yaffs_qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
-+      }
- #else
-       {
--              /* Dungy old bubble sort... */
-+              /* Dungy old bubble sort... */
-               yaffs_BlockIndex temp;
-               int i;
-@@ -6075,7 +6078,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       YYIELD();
--      T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-+      T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-       /* Now scan the blocks looking at the data. */
-       startIterator = 0;
-@@ -6085,10 +6088,10 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       /* For each block.... backwards */
-       for (blockIterator = endIterator; !alloc_failed && blockIterator >= startIterator;
--           blockIterator--) {
--              /* Cooperative multitasking! This loop can run for so
-+                      blockIterator--) {
-+              /* Cooperative multitasking! This loop can run for so
-                  long that watchdog timers expire. */
--              YYIELD();
-+              YYIELD();
-               /* get the block to scan in the correct order */
-               blk = blockIndex[blockIterator].block;
-@@ -6127,10 +6130,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                * this is the one being allocated from
-                                */
--                              if(foundChunksInBlock)
--                              {
-+                              if (foundChunksInBlock) {
-                                       /* This is a chunk that was skipped due to failing the erased check */
--
-                               } else if (c == 0) {
-                                       /* We're looking at the first chunk in the block so the block is unused */
-                                       state = YAFFS_BLOCK_STATE_EMPTY;
-@@ -6138,7 +6139,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               } else {
-                                       if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
-                                           state == YAFFS_BLOCK_STATE_ALLOCATING) {
--                                              if(dev->sequenceNumber == bi->sequenceNumber) {
-+                                              if (dev->sequenceNumber == bi->sequenceNumber) {
-                                                       /* this is the block being allocated from */
-                                                       T(YAFFS_TRACE_SCAN,
-@@ -6150,27 +6151,31 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                       dev->allocationBlock = blk;
-                                                       dev->allocationPage = c;
-                                                       dev->allocationBlockFinder = blk;
--                                              }
--                                              else {
-+                                              } else {
-                                                       /* This is a partially written block that is not
-                                                        * the current allocation block. This block must have
-                                                        * had a write failure, so set up for retirement.
-                                                        */
--                                                       bi->needsRetiring = 1;
-+                                                       /* bi->needsRetiring = 1; ??? TODO */
-                                                        bi->gcPrioritise = 1;
-                                                        T(YAFFS_TRACE_ALWAYS,
--                                                       (TSTR("Partially written block %d being set for retirement" TENDSTR),
-+                                                       (TSTR("Partially written block %d detected" TENDSTR),
-                                                        blk));
-                                               }
--
-                                       }
--
-                               }
-                               dev->nFreeChunks++;
-+                      } else if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED) {
-+                              T(YAFFS_TRACE_SCAN,
-+                                (TSTR(" Unfixed ECC in chunk(%d:%d), chunk ignored"TENDSTR),
-+                                blk, c));
-+
-+                                dev->nFreeChunks++;
-+
-                       } else if (tags.chunkId > 0) {
-                               /* chunkId > 0 so it is a data chunk... */
-                               unsigned int endpos;
-@@ -6187,7 +6192,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                                     tags.
-                                                                     objectId,
-                                                                     YAFFS_OBJECT_TYPE_FILE);
--                              if(!in){
-+                              if (!in) {
-                                       /* Out of memory */
-                                       alloc_failed = 1;
-                               }
-@@ -6197,8 +6202,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                   && chunkBase <
-                                   in->variant.fileVariant.shrinkSize) {
-                                       /* This has not been invalidated by a resize */
--                                      if(!yaffs_PutChunkIntoFile(in, tags.chunkId,
--                                                             chunk, -1)){
-+                                      if (!yaffs_PutChunkIntoFile(in, tags.chunkId,
-+                                                             chunk, -1)) {
-                                               alloc_failed = 1;
-                                       }
-@@ -6221,7 +6226,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                   scannedFileSize;
-                                       }
--                              } else if(in) {
-+                              } else if (in) {
-                                       /* This chunk has been invalidated by a resize, so delete */
-                                       yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
-@@ -6242,6 +6247,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       in = yaffs_FindOrCreateObjectByNumber
-                                           (dev, tags.objectId,
-                                            tags.extraObjectType);
-+                                      if (!in)
-+                                              alloc_failed = 1;
-                               }
-                               if (!in ||
-@@ -6251,8 +6258,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                   tags.extraShadows ||
-                                   (!in->valid &&
-                                   (tags.objectId == YAFFS_OBJECTID_ROOT ||
--                                   tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
--                                  ) {
-+                                   tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))) {
-                                       /* If we don't have  valid info then we need to read the chunk
-                                        * TODO In future we can probably defer reading the chunk and
-@@ -6266,8 +6272,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       oh = (yaffs_ObjectHeader *) chunkData;
--                                      if (!in)
-+                                      if (dev->inbandTags) {
-+                                              /* Fix up the header if they got corrupted by inband tags */
-+                                              oh->shadowsObject = oh->inbandShadowsObject;
-+                                              oh->isShrink = oh->inbandIsShrink;
-+                                      }
-+
-+                                      if (!in) {
-                                               in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
-+                                              if (!in)
-+                                                      alloc_failed = 1;
-+                                      }
-                               }
-@@ -6275,10 +6290,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       /* TODO Hoosterman we have a problem! */
-                                       T(YAFFS_TRACE_ERROR,
-                                         (TSTR
--                                         ("yaffs tragedy: Could not make object for object  %d  "
--                                          "at chunk %d during scan"
-+                                         ("yaffs tragedy: Could not make object for object  %d at chunk %d during scan"
-                                           TENDSTR), tags.objectId, chunk));
--
-+                                      continue;
-                               }
-                               if (in->valid) {
-@@ -6289,10 +6303,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
-                                            ((oh &&
--                                             oh-> type == YAFFS_OBJECT_TYPE_FILE)||
-+                                             oh->type == YAFFS_OBJECT_TYPE_FILE) ||
-                                             (tags.extraHeaderInfoAvailable  &&
--                                             tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
--                                          ) {
-+                                             tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))) {
-                                               __u32 thisSize =
-                                                   (oh) ? oh->fileSize : tags.
-                                                   extraFileLength;
-@@ -6300,7 +6313,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                   (oh) ? oh->
-                                                   parentObjectId : tags.
-                                                   extraParentObjectId;
--                                              unsigned isShrink =
-+
-+
-+                                              isShrink =
-                                                   (oh) ? oh->isShrink : tags.
-                                                   extraIsShrinkHeader;
-@@ -6323,9 +6338,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                           thisSize;
-                                               }
--                                              if (isShrink) {
-+                                              if (isShrink)
-                                                       bi->hasShrinkHeader = 1;
--                                              }
-                                       }
-                                       /* Use existing - destroy this one. */
-@@ -6333,6 +6347,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               }
-+                              if (!in->valid && in->variantType !=
-+                                  (oh ? oh->type : tags.extraObjectType))
-+                                      T(YAFFS_TRACE_ERROR, (
-+                                              TSTR("yaffs tragedy: Bad object type, "
-+                                          TCONT("%d != %d, for object %d at chunk ")
-+                                          TCONT("%d during scan")
-+                                              TENDSTR), oh ?
-+                                          oh->type : tags.extraObjectType,
-+                                          in->variantType, tags.objectId,
-+                                          chunk));
-+
-                               if (!in->valid &&
-                                   (tags.objectId == YAFFS_OBJECTID_ROOT ||
-                                    tags.objectId ==
-@@ -6340,7 +6365,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       /* We only load some info, don't fiddle with directory structure */
-                                       in->valid = 1;
--                                      if(oh) {
-+                                      if (oh) {
-                                               in->variantType = oh->type;
-                                               in->yst_mode = oh->yst_mode;
-@@ -6365,15 +6390,15 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               in->lazyLoaded = 1;
-                                       }
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-                               } else if (!in->valid) {
-                                       /* we need to load this info */
-                                       in->valid = 1;
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
--                                      if(oh) {
-+                                      if (oh) {
-                                               in->variantType = oh->type;
-                                               in->yst_mode = oh->yst_mode;
-@@ -6403,20 +6428,19 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               yaffs_SetObjectName(in, oh->name);
-                                               parent =
-                                                   yaffs_FindOrCreateObjectByNumber
--                                                      (dev, oh->parentObjectId,
--                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-+                                                      (dev, oh->parentObjectId,
-+                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-                                                fileSize = oh->fileSize;
--                                               isShrink = oh->isShrink;
-+                                               isShrink = oh->isShrink;
-                                                equivalentObjectId = oh->equivalentObjectId;
--                                      }
--                                      else {
-+                                      } else {
-                                               in->variantType = tags.extraObjectType;
-                                               parent =
-                                                   yaffs_FindOrCreateObjectByNumber
--                                                      (dev, tags.extraParentObjectId,
--                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-+                                                      (dev, tags.extraParentObjectId,
-+                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-                                                fileSize = tags.extraFileLength;
-                                                isShrink = tags.extraIsShrinkHeader;
-                                                equivalentObjectId = tags.extraEquivalentObjectId;
-@@ -6425,29 +6449,30 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       }
-                                       in->dirty = 0;
-+                                      if (!parent)
-+                                              alloc_failed = 1;
-+
-                                       /* directory stuff...
-                                        * hook up to parent
-                                        */
--                                      if (parent->variantType ==
-+                                      if (parent && parent->variantType ==
-                                           YAFFS_OBJECT_TYPE_UNKNOWN) {
-                                               /* Set up as a directory */
-                                               parent->variantType =
--                                                  YAFFS_OBJECT_TYPE_DIRECTORY;
--                                              INIT_LIST_HEAD(&parent->variant.
--                                                             directoryVariant.
--                                                             children);
--                                      } else if (parent->variantType !=
--                                                 YAFFS_OBJECT_TYPE_DIRECTORY)
--                                      {
-+                                                      YAFFS_OBJECT_TYPE_DIRECTORY;
-+                                              YINIT_LIST_HEAD(&parent->variant.
-+                                                      directoryVariant.
-+                                                      children);
-+                                      } else if (!parent || parent->variantType !=
-+                                                 YAFFS_OBJECT_TYPE_DIRECTORY) {
-                                               /* Hoosterman, another problem....
-                                                * We're trying to use a non-directory as a directory
-                                                */
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR
--                                                 ("yaffs tragedy: attempting to use non-directory as"
--                                                  " a directory in scan. Put in lost+found."
-+                                                 ("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
-                                                   TENDSTR)));
-                                               parent = dev->lostNFoundDir;
-                                       }
-@@ -6494,12 +6519,12 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_HARDLINK:
--                                              if(!itsUnlinked) {
--                                                in->variant.hardLinkVariant.equivalentObjectId =
--                                                  equivalentObjectId;
--                                                in->hardLinks.next =
--                                                  (struct list_head *) hardList;
--                                                hardList = in;
-+                                              if (!itsUnlinked) {
-+                                                      in->variant.hardLinkVariant.equivalentObjectId =
-+                                                              equivalentObjectId;
-+                                                      in->hardLinks.next =
-+                                                              (struct ylist_head *) hardList;
-+                                                      hardList = in;
-                                               }
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -6509,12 +6534,11 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               /* Do nothing */
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_SYMLINK:
--                                              if(oh){
--                                                 in->variant.symLinkVariant.alias =
--                                                  yaffs_CloneString(oh->
--                                                                    alias);
--                                                 if(!in->variant.symLinkVariant.alias)
--                                                      alloc_failed = 1;
-+                                              if (oh) {
-+                                                      in->variant.symLinkVariant.alias =
-+                                                              yaffs_CloneString(oh->alias);
-+                                                      if (!in->variant.symLinkVariant.alias)
-+                                                              alloc_failed = 1;
-                                               }
-                                               break;
-                                       }
-@@ -6551,75 +6575,129 @@ static int yaffs_ScanBackwards(yaffs_Dev
-        * We should now have scanned all the objects, now it's time to add these
-        * hardlinks.
-        */
--      yaffs_HardlinkFixup(dev,hardList);
-+      yaffs_HardlinkFixup(dev, hardList);
--      /*
--      *  Sort out state of unlinked and deleted objects.
--      */
--      {
--              struct list_head *i;
--              struct list_head *n;
-+      yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
--              yaffs_Object *l;
-+      if (alloc_failed)
-+              return YAFFS_FAIL;
--              /* Soft delete all the unlinked files */
--              list_for_each_safe(i, n,
--                                 &dev->unlinkedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
--                      }
--              }
-+      T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
--              /* Soft delete all the deletedDir files */
--              list_for_each_safe(i, n,
--                                 &dev->deletedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
-+      return YAFFS_OK;
-+}
--                      }
-+/*------------------------------  Directory Functions ----------------------------- */
-+
-+static void yaffs_VerifyObjectInDirectory(yaffs_Object *obj)
-+{
-+      struct ylist_head *lh;
-+      yaffs_Object *listObj;
-+
-+      int count = 0;
-+
-+      if (!obj) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("No object to verify" TENDSTR)));
-+              YBUG();
-+              return;
-+      }
-+
-+      if (yaffs_SkipVerification(obj->myDev))
-+              return;
-+
-+      if (!obj->parent) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Object does not have parent" TENDSTR)));
-+              YBUG();
-+              return;
-+      }
-+
-+      if (obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Parent is not directory" TENDSTR)));
-+              YBUG();
-+      }
-+
-+      /* Iterate through the objects in each hash entry */
-+
-+      ylist_for_each(lh, &obj->parent->variant.directoryVariant.children) {
-+              if (lh) {
-+                      listObj = ylist_entry(lh, yaffs_Object, siblings);
-+                      yaffs_VerifyObject(listObj);
-+                      if (obj == listObj)
-+                              count++;
-               }
-+       }
-+
-+      if (count != 1) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Object in directory %d times" TENDSTR), count));
-+              YBUG();
-       }
-+}
--      yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-+static void yaffs_VerifyDirectory(yaffs_Object *directory)
-+{
-+      struct ylist_head *lh;
-+      yaffs_Object *listObj;
--      if(alloc_failed){
--              return YAFFS_FAIL;
-+      if (!directory) {
-+              YBUG();
-+              return;
-       }
--      T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
-+      if (yaffs_SkipFullVerification(directory->myDev))
-+              return;
--      return YAFFS_OK;
-+      if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Directory has wrong type: %d" TENDSTR), directory->variantType));
-+              YBUG();
-+      }
-+
-+      /* Iterate through the objects in each hash entry */
-+
-+      ylist_for_each(lh, &directory->variant.directoryVariant.children) {
-+              if (lh) {
-+                      listObj = ylist_entry(lh, yaffs_Object, siblings);
-+                      if (listObj->parent != directory) {
-+                              T(YAFFS_TRACE_ALWAYS, (TSTR("Object in directory list has wrong parent %p" TENDSTR), listObj->parent));
-+                              YBUG();
-+                      }
-+                      yaffs_VerifyObjectInDirectory(listObj);
-+              }
-+      }
- }
--/*------------------------------  Directory Functions ----------------------------- */
--static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
-+static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj)
- {
-       yaffs_Device *dev = obj->myDev;
-+      yaffs_Object *parent;
-+
-+      yaffs_VerifyObjectInDirectory(obj);
-+      parent = obj->parent;
-+
-+      yaffs_VerifyDirectory(parent);
--      if(dev && dev->removeObjectCallback)
-+      if (dev && dev->removeObjectCallback)
-               dev->removeObjectCallback(obj);
--      list_del_init(&obj->siblings);
-+
-+      ylist_del_init(&obj->siblings);
-       obj->parent = NULL;
-+
-+      yaffs_VerifyDirectory(parent);
- }
--static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
--                                     yaffs_Object * obj)
-+static void yaffs_AddObjectToDirectory(yaffs_Object *directory,
-+                                      yaffs_Object *obj)
- {
--
-       if (!directory) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
-                  ("tragedy: Trying to add an object to a null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return;
-       }
-       if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6631,37 +6709,42 @@ static void yaffs_AddObjectToDirectory(y
-       if (obj->siblings.prev == NULL) {
-               /* Not initialised */
--              INIT_LIST_HEAD(&obj->siblings);
--
--      } else if (!list_empty(&obj->siblings)) {
--              /* If it is holed up somewhere else, un hook it */
--              yaffs_RemoveObjectFromDirectory(obj);
-+              YBUG();
-       }
-+
-+
-+      yaffs_VerifyDirectory(directory);
-+
-+      yaffs_RemoveObjectFromDirectory(obj);
-+
-+
-       /* Now add it */
--      list_add(&obj->siblings, &directory->variant.directoryVariant.children);
-+      ylist_add(&obj->siblings, &directory->variant.directoryVariant.children);
-       obj->parent = directory;
-       if (directory == obj->myDev->unlinkedDir
--          || directory == obj->myDev->deletedDir) {
-+                      || directory == obj->myDev->deletedDir) {
-               obj->unlinked = 1;
-               obj->myDev->nUnlinkedFiles++;
-               obj->renameAllowed = 0;
-       }
-+
-+      yaffs_VerifyDirectory(directory);
-+      yaffs_VerifyObjectInDirectory(obj);
- }
--yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
--                                   const YCHAR * name)
-+yaffs_Object *yaffs_FindObjectByName(yaffs_Object *directory,
-+                                   const YCHAR *name)
- {
-       int sum;
--      struct list_head *i;
-+      struct ylist_head *i;
-       YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
-       yaffs_Object *l;
--      if (!name) {
-+      if (!name)
-               return NULL;
--      }
-       if (!directory) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6669,6 +6752,7 @@ yaffs_Object *yaffs_FindObjectByName(yaf
-                  ("tragedy: yaffs_FindObjectByName: null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return NULL;
-       }
-       if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6679,28 +6763,27 @@ yaffs_Object *yaffs_FindObjectByName(yaf
-       sum = yaffs_CalcNameSum(name);
--      list_for_each(i, &directory->variant.directoryVariant.children) {
-+      ylist_for_each(i, &directory->variant.directoryVariant.children) {
-               if (i) {
--                      l = list_entry(i, yaffs_Object, siblings);
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+
-+                      if (l->parent != directory)
-+                              YBUG();
-                       yaffs_CheckObjectDetailsLoaded(l);
-                       /* Special case for lost-n-found */
-                       if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
--                              if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
-+                              if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0)
-                                       return l;
--                              }
--                      } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
--                      {
--                              /* LostnFound cunk called Objxxx
-+                      } else if (yaffs_SumCompare(l->sum, sum) || l->hdrChunk <= 0) {
-+                              /* LostnFound chunk called Objxxx
-                                * Do a real check
-                                */
-                               yaffs_GetObjectName(l, buffer,
-                                                   YAFFS_MAX_NAME_LENGTH);
--                              if (yaffs_strncmp(name, buffer,YAFFS_MAX_NAME_LENGTH) == 0) {
-+                              if (yaffs_strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
-                                       return l;
--                              }
--
-                       }
-               }
-       }
-@@ -6710,10 +6793,10 @@ yaffs_Object *yaffs_FindObjectByName(yaf
- #if 0
--int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
--                                 int (*fn) (yaffs_Object *))
-+int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,
-+                                      int (*fn) (yaffs_Object *))
- {
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *l;
-       if (!theDir) {
-@@ -6722,20 +6805,21 @@ int yaffs_ApplyToDirectoryChildren(yaffs
-                  ("tragedy: yaffs_FindObjectByName: null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return YAFFS_FAIL;
-       }
-       if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
-                  ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
-               YBUG();
-+              return YAFFS_FAIL;
-       }
--      list_for_each(i, &theDir->variant.directoryVariant.children) {
-+      ylist_for_each(i, &theDir->variant.directoryVariant.children) {
-               if (i) {
--                      l = list_entry(i, yaffs_Object, siblings);
--                      if (l && !fn(l)) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      if (l && !fn(l))
-                               return YAFFS_FAIL;
--                      }
-               }
-       }
-@@ -6748,7 +6832,7 @@ int yaffs_ApplyToDirectoryChildren(yaffs
-  * actual object.
-  */
--yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
-+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object *obj)
- {
-       if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-               /* We want the object id of the equivalent object, not this one */
-@@ -6756,10 +6840,9 @@ yaffs_Object *yaffs_GetEquivalentObject(
-               yaffs_CheckObjectDetailsLoaded(obj);
-       }
-       return obj;
--
- }
--int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
-+int yaffs_GetObjectName(yaffs_Object *obj, YCHAR *name, int buffSize)
- {
-       memset(name, 0, buffSize * sizeof(YCHAR));
-@@ -6767,18 +6850,26 @@ int yaffs_GetObjectName(yaffs_Object * o
-       if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
-               yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
--      } else if (obj->chunkId <= 0) {
-+      } else if (obj->hdrChunk <= 0) {
-               YCHAR locName[20];
-+              YCHAR numString[20];
-+              YCHAR *x = &numString[19];
-+              unsigned v = obj->objectId;
-+              numString[19] = 0;
-+              while (v > 0) {
-+                      x--;
-+                      *x = '0' + (v % 10);
-+                      v /= 10;
-+              }
-               /* make up a name */
--              yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
--                            obj->objectId);
-+              yaffs_strcpy(locName, YAFFS_LOSTNFOUND_PREFIX);
-+              yaffs_strcat(locName, x);
-               yaffs_strncpy(name, locName, buffSize - 1);
-       }
- #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
--      else if (obj->shortName[0]) {
-+      else if (obj->shortName[0])
-               yaffs_strcpy(name, obj->shortName);
--      }
- #endif
-       else {
-               int result;
-@@ -6788,9 +6879,9 @@ int yaffs_GetObjectName(yaffs_Object * o
-               memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
--              if (obj->chunkId >= 0) {
-+              if (obj->hdrChunk > 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
--                                                      obj->chunkId, buffer,
-+                                                      obj->hdrChunk, buffer,
-                                                       NULL);
-               }
-               yaffs_strncpy(name, oh->name, buffSize - 1);
-@@ -6801,46 +6892,43 @@ int yaffs_GetObjectName(yaffs_Object * o
-       return yaffs_strlen(name);
- }
--int yaffs_GetObjectFileLength(yaffs_Object * obj)
-+int yaffs_GetObjectFileLength(yaffs_Object *obj)
- {
--
-       /* Dereference any hard linking */
-       obj = yaffs_GetEquivalentObject(obj);
--      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               return obj->variant.fileVariant.fileSize;
--      }
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
-               return yaffs_strlen(obj->variant.symLinkVariant.alias);
--      } else {
-+      else {
-               /* Only a directory should drop through to here */
-               return obj->myDev->nDataBytesPerChunk;
-       }
- }
--int yaffs_GetObjectLinkCount(yaffs_Object * obj)
-+int yaffs_GetObjectLinkCount(yaffs_Object *obj)
- {
-       int count = 0;
--      struct list_head *i;
-+      struct ylist_head *i;
--      if (!obj->unlinked) {
--              count++;        /* the object itself */
--      }
--      list_for_each(i, &obj->hardLinks) {
--              count++;        /* add the hard links; */
--      }
--      return count;
-+      if (!obj->unlinked)
-+              count++;                /* the object itself */
-+
-+      ylist_for_each(i, &obj->hardLinks)
-+              count++;                /* add the hard links; */
-+      return count;
- }
--int yaffs_GetObjectInode(yaffs_Object * obj)
-+int yaffs_GetObjectInode(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-       return obj->objectId;
- }
--unsigned yaffs_GetObjectType(yaffs_Object * obj)
-+unsigned yaffs_GetObjectType(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-@@ -6872,19 +6960,18 @@ unsigned yaffs_GetObjectType(yaffs_Objec
-       }
- }
--YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
-+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
-               return yaffs_CloneString(obj->variant.symLinkVariant.alias);
--      } else {
-+      else
-               return yaffs_CloneString(_Y(""));
--      }
- }
- #ifndef CONFIG_YAFFS_WINCE
--int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
-+int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr)
- {
-       unsigned int valid = attr->ia_valid;
-@@ -6910,7 +6997,7 @@ int yaffs_SetAttributes(yaffs_Object * o
-       return YAFFS_OK;
- }
--int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
-+int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr)
- {
-       unsigned int valid = 0;
-@@ -6934,13 +7021,12 @@ int yaffs_GetAttributes(yaffs_Object * o
-       attr->ia_valid = valid;
-       return YAFFS_OK;
--
- }
- #endif
- #if 0
--int yaffs_DumpObject(yaffs_Object * obj)
-+int yaffs_DumpObject(yaffs_Object *obj)
- {
-       YCHAR name[257];
-@@ -6951,7 +7037,7 @@ int yaffs_DumpObject(yaffs_Object * obj)
-          ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
-           " chunk %d type %d size %d\n"
-           TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
--         obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
-+         obj->dirty, obj->valid, obj->serial, obj->sum, obj->hdrChunk,
-          yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
-       return YAFFS_OK;
-@@ -6960,7 +7046,7 @@ int yaffs_DumpObject(yaffs_Object * obj)
- /*---------------------------- Initialisation code -------------------------------------- */
--static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
-+static int yaffs_CheckDevFunctions(const yaffs_Device *dev)
- {
-       /* Common functions, gotta have */
-@@ -7011,7 +7097,7 @@ static int yaffs_CreateInitialDirectorie
-           yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
-                                     YAFFS_LOSTNFOUND_MODE | S_IFDIR);
--      if(dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir){
-+      if (dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir) {
-               yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
-               return YAFFS_OK;
-       }
-@@ -7019,7 +7105,7 @@ static int yaffs_CreateInitialDirectorie
-       return YAFFS_FAIL;
- }
--int yaffs_GutsInitialise(yaffs_Device * dev)
-+int yaffs_GutsInitialise(yaffs_Device *dev)
- {
-       int init_failed = 0;
-       unsigned x;
-@@ -7040,6 +7126,8 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->chunkOffset = 0;
-       dev->nFreeChunks = 0;
-+      dev->gcBlock = -1;
-+
-       if (dev->startBlock == 0) {
-               dev->internalStartBlock = dev->startBlock + 1;
-               dev->internalEndBlock = dev->endBlock + 1;
-@@ -7049,18 +7137,18 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       /* Check geometry parameters. */
--      if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
--          (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
-+      if ((!dev->inbandTags && dev->isYaffs2 && dev->totalBytesPerChunk < 1024) ||
-+          (!dev->isYaffs2 && dev->totalBytesPerChunk < 512) ||
-+          (dev->inbandTags && !dev->isYaffs2) ||
-            dev->nChunksPerBlock < 2 ||
-            dev->nReservedBlocks < 2 ||
-            dev->internalStartBlock <= 0 ||
-            dev->internalEndBlock <= 0 ||
--           dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2)      // otherwise it is too small
--          ) {
-+           dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2)) {   /* otherwise it is too small */
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
--                 ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
--                  TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
-+                 ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s, inbandTags %d "
-+                  TENDSTR), dev->totalBytesPerChunk, dev->isYaffs2 ? "2" : "", dev->inbandTags));
-               return YAFFS_FAIL;
-       }
-@@ -7070,6 +7158,12 @@ int yaffs_GutsInitialise(yaffs_Device * 
-               return YAFFS_FAIL;
-       }
-+      /* Sort out space for inband tags, if required */
-+      if (dev->inbandTags)
-+              dev->nDataBytesPerChunk = dev->totalBytesPerChunk - sizeof(yaffs_PackedTags2TagsPart);
-+      else
-+              dev->nDataBytesPerChunk = dev->totalBytesPerChunk;
-+
-       /* Got the right mix of functions? */
-       if (!yaffs_CheckDevFunctions(dev)) {
-               /* Function missing */
-@@ -7097,31 +7191,18 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->isMounted = 1;
--
--
-       /* OK now calculate a few things for the device */
-       /*
-        *  Calculate all the chunk size manipulation numbers:
-        */
--       /* Start off assuming it is a power of 2 */
--       dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
--       dev->chunkMask = (1<<dev->chunkShift) - 1;
--
--       if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
--              /* Yes it is a power of 2, disable crumbs */
--              dev->crumbMask = 0;
--              dev->crumbShift = 0;
--              dev->crumbsPerChunk = 0;
--       } else {
--              /* Not a power of 2, use crumbs instead */
--              dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
--              dev->crumbMask = (1<<dev->crumbShift)-1;
--              dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
--              dev->chunkShift = 0;
--              dev->chunkMask = 0;
--      }
--
-+      x = dev->nDataBytesPerChunk;
-+      /* We always use dev->chunkShift and dev->chunkDiv */
-+      dev->chunkShift = Shifts(x);
-+      x >>= dev->chunkShift;
-+      dev->chunkDiv = x;
-+      /* We only use chunk mask if chunkDiv is 1 */
-+      dev->chunkMask = (1<<dev->chunkShift) - 1;
-       /*
-        * Calculate chunkGroupBits.
-@@ -7133,16 +7214,15 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       bits = ShiftsGE(x);
-       /* Set up tnode width if wide tnodes are enabled. */
--      if(!dev->wideTnodesDisabled){
-+      if (!dev->wideTnodesDisabled) {
-               /* bits must be even so that we end up with 32-bit words */
--              if(bits & 1)
-+              if (bits & 1)
-                       bits++;
--              if(bits < 16)
-+              if (bits < 16)
-                       dev->tnodeWidth = 16;
-               else
-                       dev->tnodeWidth = bits;
--      }
--      else
-+      } else
-               dev->tnodeWidth = 16;
-       dev->tnodeMask = (1<<dev->tnodeWidth)-1;
-@@ -7193,7 +7273,7 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
-       /* Initialise temporary buffers and caches. */
--      if(!yaffs_InitialiseTempBuffers(dev))
-+      if (!yaffs_InitialiseTempBuffers(dev))
-               init_failed = 1;
-       dev->srCache = NULL;
-@@ -7203,25 +7283,26 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       if (!init_failed &&
-           dev->nShortOpCaches > 0) {
-               int i;
--              __u8 *buf;
-+              void *buf;
-               int srCacheBytes = dev->nShortOpCaches * sizeof(yaffs_ChunkCache);
--              if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
-+              if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES)
-                       dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
--              }
--              buf = dev->srCache =  YMALLOC(srCacheBytes);
-+              dev->srCache =  YMALLOC(srCacheBytes);
--              if(dev->srCache)
--                      memset(dev->srCache,0,srCacheBytes);
-+              buf = (__u8 *) dev->srCache;
-+
-+              if (dev->srCache)
-+                      memset(dev->srCache, 0, srCacheBytes);
-               for (i = 0; i < dev->nShortOpCaches && buf; i++) {
-                       dev->srCache[i].object = NULL;
-                       dev->srCache[i].lastUse = 0;
-                       dev->srCache[i].dirty = 0;
--                      dev->srCache[i].data = buf = YMALLOC_DMA(dev->nDataBytesPerChunk);
-+                      dev->srCache[i].data = buf = YMALLOC_DMA(dev->totalBytesPerChunk);
-               }
--              if(!buf)
-+              if (!buf)
-                       init_failed = 1;
-               dev->srLastUse = 0;
-@@ -7229,29 +7310,30 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->cacheHits = 0;
--      if(!init_failed){
-+      if (!init_failed) {
-               dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
--              if(!dev->gcCleanupList)
-+              if (!dev->gcCleanupList)
-                       init_failed = 1;
-       }
--      if (dev->isYaffs2) {
-+      if (dev->isYaffs2)
-               dev->useHeaderFileSize = 1;
--      }
--      if(!init_failed && !yaffs_InitialiseBlocks(dev))
-+
-+      if (!init_failed && !yaffs_InitialiseBlocks(dev))
-               init_failed = 1;
-       yaffs_InitialiseTnodes(dev);
-       yaffs_InitialiseObjects(dev);
--      if(!init_failed && !yaffs_CreateInitialDirectories(dev))
-+      if (!init_failed && !yaffs_CreateInitialDirectories(dev))
-               init_failed = 1;
--      if(!init_failed){
-+      if (!init_failed) {
-               /* Now scan the flash. */
-               if (dev->isYaffs2) {
--                      if(yaffs_CheckpointRestore(dev)) {
-+                      if (yaffs_CheckpointRestore(dev)) {
-+                              yaffs_CheckObjectDetailsLoaded(dev->rootDir);
-                               T(YAFFS_TRACE_ALWAYS,
-                                 (TSTR("yaffs: restored from checkpoint" TENDSTR)));
-                       } else {
-@@ -7273,24 +7355,25 @@ int yaffs_GutsInitialise(yaffs_Device * 
-                               dev->nBackgroundDeletions = 0;
-                               dev->oldestDirtySequence = 0;
--                              if(!init_failed && !yaffs_InitialiseBlocks(dev))
-+                              if (!init_failed && !yaffs_InitialiseBlocks(dev))
-                                       init_failed = 1;
-                               yaffs_InitialiseTnodes(dev);
-                               yaffs_InitialiseObjects(dev);
--                              if(!init_failed && !yaffs_CreateInitialDirectories(dev))
-+                              if (!init_failed && !yaffs_CreateInitialDirectories(dev))
-                                       init_failed = 1;
--                              if(!init_failed && !yaffs_ScanBackwards(dev))
-+                              if (!init_failed && !yaffs_ScanBackwards(dev))
-                                       init_failed = 1;
-                       }
--              }else
--                      if(!yaffs_Scan(dev))
-+              } else if (!yaffs_Scan(dev))
-                               init_failed = 1;
-+
-+              yaffs_StripDeletedObjects(dev);
-       }
--      if(init_failed){
-+      if (init_failed) {
-               /* Clean up the mess */
-               T(YAFFS_TRACE_TRACING,
-                 (TSTR("yaffs: yaffs_GutsInitialise() aborted.\n" TENDSTR)));
-@@ -7318,7 +7401,7 @@ int yaffs_GutsInitialise(yaffs_Device * 
- }
--void yaffs_Deinitialise(yaffs_Device * dev)
-+void yaffs_Deinitialise(yaffs_Device *dev)
- {
-       if (dev->isMounted) {
-               int i;
-@@ -7330,7 +7413,7 @@ void yaffs_Deinitialise(yaffs_Device * d
-                   dev->srCache) {
-                       for (i = 0; i < dev->nShortOpCaches; i++) {
--                              if(dev->srCache[i].data)
-+                              if (dev->srCache[i].data)
-                                       YFREE(dev->srCache[i].data);
-                               dev->srCache[i].data = NULL;
-                       }
-@@ -7341,16 +7424,17 @@ void yaffs_Deinitialise(yaffs_Device * d
-               YFREE(dev->gcCleanupList);
--              for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-+              for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
-                       YFREE(dev->tempBuffer[i].buffer);
--              }
-               dev->isMounted = 0;
--      }
-+              if (dev->deinitialiseNAND)
-+                      dev->deinitialiseNAND(dev);
-+      }
- }
--static int yaffs_CountFreeChunks(yaffs_Device * dev)
-+static int yaffs_CountFreeChunks(yaffs_Device *dev)
- {
-       int nFree;
-       int b;
-@@ -7358,7 +7442,7 @@ static int yaffs_CountFreeChunks(yaffs_D
-       yaffs_BlockInfo *blk;
-       for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
--           b++) {
-+                      b++) {
-               blk = yaffs_GetBlockInfo(dev, b);
-               switch (blk->blockState) {
-@@ -7373,19 +7457,19 @@ static int yaffs_CountFreeChunks(yaffs_D
-               default:
-                       break;
-               }
--
-       }
-       return nFree;
- }
--int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
-+int yaffs_GetNumberOfFreeChunks(yaffs_Device *dev)
- {
-       /* This is what we report to the outside world */
-       int nFree;
-       int nDirtyCacheChunks;
-       int blocksForCheckpoint;
-+      int i;
- #if 1
-       nFree = dev->nFreeChunks;
-@@ -7397,12 +7481,9 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
-       /* Now count the number of dirty chunks in the cache and subtract those */
--      {
--              int i;
--              for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
--                      if (dev->srCache[i].dirty)
--                              nDirtyCacheChunks++;
--              }
-+      for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
-+              if (dev->srCache[i].dirty)
-+                      nDirtyCacheChunks++;
-       }
-       nFree -= nDirtyCacheChunks;
-@@ -7410,8 +7491,8 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
-       nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
-       /* Now we figure out how much to reserve for the checkpoint and report that... */
--      blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
--      if(blocksForCheckpoint < 0)
-+      blocksForCheckpoint = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
-+      if (blocksForCheckpoint < 0)
-               blocksForCheckpoint = 0;
-       nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
-@@ -7425,12 +7506,12 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
- static int yaffs_freeVerificationFailures;
--static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
-+static void yaffs_VerifyFreeChunks(yaffs_Device *dev)
- {
-       int counted;
-       int difference;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       counted = yaffs_CountFreeChunks(dev);
-@@ -7447,23 +7528,25 @@ static void yaffs_VerifyFreeChunks(yaffs
- /*---------------------------------------- YAFFS test code ----------------------*/
--#define yaffs_CheckStruct(structure,syze, name) \
--           if(sizeof(structure) != syze) \
--             { \
--               T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
--               name,syze,sizeof(structure))); \
--               return YAFFS_FAIL; \
--              }
-+#define yaffs_CheckStruct(structure, syze, name) \
-+      do { \
-+              if (sizeof(structure) != syze) { \
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR("%s should be %d but is %d\n" TENDSTR),\
-+                              name, syze, sizeof(structure))); \
-+                      return YAFFS_FAIL; \
-+              } \
-+      } while (0)
- static int yaffs_CheckStructures(void)
- {
--/*      yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
--/*      yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
--/*      yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
-+/*      yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags"); */
-+/*      yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion"); */
-+/*      yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare"); */
- #ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
--      yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
-+      yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode");
- #endif
--          yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
--
--          return YAFFS_OK;
-+#ifndef CONFIG_YAFFS_WINCE
-+      yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader");
-+#endif
-+      return YAFFS_OK;
- }
---- a/fs/yaffs2/yaffs_guts.h
-+++ b/fs/yaffs2/yaffs_guts.h
-@@ -90,7 +90,7 @@
- #define YAFFS_MAX_SHORT_OP_CACHES     20
--#define YAFFS_N_TEMP_BUFFERS          4
-+#define YAFFS_N_TEMP_BUFFERS          6
- /* We limit the number attempts at sucessfully saving a chunk of data.
-  * Small-page devices have 32 pages per block; large-page devices have 64.
-@@ -108,6 +108,9 @@
- #define YAFFS_LOWEST_SEQUENCE_NUMBER  0x00001000
- #define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xEFFFFF00
-+/* Special sequence number for bad block that failed to be marked bad */
-+#define YAFFS_SEQUENCE_BAD_BLOCK      0xFFFF0000
-+
- /* ChunkCache is used for short read/write operations.*/
- typedef struct {
-       struct yaffs_ObjectStruct *object;
-@@ -134,11 +137,10 @@ typedef struct {
- typedef struct {
-       unsigned chunkId:20;
-       unsigned serialNumber:2;
--      unsigned byteCount:10;
-+      unsigned byteCountLSB:10;
-       unsigned objectId:18;
-       unsigned ecc:12;
--      unsigned unusedStuff:2;
--
-+      unsigned byteCountMSB:2;
- } yaffs_Tags;
- typedef union {
-@@ -277,13 +279,13 @@ typedef struct {
-       int softDeletions:10;   /* number of soft deleted pages */
-       int pagesInUse:10;      /* number of pages in use */
--      yaffs_BlockState blockState:4;  /* One of the above block states */
-+      unsigned blockState:4;  /* One of the above block states. NB use unsigned because enum is sometimes an int */
-       __u32 needsRetiring:1;  /* Data has failed on this block, need to get valid data off */
--                              /* and retire the block. */
--      __u32 skipErasedCheck: 1; /* If this is set we can skip the erased check on this block */
--      __u32 gcPrioritise: 1;  /* An ECC check or blank check has failed on this block.
-+                              /* and retire the block. */
-+      __u32 skipErasedCheck:1; /* If this is set we can skip the erased check on this block */
-+      __u32 gcPrioritise:1;   /* An ECC check or blank check has failed on this block.
-                                  It should be prioritised for GC */
--        __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
-+      __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
- #ifdef CONFIG_YAFFS_YAFFS2
-       __u32 hasShrinkHeader:1; /* This block has at least one shrink object header */
-@@ -300,11 +302,11 @@ typedef struct {
-       /* Apply to everything  */
-       int parentObjectId;
--      __u16 sum__NoLongerUsed;        /* checksum of name. No longer used */
-+      __u16 sum__NoLongerUsed;        /* checksum of name. No longer used */
-       YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
--      /* Thes following apply to directories, files, symlinks - not hard links */
--      __u32 yst_mode;         /* protection */
-+      /* The following apply to directories, files, symlinks - not hard links */
-+      __u32 yst_mode;         /* protection */
- #ifdef CONFIG_YAFFS_WINCE
-       __u32 notForWinCE[5];
-@@ -331,11 +333,14 @@ typedef struct {
-       __u32 win_ctime[2];
-       __u32 win_atime[2];
-       __u32 win_mtime[2];
--      __u32 roomToGrow[4];
- #else
--      __u32 roomToGrow[10];
-+      __u32 roomToGrow[6];
-+
- #endif
-+      __u32 inbandShadowsObject;
-+      __u32 inbandIsShrink;
-+      __u32 reservedSpace[2];
-       int shadowsObject;      /* This object header shadows the specified object if > 0 */
-       /* isShrink applies to object headers written when we shrink the file (ie resize) */
-@@ -381,7 +386,7 @@ typedef struct {
- } yaffs_FileStructure;
- typedef struct {
--      struct list_head children;      /* list of child links */
-+      struct ylist_head children;     /* list of child links */
- } yaffs_DirectoryStructure;
- typedef struct {
-@@ -418,23 +423,24 @@ struct yaffs_ObjectStruct {
-                                * still in the inode cache. Free of object is defered.
-                                * until the inode is released.
-                                */
-+      __u8 beingCreated:1;    /* This object is still being created so skip some checks. */
-       __u8 serial;            /* serial number of chunk in NAND. Cached here */
-       __u16 sum;              /* sum of the name to speed searching */
--      struct yaffs_DeviceStruct *myDev;       /* The device I'm on */
-+      struct yaffs_DeviceStruct *myDev;       /* The device I'm on */
--      struct list_head hashLink;      /* list of objects in this hash bucket */
-+      struct ylist_head hashLink;     /* list of objects in this hash bucket */
--      struct list_head hardLinks;     /* all the equivalent hard linked objects */
-+      struct ylist_head hardLinks;    /* all the equivalent hard linked objects */
-       /* directory structure stuff */
-       /* also used for linking up the free list */
-       struct yaffs_ObjectStruct *parent;
--      struct list_head siblings;
-+      struct ylist_head siblings;
-       /* Where's my object header in NAND? */
--      int chunkId;
-+      int hdrChunk;
-       int nDataChunks;        /* Number of data chunks attached to the file. */
-@@ -485,7 +491,7 @@ struct yaffs_ObjectList_struct {
- typedef struct yaffs_ObjectList_struct yaffs_ObjectList;
- typedef struct {
--      struct list_head list;
-+      struct ylist_head list;
-       int count;
- } yaffs_ObjectBucket;
-@@ -495,11 +501,10 @@ typedef struct {
-  */
- typedef struct {
--        int structType;
-+      int structType;
-       __u32 objectId;
-       __u32 parentId;
--      int chunkId;
--
-+      int hdrChunk;
-       yaffs_ObjectType variantType:3;
-       __u8 deleted:1;
-       __u8 softDeleted:1;
-@@ -511,8 +516,7 @@ typedef struct {
-       int nDataChunks;
-       __u32 fileSizeOrEquivalentObjectId;
--
--}yaffs_CheckpointObject;
-+} yaffs_CheckpointObject;
- /*--------------------- Temporary buffers ----------------
-  *
-@@ -528,13 +532,13 @@ typedef struct {
- /*----------------- Device ---------------------------------*/
- struct yaffs_DeviceStruct {
--      struct list_head devList;
-+      struct ylist_head devList;
-       const char *name;
-       /* Entry parameters set up way early. Yaffs sets up the rest.*/
-       int nDataBytesPerChunk; /* Should be a power of 2 >= 512 */
-       int nChunksPerBlock;    /* does not need to be a power of 2 */
--      int nBytesPerSpare;     /* spare area size */
-+      int spareBytesPerChunk; /* spare area size */
-       int startBlock;         /* Start block we're allowed to use */
-       int endBlock;           /* End block we're allowed to use */
-       int nReservedBlocks;    /* We want this tuneable so that we can reduce */
-@@ -544,9 +548,7 @@ struct yaffs_DeviceStruct {
-       /* Stuff used by the shared space checkpointing mechanism */
-       /* If this value is zero, then this mechanism is disabled */
--      int nCheckpointReservedBlocks; /* Blocks to reserve for checkpoint data */
--
--
-+/*    int nCheckpointReservedBlocks; */ /* Blocks to reserve for checkpoint data */
-       int nShortOpCaches;     /* If <= 0, then short op caching is disabled, else
-@@ -560,30 +562,31 @@ struct yaffs_DeviceStruct {
-       void *genericDevice;    /* Pointer to device context
-                                * On an mtd this holds the mtd pointer.
-                                */
--        void *superBlock;
-+      void *superBlock;
-       /* NAND access functions (Must be set before calling YAFFS)*/
--      int (*writeChunkToNAND) (struct yaffs_DeviceStruct * dev,
--                               int chunkInNAND, const __u8 * data,
--                               const yaffs_Spare * spare);
--      int (*readChunkFromNAND) (struct yaffs_DeviceStruct * dev,
--                                int chunkInNAND, __u8 * data,
--                                yaffs_Spare * spare);
--      int (*eraseBlockInNAND) (struct yaffs_DeviceStruct * dev,
--                               int blockInNAND);
--      int (*initialiseNAND) (struct yaffs_DeviceStruct * dev);
-+      int (*writeChunkToNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int chunkInNAND, const __u8 *data,
-+                                      const yaffs_Spare *spare);
-+      int (*readChunkFromNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int chunkInNAND, __u8 *data,
-+                                      yaffs_Spare *spare);
-+      int (*eraseBlockInNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int blockInNAND);
-+      int (*initialiseNAND) (struct yaffs_DeviceStruct *dev);
-+      int (*deinitialiseNAND) (struct yaffs_DeviceStruct *dev);
- #ifdef CONFIG_YAFFS_YAFFS2
--      int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct * dev,
--                                       int chunkInNAND, const __u8 * data,
--                                       const yaffs_ExtendedTags * tags);
--      int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct * dev,
--                                        int chunkInNAND, __u8 * data,
--                                        yaffs_ExtendedTags * tags);
--      int (*markNANDBlockBad) (struct yaffs_DeviceStruct * dev, int blockNo);
--      int (*queryNANDBlock) (struct yaffs_DeviceStruct * dev, int blockNo,
--                             yaffs_BlockState * state, int *sequenceNumber);
-+      int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct *dev,
-+                                       int chunkInNAND, const __u8 *data,
-+                                       const yaffs_ExtendedTags *tags);
-+      int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct *dev,
-+                                        int chunkInNAND, __u8 *data,
-+                                        yaffs_ExtendedTags *tags);
-+      int (*markNANDBlockBad) (struct yaffs_DeviceStruct *dev, int blockNo);
-+      int (*queryNANDBlock) (struct yaffs_DeviceStruct *dev, int blockNo,
-+                             yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
-       int isYaffs2;
-@@ -595,10 +598,12 @@ struct yaffs_DeviceStruct {
-       void (*removeObjectCallback)(struct yaffs_ObjectStruct *obj);
-       /* Callback to mark the superblock dirsty */
--      void (*markSuperBlockDirty)(void * superblock);
-+      void (*markSuperBlockDirty)(void *superblock);
-       int wideTnodesDisabled; /* Set to disable wide tnodes */
-+      YCHAR *pathDividers;    /* String of legal path dividers */
-+
-       /* End of stuff that must be set before initialisation. */
-@@ -615,16 +620,14 @@ struct yaffs_DeviceStruct {
-       __u32 tnodeWidth;
-       __u32 tnodeMask;
--      /* Stuff to support various file offses to chunk/offset translations */
--      /* "Crumbs" for nDataBytesPerChunk not being a power of 2 */
--      __u32 crumbMask;
--      __u32 crumbShift;
--      __u32 crumbsPerChunk;
--
--      /* Straight shifting for nDataBytesPerChunk being a power of 2 */
--      __u32 chunkShift;
--      __u32 chunkMask;
--
-+      /* Stuff for figuring out file offset to chunk conversions */
-+      __u32 chunkShift; /* Shift value */
-+      __u32 chunkDiv;   /* Divisor after shifting: 1 for power-of-2 sizes */
-+      __u32 chunkMask;  /* Mask to use for power-of-2 case */
-+
-+      /* Stuff to handle inband tags */
-+      int inbandTags;
-+      __u32 totalBytesPerChunk;
- #ifdef __KERNEL__
-@@ -633,7 +636,7 @@ struct yaffs_DeviceStruct {
-       __u8 *spareBuffer;      /* For mtdif2 use. Don't know the size of the buffer
-                                * at compile time so we have to allocate it.
-                                */
--      void (*putSuperFunc) (struct super_block * sb);
-+      void (*putSuperFunc) (struct super_block *sb);
- #endif
-       int isMounted;
-@@ -663,6 +666,8 @@ struct yaffs_DeviceStruct {
-       __u32 checkpointSum;
-       __u32 checkpointXor;
-+      int nCheckpointBlocksRequired; /* Number of blocks needed to store current checkpoint set */
-+
-       /* Block Info */
-       yaffs_BlockInfo *blockInfo;
-       __u8 *chunkBits;        /* bitmap of chunks in use */
-@@ -684,11 +689,15 @@ struct yaffs_DeviceStruct {
-       yaffs_TnodeList *allocatedTnodeList;
-       int isDoingGC;
-+      int gcBlock;
-+      int gcChunk;
-       int nObjectsCreated;
-       yaffs_Object *freeObjects;
-       int nFreeObjects;
-+      int nHardLinks;
-+
-       yaffs_ObjectList *allocatedObjectList;
-       yaffs_ObjectBucket objectBucket[YAFFS_NOBJECT_BUCKETS];
-@@ -745,8 +754,10 @@ struct yaffs_DeviceStruct {
-       int nBackgroundDeletions;       /* Count of background deletions. */
-+      /* Temporary buffer management */
-       yaffs_TempBuffer tempBuffer[YAFFS_N_TEMP_BUFFERS];
-       int maxTemp;
-+      int tempInUse;
-       int unmanagedTempAllocations;
-       int unmanagedTempDeallocations;
-@@ -758,9 +769,9 @@ struct yaffs_DeviceStruct {
- typedef struct yaffs_DeviceStruct yaffs_Device;
--/* The static layout of bllock usage etc is stored in the super block header */
-+/* The static layout of block usage etc is stored in the super block header */
- typedef struct {
--        int StructType;
-+      int StructType;
-       int version;
-       int checkpointStartBlock;
-       int checkpointEndBlock;
-@@ -773,7 +784,7 @@ typedef struct {
-  * must be preserved over unmount/mount cycles.
-  */
- typedef struct {
--        int structType;
-+      int structType;
-       int nErasedBlocks;
-       int allocationBlock;    /* Current block being allocated off */
-       __u32 allocationPage;
-@@ -791,57 +802,45 @@ typedef struct {
- typedef struct {
--    int structType;
--    __u32 magic;
--    __u32 version;
--    __u32 head;
-+      int structType;
-+      __u32 magic;
-+      __u32 version;
-+      __u32 head;
- } yaffs_CheckpointValidity;
--/* Function to manipulate block info */
--static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
--{
--      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
--              T(YAFFS_TRACE_ERROR,
--                (TSTR
--                 ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
--                 blk));
--              YBUG();
--      }
--      return &dev->blockInfo[blk - dev->internalStartBlock];
--}
- /*----------------------- YAFFS Functions -----------------------*/
--int yaffs_GutsInitialise(yaffs_Device * dev);
--void yaffs_Deinitialise(yaffs_Device * dev);
-+int yaffs_GutsInitialise(yaffs_Device *dev);
-+void yaffs_Deinitialise(yaffs_Device *dev);
--int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev);
-+int yaffs_GetNumberOfFreeChunks(yaffs_Device *dev);
--int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
--                     yaffs_Object * newDir, const YCHAR * newName);
-+int yaffs_RenameObject(yaffs_Object *oldDir, const YCHAR *oldName,
-+                     yaffs_Object *newDir, const YCHAR *newName);
--int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name);
--int yaffs_DeleteFile(yaffs_Object * obj);
-+int yaffs_Unlink(yaffs_Object *dir, const YCHAR *name);
-+int yaffs_DeleteObject(yaffs_Object *obj);
--int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize);
--int yaffs_GetObjectFileLength(yaffs_Object * obj);
--int yaffs_GetObjectInode(yaffs_Object * obj);
--unsigned yaffs_GetObjectType(yaffs_Object * obj);
--int yaffs_GetObjectLinkCount(yaffs_Object * obj);
-+int yaffs_GetObjectName(yaffs_Object *obj, YCHAR *name, int buffSize);
-+int yaffs_GetObjectFileLength(yaffs_Object *obj);
-+int yaffs_GetObjectInode(yaffs_Object *obj);
-+unsigned yaffs_GetObjectType(yaffs_Object *obj);
-+int yaffs_GetObjectLinkCount(yaffs_Object *obj);
--int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr);
--int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr);
-+int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr);
-+int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr);
- /* File operations */
--int yaffs_ReadDataFromFile(yaffs_Object * obj, __u8 * buffer, loff_t offset,
--                         int nBytes);
--int yaffs_WriteDataToFile(yaffs_Object * obj, const __u8 * buffer, loff_t offset,
--                        int nBytes, int writeThrough);
--int yaffs_ResizeFile(yaffs_Object * obj, loff_t newSize);
--
--yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
--                            __u32 mode, __u32 uid, __u32 gid);
--int yaffs_FlushFile(yaffs_Object * obj, int updateTime);
-+int yaffs_ReadDataFromFile(yaffs_Object *obj, __u8 *buffer, loff_t offset,
-+                              int nBytes);
-+int yaffs_WriteDataToFile(yaffs_Object *obj, const __u8 *buffer, loff_t offset,
-+                              int nBytes, int writeThrough);
-+int yaffs_ResizeFile(yaffs_Object *obj, loff_t newSize);
-+
-+yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid);
-+int yaffs_FlushFile(yaffs_Object *obj, int updateTime);
- /* Flushing and checkpointing */
- void yaffs_FlushEntireDeviceCache(yaffs_Device *dev);
-@@ -850,33 +849,33 @@ int yaffs_CheckpointSave(yaffs_Device *d
- int yaffs_CheckpointRestore(yaffs_Device *dev);
- /* Directory operations */
--yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
--                                 __u32 mode, __u32 uid, __u32 gid);
--yaffs_Object *yaffs_FindObjectByName(yaffs_Object * theDir, const YCHAR * name);
--int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
-+yaffs_Object *yaffs_MknodDirectory(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid);
-+yaffs_Object *yaffs_FindObjectByName(yaffs_Object *theDir, const YCHAR *name);
-+int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,
-                                  int (*fn) (yaffs_Object *));
--yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number);
-+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev, __u32 number);
- /* Link operations */
--yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
--                       yaffs_Object * equivalentObject);
-+yaffs_Object *yaffs_Link(yaffs_Object *parent, const YCHAR *name,
-+                       yaffs_Object *equivalentObject);
--yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj);
-+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object *obj);
- /* Symlink operations */
--yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
-+yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent, const YCHAR *name,
-                                __u32 mode, __u32 uid, __u32 gid,
--                               const YCHAR * alias);
--YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj);
-+                               const YCHAR *alias);
-+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object *obj);
- /* Special inodes (fifos, sockets and devices) */
--yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
-+yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent, const YCHAR *name,
-                                __u32 mode, __u32 uid, __u32 gid, __u32 rdev);
- /* Special directories */
--yaffs_Object *yaffs_Root(yaffs_Device * dev);
--yaffs_Object *yaffs_LostNFound(yaffs_Device * dev);
-+yaffs_Object *yaffs_Root(yaffs_Device *dev);
-+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev);
- #ifdef CONFIG_YAFFS_WINCE
- /* CONFIG_YAFFS_WINCE special stuff */
-@@ -885,18 +884,21 @@ void yfsd_WinFileTimeNow(__u32 target[2]
- #ifdef __KERNEL__
--void yaffs_HandleDeferedFree(yaffs_Object * obj);
-+void yaffs_HandleDeferedFree(yaffs_Object *obj);
- #endif
- /* Debug dump  */
--int yaffs_DumpObject(yaffs_Object * obj);
-+int yaffs_DumpObject(yaffs_Object *obj);
--void yaffs_GutsTest(yaffs_Device * dev);
-+void yaffs_GutsTest(yaffs_Device *dev);
- /* A few useful functions */
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
--void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn);
--int yaffs_CheckFF(__u8 * buffer, int nBytes);
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags);
-+void yaffs_DeleteChunk(yaffs_Device *dev, int chunkId, int markNAND, int lyn);
-+int yaffs_CheckFF(__u8 *buffer, int nBytes);
- void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi);
-+__u8 *yaffs_GetTempBuffer(yaffs_Device *dev, int lineNo);
-+void yaffs_ReleaseTempBuffer(yaffs_Device *dev, __u8 *buffer, int lineNo);
-+
- #endif
---- a/fs/yaffs2/yaffs_mtdif1.c
-+++ b/fs/yaffs2/yaffs_mtdif1.c
-@@ -26,7 +26,7 @@
- #include "yportenv.h"
- #include "yaffs_guts.h"
- #include "yaffs_packedtags1.h"
--#include "yaffs_tagscompat.h" // for yaffs_CalcTagsECC
-+#include "yaffs_tagscompat.h" /* for yaffs_CalcTagsECC */
- #include "linux/kernel.h"
- #include "linux/version.h"
-@@ -34,9 +34,9 @@
- #include "linux/mtd/mtd.h"
- /* Don't compile this module if we don't have MTD's mtd_oob_ops interface */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
--const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.3 2007/05/15 20:16:11 ian Exp $";
-+const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.10 2009-03-09 07:41:10 charles Exp $";
- #ifndef CONFIG_YAFFS_9BYTE_TAGS
- # define YTAG1_SIZE 8
-@@ -89,9 +89,9 @@ static struct nand_ecclayout nand_oob_16
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
- int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device *dev,
--      int chunkInNAND, const __u8 * data, const yaffs_ExtendedTags * etags)
-+      int chunkInNAND, const __u8 *data, const yaffs_ExtendedTags *etags)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkBytes = dev->nDataBytesPerChunk;
-       loff_t addr = ((loff_t)chunkInNAND) * chunkBytes;
-       struct mtd_oob_ops ops;
-@@ -146,7 +146,7 @@ int nandmtd1_WriteChunkWithTagsToNAND(ya
- /* Return with empty ExtendedTags but add eccResult.
-  */
--static int rettags(yaffs_ExtendedTags * etags, int eccResult, int retval)
-+static int rettags(yaffs_ExtendedTags *etags, int eccResult, int retval)
- {
-       if (etags) {
-               memset(etags, 0, sizeof(*etags));
-@@ -169,9 +169,9 @@ static int rettags(yaffs_ExtendedTags * 
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
- int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device *dev,
--      int chunkInNAND, __u8 * data, yaffs_ExtendedTags * etags)
-+      int chunkInNAND, __u8 *data, yaffs_ExtendedTags *etags)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkBytes = dev->nDataBytesPerChunk;
-       loff_t addr = ((loff_t)chunkInNAND) * chunkBytes;
-       int eccres = YAFFS_ECC_RESULT_NO_ERROR;
-@@ -189,7 +189,7 @@ int nandmtd1_ReadChunkWithTagsFromNAND(y
-       ops.datbuf = data;
-       ops.oobbuf = (__u8 *)&pt1;
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 20))
-       /* In MTD 2.6.18 to 2.6.19 nand_base.c:nand_do_read_oob() has a bug;
-        * help it out with ops.len = ops.ooblen when ops.datbuf == NULL.
-        */
-@@ -284,11 +284,11 @@ int nandmtd1_ReadChunkWithTagsFromNAND(y
-  */
- int nandmtd1_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int blocksize = dev->nChunksPerBlock * dev->nDataBytesPerChunk;
-       int retval;
--      yaffs_trace(YAFFS_TRACE_BAD_BLOCKS, "marking block %d bad", blockNo);
-+      yaffs_trace(YAFFS_TRACE_BAD_BLOCKS, "marking block %d bad\n", blockNo);
-       retval = mtd->block_markbad(mtd, (loff_t)blocksize * blockNo);
-       return (retval) ? YAFFS_FAIL : YAFFS_OK;
-@@ -298,7 +298,7 @@ int nandmtd1_MarkNANDBlockBad(struct yaf
-  *
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
--static int nandmtd1_TestPrerequists(struct mtd_info * mtd)
-+static int nandmtd1_TestPrerequists(struct mtd_info *mtd)
- {
-       /* 2.6.18 has mtd->ecclayout->oobavail */
-       /* 2.6.21 has mtd->ecclayout->oobavail and mtd->oobavail */
-@@ -323,10 +323,11 @@ static int nandmtd1_TestPrerequists(stru
-  * Always returns YAFFS_OK.
-  */
- int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--      yaffs_BlockState * pState, int *pSequenceNumber)
-+      yaffs_BlockState *pState, __u32 *pSequenceNumber)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkNo = blockNo * dev->nChunksPerBlock;
-+      loff_t addr = (loff_t)chunkNo * dev->nDataBytesPerChunk;
-       yaffs_ExtendedTags etags;
-       int state = YAFFS_BLOCK_STATE_DEAD;
-       int seqnum = 0;
-@@ -335,21 +336,22 @@ int nandmtd1_QueryNANDBlock(struct yaffs
-       /* We don't yet have a good place to test for MTD config prerequists.
-        * Do it here as we are called during the initial scan.
-        */
--      if (nandmtd1_TestPrerequists(mtd) != YAFFS_OK) {
-+      if (nandmtd1_TestPrerequists(mtd) != YAFFS_OK)
-               return YAFFS_FAIL;
--      }
-       retval = nandmtd1_ReadChunkWithTagsFromNAND(dev, chunkNo, NULL, &etags);
-+      etags.blockBad = (mtd->block_isbad)(mtd, addr);
-       if (etags.blockBad) {
-               yaffs_trace(YAFFS_TRACE_BAD_BLOCKS,
--                      "block %d is marked bad", blockNo);
-+                      "block %d is marked bad\n", blockNo);
-               state = YAFFS_BLOCK_STATE_DEAD;
--      }
--      else if (etags.chunkUsed) {
-+      } else if (etags.eccResult != YAFFS_ECC_RESULT_NO_ERROR) {
-+              /* bad tags, need to look more closely */
-+              state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
-+      } else if (etags.chunkUsed) {
-               state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
-               seqnum = etags.sequenceNumber;
--      }
--      else {
-+      } else {
-               state = YAFFS_BLOCK_STATE_EMPTY;
-       }
-@@ -360,4 +362,4 @@ int nandmtd1_QueryNANDBlock(struct yaffs
-       return YAFFS_OK;
- }
--#endif /*KERNEL_VERSION*/
-+#endif /*MTD_VERSION*/
---- a/fs/yaffs2/yaffs_mtdif1.h
-+++ b/fs/yaffs2/yaffs_mtdif1.h
-@@ -14,15 +14,15 @@
- #ifndef __YAFFS_MTDIF1_H__
- #define __YAFFS_MTDIF1_H__
--int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--      const __u8 * data, const yaffs_ExtendedTags * tags);
-+int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+      const __u8 *data, const yaffs_ExtendedTags *tags);
--int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--      __u8 * data, yaffs_ExtendedTags * tags);
-+int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+      __u8 *data, yaffs_ExtendedTags *tags);
- int nandmtd1_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--      yaffs_BlockState * state, int *sequenceNumber);
-+      yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
---- a/fs/yaffs2/yaffs_mtdif2.c
-+++ b/fs/yaffs2/yaffs_mtdif2.c
-@@ -14,7 +14,7 @@
- /* mtd interface for YAFFS2 */
- const char *yaffs_mtdif2_c_version =
--    "$Id: yaffs_mtdif2.c,v 1.17 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_mtdif2.c,v 1.23 2009-03-06 17:20:53 wookey Exp $";
- #include "yportenv.h"
-@@ -27,19 +27,23 @@ const char *yaffs_mtdif2_c_version =
- #include "yaffs_packedtags2.h"
--int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--                                    const __u8 * data,
--                                    const yaffs_ExtendedTags * tags)
-+/* NB For use with inband tags....
-+ * We assume that the data buffer is of size totalBytersPerChunk so that we can also
-+ * use it to load the tags.
-+ */
-+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+                                    const __u8 *data,
-+                                    const yaffs_ExtendedTags *tags)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #else
-       size_t dummy;
- #endif
-       int retval = 0;
--      loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+      loff_t addr;
-       yaffs_PackedTags2 pt;
-@@ -48,46 +52,40 @@ int nandmtd2_WriteChunkWithTagsToNAND(ya
-          ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
-           TENDSTR), chunkInNAND, data, tags));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--      if (tags)
--              yaffs_PackTags2(&pt, tags);
--      else
--              BUG(); /* both tags and data should always be present */
--      if (data) {
--              ops.mode = MTD_OOB_AUTO;
--              ops.ooblen = sizeof(pt);
--              ops.len = dev->nDataBytesPerChunk;
--              ops.ooboffs = 0;
--              ops.datbuf = (__u8 *)data;
--              ops.oobbuf = (void *)&pt;
--              retval = mtd->write_oob(mtd, addr, &ops);
-+      addr  = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;
-+
-+      /* For yaffs2 writing there must be both data and tags.
-+       * If we're using inband tags, then the tags are stuffed into
-+       * the end of the data buffer.
-+       */
-+      if (!data || !tags)
-+              BUG();
-+      else if (dev->inbandTags) {
-+              yaffs_PackedTags2TagsPart *pt2tp;
-+              pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->nDataBytesPerChunk);
-+              yaffs_PackTags2TagsPart(pt2tp, tags);
-       } else
--              BUG(); /* both tags and data should always be present */
--#else
--      if (tags) {
-               yaffs_PackTags2(&pt, tags);
--      }
--      if (data && tags) {
--              if (dev->useNANDECC)
--                      retval =
--                          mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                         &dummy, data, (__u8 *) & pt, NULL);
--              else
--                      retval =
--                          mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                         &dummy, data, (__u8 *) & pt, NULL);
--      } else {
--              if (data)
--                      retval =
--                          mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
--                                     data);
--              if (tags)
--                      retval =
--                          mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
--                                         (__u8 *) & pt);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+      ops.mode = MTD_OOB_AUTO;
-+      ops.ooblen = (dev->inbandTags) ? 0 : sizeof(pt);
-+      ops.len = dev->totalBytesPerChunk;
-+      ops.ooboffs = 0;
-+      ops.datbuf = (__u8 *)data;
-+      ops.oobbuf = (dev->inbandTags) ? NULL : (void *)&pt;
-+      retval = mtd->write_oob(mtd, addr, &ops);
-+#else
-+      if (!dev->inbandTags) {
-+              retval =
-+                  mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+                                 &dummy, data, (__u8 *) &pt, NULL);
-+      } else {
-+              retval =
-+                  mtd->write(mtd, addr, dev->totalBytesPerChunk, &dummy,
-+                             data);
-       }
- #endif
-@@ -97,17 +95,18 @@ int nandmtd2_WriteChunkWithTagsToNAND(ya
-               return YAFFS_FAIL;
- }
--int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                     __u8 * data, yaffs_ExtendedTags * tags)
-+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                     __u8 *data, yaffs_ExtendedTags *tags)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-+      int localData = 0;
--      loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+      loff_t addr = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;
-       yaffs_PackedTags2 pt;
-@@ -116,9 +115,20 @@ int nandmtd2_ReadChunkWithTagsFromNAND(y
-          ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
-           TENDSTR), chunkInNAND, data, tags));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--      if (data && !tags)
--              retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
-+      if (dev->inbandTags) {
-+
-+              if (!data) {
-+                      localData = 1;
-+                      data = yaffs_GetTempBuffer(dev, __LINE__);
-+              }
-+
-+
-+      }
-+
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+      if (dev->inbandTags || (data && !tags))
-+              retval = mtd->read(mtd, addr, dev->totalBytesPerChunk,
-                               &dummy, data);
-       else if (tags) {
-               ops.mode = MTD_OOB_AUTO;
-@@ -130,38 +140,42 @@ int nandmtd2_ReadChunkWithTagsFromNAND(y
-               retval = mtd->read_oob(mtd, addr, &ops);
-       }
- #else
--      if (data && tags) {
--              if (dev->useNANDECC) {
--                      retval =
--                          mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                        &dummy, data, dev->spareBuffer,
--                                        NULL);
--              } else {
--                      retval =
--                          mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+      if (!dev->inbandTags && data && tags) {
-+
-+              retval = mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-                                         &dummy, data, dev->spareBuffer,
-                                         NULL);
--              }
-       } else {
-               if (data)
-                       retval =
-                           mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
-                                     data);
--              if (tags)
-+              if (!dev->inbandTags && tags)
-                       retval =
-                           mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
-                                         dev->spareBuffer);
-       }
- #endif
--      memcpy(&pt, dev->spareBuffer, sizeof(pt));
--      if (tags)
--              yaffs_UnpackTags2(tags, &pt);
-+      if (dev->inbandTags) {
-+              if (tags) {
-+                      yaffs_PackedTags2TagsPart *pt2tp;
-+                      pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk];
-+                      yaffs_UnpackTags2TagsPart(tags, pt2tp);
-+              }
-+      } else {
-+              if (tags) {
-+                      memcpy(&pt, dev->spareBuffer, sizeof(pt));
-+                      yaffs_UnpackTags2(tags, &pt);
-+              }
-+      }
--      if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
--              tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-+      if (localData)
-+              yaffs_ReleaseTempBuffer(dev, data, __LINE__);
-+      if (tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
-+              tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-       if (retval == 0)
-               return YAFFS_OK;
-       else
-@@ -178,7 +192,7 @@ int nandmtd2_MarkNANDBlockBad(struct yaf
-       retval =
-           mtd->block_markbad(mtd,
-                              blockNo * dev->nChunksPerBlock *
--                             dev->nDataBytesPerChunk);
-+                             dev->totalBytesPerChunk);
-       if (retval == 0)
-               return YAFFS_OK;
-@@ -188,7 +202,7 @@ int nandmtd2_MarkNANDBlockBad(struct yaf
- }
- int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                          yaffs_BlockState * state, int *sequenceNumber)
-+                          yaffs_BlockState *state, __u32 *sequenceNumber)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-       int retval;
-@@ -198,7 +212,7 @@ int nandmtd2_QueryNANDBlock(struct yaffs
-       retval =
-           mtd->block_isbad(mtd,
-                            blockNo * dev->nChunksPerBlock *
--                           dev->nDataBytesPerChunk);
-+                           dev->totalBytesPerChunk);
-       if (retval) {
-               T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
---- a/fs/yaffs2/yaffs_mtdif2.h
-+++ b/fs/yaffs2/yaffs_mtdif2.h
-@@ -17,13 +17,13 @@
- #define __YAFFS_MTDIF2_H__
- #include "yaffs_guts.h"
--int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--                                    const __u8 * data,
--                                    const yaffs_ExtendedTags * tags);
--int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                     __u8 * data, yaffs_ExtendedTags * tags);
-+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags);
-+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                              __u8 *data, yaffs_ExtendedTags *tags);
- int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                          yaffs_BlockState * state, int *sequenceNumber);
-+                      yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
---- a/fs/yaffs2/yaffs_mtdif.c
-+++ b/fs/yaffs2/yaffs_mtdif.c
-@@ -12,7 +12,7 @@
-  */
- const char *yaffs_mtdif_c_version =
--    "$Id: yaffs_mtdif.c,v 1.19 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_mtdif.c,v 1.22 2009-03-06 17:20:51 wookey Exp $";
- #include "yportenv.h"
-@@ -24,7 +24,7 @@ const char *yaffs_mtdif_c_version =
- #include "linux/time.h"
- #include "linux/mtd/nand.h"
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 18))
- static struct nand_oobinfo yaffs_oobinfo = {
-       .useecc = 1,
-       .eccbytes = 6,
-@@ -36,7 +36,7 @@ static struct nand_oobinfo yaffs_noeccin
- };
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
- static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
- {
-       oob[0] = spare->tagByte0;
-@@ -45,8 +45,8 @@ static inline void translate_spare2oob(c
-       oob[3] = spare->tagByte3;
-       oob[4] = spare->tagByte4;
-       oob[5] = spare->tagByte5 & 0x3f;
--      oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
--      oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
-+      oob[5] |= spare->blockStatus == 'Y' ? 0 : 0x80;
-+      oob[5] |= spare->pageStatus == 0 ? 0 : 0x40;
-       oob[6] = spare->tagByte6;
-       oob[7] = spare->tagByte7;
- }
-@@ -71,18 +71,18 @@ static inline void translate_oob2spare(y
- }
- #endif
--int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
--                           const __u8 * data, const yaffs_Spare * spare)
-+int nandmtd_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,
-+                           const __u8 *data, const yaffs_Spare *spare)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       __u8 spareAsBytes[8]; /* OOB */
-       if (data && !spare)
-@@ -135,18 +135,18 @@ int nandmtd_WriteChunkToNAND(yaffs_Devic
-               return YAFFS_FAIL;
- }
--int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
--                            yaffs_Spare * spare)
-+int nandmtd_ReadChunkFromNAND(yaffs_Device *dev, int chunkInNAND, __u8 *data,
-+                            yaffs_Spare *spare)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       __u8 spareAsBytes[8]; /* OOB */
-       if (data && !spare)
-@@ -205,7 +205,7 @@ int nandmtd_ReadChunkFromNAND(yaffs_Devi
-               return YAFFS_FAIL;
- }
--int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
-+int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-       __u32 addr =
-@@ -234,7 +234,7 @@ int nandmtd_EraseBlockInNAND(yaffs_Devic
-               return YAFFS_FAIL;
- }
--int nandmtd_InitialiseNAND(yaffs_Device * dev)
-+int nandmtd_InitialiseNAND(yaffs_Device *dev)
- {
-       return YAFFS_OK;
- }
---- a/fs/yaffs2/yaffs_mtdif.h
-+++ b/fs/yaffs2/yaffs_mtdif.h
-@@ -18,10 +18,15 @@
- #include "yaffs_guts.h"
--int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
--                           const __u8 * data, const yaffs_Spare * spare);
--int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
--                            yaffs_Spare * spare);
--int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
--int nandmtd_InitialiseNAND(yaffs_Device * dev);
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 18))
-+extern struct nand_oobinfo yaffs_oobinfo;
-+extern struct nand_oobinfo yaffs_noeccinfo;
-+#endif
-+
-+int nandmtd_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,
-+                      const __u8 *data, const yaffs_Spare *spare);
-+int nandmtd_ReadChunkFromNAND(yaffs_Device *dev, int chunkInNAND, __u8 *data,
-+                      yaffs_Spare *spare);
-+int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-+int nandmtd_InitialiseNAND(yaffs_Device *dev);
- #endif
---- a/fs/yaffs2/yaffs_nand.c
-+++ b/fs/yaffs2/yaffs_nand.c
-@@ -12,16 +12,17 @@
-  */
- const char *yaffs_nand_c_version =
--    "$Id: yaffs_nand.c,v 1.7 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_nand.c,v 1.10 2009-03-06 17:20:54 wookey Exp $";
- #include "yaffs_nand.h"
- #include "yaffs_tagscompat.h"
- #include "yaffs_tagsvalidity.h"
-+#include "yaffs_getblockinfo.h"
--int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                         __u8 * buffer,
--                                         yaffs_ExtendedTags * tags)
-+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                         __u8 *buffer,
-+                                         yaffs_ExtendedTags *tags)
- {
-       int result;
-       yaffs_ExtendedTags localTags;
-@@ -29,7 +30,7 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff
-       int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
-       /* If there are no tags provided, use local tags to get prioritised gc working */
--      if(!tags)
-+      if (!tags)
-               tags = &localTags;
-       if (dev->readChunkWithTagsFromNAND)
-@@ -40,20 +41,20 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff
-                                                                       realignedChunkInNAND,
-                                                                       buffer,
-                                                                       tags);
--      if(tags &&
--         tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
-+      if (tags &&
-+         tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR) {
-               yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
--                yaffs_HandleChunkError(dev,bi);
-+              yaffs_HandleChunkError(dev, bi);
-       }
-       return result;
- }
--int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
-+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev,
-                                                  int chunkInNAND,
--                                                 const __u8 * buffer,
--                                                 yaffs_ExtendedTags * tags)
-+                                                 const __u8 *buffer,
-+                                                 yaffs_ExtendedTags *tags)
- {
-       chunkInNAND -= dev->chunkOffset;
-@@ -84,7 +85,7 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs
-                                                                      tags);
- }
--int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
-+int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo)
- {
-       blockNo -= dev->blockOffset;
-@@ -95,10 +96,10 @@ int yaffs_MarkBlockBad(yaffs_Device * de
-               return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
- }
--int yaffs_QueryInitialBlockState(yaffs_Device * dev,
-+int yaffs_QueryInitialBlockState(yaffs_Device *dev,
-                                                int blockNo,
--                                               yaffs_BlockState * state,
--                                               unsigned *sequenceNumber)
-+                                               yaffs_BlockState *state,
-+                                               __u32 *sequenceNumber)
- {
-       blockNo -= dev->blockOffset;
---- a/fs/yaffs2/yaffs_nandemul2k.h
-+++ b/fs/yaffs2/yaffs_nandemul2k.h
-@@ -21,14 +21,14 @@
- #include "yaffs_guts.h"
- int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
--                                      int chunkInNAND, const __u8 * data,
--                                      yaffs_ExtendedTags * tags);
-+                                      int chunkInNAND, const __u8 *data,
-+                                      const yaffs_ExtendedTags *tags);
- int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
--                                       int chunkInNAND, __u8 * data,
--                                       yaffs_ExtendedTags * tags);
-+                                       int chunkInNAND, __u8 *data,
-+                                       yaffs_ExtendedTags *tags);
- int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                            yaffs_BlockState * state, int *sequenceNumber);
-+                            yaffs_BlockState *state, __u32 *sequenceNumber);
- int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-                               int blockInNAND);
- int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
---- a/fs/yaffs2/yaffs_nand.h
-+++ b/fs/yaffs2/yaffs_nand.h
-@@ -19,21 +19,21 @@
--int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                         __u8 * buffer,
--                                         yaffs_ExtendedTags * tags);
--
--int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                 int chunkInNAND,
--                                                 const __u8 * buffer,
--                                                 yaffs_ExtendedTags * tags);
--
--int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo);
--
--int yaffs_QueryInitialBlockState(yaffs_Device * dev,
--                                               int blockNo,
--                                               yaffs_BlockState * state,
--                                               unsigned *sequenceNumber);
-+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                      __u8 *buffer,
-+                                      yaffs_ExtendedTags *tags);
-+
-+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *buffer,
-+                                              yaffs_ExtendedTags *tags);
-+
-+int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo);
-+
-+int yaffs_QueryInitialBlockState(yaffs_Device *dev,
-+                                              int blockNo,
-+                                              yaffs_BlockState *state,
-+                                              unsigned *sequenceNumber);
- int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-                                 int blockInNAND);
---- a/fs/yaffs2/yaffs_packedtags1.c
-+++ b/fs/yaffs2/yaffs_packedtags1.c
-@@ -14,7 +14,7 @@
- #include "yaffs_packedtags1.h"
- #include "yportenv.h"
--void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t)
-+void yaffs_PackTags1(yaffs_PackedTags1 *pt, const yaffs_ExtendedTags *t)
- {
-       pt->chunkId = t->chunkId;
-       pt->serialNumber = t->serialNumber;
-@@ -27,7 +27,7 @@ void yaffs_PackTags1(yaffs_PackedTags1 *
- }
--void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt)
-+void yaffs_UnpackTags1(yaffs_ExtendedTags *t, const yaffs_PackedTags1 *pt)
- {
-       static const __u8 allFF[] =
-           { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-@@ -35,9 +35,8 @@ void yaffs_UnpackTags1(yaffs_ExtendedTag
-       if (memcmp(allFF, pt, sizeof(yaffs_PackedTags1))) {
-               t->blockBad = 0;
--              if (pt->shouldBeFF != 0xFFFFFFFF) {
-+              if (pt->shouldBeFF != 0xFFFFFFFF)
-                       t->blockBad = 1;
--              }
-               t->chunkUsed = 1;
-               t->objectId = pt->objectId;
-               t->chunkId = pt->chunkId;
-@@ -47,6 +46,5 @@ void yaffs_UnpackTags1(yaffs_ExtendedTag
-               t->serialNumber = pt->serialNumber;
-       } else {
-               memset(t, 0, sizeof(yaffs_ExtendedTags));
--
-       }
- }
---- a/fs/yaffs2/yaffs_packedtags1.h
-+++ b/fs/yaffs2/yaffs_packedtags1.h
-@@ -32,6 +32,6 @@ typedef struct {
- } yaffs_PackedTags1;
--void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t);
--void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt);
-+void yaffs_PackTags1(yaffs_PackedTags1 *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags1(yaffs_ExtendedTags *t, const yaffs_PackedTags1 *pt);
- #endif
---- a/fs/yaffs2/yaffs_packedtags2.c
-+++ b/fs/yaffs2/yaffs_packedtags2.c
-@@ -37,60 +37,68 @@
- #define EXTRA_OBJECT_TYPE_SHIFT (28)
- #define EXTRA_OBJECT_TYPE_MASK  ((0x0F) << EXTRA_OBJECT_TYPE_SHIFT)
--static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt)
-+
-+static void yaffs_DumpPackedTags2TagsPart(const yaffs_PackedTags2TagsPart *ptt)
- {
-       T(YAFFS_TRACE_MTD,
-         (TSTR("packed tags obj %d chunk %d byte %d seq %d" TENDSTR),
--         pt->t.objectId, pt->t.chunkId, pt->t.byteCount,
--         pt->t.sequenceNumber));
-+         ptt->objectId, ptt->chunkId, ptt->byteCount,
-+         ptt->sequenceNumber));
-+}
-+static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 *pt)
-+{
-+      yaffs_DumpPackedTags2TagsPart(&pt->t);
- }
--static void yaffs_DumpTags2(const yaffs_ExtendedTags * t)
-+static void yaffs_DumpTags2(const yaffs_ExtendedTags *t)
- {
-       T(YAFFS_TRACE_MTD,
-         (TSTR
--         ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte "
--          "%d del %d ser %d seq %d"
-+         ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte %d del %d ser %d seq %d"
-           TENDSTR), t->eccResult, t->blockBad, t->chunkUsed, t->objectId,
-          t->chunkId, t->byteCount, t->chunkDeleted, t->serialNumber,
-          t->sequenceNumber));
- }
--void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t)
-+void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart *ptt,
-+              const yaffs_ExtendedTags *t)
- {
--      pt->t.chunkId = t->chunkId;
--      pt->t.sequenceNumber = t->sequenceNumber;
--      pt->t.byteCount = t->byteCount;
--      pt->t.objectId = t->objectId;
-+      ptt->chunkId = t->chunkId;
-+      ptt->sequenceNumber = t->sequenceNumber;
-+      ptt->byteCount = t->byteCount;
-+      ptt->objectId = t->objectId;
-       if (t->chunkId == 0 && t->extraHeaderInfoAvailable) {
-               /* Store the extra header info instead */
-               /* We save the parent object in the chunkId */
--              pt->t.chunkId = EXTRA_HEADER_INFO_FLAG
-+              ptt->chunkId = EXTRA_HEADER_INFO_FLAG
-                       | t->extraParentObjectId;
--              if (t->extraIsShrinkHeader) {
--                      pt->t.chunkId |= EXTRA_SHRINK_FLAG;
--              }
--              if (t->extraShadows) {
--                      pt->t.chunkId |= EXTRA_SHADOWS_FLAG;
--              }
-+              if (t->extraIsShrinkHeader)
-+                      ptt->chunkId |= EXTRA_SHRINK_FLAG;
-+              if (t->extraShadows)
-+                      ptt->chunkId |= EXTRA_SHADOWS_FLAG;
--              pt->t.objectId &= ~EXTRA_OBJECT_TYPE_MASK;
--              pt->t.objectId |=
-+              ptt->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
-+              ptt->objectId |=
-                   (t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT);
--              if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
--                      pt->t.byteCount = t->extraEquivalentObjectId;
--              } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) {
--                      pt->t.byteCount = t->extraFileLength;
--              } else {
--                      pt->t.byteCount = 0;
--              }
-+              if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
-+                      ptt->byteCount = t->extraEquivalentObjectId;
-+              else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE)
-+                      ptt->byteCount = t->extraFileLength;
-+              else
-+                      ptt->byteCount = 0;
-       }
--      yaffs_DumpPackedTags2(pt);
-+      yaffs_DumpPackedTags2TagsPart(ptt);
-       yaffs_DumpTags2(t);
-+}
-+
-+
-+void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t)
-+{
-+      yaffs_PackTags2TagsPart(&pt->t, t);
- #ifndef YAFFS_IGNORE_TAGS_ECC
-       {
-@@ -101,82 +109,98 @@ void yaffs_PackTags2(yaffs_PackedTags2 *
- #endif
- }
--void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt)
-+
-+void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags *t,
-+              yaffs_PackedTags2TagsPart *ptt)
- {
-       memset(t, 0, sizeof(yaffs_ExtendedTags));
-       yaffs_InitialiseTags(t);
--      if (pt->t.sequenceNumber != 0xFFFFFFFF) {
--              /* Page is in use */
--#ifdef YAFFS_IGNORE_TAGS_ECC
--              {
--                      t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
--              }
--#else
--              {
--                      yaffs_ECCOther ecc;
--                      int result;
--                      yaffs_ECCCalculateOther((unsigned char *)&pt->t,
--                                              sizeof
--                                              (yaffs_PackedTags2TagsPart),
--                                              &ecc);
--                      result =
--                          yaffs_ECCCorrectOther((unsigned char *)&pt->t,
--                                                sizeof
--                                                (yaffs_PackedTags2TagsPart),
--                                                &pt->ecc, &ecc);
--                      switch(result){
--                              case 0:
--                                      t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
--                                      break;
--                              case 1:
--                                      t->eccResult = YAFFS_ECC_RESULT_FIXED;
--                                      break;
--                              case -1:
--                                      t->eccResult = YAFFS_ECC_RESULT_UNFIXED;
--                                      break;
--                              default:
--                                      t->eccResult = YAFFS_ECC_RESULT_UNKNOWN;
--                      }
--              }
--#endif
-+      if (ptt->sequenceNumber != 0xFFFFFFFF) {
-               t->blockBad = 0;
-               t->chunkUsed = 1;
--              t->objectId = pt->t.objectId;
--              t->chunkId = pt->t.chunkId;
--              t->byteCount = pt->t.byteCount;
-+              t->objectId = ptt->objectId;
-+              t->chunkId = ptt->chunkId;
-+              t->byteCount = ptt->byteCount;
-               t->chunkDeleted = 0;
-               t->serialNumber = 0;
--              t->sequenceNumber = pt->t.sequenceNumber;
-+              t->sequenceNumber = ptt->sequenceNumber;
-               /* Do extra header info stuff */
--              if (pt->t.chunkId & EXTRA_HEADER_INFO_FLAG) {
-+              if (ptt->chunkId & EXTRA_HEADER_INFO_FLAG) {
-                       t->chunkId = 0;
-                       t->byteCount = 0;
-                       t->extraHeaderInfoAvailable = 1;
-                       t->extraParentObjectId =
--                          pt->t.chunkId & (~(ALL_EXTRA_FLAGS));
-+                          ptt->chunkId & (~(ALL_EXTRA_FLAGS));
-                       t->extraIsShrinkHeader =
--                          (pt->t.chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
-+                          (ptt->chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
-                       t->extraShadows =
--                          (pt->t.chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
-+                          (ptt->chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
-                       t->extraObjectType =
--                          pt->t.objectId >> EXTRA_OBJECT_TYPE_SHIFT;
-+                          ptt->objectId >> EXTRA_OBJECT_TYPE_SHIFT;
-                       t->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
--                      if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
--                              t->extraEquivalentObjectId = pt->t.byteCount;
--                      } else {
--                              t->extraFileLength = pt->t.byteCount;
-+                      if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
-+                              t->extraEquivalentObjectId = ptt->byteCount;
-+                      else
-+                              t->extraFileLength = ptt->byteCount;
-+              }
-+      }
-+
-+      yaffs_DumpPackedTags2TagsPart(ptt);
-+      yaffs_DumpTags2(t);
-+
-+}
-+
-+
-+void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt)
-+{
-+
-+      yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_NO_ERROR;
-+
-+      if (pt->t.sequenceNumber != 0xFFFFFFFF) {
-+              /* Page is in use */
-+#ifndef YAFFS_IGNORE_TAGS_ECC
-+              {
-+                      yaffs_ECCOther ecc;
-+                      int result;
-+                      yaffs_ECCCalculateOther((unsigned char *)&pt->t,
-+                                              sizeof
-+                                              (yaffs_PackedTags2TagsPart),
-+                                              &ecc);
-+                      result =
-+                          yaffs_ECCCorrectOther((unsigned char *)&pt->t,
-+                                                sizeof
-+                                                (yaffs_PackedTags2TagsPart),
-+                                                &pt->ecc, &ecc);
-+                      switch (result) {
-+                      case 0:
-+                              eccResult = YAFFS_ECC_RESULT_NO_ERROR;
-+                              break;
-+                      case 1:
-+                              eccResult = YAFFS_ECC_RESULT_FIXED;
-+                              break;
-+                      case -1:
-+                              eccResult = YAFFS_ECC_RESULT_UNFIXED;
-+                              break;
-+                      default:
-+                              eccResult = YAFFS_ECC_RESULT_UNKNOWN;
-                       }
-               }
-+#endif
-       }
-+      yaffs_UnpackTags2TagsPart(t, &pt->t);
-+
-+      t->eccResult = eccResult;
-+
-       yaffs_DumpPackedTags2(pt);
-       yaffs_DumpTags2(t);
- }
-+
---- a/fs/yaffs2/yaffs_packedtags2.h
-+++ b/fs/yaffs2/yaffs_packedtags2.h
-@@ -33,6 +33,11 @@ typedef struct {
-       yaffs_ECCOther ecc;
- } yaffs_PackedTags2;
--void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t);
--void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt);
-+/* Full packed tags with ECC, used for oob tags */
-+void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt);
-+
-+/* Only the tags part (no ECC for use with inband tags */
-+void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags *t, yaffs_PackedTags2TagsPart *pt);
- #endif
---- a/fs/yaffs2/yaffs_qsort.c
-+++ b/fs/yaffs2/yaffs_qsort.c
-@@ -28,12 +28,12 @@
-  */
- #include "yportenv.h"
--//#include <linux/string.h>
-+/* #include <linux/string.h> */
- /*
-  * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
-  */
--#define swapcode(TYPE, parmi, parmj, n) {             \
-+#define swapcode(TYPE, parmi, parmj, n) do {          \
-       long i = (n) / sizeof (TYPE);                   \
-       register TYPE *pi = (TYPE *) (parmi);           \
-       register TYPE *pj = (TYPE *) (parmj);           \
-@@ -41,28 +41,29 @@
-               register TYPE   t = *pi;                \
-               *pi++ = *pj;                            \
-               *pj++ = t;                              \
--        } while (--i > 0);                            \
--}
-+      } while (--i > 0);                              \
-+} while (0)
- #define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
--      es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
-+      es % sizeof(long) ? 2 : es == sizeof(long) ? 0 : 1;
- static __inline void
- swapfunc(char *a, char *b, int n, int swaptype)
- {
-       if (swaptype <= 1)
--              swapcode(long, a, b, n)
-+              swapcode(long, a, b, n);
-       else
--              swapcode(char, a, b, n)
-+              swapcode(char, a, b, n);
- }
--#define swap(a, b)                                    \
-+#define yswap(a, b) do {                                      \
-       if (swaptype == 0) {                            \
-               long t = *(long *)(a);                  \
-               *(long *)(a) = *(long *)(b);            \
-               *(long *)(b) = t;                       \
-       } else                                          \
--              swapfunc(a, b, es, swaptype)
-+              swapfunc(a, b, es, swaptype);           \
-+} while (0)
- #define vecswap(a, b, n)      if ((n) > 0) swapfunc(a, b, n, swaptype)
-@@ -70,12 +71,12 @@ static __inline char *
- med3(char *a, char *b, char *c, int (*cmp)(const void *, const void *))
- {
-       return cmp(a, b) < 0 ?
--             (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
--              :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
-+              (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a))
-+              : (cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c));
- }
- #ifndef min
--#define min(a,b) (((a) < (b)) ? (a) : (b))
-+#define min(a, b) (((a) < (b)) ? (a) : (b))
- #endif
- void
-@@ -92,7 +93,7 @@ loop:        SWAPINIT(a, es);
-               for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
-                            pl -= es)
--                              swap(pl, pl - es);
-+                              yswap(pl, pl - es);
-               return;
-       }
-       pm = (char *)a + (n / 2) * es;
-@@ -107,7 +108,7 @@ loop:      SWAPINIT(a, es);
-               }
-               pm = med3(pl, pm, pn, cmp);
-       }
--      swap(a, pm);
-+      yswap(a, pm);
-       pa = pb = (char *)a + es;
-       pc = pd = (char *)a + (n - 1) * es;
-@@ -115,7 +116,7 @@ loop:      SWAPINIT(a, es);
-               while (pb <= pc && (r = cmp(pb, a)) <= 0) {
-                       if (r == 0) {
-                               swap_cnt = 1;
--                              swap(pa, pb);
-+                              yswap(pa, pb);
-                               pa += es;
-                       }
-                       pb += es;
-@@ -123,14 +124,14 @@ loop:    SWAPINIT(a, es);
-               while (pb <= pc && (r = cmp(pc, a)) >= 0) {
-                       if (r == 0) {
-                               swap_cnt = 1;
--                              swap(pc, pd);
-+                              yswap(pc, pd);
-                               pd -= es;
-                       }
-                       pc -= es;
-               }
-               if (pb > pc)
-                       break;
--              swap(pb, pc);
-+              yswap(pb, pc);
-               swap_cnt = 1;
-               pb += es;
-               pc -= es;
-@@ -139,7 +140,7 @@ loop:      SWAPINIT(a, es);
-               for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
-                            pl -= es)
--                              swap(pl, pl - es);
-+                              yswap(pl, pl - es);
-               return;
-       }
-@@ -148,9 +149,11 @@ loop:     SWAPINIT(a, es);
-       vecswap(a, pb - r, r);
-       r = min((long)(pd - pc), (long)(pn - pd - es));
-       vecswap(pb, pn - r, r);
--      if ((r = pb - pa) > es)
-+      r = pb - pa;
-+      if (r > es)
-               yaffs_qsort(a, r / es, es, cmp);
--      if ((r = pd - pc) > es) {
-+      r = pd - pc;
-+      if (r > es) {
-               /* Iterate rather than recurse to save stack space */
-               a = pn - r;
-               n = r / es;
---- a/fs/yaffs2/yaffs_qsort.h
-+++ b/fs/yaffs2/yaffs_qsort.h
-@@ -17,7 +17,7 @@
- #ifndef __YAFFS_QSORT_H__
- #define __YAFFS_QSORT_H__
--extern void yaffs_qsort (void *const base, size_t total_elems, size_t size,
--                   int (*cmp)(const void *, const void *));
-+extern void yaffs_qsort(void *const base, size_t total_elems, size_t size,
-+                      int (*cmp)(const void *, const void *));
- #endif
---- a/fs/yaffs2/yaffs_tagscompat.c
-+++ b/fs/yaffs2/yaffs_tagscompat.c
-@@ -14,16 +14,17 @@
- #include "yaffs_guts.h"
- #include "yaffs_tagscompat.h"
- #include "yaffs_ecc.h"
-+#include "yaffs_getblockinfo.h"
--static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND);
-+static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND);
- #ifdef NOTYET
--static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND);
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_Spare * spare);
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_Spare * spare);
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND);
-+static void yaffs_CheckWrittenBlock(yaffs_Device *dev, int chunkInNAND);
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                                   const __u8 *data,
-+                                   const yaffs_Spare *spare);
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                                  const yaffs_Spare *spare);
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND);
- #endif
- static const char yaffs_countBitsTable[256] = {
-@@ -54,13 +55,13 @@ int yaffs_CountBits(__u8 x)
- /********** Tags ECC calculations  *********/
--void yaffs_CalcECC(const __u8 * data, yaffs_Spare * spare)
-+void yaffs_CalcECC(const __u8 *data, yaffs_Spare *spare)
- {
-       yaffs_ECCCalculate(data, spare->ecc1);
-       yaffs_ECCCalculate(&data[256], spare->ecc2);
- }
--void yaffs_CalcTagsECC(yaffs_Tags * tags)
-+void yaffs_CalcTagsECC(yaffs_Tags *tags)
- {
-       /* Calculate an ecc */
-@@ -74,9 +75,8 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags
-       for (i = 0; i < 8; i++) {
-               for (j = 1; j & 0xff; j <<= 1) {
-                       bit++;
--                      if (b[i] & j) {
-+                      if (b[i] & j)
-                               ecc ^= bit;
--                      }
-               }
-       }
-@@ -84,7 +84,7 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags
- }
--int yaffs_CheckECCOnTags(yaffs_Tags * tags)
-+int yaffs_CheckECCOnTags(yaffs_Tags *tags)
- {
-       unsigned ecc = tags->ecc;
-@@ -115,8 +115,8 @@ int yaffs_CheckECCOnTags(yaffs_Tags * ta
- /********** Tags **********/
--static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,
--                                  yaffs_Tags * tagsPtr)
-+static void yaffs_LoadTagsIntoSpare(yaffs_Spare *sparePtr,
-+                              yaffs_Tags *tagsPtr)
- {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-@@ -132,8 +132,8 @@ static void yaffs_LoadTagsIntoSpare(yaff
-       sparePtr->tagByte7 = tu->asBytes[7];
- }
--static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
--                                 yaffs_Tags * tagsPtr)
-+static void yaffs_GetTagsFromSpare(yaffs_Device *dev, yaffs_Spare *sparePtr,
-+                              yaffs_Tags *tagsPtr)
- {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-       int result;
-@@ -148,21 +148,20 @@ static void yaffs_GetTagsFromSpare(yaffs
-       tu->asBytes[7] = sparePtr->tagByte7;
-       result = yaffs_CheckECCOnTags(tagsPtr);
--      if (result > 0) {
-+      if (result > 0)
-               dev->tagsEccFixed++;
--      } else if (result < 0) {
-+      else if (result < 0)
-               dev->tagsEccUnfixed++;
--      }
- }
--static void yaffs_SpareInitialise(yaffs_Spare * spare)
-+static void yaffs_SpareInitialise(yaffs_Spare *spare)
- {
-       memset(spare, 0xFF, sizeof(yaffs_Spare));
- }
- static int yaffs_WriteChunkToNAND(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND, const __u8 * data,
--                                yaffs_Spare * spare)
-+                              int chunkInNAND, const __u8 *data,
-+                              yaffs_Spare *spare)
- {
-       if (chunkInNAND < dev->startBlock * dev->nChunksPerBlock) {
-               T(YAFFS_TRACE_ERROR,
-@@ -177,9 +176,9 @@ static int yaffs_WriteChunkToNAND(struct
- static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev,
-                                  int chunkInNAND,
--                                 __u8 * data,
--                                 yaffs_Spare * spare,
--                                 yaffs_ECCResult * eccResult,
-+                                 __u8 *data,
-+                                 yaffs_Spare *spare,
-+                                 yaffs_ECCResult *eccResult,
-                                  int doErrorCorrection)
- {
-       int retVal;
-@@ -252,9 +251,11 @@ static int yaffs_ReadChunkFromNAND(struc
-               /* Must allocate enough memory for spare+2*sizeof(int) */
-               /* for ecc results from device. */
-               struct yaffs_NANDSpare nspare;
--              retVal =
--                  dev->readChunkFromNAND(dev, chunkInNAND, data,
--                                         (yaffs_Spare *) & nspare);
-+
-+              memset(&nspare, 0, sizeof(nspare));
-+
-+              retVal = dev->readChunkFromNAND(dev, chunkInNAND, data,
-+                                      (yaffs_Spare *) &nspare);
-               memcpy(spare, &nspare, sizeof(yaffs_Spare));
-               if (data && doErrorCorrection) {
-                       if (nspare.eccres1 > 0) {
-@@ -302,8 +303,7 @@ static int yaffs_ReadChunkFromNAND(struc
- static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
-                                 int chunkInNAND)
- {
--
--      static int init = 0;
-+      static int init;
-       static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK];
-       static __u8 data[YAFFS_BYTES_PER_CHUNK];
-       /* Might as well always allocate the larger size for */
-@@ -331,12 +331,12 @@ static int yaffs_CheckChunkErased(struct
-  * Functions for robustisizing
-  */
--static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND)
- {
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-       /* Mark the block for retirement */
--      yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
-+      yaffs_GetBlockInfo(dev, blockInNAND + dev->blockOffset)->needsRetiring = 1;
-       T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
-         (TSTR("**>>Block %d marked for retirement" TENDSTR), blockInNAND));
-@@ -348,22 +348,22 @@ static void yaffs_HandleReadDataError(ya
- }
- #ifdef NOTYET
--static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_CheckWrittenBlock(yaffs_Device *dev, int chunkInNAND)
- {
- }
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_Spare * spare)
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                                   const __u8 *data,
-+                                   const yaffs_Spare *spare)
- {
- }
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_Spare * spare)
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                                  const yaffs_Spare *spare)
- {
- }
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND)
- {
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-@@ -373,8 +373,8 @@ static void yaffs_HandleWriteChunkError(
-       yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
- }
--static int yaffs_VerifyCompare(const __u8 * d0, const __u8 * d1,
--                             const yaffs_Spare * s0, const yaffs_Spare * s1)
-+static int yaffs_VerifyCompare(const __u8 *d0, const __u8 *d1,
-+                             const yaffs_Spare *s0, const yaffs_Spare *s1)
- {
-       if (memcmp(d0, d1, YAFFS_BYTES_PER_CHUNK) != 0 ||
-@@ -398,28 +398,35 @@ static int yaffs_VerifyCompare(const __u
- }
- #endif                                /* NOTYET */
--int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                  int chunkInNAND,
--                                                  const __u8 * data,
--                                                  const yaffs_ExtendedTags *
--                                                  eTags)
-+int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *data,
-+                                              const yaffs_ExtendedTags *eTags)
- {
-       yaffs_Spare spare;
-       yaffs_Tags tags;
-       yaffs_SpareInitialise(&spare);
--      if (eTags->chunkDeleted) {
-+      if (eTags->chunkDeleted)
-               spare.pageStatus = 0;
--      } else {
-+      else {
-               tags.objectId = eTags->objectId;
-               tags.chunkId = eTags->chunkId;
--              tags.byteCount = eTags->byteCount;
-+
-+              tags.byteCountLSB = eTags->byteCount & 0x3ff;
-+
-+              if (dev->nDataBytesPerChunk >= 1024)
-+                      tags.byteCountMSB = (eTags->byteCount >> 10) & 3;
-+              else
-+                      tags.byteCountMSB = 3;
-+
-+
-               tags.serialNumber = eTags->serialNumber;
--              if (!dev->useNANDECC && data) {
-+              if (!dev->useNANDECC && data)
-                       yaffs_CalcECC(data, &spare);
--              }
-+
-               yaffs_LoadTagsIntoSpare(&spare, &tags);
-       }
-@@ -427,15 +434,15 @@ int yaffs_TagsCompatabilityWriteChunkWit
-       return yaffs_WriteChunkToNAND(dev, chunkInNAND, data, &spare);
- }
--int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
-+int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device *dev,
-                                                    int chunkInNAND,
--                                                   __u8 * data,
--                                                   yaffs_ExtendedTags * eTags)
-+                                                   __u8 *data,
-+                                                   yaffs_ExtendedTags *eTags)
- {
-       yaffs_Spare spare;
-       yaffs_Tags tags;
--      yaffs_ECCResult eccResult;
-+      yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_UNKNOWN;
-       static yaffs_Spare spareFF;
-       static int init;
-@@ -466,7 +473,11 @@ int yaffs_TagsCompatabilityReadChunkWith
-                               eTags->objectId = tags.objectId;
-                               eTags->chunkId = tags.chunkId;
--                              eTags->byteCount = tags.byteCount;
-+                              eTags->byteCount = tags.byteCountLSB;
-+
-+                              if (dev->nDataBytesPerChunk >= 1024)
-+                                      eTags->byteCount |= (((unsigned) tags.byteCountMSB) << 10);
-+
-                               eTags->serialNumber = tags.serialNumber;
-                       }
-               }
-@@ -497,9 +508,9 @@ int yaffs_TagsCompatabilityMarkNANDBlock
- }
- int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
--                                        int blockNo, yaffs_BlockState *
--                                        state,
--                                        int *sequenceNumber)
-+                                        int blockNo,
-+                                        yaffs_BlockState *state,
-+                                        __u32 *sequenceNumber)
- {
-       yaffs_Spare spare0, spare1;
---- a/fs/yaffs2/yaffs_tagscompat.h
-+++ b/fs/yaffs2/yaffs_tagscompat.h
-@@ -17,24 +17,23 @@
- #define __YAFFS_TAGSCOMPAT_H__
- #include "yaffs_guts.h"
--int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                  int chunkInNAND,
--                                                  const __u8 * data,
--                                                  const yaffs_ExtendedTags *
--                                                  tags);
--int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
--                                                   int chunkInNAND,
--                                                   __u8 * data,
--                                                   yaffs_ExtendedTags *
--                                                   tags);
-+int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *data,
-+                                              const yaffs_ExtendedTags *tags);
-+int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              __u8 *data,
-+                                              yaffs_ExtendedTags *tags);
- int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
-                                           int blockNo);
- int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
--                                        int blockNo, yaffs_BlockState *
--                                        state, int *sequenceNumber);
-+                                        int blockNo,
-+                                        yaffs_BlockState *state,
-+                                        __u32 *sequenceNumber);
--void yaffs_CalcTagsECC(yaffs_Tags * tags);
--int yaffs_CheckECCOnTags(yaffs_Tags * tags);
-+void yaffs_CalcTagsECC(yaffs_Tags *tags);
-+int yaffs_CheckECCOnTags(yaffs_Tags *tags);
- int yaffs_CountBits(__u8 byte);
- #endif
---- a/fs/yaffs2/yaffs_tagsvalidity.c
-+++ b/fs/yaffs2/yaffs_tagsvalidity.c
-@@ -13,14 +13,14 @@
- #include "yaffs_tagsvalidity.h"
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags)
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags)
- {
-       memset(tags, 0, sizeof(yaffs_ExtendedTags));
-       tags->validMarker0 = 0xAAAAAAAA;
-       tags->validMarker1 = 0x55555555;
- }
--int yaffs_ValidateTags(yaffs_ExtendedTags * tags)
-+int yaffs_ValidateTags(yaffs_ExtendedTags *tags)
- {
-       return (tags->validMarker0 == 0xAAAAAAAA &&
-               tags->validMarker1 == 0x55555555);
---- a/fs/yaffs2/yaffs_tagsvalidity.h
-+++ b/fs/yaffs2/yaffs_tagsvalidity.h
-@@ -19,6 +19,6 @@
- #include "yaffs_guts.h"
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
--int yaffs_ValidateTags(yaffs_ExtendedTags * tags);
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags);
-+int yaffs_ValidateTags(yaffs_ExtendedTags *tags);
- #endif
---- a/fs/yaffs2/yportenv.h
-+++ b/fs/yaffs2/yportenv.h
-@@ -17,17 +17,28 @@
- #ifndef __YPORTENV_H__
- #define __YPORTENV_H__
-+/*
-+ * Define the MTD version in terms of Linux Kernel versions
-+ * This allows yaffs to be used independantly of the kernel
-+ * as well as with it.
-+ */
-+
-+#define MTD_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
-+
- #if defined CONFIG_YAFFS_WINCE
- #include "ywinceenv.h"
--#elif  defined __KERNEL__
-+#elif defined __KERNEL__
- #include "moduleconfig.h"
- /* Linux kernel */
-+
- #include <linux/version.h>
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#define MTD_VERSION_CODE LINUX_VERSION_CODE
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
- #include <linux/config.h>
- #endif
- #include <linux/kernel.h>
-@@ -40,12 +51,13 @@
- #define YCHAR char
- #define YUCHAR unsigned char
- #define _Y(x)     x
--#define yaffs_strcpy(a,b)    strcpy(a,b)
--#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
--#define yaffs_strncmp(a,b,c) strncmp(a,b,c)
--#define yaffs_strlen(s)            strlen(s)
--#define yaffs_sprintf      sprintf
--#define yaffs_toupper(a)     toupper(a)
-+#define yaffs_strcat(a, b)     strcat(a, b)
-+#define yaffs_strcpy(a, b)     strcpy(a, b)
-+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
-+#define yaffs_strncmp(a, b, c) strncmp(a, b, c)
-+#define yaffs_strlen(s)              strlen(s)
-+#define yaffs_sprintf        sprintf
-+#define yaffs_toupper(a)       toupper(a)
- #define Y_INLINE inline
-@@ -53,19 +65,19 @@
- #define YAFFS_LOSTNFOUND_PREFIX               "obj"
- /* #define YPRINTF(x) printk x */
--#define YMALLOC(x) kmalloc(x,GFP_KERNEL)
-+#define YMALLOC(x) kmalloc(x, GFP_NOFS)
- #define YFREE(x)   kfree(x)
- #define YMALLOC_ALT(x) vmalloc(x)
- #define YFREE_ALT(x)   vfree(x)
- #define YMALLOC_DMA(x) YMALLOC(x)
--// KR - added for use in scan so processes aren't blocked indefinitely.
-+/* KR - added for use in scan so processes aren't blocked indefinitely. */
- #define YYIELD() schedule()
- #define YAFFS_ROOT_MODE                       0666
- #define YAFFS_LOSTNFOUND_MODE         0666
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #define Y_CURRENT_TIME CURRENT_TIME.tv_sec
- #define Y_TIME_CONVERT(x) (x).tv_sec
- #else
-@@ -73,11 +85,12 @@
- #define Y_TIME_CONVERT(x) (x)
- #endif
--#define yaffs_SumCompare(x,y) ((x) == (y))
--#define yaffs_strcmp(a,b) strcmp(a,b)
-+#define yaffs_SumCompare(x, y) ((x) == (y))
-+#define yaffs_strcmp(a, b) strcmp(a, b)
- #define TENDSTR "\n"
- #define TSTR(x) KERN_WARNING x
-+#define TCONT(x) x
- #define TOUT(p) printk p
- #define yaffs_trace(mask, fmt, args...) \
-@@ -90,6 +103,8 @@
- #elif defined CONFIG_YAFFS_DIRECT
-+#define MTD_VERSION_CODE MTD_VERSION(2, 6, 22)
-+
- /* Direct interface */
- #include "ydirectenv.h"
-@@ -111,11 +126,12 @@
- #define YCHAR char
- #define YUCHAR unsigned char
- #define _Y(x)     x
--#define yaffs_strcpy(a,b)    strcpy(a,b)
--#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
--#define yaffs_strlen(s)            strlen(s)
--#define yaffs_sprintf      sprintf
--#define yaffs_toupper(a)     toupper(a)
-+#define yaffs_strcat(a, b)     strcat(a, b)
-+#define yaffs_strcpy(a, b)     strcpy(a, b)
-+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
-+#define yaffs_strlen(s)              strlen(s)
-+#define yaffs_sprintf        sprintf
-+#define yaffs_toupper(a)       toupper(a)
- #define Y_INLINE inline
-@@ -133,8 +149,8 @@
- #define YAFFS_ROOT_MODE                               0666
- #define YAFFS_LOSTNFOUND_MODE         0666
--#define yaffs_SumCompare(x,y) ((x) == (y))
--#define yaffs_strcmp(a,b) strcmp(a,b)
-+#define yaffs_SumCompare(x, y) ((x) == (y))
-+#define yaffs_strcmp(a, b) strcmp(a, b)
- #else
- /* Should have specified a configuration type */
-@@ -178,10 +194,10 @@ extern unsigned int yaffs_wr_attempts;
- #define YAFFS_TRACE_ALWAYS            0xF0000000
--#define T(mask,p) do{ if((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p);} while(0)
-+#define T(mask, p) do { if ((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p); } while (0)
--#ifndef CONFIG_YAFFS_WINCE
--#define YBUG() T(YAFFS_TRACE_BUG,(TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR),__LINE__))
-+#ifndef YBUG
-+#define YBUG() do {T(YAFFS_TRACE_BUG, (TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR), __LINE__)); } while (0)
- #endif
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.31/600-phy_extension.patch b/target/linux/generic-2.6/patches-2.6.31/600-phy_extension.patch
deleted file mode 100644 (file)
index 4738128..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/drivers/net/phy/phy.c
-+++ b/drivers/net/phy/phy.c
-@@ -299,6 +299,50 @@ int phy_ethtool_gset(struct phy_device *
- }
- EXPORT_SYMBOL(phy_ethtool_gset);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr)
-+{
-+      u32 cmd;
-+      int tmp;
-+      struct ethtool_cmd ecmd = { ETHTOOL_GSET };
-+      struct ethtool_value edata = { ETHTOOL_GLINK };
-+
-+      if (get_user(cmd, (u32 *) useraddr))
-+              return -EFAULT;
-+
-+      switch (cmd) {
-+      case ETHTOOL_GSET:
-+              phy_ethtool_gset(phydev, &ecmd);
-+              if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return 0;
-+
-+      case ETHTOOL_SSET:
-+              if (copy_from_user(&ecmd, useraddr, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return phy_ethtool_sset(phydev, &ecmd);
-+
-+      case ETHTOOL_NWAY_RST:
-+              /* if autoneg is off, it's an error */
-+              tmp = phy_read(phydev, MII_BMCR);
-+              if (tmp & BMCR_ANENABLE) {
-+                      tmp |= (BMCR_ANRESTART);
-+                      phy_write(phydev, MII_BMCR, tmp);
-+                      return 0;
-+              }
-+              return -EINVAL;
-+
-+      case ETHTOOL_GLINK:
-+              edata.data = (phy_read(phydev,
-+                              MII_BMSR) & BMSR_LSTATUS) ? 1 : 0;
-+              if (copy_to_user(useraddr, &edata, sizeof(edata)))
-+                      return -EFAULT;
-+              return 0;
-+      }
-+
-+      return -EOPNOTSUPP;
-+}
-+EXPORT_SYMBOL(phy_ethtool_ioctl);
-+
- /**
-  * phy_mii_ioctl - generic PHY MII ioctl interface
-  * @phydev: the phy_device struct
-@@ -355,8 +399,8 @@ int phy_mii_ioctl(struct phy_device *phy
-               }
-               phy_write(phydev, mii_data->reg_num, val);
--              
--              if (mii_data->reg_num == MII_BMCR 
-+
-+              if (mii_data->reg_num == MII_BMCR
-                               && val & BMCR_RESET
-                               && phydev->drv->config_init) {
-                       phy_scan_fixups(phydev);
-@@ -471,7 +515,7 @@ static void phy_force_reduction(struct p
-       int idx;
-       idx = phy_find_setting(phydev->speed, phydev->duplex);
--      
-+
-       idx++;
-       idx = phy_find_valid(idx, phydev->supported);
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -489,6 +489,7 @@ void phy_start_machine(struct phy_device
- void phy_stop_machine(struct phy_device *phydev);
- int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
- int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr);
- int phy_mii_ioctl(struct phy_device *phydev,
-               struct mii_ioctl_data *mii_data, int cmd);
- int phy_start_interrupts(struct phy_device *phydev);
diff --git a/target/linux/generic-2.6/patches-2.6.31/620-phy_adm6996.patch b/target/linux/generic-2.6/patches-2.6.31/620-phy_adm6996.patch
deleted file mode 100644 (file)
index 8f61d95..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -82,6 +82,11 @@ config LSI_ET1011C_PHY
-       ---help---
-         Supports the LSI ET1011C PHY.
-+config ADM6996_PHY
-+      tristate "Driver for ADM6996 switches"
-+      ---help---
-+        Currently supports the ADM6996F switch
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -12,6 +12,7 @@ obj-$(CONFIG_SMSC_PHY)               += smsc.o
- obj-$(CONFIG_VITESSE_PHY)     += vitesse.o
- obj-$(CONFIG_BROADCOM_PHY)    += broadcom.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
-+obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/630-phy_packets.patch b/target/linux/generic-2.6/patches-2.6.31/630-phy_packets.patch
deleted file mode 100644 (file)
index 82f67bc..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/drivers/net/phy/phy_device.c
-+++ b/drivers/net/phy/phy_device.c
-@@ -146,6 +146,18 @@ int phy_scan_fixups(struct phy_device *p
- }
- EXPORT_SYMBOL(phy_scan_fixups);
-+static int generic_receive_skb(struct sk_buff *skb)
-+{
-+      skb->protocol = eth_type_trans(skb, skb->dev);
-+      return netif_receive_skb(skb);
-+}
-+
-+static int generic_rx(struct sk_buff *skb)
-+{
-+      skb->protocol = eth_type_trans(skb, skb->dev);
-+      return netif_rx(skb);
-+}
-+
- struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
- {
-       struct phy_device *dev;
-@@ -175,6 +187,8 @@ struct phy_device* phy_device_create(str
-       dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
-       dev->state = PHY_DOWN;
-+      dev->netif_receive_skb = &generic_receive_skb;
-+      dev->netif_rx = &generic_rx;
-       mutex_init(&dev->lock);
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -325,6 +325,20 @@ struct phy_device {
-       void (*adjust_link)(struct net_device *dev);
-       void (*adjust_state)(struct net_device *dev);
-+
-+      /*
-+       * By default these point to the original functions
-+       * with the same name. adding them to the phy_device
-+       * allows the phy driver to override them for packet
-+       * mangling if the ethernet driver supports it
-+       * This is required to support some really horrible
-+       * switches such as the Marvell 88E6060
-+       */
-+      int (*netif_receive_skb)(struct sk_buff *skb);
-+      int (*netif_rx)(struct sk_buff *skb);
-+
-+      /* alignment offset for packets */
-+      int pkt_align;
- };
- #define to_phy_device(d) container_of(d, struct phy_device, dev)
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -804,6 +804,7 @@ struct net_device
-       void                    *ax25_ptr;      /* AX.25 specific data */
-       struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
-                                                  assign before registering */
-+      void                    *phy_ptr; /* PHY device specific data */
- /*
-  * Cache line mostly used on receive path (including eth_type_trans())
diff --git a/target/linux/generic-2.6/patches-2.6.31/640-br2684_backport_routed.patch b/target/linux/generic-2.6/patches-2.6.31/640-br2684_backport_routed.patch
deleted file mode 100644 (file)
index 1623e7f..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-commit 2e302ebfeac04beb5a5d6af1ac583c6a1fb76d1a
-Author: chas williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
-Date:   Fri Dec 4 11:06:32 2009 +0000
-
-    atm: [br2684] allow routed mode operation again
-    
-    in routed mode, we don't have a hardware address so netdev_ops doesnt
-    need to validate our hardware address via .ndo_validate_addr
-    
-    Reported-by: Manuel Fuentes <mfuentes@agenciaefe.com>
-    Signed-off-by: Chas Williams - CONTRACTOR <chas@cmf.nrl.navy.mil>
-    Signed-off-by: David S. Miller <davem@davemloft.net>
-
---- a/net/atm/br2684.c
-+++ b/net/atm/br2684.c
-@@ -536,6 +536,12 @@ static const struct net_device_ops br268
-       .ndo_validate_addr      = eth_validate_addr,
- };
-+static const struct net_device_ops br2684_netdev_ops_routed = {
-+      .ndo_start_xmit         = br2684_start_xmit,
-+      .ndo_set_mac_address    = br2684_mac_addr,
-+      .ndo_change_mtu         = eth_change_mtu
-+};
-+
- static void br2684_setup(struct net_device *netdev)
- {
-       struct br2684_dev *brdev = BRPRIV(netdev);
-@@ -551,11 +557,10 @@ static void br2684_setup(struct net_devi
- static void br2684_setup_routed(struct net_device *netdev)
- {
-       struct br2684_dev *brdev = BRPRIV(netdev);
--      brdev->net_dev = netdev;
-+      brdev->net_dev = netdev;
-       netdev->hard_header_len = 0;
--
--      netdev->netdev_ops = &br2684_netdev_ops;
-+      netdev->netdev_ops = &br2684_netdev_ops_routed;
-       netdev->addr_len = 0;
-       netdev->mtu = 1500;
-       netdev->type = ARPHRD_PPP;
diff --git a/target/linux/generic-2.6/patches-2.6.31/650-swconfig.patch b/target/linux/generic-2.6/patches-2.6.31/650-swconfig.patch
deleted file mode 100644 (file)
index 6825037..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -13,6 +13,12 @@ menuconfig PHYLIB
- if PHYLIB
-+config SWCONFIG
-+      tristate "Switch configuration API"
-+      ---help---
-+        Switch configuration API using netlink. This allows
-+        you to configure the VLAN features of certain switches.
-+
- comment "MII PHY device drivers"
- config MARVELL_PHY
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -3,6 +3,7 @@
- libphy-objs                   := phy.o phy_device.o mdio_bus.o
- obj-$(CONFIG_PHYLIB)          += libphy.o
-+obj-$(CONFIG_SWCONFIG)                += swconfig.o
- obj-$(CONFIG_MARVELL_PHY)     += marvell.o
- obj-$(CONFIG_DAVICOM_PHY)     += davicom.o
- obj-$(CONFIG_CICADA_PHY)      += cicada.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/660-phy_mvswitch.patch b/target/linux/generic-2.6/patches-2.6.31/660-phy_mvswitch.patch
deleted file mode 100644 (file)
index 731f303..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -93,6 +93,9 @@ config ADM6996_PHY
-       ---help---
-         Currently supports the ADM6996F switch
-+config MVSWITCH_PHY
-+      tristate "Driver for Marvell 88E6060 switches"
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -14,6 +14,7 @@ obj-$(CONFIG_VITESSE_PHY)    += vitesse.o
- obj-$(CONFIG_BROADCOM_PHY)    += broadcom.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
- obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
-+obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/670-phy_ip175c.patch b/target/linux/generic-2.6/patches-2.6.31/670-phy_ip175c.patch
deleted file mode 100644 (file)
index 461df50..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -96,6 +96,10 @@ config ADM6996_PHY
- config MVSWITCH_PHY
-       tristate "Driver for Marvell 88E6060 switches"
-+config IP175C_PHY
-+      tristate "Driver for IC+ IP175C/IP178C switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -15,6 +15,7 @@ obj-$(CONFIG_BROADCOM_PHY)   += broadcom.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
- obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
- obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
-+obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/680-phy_ar8216.patch b/target/linux/generic-2.6/patches-2.6.31/680-phy_ar8216.patch
deleted file mode 100644 (file)
index d9d3ce7..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -100,6 +100,10 @@ config IP175C_PHY
-       tristate "Driver for IC+ IP175C/IP178C switches"
-       select SWCONFIG
-+config AR8216_PHY
-+      tristate "Driver for Atheros AR8216 switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -17,6 +17,7 @@ obj-$(CONFIG_ADM6996_PHY)    += adm6996.o
- obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
- obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
-+obj-$(CONFIG_AR8216_PHY)      += ar8216.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/690-phy_rtl8306.patch b/target/linux/generic-2.6/patches-2.6.31/690-phy_rtl8306.patch
deleted file mode 100644 (file)
index bfebbcf..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -104,6 +104,10 @@ config AR8216_PHY
-       tristate "Driver for Atheros AR8216 switches"
-       select SWCONFIG
-+config RTL8306_PHY
-+      tristate "Driver for Realtek RTL8306S switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_MVSWITCH_PHY)   += mvswitch.o
- obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_AR8216_PHY)      += ar8216.o
-+obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/691-phy_rtl8366.patch b/target/linux/generic-2.6/patches-2.6.31/691-phy_rtl8366.patch
deleted file mode 100644 (file)
index 4ce0520..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -135,4 +135,29 @@ config MDIO_GPIO
-         To compile this driver as a module, choose M here: the module
-         will be called mdio-gpio.
-+config RTL8366_SMI
-+      tristate "Driver for the RTL8366 SMI interface"
-+      depends on GENERIC_GPIO
-+      ---help---
-+        This module implements the SMI interface protocol which is used
-+        by some RTL8366 ethernet switch devices via the generic GPIO API.
-+
-+if RTL8366_SMI
-+
-+config RTL8366S_PHY
-+      tristate "Driver for the Realtek RTL8366S switch"
-+      select SWCONFIG
-+
-+config RTL8366RB_PHY
-+      tristate "Driver for the Realtek RTL8366RB switch"
-+      select SWCONFIG
-+
-+config RTL8366S_PHY_DEBUG_FS
-+      bool "RTL8366 switch driver DEBUG_FS support"
-+      depends on RTL8366S_PHY || RTL8366RB_PHY
-+      depends on DEBUG_FS
-+      default n
-+
-+endif # RTL8366_SMI
-+
- endif # PHYLIB
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -19,6 +19,9 @@ obj-$(CONFIG_IP175C_PHY)     += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_AR8216_PHY)      += ar8216.o
- obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
-+obj-$(CONFIG_RTL8366_SMI)     += rtl8366_smi.o
-+obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
-+obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/700-rtc7301.patch b/target/linux/generic-2.6/patches-2.6.31/700-rtc7301.patch
deleted file mode 100644 (file)
index 6e66654..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
---- a/drivers/rtc/Kconfig
-+++ b/drivers/rtc/Kconfig
-@@ -535,6 +535,15 @@ config RTC_DRV_PCF50633
-         If you say yes here you get support for the RTC subsystem of the
-         NXP PCF50633 used in embedded systems.
-+config RTC_DRV_RTC7301
-+      tristate "Epson RTC-7301 SF/DG"
-+      help
-+        If you say Y here you will get support for the
-+        Epson RTC-7301 SF/DG RTC chips.
-+
-+        This driver can also be built as a module. If so, the module
-+        will be called rtc-7301.
-+
- comment "on-CPU RTC drivers"
- config RTC_DRV_OMAP
---- a/drivers/rtc/Makefile
-+++ b/drivers/rtc/Makefile
-@@ -62,6 +62,7 @@ obj-$(CONFIG_RTC_DRV_R9701)  += rtc-r9701
- obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o
- obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o
- obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o
-+obj-$(CONFIG_RTC_DRV_RTC7301) += rtc-rtc7301.o
- obj-$(CONFIG_RTC_DRV_RX8025)  += rtc-rx8025.o
- obj-$(CONFIG_RTC_DRV_RX8581)  += rtc-rx8581.o
- obj-$(CONFIG_RTC_DRV_S35390A) += rtc-s35390a.o
---- /dev/null
-+++ b/drivers/rtc/rtc-rtc7301.c
-@@ -0,0 +1,219 @@
-+/*
-+ * Driver for Epson RTC-7301SF/DG
-+ *
-+ * Copyright (C) 2009 Jose Vasconcellos
-+ *
-+ * 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/rtc.h>
-+#include <linux/platform_device.h>
-+#include <linux/io.h>
-+#include <linux/delay.h>
-+#include <linux/bcd.h>
-+
-+#define RTC_NAME "rtc7301"
-+#define RTC_VERSION "0.1"
-+
-+/* Epson RTC-7301 register addresses */
-+#define RTC7301_SEC           0x00
-+#define RTC7301_SEC10         0x01
-+#define RTC7301_MIN           0x02
-+#define RTC7301_MIN10         0x03
-+#define RTC7301_HOUR          0x04
-+#define RTC7301_HOUR10                0x05
-+#define RTC7301_WEEKDAY               0x06
-+#define RTC7301_DAY           0x07
-+#define RTC7301_DAY10         0x08
-+#define RTC7301_MON           0x09
-+#define RTC7301_MON10         0x0A
-+#define RTC7301_YEAR          0x0B
-+#define RTC7301_YEAR10                0x0C
-+#define RTC7301_YEAR100               0x0D
-+#define RTC7301_YEAR1000      0x0E
-+#define RTC7301_CTRLREG               0x0F
-+
-+static uint8_t __iomem *rtc7301_base;
-+
-+#define read_reg(offset) (readb(rtc7301_base + offset) & 0xf)
-+#define write_reg(offset, data) writeb(data, rtc7301_base + (offset))
-+
-+#define rtc7301_isbusy() (read_reg(RTC7301_CTRLREG) & 1)
-+
-+static void rtc7301_init_settings(void)
-+{
-+      int i;
-+
-+      write_reg(RTC7301_CTRLREG, 2);
-+      write_reg(RTC7301_YEAR1000, 2);
-+      udelay(122);
-+
-+      /* bank 1 */
-+      write_reg(RTC7301_CTRLREG, 6);
-+      for (i=0; i<15; i++)
-+              write_reg(i, 0);
-+
-+      /* bank 2 */
-+      write_reg(RTC7301_CTRLREG, 14);
-+      for (i=0; i<15; i++)
-+              write_reg(i, 0);
-+      write_reg(RTC7301_CTRLREG, 0);
-+}
-+
-+static int rtc7301_get_datetime(struct device *dev, struct rtc_time *dt)
-+{
-+      int cnt;
-+      uint8_t buf[16];
-+
-+      cnt = 0;
-+      while (rtc7301_isbusy()) {
-+              udelay(244);
-+              if (cnt++ > 100) {
-+                      dev_err(dev, "%s: timeout error %x\n", __func__, rtc7301_base[RTC7301_CTRLREG]);
-+                      return -EIO;
-+              }
-+      }
-+
-+      for (cnt=0; cnt<16; cnt++)
-+              buf[cnt] = read_reg(cnt);
-+
-+      if (buf[RTC7301_SEC10] & 8) {
-+              dev_err(dev, "%s: RTC not set\n", __func__);
-+              return -EINVAL;
-+      }
-+
-+      memset(dt, 0, sizeof(*dt));
-+
-+      dt->tm_sec =  buf[RTC7301_SEC] + buf[RTC7301_SEC10]*10;
-+      dt->tm_min =  buf[RTC7301_MIN] + buf[RTC7301_MIN10]*10;
-+      dt->tm_hour = buf[RTC7301_HOUR] + buf[RTC7301_HOUR10]*10;
-+
-+      dt->tm_mday = buf[RTC7301_DAY] + buf[RTC7301_DAY10]*10;
-+      dt->tm_mon =  buf[RTC7301_MON] + buf[RTC7301_MON10]*10 - 1;
-+      dt->tm_year = buf[RTC7301_YEAR] + buf[RTC7301_YEAR10]*10 +
-+                    buf[RTC7301_YEAR100]*100 +
-+                    ((buf[RTC7301_YEAR1000] & 3)*1000) - 1900;
-+
-+      /* the rtc device may contain illegal values on power up
-+       * according to the data sheet. make sure they are valid.
-+       */
-+
-+      return rtc_valid_tm(dt);
-+}
-+
-+static int rtc7301_set_datetime(struct device *dev, struct rtc_time *dt)
-+{
-+      int data;
-+
-+      data = dt->tm_year + 1900;
-+      if (data >= 2100 || data < 1900)
-+              return -EINVAL;
-+
-+      write_reg(RTC7301_CTRLREG, 2);
-+              udelay(122);
-+
-+      data = bin2bcd(dt->tm_sec);
-+      write_reg(RTC7301_SEC, data);
-+      write_reg(RTC7301_SEC10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_min);
-+      write_reg(RTC7301_MIN, data );
-+      write_reg(RTC7301_MIN10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_hour);
-+      write_reg(RTC7301_HOUR, data);
-+      write_reg(RTC7301_HOUR10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_mday);
-+      write_reg(RTC7301_DAY, data);
-+      write_reg(RTC7301_DAY10, (data>> 4));
-+
-+      data = bin2bcd(dt->tm_mon + 1);
-+      write_reg(RTC7301_MON, data);
-+      write_reg(RTC7301_MON10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_year % 100);
-+      write_reg(RTC7301_YEAR, data);
-+      write_reg(RTC7301_YEAR10, (data >> 4));
-+      data = bin2bcd((1900 + dt->tm_year) / 100);
-+      write_reg(RTC7301_YEAR100, data);
-+
-+      data = bin2bcd(dt->tm_wday);
-+      write_reg(RTC7301_WEEKDAY, data);
-+
-+      write_reg(RTC7301_CTRLREG, 0);
-+
-+      return 0;
-+}
-+
-+static const struct rtc_class_ops rtc7301_rtc_ops = {
-+      .read_time      = rtc7301_get_datetime,
-+      .set_time       = rtc7301_set_datetime,
-+};
-+
-+static int __devinit rtc7301_probe(struct platform_device *pdev)
-+{
-+      struct rtc_device *rtc;
-+      struct resource *res;
-+
-+      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!res)
-+              return -ENOENT;
-+
-+      rtc7301_base = ioremap_nocache(res->start, 0x1000 /*res->end - res->start + 1*/);
-+      if (!rtc7301_base)
-+              return -EINVAL;
-+
-+      rtc = rtc_device_register(RTC_NAME, &pdev->dev,
-+                              &rtc7301_rtc_ops, THIS_MODULE);
-+      if (IS_ERR(rtc)) {
-+              iounmap(rtc7301_base);
-+              return PTR_ERR(rtc);
-+      }
-+
-+      platform_set_drvdata(pdev, rtc);
-+
-+      rtc7301_init_settings();
-+      return 0;
-+}
-+
-+static int __devexit rtc7301_remove(struct platform_device *pdev)
-+{
-+      struct rtc_device *rtc = platform_get_drvdata(pdev);
-+
-+      if (rtc)
-+              rtc_device_unregister(rtc);
-+      if (rtc7301_base)
-+              iounmap(rtc7301_base);
-+      return 0;
-+}
-+
-+static struct platform_driver rtc7301_driver = {
-+      .driver = {
-+              .name   = RTC_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe  = rtc7301_probe,
-+      .remove = __devexit_p(rtc7301_remove),
-+};
-+
-+static __init int rtc7301_init(void)
-+{
-+      return platform_driver_register(&rtc7301_driver);
-+}
-+module_init(rtc7301_init);
-+
-+static __exit void rtc7301_exit(void)
-+{
-+      platform_driver_unregister(&rtc7301_driver);
-+}
-+module_exit(rtc7301_exit);
-+
-+MODULE_DESCRIPTION("Epson 7301 RTC driver");
-+MODULE_AUTHOR("Jose Vasconcellos <jvasco@verizon.net>");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("platform:" RTC_NAME);
-+MODULE_VERSION(RTC_VERSION);
diff --git a/target/linux/generic-2.6/patches-2.6.31/750-glamo-headers.patch b/target/linux/generic-2.6/patches-2.6.31/750-glamo-headers.patch
deleted file mode 100644 (file)
index 419d98a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/include/linux/fb.h
-+++ b/include/linux/fb.h
-@@ -124,6 +124,7 @@ struct dentry;
- #define FB_ACCEL_TRIDENT_BLADE3D 52   /* Trident Blade3D              */
- #define FB_ACCEL_TRIDENT_BLADEXP 53   /* Trident BladeXP              */
- #define FB_ACCEL_CIRRUS_ALPINE   53   /* Cirrus Logic 543x/544x/5480  */
-+#define FB_ACCEL_GLAMO                50      /* SMedia Glamo                 */
- #define FB_ACCEL_NEOMAGIC_NM2070 90   /* NeoMagic NM2070              */
- #define FB_ACCEL_NEOMAGIC_NM2090 91   /* NeoMagic NM2090              */
- #define FB_ACCEL_NEOMAGIC_NM2093 92   /* NeoMagic NM2093              */
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -76,6 +76,8 @@ header-y += genetlink.h
- header-y += gen_stats.h
- header-y += gfs2_ondisk.h
- header-y += gigaset_dev.h
-+header-y += glamofb.h
-+header-y += glamo-engine.h
- header-y += hysdn_if.h
- header-y += i2o-dev.h
- header-y += i8k.h
diff --git a/target/linux/generic-2.6/patches-2.6.31/780-fix-race-in-snd_soc_jack_add_gpios.patch b/target/linux/generic-2.6/patches-2.6.31/780-fix-race-in-snd_soc_jack_add_gpios.patch
deleted file mode 100644 (file)
index b7214b9..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-commit 5ced436d549d911ce610ea47d85f71fae5bbfce4
-Author: Lars-Peter Clausen <lars@metafoo.de>
-Date:   Fri Jul 31 18:26:48 2009 +0200
-
-    ASoC: jack: Fix race in snd_soc_jack_add_gpios
-    
-    The irq can fire as soon as it has been requested, thus all fields accessed
-    from within the irq handler must be initialized prior to requesting the irq.
-    
-    Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
-
---- a/sound/soc/soc-jack.c
-+++ b/sound/soc/soc-jack.c
-@@ -220,6 +220,9 @@ int snd_soc_jack_add_gpios(struct snd_so
-               if (ret)
-                       goto err;
-+              INIT_WORK(&gpios[i].work, gpio_work);
-+              gpios[i].jack = jack;
-+
-               ret = request_irq(gpio_to_irq(gpios[i].gpio),
-                               gpio_handler,
-                               IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
-@@ -227,9 +230,6 @@ int snd_soc_jack_add_gpios(struct snd_so
-                               &gpios[i]);
-               if (ret)
-                       goto err;
--
--              INIT_WORK(&gpios[i].work, gpio_work);
--              gpios[i].jack = jack;
-       }
-       return 0;
diff --git a/target/linux/generic-2.6/patches-2.6.31/801-usb_serial_endpoint_size.patch b/target/linux/generic-2.6/patches-2.6.31/801-usb_serial_endpoint_size.patch
deleted file mode 100644 (file)
index 41b3848..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -60,6 +60,7 @@ static struct usb_driver usb_serial_driv
-    drivers depend on it.
- */
-+static ushort maxSize = 0;
- static int debug;
- /* initially all NULL */
- static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
-@@ -947,7 +948,7 @@ int usb_serial_probe(struct usb_interfac
-                       dev_err(&interface->dev, "No free urbs available\n");
-                       goto probe_error;
-               }
--              buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
-+              buffer_size = (endpoint->wMaxPacketSize > maxSize) ? endpoint->wMaxPacketSize : maxSize;
-               port->bulk_in_size = buffer_size;
-               port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
-               port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
-@@ -1381,3 +1382,5 @@ MODULE_LICENSE("GPL");
- module_param(debug, bool, S_IRUGO | S_IWUSR);
- MODULE_PARM_DESC(debug, "Debug enabled or not");
-+module_param(maxSize, ushort,0);
-+MODULE_PARM_DESC(maxSize,"User specified USB endpoint size");
diff --git a/target/linux/generic-2.6/patches-2.6.31/840-unable_to_open_console.patch b/target/linux/generic-2.6/patches-2.6.31/840-unable_to_open_console.patch
deleted file mode 100644 (file)
index b90a247..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -839,7 +839,7 @@ static noinline int init_post(void)
-       numa_default_policy();
-       if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
--              printk(KERN_WARNING "Warning: unable to open an initial console.\n");
-+              printk(KERN_WARNING "Please be patient, while OpenWrt loads ...\n");
-       (void) sys_dup(0);
-       (void) sys_dup(0);
diff --git a/target/linux/generic-2.6/patches-2.6.31/902-darwin_scripts_include.patch b/target/linux/generic-2.6/patches-2.6.31/902-darwin_scripts_include.patch
deleted file mode 100644 (file)
index fc64c17..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/scripts/genksyms/parse.c_shipped
-+++ b/scripts/genksyms/parse.c_shipped
-@@ -160,7 +160,9 @@
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/genksyms/parse.y
-+++ b/scripts/genksyms/parse.y
-@@ -24,7 +24,9 @@
- %{
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/kallsyms.c
-+++ b/scripts/kallsyms.c
-@@ -22,6 +22,35 @@
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
-+#ifdef __APPLE__
-+/* Darwin has no memmem implementation, this one is ripped of the uClibc-0.9.28 source */
-+void *memmem (const void *haystack, size_t haystack_len,
-+                          const void *needle,  size_t needle_len)
-+{
-+  const char *begin;
-+  const char *const last_possible
-+    = (const char *) haystack + haystack_len - needle_len;
-+
-+  if (needle_len == 0)
-+    /* The first occurrence of the empty string is deemed to occur at
-+       the beginning of the string.  */
-+    return (void *) haystack;
-+
-+  /* Sanity check, otherwise the loop might search through the whole
-+     memory.  */
-+  if (__builtin_expect (haystack_len < needle_len, 0))
-+    return NULL;
-+
-+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
-+    if (begin[0] == ((const char *) needle)[0] &&
-+        !memcmp ((const void *) &begin[1],
-+                 (const void *) ((const char *) needle + 1),
-+                 needle_len - 1))
-+      return (void *) begin;
-+
-+  return NULL;
-+}
-+#endif
- #ifndef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
---- a/scripts/kconfig/Makefile
-+++ b/scripts/kconfig/Makefile
-@@ -97,6 +97,9 @@ check-lxdialog  := $(srctree)/$(src)/lxd
- # we really need to do so. (Do not call gcc as part of make mrproper)
- HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
- HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-+ifeq ($(shell uname -s),Darwin)
-+HOST_LOADLIBES  += -lncurses
-+endif
- HOST_EXTRACFLAGS += -DLOCALE
---- a/scripts/mod/mk_elfconfig.c
-+++ b/scripts/mod/mk_elfconfig.c
-@@ -1,7 +1,11 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#ifndef __APPLE__
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- int
- main(int argc, char **argv)
---- a/scripts/mod/modpost.h
-+++ b/scripts/mod/modpost.h
-@@ -7,7 +7,11 @@
- #include <sys/mman.h>
- #include <fcntl.h>
- #include <unistd.h>
-+#if !(defined(__APPLE__) || defined(__CYGWIN__))
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- #include "elfconfig.h"
diff --git a/target/linux/generic-2.6/patches-2.6.31/903-hostap_txpower.patch b/target/linux/generic-2.6/patches-2.6.31/903-hostap_txpower.patch
deleted file mode 100644 (file)
index 197d0a1..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
---- a/drivers/net/wireless/hostap/hostap_ap.c
-+++ b/drivers/net/wireless/hostap/hostap_ap.c
-@@ -2335,13 +2335,13 @@ int prism2_ap_get_sta_qual(local_info_t 
-               addr[count].sa_family = ARPHRD_ETHER;
-               memcpy(addr[count].sa_data, sta->addr, ETH_ALEN);
-               if (sta->last_rx_silence == 0)
--                      qual[count].qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                        qual[count].qual = (sta->last_rx_signal - 156) == 0 ?
-+                                0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      qual[count].qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              qual[count].level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              qual[count].noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        qual[count].qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                qual[count].level = sta->last_rx_signal;
-+                qual[count].noise = sta->last_rx_silence;
-               qual[count].updated = sta->last_rx_updated;
-               sta->last_rx_updated = IW_QUAL_DBM;
-@@ -2407,13 +2407,13 @@ int prism2_ap_translate_scan(struct net_
-               memset(&iwe, 0, sizeof(iwe));
-               iwe.cmd = IWEVQUAL;
-               if (sta->last_rx_silence == 0)
--                      iwe.u.qual.qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                      iwe.u.qual.qual = (sta->last_rx_signal -156) == 0 ?
-+                              0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      iwe.u.qual.qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              iwe.u.qual.level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              iwe.u.qual.noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        iwe.u.qual.qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                iwe.u.qual.level = sta->last_rx_signal;
-+                iwe.u.qual.noise = sta->last_rx_silence;
-               iwe.u.qual.updated = sta->last_rx_updated;
-               iwe.len = IW_EV_QUAL_LEN;
-               current_ev = iwe_stream_add_event(info, current_ev, end_buf,
---- a/drivers/net/wireless/hostap/hostap_config.h
-+++ b/drivers/net/wireless/hostap/hostap_config.h
-@@ -45,4 +45,9 @@
-  */
- /* #define PRISM2_NO_STATION_MODES */
-+/* Enable TX power Setting functions
-+ * (min att = -128 , max att =  127)
-+ */
-+#define RAW_TXPOWER_SETTING
-+
- #endif /* HOSTAP_CONFIG_H */
---- a/drivers/net/wireless/hostap/hostap.h
-+++ b/drivers/net/wireless/hostap/hostap.h
-@@ -90,6 +90,7 @@ extern const struct iw_handler_def hosta
- extern const struct ethtool_ops prism2_ethtool_ops;
- int hostap_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
-+int hostap_restore_power(struct net_device *dev);
- #endif /* HOSTAP_H */
---- a/drivers/net/wireless/hostap/hostap_hw.c
-+++ b/drivers/net/wireless/hostap/hostap_hw.c
-@@ -932,6 +932,7 @@ static int hfa384x_set_rid(struct net_de
-                       prism2_hw_reset(dev);
-       }
-+      hostap_restore_power(dev);
-       return res;
- }
---- a/drivers/net/wireless/hostap/hostap_info.c
-+++ b/drivers/net/wireless/hostap/hostap_info.c
-@@ -431,6 +431,11 @@ static void handle_info_queue_linkstatus
-       }
-       /* Get BSSID if we have a valid AP address */
-+
-+      if ( val == HFA384X_LINKSTATUS_CONNECTED ||
-+           val == HFA384X_LINKSTATUS_DISCONNECTED )
-+                      hostap_restore_power(local->dev);
-+
-       if (connected) {
-               netif_carrier_on(local->dev);
-               netif_carrier_on(local->ddev);
---- a/drivers/net/wireless/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
-@@ -1475,23 +1475,20 @@ static int prism2_txpower_hfa386x_to_dBm
-               val = 255;
-       tmp = val;
--      tmp >>= 2;
--      return -12 - tmp;
-+      return tmp;
- }
- static u16 prism2_txpower_dBm_to_hfa386x(int val)
- {
-       signed char tmp;
--      if (val > 20)
--              return 128;
--      else if (val < -43)
-+      if (val > 127)
-               return 127;
-+      else if (val < -128)
-+              return 128;
-       tmp = val;
--      tmp = -12 - tmp;
--      tmp <<= 2;
-       return (unsigned char) tmp;
- }
-@@ -4055,3 +4052,35 @@ int hostap_ioctl(struct net_device *dev,
-       return ret;
- }
-+
-+/* BUG FIX: Restore power setting value when lost due to F/W bug */
-+
-+int hostap_restore_power(struct net_device *dev)
-+{
-+        struct hostap_interface *iface = netdev_priv(dev);
-+       local_info_t *local = iface->local;
-+
-+       u16 val;
-+       int ret = 0;
-+
-+       if (local->txpower_type == PRISM2_TXPOWER_OFF) {
-+                       val = 0xff; /* use all standby and sleep modes */
-+                       ret = local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                                              HFA386X_CR_A_D_TEST_MODES2,
-+                                              &val, NULL);
-+       }
-+
-+#ifdef RAW_TXPOWER_SETTING
-+       if (local->txpower_type == PRISM2_TXPOWER_FIXED) {
-+               val = HFA384X_TEST_CFG_BIT_ALC;
-+               local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-+                                (HFA384X_TEST_CFG_BITS << 8), 0, &val, NULL);
-+               val = prism2_txpower_dBm_to_hfa386x(local->txpower);
-+               ret = (local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                            HFA386X_CR_MANUAL_TX_POWER, &val, NULL));
-+       }
-+#endif /* RAW_TXPOWER_SETTING */
-+       return (ret ? -EOPNOTSUPP : 0);
-+}
-+
-+EXPORT_SYMBOL(hostap_restore_power);
diff --git a/target/linux/generic-2.6/patches-2.6.31/903-stddef_include.patch b/target/linux/generic-2.6/patches-2.6.31/903-stddef_include.patch
deleted file mode 100644 (file)
index 7fe248d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/linux/stddef.h
-+++ b/include/linux/stddef.h
-@@ -16,6 +16,7 @@ enum {
-       false   = 0,
-       true    = 1
- };
-+#endif /* __KERNEL__ */
- #undef offsetof
- #ifdef __compiler_offsetof
-@@ -23,6 +24,5 @@ enum {
- #else
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #endif
--#endif /* __KERNEL__ */
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.31/905-i386_build.patch b/target/linux/generic-2.6/patches-2.6.31/905-i386_build.patch
deleted file mode 100644 (file)
index c701fda..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/x86/boot/tools/build.c
-+++ b/arch/x86/boot/tools/build.c
-@@ -29,7 +29,6 @@
- #include <stdarg.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <sys/sysmacros.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/mman.h>
diff --git a/target/linux/generic-2.6/patches-2.6.31/920-01-hotpluggable-spi-gpio.patch b/target/linux/generic-2.6/patches-2.6.31/920-01-hotpluggable-spi-gpio.patch
deleted file mode 100644 (file)
index b10bc9a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Fix spi-gpio for hotplug.
-
---mb
-
-
-
---- a/drivers/spi/spi_gpio.c
-+++ b/drivers/spi/spi_gpio.c
-@@ -218,7 +218,7 @@ static void spi_gpio_cleanup(struct spi_
-       spi_bitbang_cleanup(spi);
- }
--static int __init spi_gpio_alloc(unsigned pin, const char *label, bool is_in)
-+static int __devinit spi_gpio_alloc(unsigned pin, const char *label, bool is_in)
- {
-       int value;
-@@ -232,7 +232,7 @@ static int __init spi_gpio_alloc(unsigne
-       return value;
- }
--static int __init
-+static int __devinit
- spi_gpio_request(struct spi_gpio_platform_data *pdata, const char *label)
- {
-       int value;
-@@ -261,7 +261,7 @@ done:
-       return value;
- }
--static int __init spi_gpio_probe(struct platform_device *pdev)
-+static int __devinit spi_gpio_probe(struct platform_device *pdev)
- {
-       int                             status;
-       struct spi_master               *master;
-@@ -317,7 +317,7 @@ gpio_free:
-       return status;
- }
--static int __exit spi_gpio_remove(struct platform_device *pdev)
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
- {
-       struct spi_gpio                 *spi_gpio;
-       struct spi_gpio_platform_data   *pdata;
-@@ -344,12 +344,13 @@ MODULE_ALIAS("platform:" DRIVER_NAME);
- static struct platform_driver spi_gpio_driver = {
-       .driver.name    = DRIVER_NAME,
-       .driver.owner   = THIS_MODULE,
--      .remove         = __exit_p(spi_gpio_remove),
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
- };
- static int __init spi_gpio_init(void)
- {
--      return platform_driver_probe(&spi_gpio_driver, spi_gpio_probe);
-+      return platform_driver_register(&spi_gpio_driver);
- }
- module_init(spi_gpio_init);
diff --git a/target/linux/generic-2.6/patches-2.6.31/920-04-spi-gpio-implement-spi-delay.patch b/target/linux/generic-2.6/patches-2.6.31/920-04-spi-gpio-implement-spi-delay.patch
deleted file mode 100644 (file)
index 1903288..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Implement the SPI-GPIO delay function for busses that need speed limitation.
-
---mb
-
-
-
---- a/drivers/spi/spi_gpio.c
-+++ b/drivers/spi/spi_gpio.c
-@@ -21,6 +21,7 @@
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/gpio.h>
-+#include <linux/delay.h>
- #include <linux/spi/spi.h>
- #include <linux/spi/spi_bitbang.h>
-@@ -69,6 +70,7 @@ struct spi_gpio {
-  *            #define SPI_MOSI_GPIO   120
-  *            #define SPI_SCK_GPIO    121
-  *            #define SPI_N_CHIPSEL   4
-+ *            #undef NEED_SPIDELAY
-  *            #include "spi_gpio.c"
-  */
-@@ -76,6 +78,7 @@ struct spi_gpio {
- #define DRIVER_NAME   "spi_gpio"
- #define GENERIC_BITBANG       /* vs tight inlines */
-+#define NEED_SPIDELAY 1
- /* all functions referencing these symbols must define pdata */
- #define SPI_MISO_GPIO ((pdata)->miso)
-@@ -120,12 +123,20 @@ static inline int getmiso(const struct s
- #undef pdata
- /*
-- * NOTE:  this clocks "as fast as we can".  It "should" be a function of the
-- * requested device clock.  Software overhead means we usually have trouble
-- * reaching even one Mbit/sec (except when we can inline bitops), so for now
-- * we'll just assume we never need additional per-bit slowdowns.
-+ * NOTE:  to clock "as fast as we can", set spi_device.max_speed_hz
-+ * and spi_transfer.speed_hz to 0.
-+ * Otherwise this is a function of the requested device clock.
-+ * Software overhead means we usually have trouble
-+ * reaching even one Mbit/sec (except when we can inline bitops). So on small
-+ * embedded devices with fast SPI slaves you usually don't need a delay.
-  */
--#define spidelay(nsecs)       do {} while (0)
-+static inline void spidelay(unsigned nsecs)
-+{
-+#ifdef NEED_SPIDELAY
-+      if (unlikely(nsecs))
-+              ndelay(nsecs);
-+#endif /* NEED_SPIDELAY */
-+}
- #define       EXPAND_BITBANG_TXRX
- #include <linux/spi/spi_bitbang.h>
diff --git a/target/linux/generic-2.6/patches-2.6.31/921-gpio_spi_driver.patch b/target/linux/generic-2.6/patches-2.6.31/921-gpio_spi_driver.patch
deleted file mode 100644 (file)
index 90e40e7..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-THIS CODE IS DEPRECATED.
-
-Please use the new mainline SPI-GPIO driver, as of 2.6.29.
-
---mb
-
-
-
---- /dev/null
-+++ b/include/linux/spi/spi_gpio_old.h
-@@ -0,0 +1,73 @@
-+/*
-+ * spi_gpio interface to platform code
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * 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.
-+ */
-+#ifndef _LINUX_SPI_SPI_GPIO
-+#define _LINUX_SPI_SPI_GPIO
-+
-+#include <linux/types.h>
-+#include <linux/spi/spi.h>
-+
-+
-+/**
-+ * struct spi_gpio_platform_data - Data definitions for a SPI-GPIO device.
-+ *
-+ * This structure holds information about a GPIO-based SPI device.
-+ *
-+ * @pin_clk: The GPIO pin number of the CLOCK pin.
-+ *
-+ * @pin_miso: The GPIO pin number of the MISO pin.
-+ *
-+ * @pin_mosi: The GPIO pin number of the MOSI pin.
-+ *
-+ * @pin_cs: The GPIO pin number of the CHIPSELECT pin.
-+ *
-+ * @cs_activelow: If true, the chip is selected when the CS line is low.
-+ *
-+ * @no_spi_delay: If true, no delay is done in the lowlevel bitbanging.
-+ *                Note that doing no delay is not standards compliant,
-+ *                but it might be needed to speed up transfers on some
-+ *                slow embedded machines.
-+ *
-+ * @boardinfo_setup: This callback is called after the
-+ *                   SPI master device was registered, but before the
-+ *                   device is registered.
-+ * @boardinfo_setup_data: Data argument passed to boardinfo_setup().
-+ */
-+struct spi_gpio_platform_data {
-+      unsigned int pin_clk;
-+      unsigned int pin_miso;
-+      unsigned int pin_mosi;
-+      unsigned int pin_cs;
-+      bool cs_activelow;
-+      bool no_spi_delay;
-+      int (*boardinfo_setup)(struct spi_board_info *bi,
-+                             struct spi_master *master,
-+                             void *data);
-+      void *boardinfo_setup_data;
-+};
-+
-+/**
-+ * SPI_GPIO_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a spi-gpio device.
-+ */
-+#define SPI_GPIO_PLATDEV_NAME "spi-gpio"
-+
-+/**
-+ * spi_gpio_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int spi_gpio_next_id(void);
-+
-+#endif /* _LINUX_SPI_SPI_GPIO */
---- /dev/null
-+++ b/drivers/spi/spi_gpio_old.c
-@@ -0,0 +1,251 @@
-+/*
-+ * Bitbanging SPI bus driver using GPIO API
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * based on spi_s3c2410_gpio.c
-+ *   Copyright (c) 2006 Ben Dooks
-+ *   Copyright (c) 2006 Simtec Electronics
-+ * and on i2c-gpio.c
-+ *   Copyright (C) 2007 Atmel Corporation
-+ *
-+ * 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/init.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+#include <linux/workqueue.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/spi_bitbang.h>
-+#include <linux/spi/spi_gpio_old.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+struct spi_gpio {
-+      struct spi_bitbang bitbang;
-+      struct spi_gpio_platform_data *info;
-+      struct platform_device *pdev;
-+      struct spi_board_info bi;
-+};
-+
-+
-+static inline struct spi_gpio *spidev_to_sg(struct spi_device *dev)
-+{
-+      return dev->controller_data;
-+}
-+
-+static inline void setsck(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_clk, val ? 1 : 0);
-+}
-+
-+static inline void setmosi(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_mosi, val ? 1 : 0);
-+}
-+
-+static inline u32 getmiso(struct spi_device *dev)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      return gpio_get_value(sp->info->pin_miso) ? 1 : 0;
-+}
-+
-+static inline void do_spidelay(struct spi_device *dev, unsigned nsecs)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (!sp->info->no_spi_delay)
-+              ndelay(nsecs);
-+}
-+
-+#define spidelay(nsecs) do {                                  \
-+      /* Steal the spi_device pointer from our caller.        \
-+       * The bitbang-API should probably get fixed here... */ \
-+      do_spidelay(spi, nsecs);                                \
-+  } while (0)
-+
-+#define EXPAND_BITBANG_TXRX
-+#include <linux/spi/spi_bitbang.h>
-+
-+static u32 spi_gpio_txrx_mode0(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode1(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode2(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode3(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, bits);
-+}
-+
-+static void spi_gpio_chipselect(struct spi_device *dev, int on)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (sp->info->cs_activelow)
-+              on = !on;
-+      gpio_set_value(sp->info->pin_cs, on ? 1 : 0);
-+}
-+
-+static int spi_gpio_probe(struct platform_device *pdev)
-+{
-+      struct spi_master *master;
-+      struct spi_gpio_platform_data *pdata;
-+      struct spi_gpio *sp;
-+      struct spi_device *spidev;
-+      int err;
-+
-+      pdata = pdev->dev.platform_data;
-+      if (!pdata)
-+              return -ENXIO;
-+
-+      err = -ENOMEM;
-+      master = spi_alloc_master(&pdev->dev, sizeof(struct spi_gpio));
-+      if (!master)
-+              goto err_alloc_master;
-+
-+      sp = spi_master_get_devdata(master);
-+      platform_set_drvdata(pdev, sp);
-+      sp->info = pdata;
-+
-+      err = gpio_request(pdata->pin_clk, "spi_clock");
-+      if (err)
-+              goto err_request_clk;
-+      err = gpio_request(pdata->pin_mosi, "spi_mosi");
-+      if (err)
-+              goto err_request_mosi;
-+      err = gpio_request(pdata->pin_miso, "spi_miso");
-+      if (err)
-+              goto err_request_miso;
-+      err = gpio_request(pdata->pin_cs, "spi_cs");
-+      if (err)
-+              goto err_request_cs;
-+
-+      sp->bitbang.master = spi_master_get(master);
-+      sp->bitbang.master->bus_num = -1;
-+      sp->bitbang.master->num_chipselect = 1;
-+      sp->bitbang.chipselect = spi_gpio_chipselect;
-+      sp->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_mode0;
-+      sp->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_mode1;
-+      sp->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_mode2;
-+      sp->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_mode3;
-+
-+      gpio_direction_output(pdata->pin_clk, 0);
-+      gpio_direction_output(pdata->pin_mosi, 0);
-+      gpio_direction_output(pdata->pin_cs,
-+                            pdata->cs_activelow ? 1 : 0);
-+      gpio_direction_input(pdata->pin_miso);
-+
-+      err = spi_bitbang_start(&sp->bitbang);
-+      if (err)
-+              goto err_no_bitbang;
-+      err = pdata->boardinfo_setup(&sp->bi, master,
-+                                   pdata->boardinfo_setup_data);
-+      if (err)
-+              goto err_bi_setup;
-+      sp->bi.controller_data = sp;
-+      spidev = spi_new_device(master, &sp->bi);
-+      if (!spidev)
-+              goto err_new_dev;
-+
-+      return 0;
-+
-+err_new_dev:
-+err_bi_setup:
-+      spi_bitbang_stop(&sp->bitbang);
-+err_no_bitbang:
-+      spi_master_put(sp->bitbang.master);
-+      gpio_free(pdata->pin_cs);
-+err_request_cs:
-+      gpio_free(pdata->pin_miso);
-+err_request_miso:
-+      gpio_free(pdata->pin_mosi);
-+err_request_mosi:
-+      gpio_free(pdata->pin_clk);
-+err_request_clk:
-+      kfree(master);
-+
-+err_alloc_master:
-+      return err;
-+}
-+
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
-+{
-+      struct spi_gpio *sp;
-+      struct spi_gpio_platform_data *pdata;
-+
-+      pdata = pdev->dev.platform_data;
-+      sp = platform_get_drvdata(pdev);
-+
-+      gpio_free(pdata->pin_clk);
-+      gpio_free(pdata->pin_mosi);
-+      gpio_free(pdata->pin_miso);
-+      gpio_free(pdata->pin_cs);
-+      spi_bitbang_stop(&sp->bitbang);
-+      spi_master_put(sp->bitbang.master);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver spi_gpio_driver = {
-+      .driver         = {
-+              .name   = SPI_GPIO_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
-+};
-+
-+int spi_gpio_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(spi_gpio_next_id);
-+
-+static int __init spi_gpio_init(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&spi_gpio_driver);
-+      if (err)
-+              printk(KERN_ERR "spi-gpio: register failed: %d\n", err);
-+
-+      return err;
-+}
-+module_init(spi_gpio_init);
-+
-+static void __exit spi_gpio_exit(void)
-+{
-+      platform_driver_unregister(&spi_gpio_driver);
-+}
-+module_exit(spi_gpio_exit);
-+
-+MODULE_AUTHOR("Piot Skamruk <piotr.skamruk at gmail.com>");
-+MODULE_AUTHOR("Michael Buesch");
-+MODULE_DESCRIPTION("Platform independent GPIO bitbanging SPI driver");
-+MODULE_LICENSE("GPL v2");
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -116,6 +116,15 @@ config SPI_GPIO
-         GPIO operations, you should be able to leverage that for better
-         speed with a custom version of this driver; see the source code.
-+config SPI_GPIO_OLD
-+      tristate "Old GPIO API based bitbanging SPI controller (DEPRECATED)"
-+      depends on SPI_MASTER && GENERIC_GPIO
-+      select SPI_BITBANG
-+      help
-+        This code is deprecated. Please use the new mainline SPI-GPIO driver.
-+
-+        If unsure, say N.
-+
- config SPI_IMX
-       tristate "Freescale iMX SPI controller"
-       depends on ARCH_MX1 && EXPERIMENTAL
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -17,6 +17,7 @@ obj-$(CONFIG_SPI_BITBANG)            += spi_bitban
- obj-$(CONFIG_SPI_AU1550)              += au1550_spi.o
- obj-$(CONFIG_SPI_BUTTERFLY)           += spi_butterfly.o
- obj-$(CONFIG_SPI_GPIO)                        += spi_gpio.o
-+obj-$(CONFIG_SPI_GPIO_OLD)            += spi_gpio_old.o
- obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
- obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
- obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/922-gpiommc.patch b/target/linux/generic-2.6/patches-2.6.31/922-gpiommc.patch
deleted file mode 100644 (file)
index 10d0962..0000000
+++ /dev/null
@@ -1,843 +0,0 @@
---- /dev/null
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -0,0 +1,608 @@
-+/*
-+ * Driver an MMC/SD card on a bitbanging GPIO SPI bus.
-+ * This module hooks up the mmc_spi and spi_gpio modules and also
-+ * provides a configfs interface.
-+ *
-+ * Copyright 2008 Michael Buesch <mb@bu3sch.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include <linux/mmc/gpiommc.h>
-+#include <linux/platform_device.h>
-+#include <linux/list.h>
-+#include <linux/mutex.h>
-+#include <linux/spi/spi_gpio_old.h>
-+#include <linux/configfs.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+#define PFX                           "gpio-mmc: "
-+
-+
-+struct gpiommc_device {
-+      struct platform_device *pdev;
-+      struct platform_device *spi_pdev;
-+      struct spi_board_info boardinfo;
-+};
-+
-+
-+MODULE_DESCRIPTION("GPIO based MMC driver");
-+MODULE_AUTHOR("Michael Buesch");
-+MODULE_LICENSE("GPL");
-+
-+
-+static int gpiommc_boardinfo_setup(struct spi_board_info *bi,
-+                                 struct spi_master *master,
-+                                 void *data)
-+{
-+      struct gpiommc_device *d = data;
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      /* Bind the SPI master to the MMC-SPI host driver. */
-+      strlcpy(bi->modalias, "mmc_spi", sizeof(bi->modalias));
-+
-+      bi->max_speed_hz = pdata->max_bus_speed;
-+      bi->bus_num = master->bus_num;
-+      bi->mode = pdata->mode;
-+
-+      return 0;
-+}
-+
-+static int gpiommc_probe(struct platform_device *pdev)
-+{
-+      struct gpiommc_platform_data *mmc_pdata = pdev->dev.platform_data;
-+      struct spi_gpio_platform_data spi_pdata;
-+      struct gpiommc_device *d;
-+      int err;
-+
-+      err = -ENXIO;
-+      if (!mmc_pdata)
-+              goto error;
-+
-+#ifdef CONFIG_MMC_SPI_MODULE
-+      err = request_module("mmc_spi");
-+      if (err) {
-+              printk(KERN_WARNING PFX
-+                     "Failed to request mmc_spi module.\n");
-+      }
-+#endif /* CONFIG_MMC_SPI_MODULE */
-+
-+      /* Allocate the GPIO-MMC device */
-+      err = -ENOMEM;
-+      d = kzalloc(sizeof(*d), GFP_KERNEL);
-+      if (!d)
-+              goto error;
-+      d->pdev = pdev;
-+
-+      /* Create the SPI-GPIO device */
-+      d->spi_pdev = platform_device_alloc(SPI_GPIO_PLATDEV_NAME,
-+                                          spi_gpio_next_id());
-+      if (!d->spi_pdev)
-+              goto err_free_d;
-+
-+      memset(&spi_pdata, 0, sizeof(spi_pdata));
-+      spi_pdata.pin_clk = mmc_pdata->pins.gpio_clk;
-+      spi_pdata.pin_miso = mmc_pdata->pins.gpio_do;
-+      spi_pdata.pin_mosi = mmc_pdata->pins.gpio_di;
-+      spi_pdata.pin_cs = mmc_pdata->pins.gpio_cs;
-+      spi_pdata.cs_activelow = mmc_pdata->pins.cs_activelow;
-+      spi_pdata.no_spi_delay = mmc_pdata->no_spi_delay;
-+      spi_pdata.boardinfo_setup = gpiommc_boardinfo_setup;
-+      spi_pdata.boardinfo_setup_data = d;
-+
-+      err = platform_device_add_data(d->spi_pdev, &spi_pdata,
-+                                     sizeof(spi_pdata));
-+      if (err)
-+              goto err_free_pdev;
-+      err = platform_device_add(d->spi_pdev);
-+      if (err)
-+              goto err_free_pdata;
-+      platform_set_drvdata(pdev, d);
-+
-+      printk(KERN_INFO PFX "MMC-Card \"%s\" "
-+             "attached to GPIO pins di=%u, do=%u, clk=%u, cs=%u\n",
-+             mmc_pdata->name, mmc_pdata->pins.gpio_di,
-+             mmc_pdata->pins.gpio_do,
-+             mmc_pdata->pins.gpio_clk,
-+             mmc_pdata->pins.gpio_cs);
-+
-+      return 0;
-+
-+err_free_pdata:
-+      kfree(d->spi_pdev->dev.platform_data);
-+      d->spi_pdev->dev.platform_data = NULL;
-+err_free_pdev:
-+      platform_device_put(d->spi_pdev);
-+err_free_d:
-+      kfree(d);
-+error:
-+      return err;
-+}
-+
-+static int gpiommc_remove(struct platform_device *pdev)
-+{
-+      struct gpiommc_device *d = platform_get_drvdata(pdev);
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      platform_device_unregister(d->spi_pdev);
-+      printk(KERN_INFO PFX "GPIO based MMC-Card \"%s\" removed\n",
-+             pdata->name);
-+      platform_device_put(d->spi_pdev);
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+
-+/* A device that was created through configfs */
-+struct gpiommc_configfs_device {
-+      struct config_item item;
-+      /* The platform device, after registration. */
-+      struct platform_device *pdev;
-+      /* The configuration */
-+      struct gpiommc_platform_data pdata;
-+};
-+
-+#define GPIO_INVALID  -1
-+
-+static inline bool gpiommc_is_registered(struct gpiommc_configfs_device *dev)
-+{
-+      return (dev->pdev != NULL);
-+}
-+
-+static inline struct gpiommc_configfs_device *ci_to_gpiommc(struct config_item *item)
-+{
-+      return item ? container_of(item, struct gpiommc_configfs_device, item) : NULL;
-+}
-+
-+static struct configfs_attribute gpiommc_attr_DI = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_in",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_DO = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_out",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CLK = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_clock",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS_activelow = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect_activelow",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spimode = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_mode",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spidelay = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_delay",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_max_bus_speed = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "max_bus_speed",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_register = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "register",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute *gpiommc_config_attrs[] = {
-+      &gpiommc_attr_DI,
-+      &gpiommc_attr_DO,
-+      &gpiommc_attr_CLK,
-+      &gpiommc_attr_CS,
-+      &gpiommc_attr_CS_activelow,
-+      &gpiommc_attr_spimode,
-+      &gpiommc_attr_spidelay,
-+      &gpiommc_attr_max_bus_speed,
-+      &gpiommc_attr_register,
-+      NULL,
-+};
-+
-+static ssize_t gpiommc_config_attr_show(struct config_item *item,
-+                                      struct configfs_attribute *attr,
-+                                      char *page)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      ssize_t count = 0;
-+      unsigned int gpio;
-+      int err = 0;
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              gpio = dev->pdata.pins.gpio_di;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              gpio = dev->pdata.pins.gpio_do;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              gpio = dev->pdata.pins.gpio_clk;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              gpio = dev->pdata.pins.gpio_cs;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.pins.cs_activelow);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.mode);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               !dev->pdata.no_spi_delay);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.max_bus_speed);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_register) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               gpiommc_is_registered(dev));
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static int gpiommc_do_register(struct gpiommc_configfs_device *dev,
-+                             const char *name)
-+{
-+      int err;
-+
-+      if (gpiommc_is_registered(dev))
-+              return 0;
-+
-+      if (!gpio_is_valid(dev->pdata.pins.gpio_di) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_do) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_clk) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_cs)) {
-+              printk(KERN_ERR PFX
-+                     "configfs: Invalid GPIO pin number(s)\n");
-+              return -EINVAL;
-+      }
-+
-+      strlcpy(dev->pdata.name, name,
-+              sizeof(dev->pdata.name));
-+
-+      dev->pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME,
-+                                        gpiommc_next_id());
-+      if (!dev->pdev)
-+              return -ENOMEM;
-+      err = platform_device_add_data(dev->pdev, &dev->pdata,
-+                                     sizeof(dev->pdata));
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+      err = platform_device_add(dev->pdev);
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+
-+      return 0;
-+}
-+
-+static void gpiommc_do_unregister(struct gpiommc_configfs_device *dev)
-+{
-+      if (!gpiommc_is_registered(dev))
-+              return;
-+
-+      platform_device_unregister(dev->pdev);
-+      dev->pdev = NULL;
-+}
-+
-+static ssize_t gpiommc_config_attr_store(struct config_item *item,
-+                                       struct configfs_attribute *attr,
-+                                       const char *page, size_t count)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      int err = -EINVAL;
-+      unsigned long data;
-+
-+      if (attr == &gpiommc_attr_register) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data == 1)
-+                      err = gpiommc_do_register(dev, item->ci_name);
-+              if (data == 0) {
-+                      gpiommc_do_unregister(dev);
-+                      err = 0;
-+              }
-+              goto out;
-+      }
-+
-+      if (gpiommc_is_registered(dev)) {
-+              /* The rest of the config parameters can only be set
-+               * as long as the device is not registered, yet. */
-+              err = -EBUSY;
-+              goto out;
-+      }
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_di = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_do = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_clk = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_cs = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.pins.cs_activelow = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              switch (data) {
-+              case 0:
-+                      dev->pdata.mode = SPI_MODE_0;
-+                      break;
-+              case 1:
-+                      dev->pdata.mode = SPI_MODE_1;
-+                      break;
-+              case 2:
-+                      dev->pdata.mode = SPI_MODE_2;
-+                      break;
-+              case 3:
-+                      dev->pdata.mode = SPI_MODE_3;
-+                      break;
-+              default:
-+                      goto out;
-+              }
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.no_spi_delay = !data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data > UINT_MAX)
-+                      goto out;
-+              dev->pdata.max_bus_speed = data;
-+              err = 0;
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static void gpiommc_config_item_release(struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      kfree(dev);
-+}
-+
-+static struct configfs_item_operations gpiommc_config_item_ops = {
-+      .release                = gpiommc_config_item_release,
-+      .show_attribute         = gpiommc_config_attr_show,
-+      .store_attribute        = gpiommc_config_attr_store,
-+};
-+
-+static struct config_item_type gpiommc_dev_ci_type = {
-+      .ct_item_ops    = &gpiommc_config_item_ops,
-+      .ct_attrs       = gpiommc_config_attrs,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct config_item *gpiommc_make_item(struct config_group *group,
-+                                           const char *name)
-+{
-+      struct gpiommc_configfs_device *dev;
-+
-+      if (strlen(name) > GPIOMMC_MAX_NAMELEN) {
-+              printk(KERN_ERR PFX "configfs: device name too long\n");
-+              return NULL;
-+      }
-+
-+      dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      config_item_init_type_name(&dev->item, name,
-+                                 &gpiommc_dev_ci_type);
-+
-+      /* Assign default configuration */
-+      dev->pdata.pins.gpio_di = GPIO_INVALID;
-+      dev->pdata.pins.gpio_do = GPIO_INVALID;
-+      dev->pdata.pins.gpio_clk = GPIO_INVALID;
-+      dev->pdata.pins.gpio_cs = GPIO_INVALID;
-+      dev->pdata.pins.cs_activelow = 1;
-+      dev->pdata.mode = SPI_MODE_0;
-+      dev->pdata.no_spi_delay = 0;
-+      dev->pdata.max_bus_speed = 5000000; /* 5 MHz */
-+
-+      return &(dev->item);
-+}
-+
-+static void gpiommc_drop_item(struct config_group *group,
-+                            struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      gpiommc_do_unregister(dev);
-+      kfree(dev);
-+}
-+
-+static struct configfs_group_operations gpiommc_ct_group_ops = {
-+      .make_item      = gpiommc_make_item,
-+      .drop_item      = gpiommc_drop_item,
-+};
-+
-+static struct config_item_type gpiommc_ci_type = {
-+      .ct_group_ops   = &gpiommc_ct_group_ops,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct configfs_subsystem gpiommc_subsys = {
-+      .su_group = {
-+              .cg_item = {
-+                      .ci_namebuf = GPIOMMC_PLATDEV_NAME,
-+                      .ci_type = &gpiommc_ci_type,
-+              },
-+      },
-+      .su_mutex = __MUTEX_INITIALIZER(gpiommc_subsys.su_mutex),
-+};
-+
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+static struct platform_driver gpiommc_plat_driver = {
-+      .probe  = gpiommc_probe,
-+      .remove = gpiommc_remove,
-+      .driver = {
-+              .name   = GPIOMMC_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+int gpiommc_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(gpiommc_next_id);
-+
-+static int __init gpiommc_modinit(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&gpiommc_plat_driver);
-+      if (err)
-+              return err;
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      config_group_init(&gpiommc_subsys.su_group);
-+      err = configfs_register_subsystem(&gpiommc_subsys);
-+      if (err) {
-+              platform_driver_unregister(&gpiommc_plat_driver);
-+              return err;
-+      }
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+      return 0;
-+}
-+module_init(gpiommc_modinit);
-+
-+static void __exit gpiommc_modexit(void)
-+{
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      configfs_unregister_subsystem(&gpiommc_subsys);
-+#endif
-+      platform_driver_unregister(&gpiommc_plat_driver);
-+}
-+module_exit(gpiommc_modexit);
---- a/drivers/mmc/host/Kconfig
-+++ b/drivers/mmc/host/Kconfig
-@@ -278,6 +278,31 @@ config MMC_TMIO
-         This provides support for the SD/MMC cell found in TC6393XB,
-         T7L66XB and also HTC ASIC3
-+config GPIOMMC
-+      tristate "MMC/SD over GPIO-based SPI"
-+      depends on MMC && MMC_SPI && SPI_GPIO_OLD
-+      help
-+        This driver hooks up the mmc_spi and spi_gpio modules so that
-+        MMC/SD cards can be used on a GPIO based bus by bitbanging
-+        the SPI protocol in software.
-+
-+        This driver provides a configfs interface to dynamically create
-+        and destroy GPIO-based MMC/SD card devices. It also provides
-+        a platform device interface API.
-+        See Documentation/gpiommc.txt for details.
-+
-+        The module will be called gpiommc.
-+
-+        If unsure, say N.
-+
-+config GPIOMMC_CONFIGFS
-+      bool
-+      depends on GPIOMMC && CONFIGFS_FS
-+      default y
-+      help
-+        This option automatically enables configfs support for gpiommc
-+        if configfs is available.
-+
- config MMC_CB710
-       tristate "ENE CB710 MMC/SD Interface support"
-       depends on PCI
---- a/drivers/mmc/host/Makefile
-+++ b/drivers/mmc/host/Makefile
-@@ -33,6 +33,7 @@ obj-$(CONFIG_MMC_SDRICOH_CS) += sdricoh_
- obj-$(CONFIG_MMC_TMIO)                += tmio_mmc.o
- obj-$(CONFIG_MMC_CB710)       += cb710-mmc.o
- obj-$(CONFIG_MMC_VIA_SDMMC)   += via-sdmmc.o
-+obj-$(CONFIG_GPIOMMC)         += gpiommc.o
- ifeq ($(CONFIG_CB710_DEBUG),y)
-       CFLAGS-cb710-mmc        += -DDEBUG
---- /dev/null
-+++ b/include/linux/mmc/gpiommc.h
-@@ -0,0 +1,71 @@
-+/*
-+ * Device driver for MMC/SD cards driven over a GPIO bus.
-+ *
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * Licensed under the GNU/GPL version 2.
-+ */
-+#ifndef LINUX_GPIOMMC_H_
-+#define LINUX_GPIOMMC_H_
-+
-+#include <linux/types.h>
-+
-+
-+#define GPIOMMC_MAX_NAMELEN           15
-+#define GPIOMMC_MAX_NAMELEN_STR               __stringify(GPIOMMC_MAX_NAMELEN)
-+
-+/**
-+ * struct gpiommc_pins - Hardware pin assignments
-+ *
-+ * @gpio_di: The GPIO number of the DATA IN pin
-+ * @gpio_do: The GPIO number of the DATA OUT pin
-+ * @gpio_clk: The GPIO number of the CLOCK pin
-+ * @gpio_cs: The GPIO number of the CHIPSELECT pin
-+ * @cs_activelow: If true, the chip is considered selected if @gpio_cs is low.
-+ */
-+struct gpiommc_pins {
-+      unsigned int gpio_di;
-+      unsigned int gpio_do;
-+      unsigned int gpio_clk;
-+      unsigned int gpio_cs;
-+      bool cs_activelow;
-+};
-+
-+/**
-+ * struct gpiommc_platform_data - Platform data for a MMC-over-SPI-GPIO device.
-+ *
-+ * @name: The unique name string of the device.
-+ * @pins: The hardware pin assignments.
-+ * @mode: The hardware mode. This is either SPI_MODE_0,
-+ *        SPI_MODE_1, SPI_MODE_2 or SPI_MODE_3. See the SPI documentation.
-+ * @no_spi_delay: Do not use delays in the lowlevel SPI bitbanging code.
-+ *                This is not standards compliant, but may be required for some
-+ *                embedded machines to gain reasonable speed.
-+ * @max_bus_speed: The maximum speed of the SPI bus, in Hertz.
-+ */
-+struct gpiommc_platform_data {
-+      char name[GPIOMMC_MAX_NAMELEN + 1];
-+      struct gpiommc_pins pins;
-+      u8 mode;
-+      bool no_spi_delay;
-+      unsigned int max_bus_speed;
-+};
-+
-+/**
-+ * GPIOMMC_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a gpiommc device.
-+ */
-+#define GPIOMMC_PLATDEV_NAME  "gpiommc"
-+
-+/**
-+ * gpiommc_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int gpiommc_next_id(void);
-+
-+#endif /* LINUX_GPIOMMC_H_ */
---- /dev/null
-+++ b/Documentation/gpiommc.txt
-@@ -0,0 +1,97 @@
-+GPIOMMC - Driver for an MMC/SD card on a bitbanging GPIO SPI bus
-+================================================================
-+
-+The gpiommc module hooks up the mmc_spi and spi_gpio modules for running an
-+MMC or SD card on GPIO pins.
-+
-+Two interfaces for registering a new MMC/SD card device are provided:
-+A static platform-device based mechanism and a dynamic configfs based interface.
-+
-+
-+Registering devices via platform-device
-+=======================================
-+
-+The platform-device interface is used for registering MMC/SD devices that are
-+part of the hardware platform. This is most useful only for embedded machines
-+with MMC/SD devices statically connected to the platform GPIO bus.
-+
-+The data structures are declared in <linux/mmc/gpiommc.h>.
-+
-+To register a new device, define an instance of struct gpiommc_platform_data.
-+This structure holds any information about how the device is hooked up to the
-+GPIO pins and what hardware modes the device supports. See the docbook-style
-+documentation in the header file for more information on the struct fields.
-+
-+Then allocate a new instance of a platform device by doing:
-+
-+      pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME, gpiommc_next_id());
-+
-+This will allocate the platform device data structures and hook it up to the
-+gpiommc driver.
-+Then add the gpiommc_platform_data to the platform device.
-+
-+      err = platform_device_add_data(pdev, pdata, sizeof(struct gpiommc_platform_data));
-+
-+You may free the local instance of struct gpiommc_platform_data now. (So the
-+struct may be allocated on the stack, too).
-+Now simply register the platform device.
-+
-+      err = platform_device_add(pdev);
-+
-+Done. The gpiommc probe routine will be invoked now and you should see a kernel
-+log message for the added device.
-+
-+
-+Registering devices via configfs
-+================================
-+
-+MMC/SD cards connected via GPIO often are a pretty dynamic thing, as for example
-+selfmade hacks for soldering an MMC/SD card to standard GPIO pins on embedded
-+hardware are a common situation.
-+So we provide a dynamic interface to conveniently handle adding and removing
-+devices from userspace, without the need to recompile the kernel.
-+
-+The "gpiommc" subdirectory at the configfs mountpoint is used for handling
-+the dynamic configuration.
-+
-+To create a new device, it must first be allocated with mkdir.
-+The following command will allocate a device named "my_mmc":
-+      mkdir /config/gpiommc/my_mmc
-+
-+There are several configuration files available in the new
-+/config/gpiommc/my_mmc/ directory:
-+
-+gpio_data_in                  = The SPI data-IN GPIO pin number.
-+gpio_data_out                 = The SPI data-OUT GPIO pin number.
-+gpio_clock                    = The SPI Clock GPIO pin number.
-+gpio_chipselect                       = The SPI Chipselect GPIO pin number.
-+gpio_chipselect_activelow     = Boolean. If 0, Chipselect is active-HIGH.
-+                                If 1, Chipselect is active-LOW.
-+spi_mode                      = The SPI data mode. Can be 0-3.
-+spi_delay                     = Enable all delays in the lowlevel bitbanging.
-+max_bus_speed                 = The maximum SPI bus speed. In Hertz.
-+
-+register                      = Not a configuration parameter.
-+                                Used to register the configured card
-+                                with the kernel.
-+
-+The device must first get configured and then registered by writing "1" to
-+the "register" file.
-+The configuration parameters "gpio_data_in", "gpio_data_out", "gpio_clock"
-+and "gpio_chipselect" are essential and _must_ be configured before writing
-+"1" to the "register" file. The registration will fail, otherwise.
-+
-+The default values for the other parameters are:
-+gpio_chipselect_activelow     = 1             (CS active-LOW)
-+spi_mode                      = 0             (SPI_MODE_0)
-+spi_delay                     = 1             (enabled)
-+max_bus_speed                 = 5000000       (5 Mhz)
-+
-+Configuration values can not be changed after registration. To unregister
-+the device, write a "0" to the "register" file. The configuration can be
-+changed again after unregistering.
-+
-+To completely remove the device, simply rmdir the directory
-+(/config/gpiommc/my_mmc in this example).
-+There's no need to first unregister the device before removing it. That will
-+be done automatically.
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -2266,6 +2266,11 @@ T:      git git://git.kernel.org/pub/scm/linu
- S:    Maintained
- F:    drivers/media/video/gspca/
-+GPIOMMC DRIVER
-+P:    Michael Buesch
-+M:    mb@bu3sch.de
-+S:    Maintained
-+
- HARDWARE MONITORING
- L:    lm-sensors@lm-sensors.org
- W:    http://www.lm-sensors.org/
diff --git a/target/linux/generic-2.6/patches-2.6.31/923-gpiommc-configfs-locking.patch b/target/linux/generic-2.6/patches-2.6.31/923-gpiommc-configfs-locking.patch
deleted file mode 100644 (file)
index 2e4e820..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-The gpiommc configfs context structure needs locking, as configfs
-does not lock access between files.
-
---- a/drivers/mmc/host/gpiommc.c
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -143,6 +143,8 @@ struct gpiommc_configfs_device {
-       struct platform_device *pdev;
-       /* The configuration */
-       struct gpiommc_platform_data pdata;
-+      /* Mutex to protect this structure */
-+      struct mutex mutex;
- };
- #define GPIO_INVALID  -1
-@@ -233,6 +235,8 @@ static ssize_t gpiommc_config_attr_show(
-       unsigned int gpio;
-       int err = 0;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_DI) {
-               gpio = dev->pdata.pins.gpio_di;
-               if (gpio == GPIO_INVALID)
-@@ -293,6 +297,8 @@ static ssize_t gpiommc_config_attr_show(
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -352,6 +358,8 @@ static ssize_t gpiommc_config_attr_store
-       int err = -EINVAL;
-       unsigned long data;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_register) {
-               err = strict_strtoul(page, 10, &data);
-               if (err)
-@@ -477,6 +485,8 @@ static ssize_t gpiommc_config_attr_store
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -513,6 +523,7 @@ static struct config_item *gpiommc_make_
-       if (!dev)
-               return NULL;
-+      mutex_init(&dev->mutex);
-       config_item_init_type_name(&dev->item, name,
-                                  &gpiommc_dev_ci_type);
diff --git a/target/linux/generic-2.6/patches-2.6.31/924-cs5535_gpio.patch b/target/linux/generic-2.6/patches-2.6.31/924-cs5535_gpio.patch
deleted file mode 100644 (file)
index 453affe..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/drivers/char/cs5535_gpio.c
-+++ b/drivers/char/cs5535_gpio.c
-@@ -15,6 +15,7 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/cdev.h>
-+#include <linux/device.h>
- #include <linux/ioport.h>
- #include <linux/pci.h>
- #include <linux/smp_lock.h>
-@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[] 
- MODULE_DEVICE_TABLE(pci, divil_pci);
- static struct cdev cs5535_gpio_cdev;
-+static struct class *cs5535_gpio_class;
- /* reserve 32 entries even though some aren't usable */
- #define CS5535_GPIO_COUNT     32
-@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
-       { 0x30, 0x00, '1', '0' },       /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
-       { 0x20, 0x20, 'I', 'i' },       /* GPIOx_IN_EN */
-       { 0x04, 0x04, 'O', 'o' },       /* GPIOx_OUT_EN */
-+      { 0x10, 0x10, 'A', 'a' },       /* GPIOx_OUT_AUX1_SEL */
-+      { 0x14, 0x14, 'B', 'b' },       /* GPIOx_OUT_AUX2_SEL */
-       { 0x08, 0x08, 't', 'T' },       /* GPIOx_OUT_OD_EN */
-       { 0x18, 0x18, 'P', 'p' },       /* GPIOx_OUT_PU_EN */
-       { 0x1c, 0x1c, 'D', 'd' },       /* GPIOx_OUT_PD_EN */
-+      { 0x24, 0x24, 'N', 'n' },       /* GPIOx_IN_INV_EN */
-+      { 0x0c, 0x0c, 'X', 'x' },       /* GPIOx_OUT_INV_EN */
-+      { 0x00, 0x00, 'H', 'L' },       /* GPIOx_OUT_VAL */
- };
-@@ -177,7 +184,7 @@ static int __init cs5535_gpio_init(void)
- {
-       dev_t   dev_id;
-       u32     low, hi;
--      int     retval;
-+      int     retval, i;
-       if (pci_dev_present(divil_pci) == 0) {
-               printk(KERN_WARNING NAME ": DIVIL not found\n");
-@@ -232,23 +239,54 @@ static int __init cs5535_gpio_init(void)
-               major = MAJOR(dev_id);
-       }
--      if (retval) {
--              release_region(gpio_base, CS5535_GPIO_SIZE);
--              return -1;
--      }
-+      if (retval)
-+              goto error;
-       printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
-              gpio_base, mask, major);
-       cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
--      cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
-+      retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
-+      if (retval) {
-+              kobject_put(&cs5535_gpio_cdev.kobj);
-+              goto error_region;
-+      }
-+
-+      cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
-+      if (IS_ERR(cs5535_gpio_class)) {
-+              printk(KERN_ERR "Error creating cs5535_gpio class\n");
-+              cdev_del(&cs5535_gpio_cdev);
-+              retval = PTR_ERR(cs5535_gpio_class);
-+              goto error_region;
-+      }
-+
-+      for (i = 0; i < CS5535_GPIO_COUNT; i++) {
-+              if (mask & (1<<i)) {
-+                      device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
-+              }
-+      }
-       return 0;
-+
-+error_region:
-+      unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
-+error:
-+      release_region(gpio_base, CS5535_GPIO_SIZE);
-+      return retval;
- }
- static void __exit cs5535_gpio_cleanup(void)
- {
-       dev_t dev_id = MKDEV(major, 0);
-+      int i;
-+
-+      for (i = 0; i < CS5535_GPIO_COUNT; i++) {
-+              if (mask & (1<<i)) {
-+                      device_destroy(cs5535_gpio_class, MKDEV(major, i));
-+              }
-+      }
-+
-+      class_destroy(cs5535_gpio_class);
-       cdev_del(&cs5535_gpio_cdev);
-       unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
diff --git a/target/linux/generic-2.6/patches-2.6.31/925-modify-i2c-gpio-initcall-level.patch b/target/linux/generic-2.6/patches-2.6.31/925-modify-i2c-gpio-initcall-level.patch
deleted file mode 100644 (file)
index 1708e33..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/i2c/busses/i2c-gpio.c
-+++ b/drivers/i2c/busses/i2c-gpio.c
-@@ -210,7 +210,7 @@ static int __init i2c_gpio_init(void)
-       return ret;
- }
--module_init(i2c_gpio_init);
-+subsys_initcall(i2c_gpio_init);
- static void __exit i2c_gpio_exit(void)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.31/940-wireless_mesh_header.patch b/target/linux/generic-2.6/patches-2.6.31/940-wireless_mesh_header.patch
deleted file mode 100644 (file)
index 73e49a0..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -100,7 +100,7 @@ struct wireless_dev;
-  */
- #if defined(CONFIG_WLAN_80211) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
--# if defined(CONFIG_MAC80211_MESH)
-+# if 1 || defined(CONFIG_MAC80211_MESH)
- #  define LL_MAX_HEADER 128
- # else
- #  define LL_MAX_HEADER 96
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -389,7 +389,7 @@ struct sk_buff {
- #ifdef CONFIG_IPV6_NDISC_NODETYPE
-       __u8                    ndisc_nodetype:2;
- #endif
--#if defined(CONFIG_MAC80211) || defined(CONFIG_MAC80211_MODULE)
-+#if 1
-       __u8                    do_not_encrypt:1;
- #endif
-       kmemcheck_bitfield_end(flags2);
diff --git a/target/linux/generic-2.6/patches-2.6.31/941-ssb_update.patch b/target/linux/generic-2.6/patches-2.6.31/941-ssb_update.patch
deleted file mode 100644 (file)
index c3f179e..0000000
+++ /dev/null
@@ -1,505 +0,0 @@
---- a/drivers/ssb/driver_chipcommon_pmu.c
-+++ b/drivers/ssb/driver_chipcommon_pmu.c
-@@ -28,6 +28,21 @@ static void ssb_chipco_pll_write(struct 
-       chipco_write32(cc, SSB_CHIPCO_PLLCTL_DATA, value);
- }
-+static void ssb_chipco_regctl_maskset(struct ssb_chipcommon *cc,
-+                                 u32 offset, u32 mask, u32 set)
-+{
-+      u32 value;
-+
-+      chipco_read32(cc, SSB_CHIPCO_REGCTL_ADDR);
-+      chipco_write32(cc, SSB_CHIPCO_REGCTL_ADDR, offset);
-+      chipco_read32(cc, SSB_CHIPCO_REGCTL_ADDR);
-+      value = chipco_read32(cc, SSB_CHIPCO_REGCTL_DATA);
-+      value &= mask;
-+      value |= set;
-+      chipco_write32(cc, SSB_CHIPCO_REGCTL_DATA, value);
-+      chipco_read32(cc, SSB_CHIPCO_REGCTL_DATA);
-+}
-+
- struct pmu0_plltab_entry {
-       u16 freq;       /* Crystal frequency in kHz.*/
-       u8 xf;          /* Crystal frequency value for PMU control */
-@@ -506,3 +521,82 @@ void ssb_pmu_init(struct ssb_chipcommon 
-       ssb_pmu_pll_init(cc);
-       ssb_pmu_resources_init(cc);
- }
-+
-+void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc,
-+                           enum ssb_pmu_ldo_volt_id id, u32 voltage)
-+{
-+      struct ssb_bus *bus = cc->dev->bus;
-+      u32 addr, shift, mask;
-+
-+      switch (bus->chip_id) {
-+      case 0x4328:
-+      case 0x5354:
-+              switch (id) {
-+              case LDO_VOLT1:
-+                      addr = 2;
-+                      shift = 25;
-+                      mask = 0xF;
-+                      break;
-+              case LDO_VOLT2:
-+                      addr = 3;
-+                      shift = 1;
-+                      mask = 0xF;
-+                      break;
-+              case LDO_VOLT3:
-+                      addr = 3;
-+                      shift = 9;
-+                      mask = 0xF;
-+                      break;
-+              case LDO_PAREF:
-+                      addr = 3;
-+                      shift = 17;
-+                      mask = 0x3F;
-+                      break;
-+              default:
-+                      SSB_WARN_ON(1);
-+                      return;
-+              }
-+              break;
-+      case 0x4312:
-+              if (SSB_WARN_ON(id != LDO_PAREF))
-+                      return;
-+              addr = 0;
-+              shift = 21;
-+              mask = 0x3F;
-+              break;
-+      default:
-+              return;
-+      }
-+
-+      ssb_chipco_regctl_maskset(cc, addr, ~(mask << shift),
-+                                (voltage & mask) << shift);
-+}
-+
-+void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on)
-+{
-+      struct ssb_bus *bus = cc->dev->bus;
-+      int ldo;
-+
-+      switch (bus->chip_id) {
-+      case 0x4312:
-+              ldo = SSB_PMURES_4312_PA_REF_LDO;
-+              break;
-+      case 0x4328:
-+              ldo = SSB_PMURES_4328_PA_REF_LDO;
-+              break;
-+      case 0x5354:
-+              ldo = SSB_PMURES_5354_PA_REF_LDO;
-+              break;
-+      default:
-+              return;
-+      }
-+
-+      if (on)
-+              chipco_set32(cc, SSB_CHIPCO_PMU_MINRES_MSK, 1 << ldo);
-+      else
-+              chipco_mask32(cc, SSB_CHIPCO_PMU_MINRES_MSK, ~(1 << ldo));
-+      chipco_read32(cc, SSB_CHIPCO_PMU_MINRES_MSK); //SPEC FIXME found via mmiotrace - dummy read?
-+}
-+
-+EXPORT_SYMBOL(ssb_pmu_set_ldo_voltage);
-+EXPORT_SYMBOL(ssb_pmu_set_ldo_paref);
---- a/drivers/ssb/main.c
-+++ b/drivers/ssb/main.c
-@@ -469,6 +469,8 @@ static int ssb_devices_register(struct s
-                       dev->parent = &bus->host_pcmcia->dev;
- #endif
-                       break;
-+              case SSB_BUSTYPE_SDIO:
-+                      break;
-               case SSB_BUSTYPE_SSB:
-                       dev->dma_mask = &dev->coherent_dma_mask;
-                       break;
-@@ -1358,8 +1360,10 @@ static int __init ssb_modinit(void)
-       ssb_buses_lock();
-       err = ssb_attach_queued_buses();
-       ssb_buses_unlock();
--      if (err)
-+      if (err) {
-               bus_unregister(&ssb_bustype);
-+              goto out;
-+      }
-       err = b43_pci_ssb_bridge_init();
-       if (err) {
-@@ -1375,7 +1379,7 @@ static int __init ssb_modinit(void)
-               /* don't fail SSB init because of this */
-               err = 0;
-       }
--
-+out:
-       return err;
- }
- /* ssb must be initialized after PCI but before the ssb drivers.
---- a/drivers/ssb/pci.c
-+++ b/drivers/ssb/pci.c
-@@ -169,8 +169,14 @@ err_pci:
- /* Get the word-offset for a SSB_SPROM_XXX define. */
- #define SPOFF(offset) (((offset) - SSB_SPROM_BASE) / sizeof(u16))
- /* Helper to extract some _offset, which is one of the SSB_SPROM_XXX defines. */
--#define SPEX(_outvar, _offset, _mask, _shift) \
-+#define SPEX16(_outvar, _offset, _mask, _shift)       \
-       out->_outvar = ((in[SPOFF(_offset)] & (_mask)) >> (_shift))
-+#define SPEX32(_outvar, _offset, _mask, _shift)       \
-+      out->_outvar = ((((u32)in[SPOFF((_offset)+2)] << 16 | \
-+                         in[SPOFF(_offset)]) & (_mask)) >> (_shift))
-+#define SPEX(_outvar, _offset, _mask, _shift) \
-+      SPEX16(_outvar, _offset, _mask, _shift)
-+
- static inline u8 ssb_crc8(u8 crc, u8 data)
- {
-@@ -474,12 +480,14 @@ static void sprom_extract_r8(struct ssb_
-       /* extract the MAC address */
-       for (i = 0; i < 3; i++) {
--              v = in[SPOFF(SSB_SPROM1_IL0MAC) + i];
-+              v = in[SPOFF(SSB_SPROM8_IL0MAC) + i];
-               *(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
-       }
-       SPEX(country_code, SSB_SPROM8_CCODE, 0xFFFF, 0);
-       SPEX(boardflags_lo, SSB_SPROM8_BFLLO, 0xFFFF, 0);
-       SPEX(boardflags_hi, SSB_SPROM8_BFLHI, 0xFFFF, 0);
-+      SPEX(boardflags2_lo, SSB_SPROM8_BFL2LO, 0xFFFF, 0);
-+      SPEX(boardflags2_hi, SSB_SPROM8_BFL2HI, 0xFFFF, 0);
-       SPEX(ant_available_a, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_A,
-            SSB_SPROM8_ANTAVAIL_A_SHIFT);
-       SPEX(ant_available_bg, SSB_SPROM8_ANTAVAIL, SSB_SPROM8_ANTAVAIL_BG,
-@@ -490,12 +498,55 @@ static void sprom_extract_r8(struct ssb_
-       SPEX(maxpwr_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_MAXP_A_MASK, 0);
-       SPEX(itssi_a, SSB_SPROM8_MAXP_A, SSB_SPROM8_ITSSI_A,
-            SSB_SPROM8_ITSSI_A_SHIFT);
-+      SPEX(maxpwr_ah, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AH_MASK, 0);
-+      SPEX(maxpwr_al, SSB_SPROM8_MAXP_AHL, SSB_SPROM8_MAXP_AL_MASK,
-+           SSB_SPROM8_MAXP_AL_SHIFT);
-       SPEX(gpio0, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P0, 0);
-       SPEX(gpio1, SSB_SPROM8_GPIOA, SSB_SPROM8_GPIOA_P1,
-            SSB_SPROM8_GPIOA_P1_SHIFT);
-       SPEX(gpio2, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P2, 0);
-       SPEX(gpio3, SSB_SPROM8_GPIOB, SSB_SPROM8_GPIOB_P3,
-            SSB_SPROM8_GPIOB_P3_SHIFT);
-+      SPEX(tri2g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI2G, 0);
-+      SPEX(tri5g, SSB_SPROM8_TRI25G, SSB_SPROM8_TRI5G,
-+           SSB_SPROM8_TRI5G_SHIFT);
-+      SPEX(tri5gl, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GL, 0);
-+      SPEX(tri5gh, SSB_SPROM8_TRI5GHL, SSB_SPROM8_TRI5GH,
-+           SSB_SPROM8_TRI5GH_SHIFT);
-+      SPEX(rxpo2g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO2G, 0);
-+      SPEX(rxpo5g, SSB_SPROM8_RXPO, SSB_SPROM8_RXPO5G,
-+           SSB_SPROM8_RXPO5G_SHIFT);
-+      SPEX(rssismf2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMF2G, 0);
-+      SPEX(rssismc2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISMC2G,
-+           SSB_SPROM8_RSSISMC2G_SHIFT);
-+      SPEX(rssisav2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_RSSISAV2G,
-+           SSB_SPROM8_RSSISAV2G_SHIFT);
-+      SPEX(bxa2g, SSB_SPROM8_RSSIPARM2G, SSB_SPROM8_BXA2G,
-+           SSB_SPROM8_BXA2G_SHIFT);
-+      SPEX(rssismf5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMF5G, 0);
-+      SPEX(rssismc5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISMC5G,
-+           SSB_SPROM8_RSSISMC5G_SHIFT);
-+      SPEX(rssisav5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_RSSISAV5G,
-+           SSB_SPROM8_RSSISAV5G_SHIFT);
-+      SPEX(bxa5g, SSB_SPROM8_RSSIPARM5G, SSB_SPROM8_BXA5G,
-+           SSB_SPROM8_BXA5G_SHIFT);
-+      SPEX(pa0b0, SSB_SPROM8_PA0B0, 0xFFFF, 0);
-+      SPEX(pa0b1, SSB_SPROM8_PA0B1, 0xFFFF, 0);
-+      SPEX(pa0b2, SSB_SPROM8_PA0B2, 0xFFFF, 0);
-+      SPEX(pa1b0, SSB_SPROM8_PA1B0, 0xFFFF, 0);
-+      SPEX(pa1b1, SSB_SPROM8_PA1B1, 0xFFFF, 0);
-+      SPEX(pa1b2, SSB_SPROM8_PA1B2, 0xFFFF, 0);
-+      SPEX(pa1lob0, SSB_SPROM8_PA1LOB0, 0xFFFF, 0);
-+      SPEX(pa1lob1, SSB_SPROM8_PA1LOB1, 0xFFFF, 0);
-+      SPEX(pa1lob2, SSB_SPROM8_PA1LOB2, 0xFFFF, 0);
-+      SPEX(pa1hib0, SSB_SPROM8_PA1HIB0, 0xFFFF, 0);
-+      SPEX(pa1hib1, SSB_SPROM8_PA1HIB1, 0xFFFF, 0);
-+      SPEX(pa1hib2, SSB_SPROM8_PA1HIB2, 0xFFFF, 0);
-+      SPEX(cck2gpo, SSB_SPROM8_CCK2GPO, 0xFFFF, 0);
-+      SPEX32(ofdm2gpo, SSB_SPROM8_OFDM2GPO, 0xFFFFFFFF, 0);
-+      SPEX32(ofdm5glpo, SSB_SPROM8_OFDM5GLPO, 0xFFFFFFFF, 0);
-+      SPEX32(ofdm5gpo, SSB_SPROM8_OFDM5GPO, 0xFFFFFFFF, 0);
-+      SPEX32(ofdm5ghpo, SSB_SPROM8_OFDM5GHPO, 0xFFFFFFFF, 0);
-       /* Extract the antenna gain values. */
-       SPEX(antenna_gain.ghz24.a0, SSB_SPROM8_AGAIN01,
-@@ -549,6 +600,7 @@ static int sprom_extract(struct ssb_bus 
-                       ssb_printk(KERN_WARNING PFX "Unsupported SPROM"
-                                  "  revision %d detected. Will extract"
-                                  " v1\n", out->revision);
-+                      out->revision = 1;
-                       sprom_extract_r123(out, in);
-               }
-       }
---- a/drivers/ssb/scan.c
-+++ b/drivers/ssb/scan.c
-@@ -175,6 +175,8 @@ static u32 scan_read32(struct ssb_bus *b
-               } else
-                       ssb_pcmcia_switch_segment(bus, 0);
-               break;
-+      case SSB_BUSTYPE_SDIO:
-+              break;
-       }
-       return readl(bus->mmio + offset);
- }
-@@ -188,6 +190,8 @@ static int scan_switchcore(struct ssb_bu
-               return ssb_pci_switch_coreidx(bus, coreidx);
-       case SSB_BUSTYPE_PCMCIA:
-               return ssb_pcmcia_switch_coreidx(bus, coreidx);
-+      case SSB_BUSTYPE_SDIO:
-+              break;
-       }
-       return 0;
- }
-@@ -206,6 +210,8 @@ void ssb_iounmap(struct ssb_bus *bus)
-               SSB_BUG_ON(1); /* Can't reach this code. */
- #endif
-               break;
-+      case SSB_BUSTYPE_SDIO:
-+              break;
-       }
-       bus->mmio = NULL;
-       bus->mapped_device = NULL;
-@@ -230,6 +236,8 @@ static void __iomem *ssb_ioremap(struct 
-               SSB_BUG_ON(1); /* Can't reach this code. */
- #endif
-               break;
-+      case SSB_BUSTYPE_SDIO:
-+              break;
-       }
-       return mmio;
---- a/include/linux/ssb/ssb.h
-+++ b/include/linux/ssb/ssb.h
-@@ -27,24 +27,54 @@ struct ssb_sprom {
-       u8 et1mdcport;          /* MDIO for enet1 */
-       u8 board_rev;           /* Board revision number from SPROM. */
-       u8 country_code;        /* Country Code */
--      u8 ant_available_a;     /* A-PHY antenna available bits (up to 4) */
--      u8 ant_available_bg;    /* B/G-PHY antenna available bits (up to 4) */
-+      u8 ant_available_a;     /* 2GHz antenna available bits (up to 4) */
-+      u8 ant_available_bg;    /* 5GHz antenna available bits (up to 4) */
-       u16 pa0b0;
-       u16 pa0b1;
-       u16 pa0b2;
-       u16 pa1b0;
-       u16 pa1b1;
-       u16 pa1b2;
-+      u16 pa1lob0;
-+      u16 pa1lob1;
-+      u16 pa1lob2;
-+      u16 pa1hib0;
-+      u16 pa1hib1;
-+      u16 pa1hib2;
-       u8 gpio0;               /* GPIO pin 0 */
-       u8 gpio1;               /* GPIO pin 1 */
-       u8 gpio2;               /* GPIO pin 2 */
-       u8 gpio3;               /* GPIO pin 3 */
--      u16 maxpwr_a;           /* A-PHY Amplifier Max Power (in dBm Q5.2) */
--      u16 maxpwr_bg;          /* B/G-PHY Amplifier Max Power (in dBm Q5.2) */
-+      u16 maxpwr_bg;          /* 2.4GHz Amplifier Max Power (in dBm Q5.2) */
-+      u16 maxpwr_al;          /* 5.2GHz Amplifier Max Power (in dBm Q5.2) */
-+      u16 maxpwr_a;           /* 5.3GHz Amplifier Max Power (in dBm Q5.2) */
-+      u16 maxpwr_ah;          /* 5.8GHz Amplifier Max Power (in dBm Q5.2) */
-       u8 itssi_a;             /* Idle TSSI Target for A-PHY */
-       u8 itssi_bg;            /* Idle TSSI Target for B/G-PHY */
--      u16 boardflags_lo;      /* Boardflags (low 16 bits) */
--      u16 boardflags_hi;      /* Boardflags (high 16 bits) */
-+      u8 tri2g;               /* 2.4GHz TX isolation */
-+      u8 tri5gl;              /* 5.2GHz TX isolation */
-+      u8 tri5g;               /* 5.3GHz TX isolation */
-+      u8 tri5gh;              /* 5.8GHz TX isolation */
-+      u8 rxpo2g;              /* 2GHz RX power offset */
-+      u8 rxpo5g;              /* 5GHz RX power offset */
-+      u8 rssisav2g;           /* 2GHz RSSI params */
-+      u8 rssismc2g;
-+      u8 rssismf2g;
-+      u8 bxa2g;               /* 2GHz BX arch */
-+      u8 rssisav5g;           /* 5GHz RSSI params */
-+      u8 rssismc5g;
-+      u8 rssismf5g;
-+      u8 bxa5g;               /* 5GHz BX arch */
-+      u16 cck2gpo;            /* CCK power offset */
-+      u32 ofdm2gpo;           /* 2.4GHz OFDM power offset */
-+      u32 ofdm5glpo;          /* 5.2GHz OFDM power offset */
-+      u32 ofdm5gpo;           /* 5.3GHz OFDM power offset */
-+      u32 ofdm5ghpo;          /* 5.8GHz OFDM power offset */
-+      u16 boardflags_lo;      /* Board flags (bits 0-15) */
-+      u16 boardflags_hi;      /* Board flags (bits 16-31) */
-+      u16 boardflags2_lo;     /* Board flags (bits 32-47) */
-+      u16 boardflags2_hi;     /* Board flags (bits 48-63) */
-+      /* TODO store board flags in a single u64 */
-       /* Antenna gain values for up to 4 antennas
-        * on each band. Values in dBm/4 (Q5.2). Negative gain means the
-@@ -58,7 +88,7 @@ struct ssb_sprom {
-               } ghz5;         /* 5GHz band */
-       } antenna_gain;
--      /* TODO - add any parameters needed from rev 2, 3, or 4 SPROMs */
-+      /* TODO - add any parameters needed from rev 2, 3, 4, 5 or 8 SPROMs */
- };
- /* Information about the PCB the circuitry is soldered on. */
-@@ -208,6 +238,7 @@ enum ssb_bustype {
-       SSB_BUSTYPE_SSB,        /* This SSB bus is the system bus */
-       SSB_BUSTYPE_PCI,        /* SSB is connected to PCI bus */
-       SSB_BUSTYPE_PCMCIA,     /* SSB is connected to PCMCIA bus */
-+      SSB_BUSTYPE_SDIO,       /* SSB is connected to SDIO bus */
- };
- /* board_vendor */
-@@ -240,8 +271,12 @@ struct ssb_bus {
-       /* The core in the basic address register window. (PCI bus only) */
-       struct ssb_device *mapped_device;
--      /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */
--      u8 mapped_pcmcia_seg;
-+      union {
-+              /* Currently mapped PCMCIA segment. (bustype == SSB_BUSTYPE_PCMCIA only) */
-+              u8 mapped_pcmcia_seg;
-+              /* Current SSB base address window for SDIO. */
-+              u32 sdio_sbaddr;
-+      };
-       /* Lock for core and segment switching.
-        * On PCMCIA-host busses this is used to protect the whole MMIO access. */
-       spinlock_t bar_lock;
-@@ -252,6 +287,11 @@ struct ssb_bus {
-       struct pci_dev *host_pci;
-       /* Pointer to the PCMCIA device (only if bustype == SSB_BUSTYPE_PCMCIA). */
-       struct pcmcia_device *host_pcmcia;
-+      /* Pointer to the SDIO device (only if bustype == SSB_BUSTYPE_SDIO). */
-+      struct sdio_func *host_sdio;
-+
-+      /* See enum ssb_quirks */
-+      unsigned int quirks;
- #ifdef CONFIG_SSB_SPROM
-       /* Mutex to protect the SPROM writing. */
-@@ -306,6 +346,11 @@ struct ssb_bus {
- #endif /* DEBUG */
- };
-+enum ssb_quirks {
-+      /* SDIO connected card requires performing a read after writing a 32-bit value */
-+      SSB_QUIRK_SDIO_READ_AFTER_WRITE32       = (1 << 0),
-+};
-+
- /* The initialization-invariants. */
- struct ssb_init_invariants {
-       /* Versioning information about the PCB. */
---- a/include/linux/ssb/ssb_driver_chipcommon.h
-+++ b/include/linux/ssb/ssb_driver_chipcommon.h
-@@ -629,5 +629,15 @@ extern int ssb_chipco_serial_init(struct
- /* PMU support */
- extern void ssb_pmu_init(struct ssb_chipcommon *cc);
-+enum ssb_pmu_ldo_volt_id {
-+      LDO_PAREF = 0,
-+      LDO_VOLT1,
-+      LDO_VOLT2,
-+      LDO_VOLT3,
-+};
-+
-+void ssb_pmu_set_ldo_voltage(struct ssb_chipcommon *cc,
-+                           enum ssb_pmu_ldo_volt_id id, u32 voltage);
-+void ssb_pmu_set_ldo_paref(struct ssb_chipcommon *cc, bool on);
- #endif /* LINUX_SSB_CHIPCO_H_ */
---- a/include/linux/ssb/ssb_regs.h
-+++ b/include/linux/ssb/ssb_regs.h
-@@ -162,7 +162,7 @@
- /* SPROM shadow area. If not otherwise noted, fields are
-  * two bytes wide. Note that the SPROM can _only_ be read
-- * in two-byte quantinies.
-+ * in two-byte quantities.
-  */
- #define SSB_SPROMSIZE_WORDS           64
- #define SSB_SPROMSIZE_BYTES           (SSB_SPROMSIZE_WORDS * sizeof(u16))
-@@ -327,8 +327,11 @@
- #define  SSB_SPROM5_GPIOB_P3_SHIFT    8
- /* SPROM Revision 8 */
--#define SSB_SPROM8_BFLLO              0x1084  /* Boardflags (low 16 bits) */
--#define SSB_SPROM8_BFLHI              0x1086  /* Boardflags Hi */
-+#define SSB_SPROM8_BOARDREV           0x1082  /* Board revision */
-+#define SSB_SPROM8_BFLLO              0x1084  /* Board flags (bits 0-15) */
-+#define SSB_SPROM8_BFLHI              0x1086  /* Board flags (bits 16-31) */
-+#define SSB_SPROM8_BFL2LO             0x1088  /* Board flags (bits 32-47) */
-+#define SSB_SPROM8_BFL2HI             0x108A  /* Board flags (bits 48-63) */
- #define SSB_SPROM8_IL0MAC             0x108C  /* 6 byte MAC address */
- #define SSB_SPROM8_CCODE              0x1092  /* 2 byte country code */
- #define SSB_SPROM8_ANTAVAIL           0x109C  /* Antenna available bitfields*/
-@@ -354,14 +357,63 @@
- #define  SSB_SPROM8_GPIOB_P2          0x00FF  /* Pin 2 */
- #define  SSB_SPROM8_GPIOB_P3          0xFF00  /* Pin 3 */
- #define  SSB_SPROM8_GPIOB_P3_SHIFT    8
--#define SSB_SPROM8_MAXP_BG            0x10C0  /* Max Power BG in path 1 */
--#define  SSB_SPROM8_MAXP_BG_MASK      0x00FF  /* Mask for Max Power BG */
-+#define SSB_SPROM8_RSSIPARM2G         0x10A4  /* RSSI params for 2GHz */
-+#define  SSB_SPROM8_RSSISMF2G         0x000F
-+#define  SSB_SPROM8_RSSISMC2G         0x00F0
-+#define  SSB_SPROM8_RSSISMC2G_SHIFT   4
-+#define  SSB_SPROM8_RSSISAV2G         0x0700
-+#define  SSB_SPROM8_RSSISAV2G_SHIFT   8
-+#define  SSB_SPROM8_BXA2G             0x1800
-+#define  SSB_SPROM8_BXA2G_SHIFT               11
-+#define SSB_SPROM8_RSSIPARM5G         0x10A6  /* RSSI params for 5GHz */
-+#define  SSB_SPROM8_RSSISMF5G         0x000F
-+#define  SSB_SPROM8_RSSISMC5G         0x00F0
-+#define  SSB_SPROM8_RSSISMC5G_SHIFT   4
-+#define  SSB_SPROM8_RSSISAV5G         0x0700
-+#define  SSB_SPROM8_RSSISAV5G_SHIFT   8
-+#define  SSB_SPROM8_BXA5G             0x1800
-+#define  SSB_SPROM8_BXA5G_SHIFT               11
-+#define SSB_SPROM8_TRI25G             0x10A8  /* TX isolation 2.4&5.3GHz */
-+#define  SSB_SPROM8_TRI2G             0x00FF  /* TX isolation 2.4GHz */
-+#define  SSB_SPROM8_TRI5G             0xFF00  /* TX isolation 5.3GHz */
-+#define  SSB_SPROM8_TRI5G_SHIFT               8
-+#define SSB_SPROM8_TRI5GHL            0x10AA  /* TX isolation 5.2/5.8GHz */
-+#define  SSB_SPROM8_TRI5GL            0x00FF  /* TX isolation 5.2GHz */
-+#define  SSB_SPROM8_TRI5GH            0xFF00  /* TX isolation 5.8GHz */
-+#define  SSB_SPROM8_TRI5GH_SHIFT      8
-+#define SSB_SPROM8_RXPO                       0x10AC  /* RX power offsets */
-+#define  SSB_SPROM8_RXPO2G            0x00FF  /* 2GHz RX power offset */
-+#define  SSB_SPROM8_RXPO5G            0xFF00  /* 5GHz RX power offset */
-+#define  SSB_SPROM8_RXPO5G_SHIFT      8
-+#define SSB_SPROM8_MAXP_BG            0x10C0  /* Max Power 2GHz in path 1 */
-+#define  SSB_SPROM8_MAXP_BG_MASK      0x00FF  /* Mask for Max Power 2GHz */
- #define  SSB_SPROM8_ITSSI_BG          0xFF00  /* Mask for path 1 itssi_bg */
- #define  SSB_SPROM8_ITSSI_BG_SHIFT    8
--#define SSB_SPROM8_MAXP_A             0x10C8  /* Max Power A in path 1 */
--#define  SSB_SPROM8_MAXP_A_MASK               0x00FF  /* Mask for Max Power A */
-+#define SSB_SPROM8_PA0B0              0x10C2  /* 2GHz power amp settings */
-+#define SSB_SPROM8_PA0B1              0x10C4
-+#define SSB_SPROM8_PA0B2              0x10C6
-+#define SSB_SPROM8_MAXP_A             0x10C8  /* Max Power 5.3GHz */
-+#define  SSB_SPROM8_MAXP_A_MASK               0x00FF  /* Mask for Max Power 5.3GHz */
- #define  SSB_SPROM8_ITSSI_A           0xFF00  /* Mask for path 1 itssi_a */
- #define  SSB_SPROM8_ITSSI_A_SHIFT     8
-+#define SSB_SPROM8_MAXP_AHL           0x10CA  /* Max Power 5.2/5.8GHz */
-+#define  SSB_SPROM8_MAXP_AH_MASK      0x00FF  /* Mask for Max Power 5.8GHz */
-+#define  SSB_SPROM8_MAXP_AL_MASK      0xFF00  /* Mask for Max Power 5.2GHz */
-+#define  SSB_SPROM8_MAXP_AL_SHIFT     8
-+#define SSB_SPROM8_PA1B0              0x10CC  /* 5.3GHz power amp settings */
-+#define SSB_SPROM8_PA1B1              0x10CE
-+#define SSB_SPROM8_PA1B2              0x10D0
-+#define SSB_SPROM8_PA1LOB0            0x10D2  /* 5.2GHz power amp settings */
-+#define SSB_SPROM8_PA1LOB1            0x10D4
-+#define SSB_SPROM8_PA1LOB2            0x10D6
-+#define SSB_SPROM8_PA1HIB0            0x10D8  /* 5.8GHz power amp settings */
-+#define SSB_SPROM8_PA1HIB1            0x10DA
-+#define SSB_SPROM8_PA1HIB2            0x10DC
-+#define SSB_SPROM8_CCK2GPO            0x1140  /* CCK power offset */
-+#define SSB_SPROM8_OFDM2GPO           0x1142  /* 2.4GHz OFDM power offset */
-+#define SSB_SPROM8_OFDM5GPO           0x1146  /* 5.3GHz OFDM power offset */
-+#define SSB_SPROM8_OFDM5GLPO          0x114A  /* 5.2GHz OFDM power offset */
-+#define SSB_SPROM8_OFDM5GHPO          0x114E  /* 5.8GHz OFDM power offset */
- /* Values for SSB_SPROM1_BINF_CCODE */
- enum {
diff --git a/target/linux/generic-2.6/patches-2.6.31/951-revert_gcc4_4_fixes.patch b/target/linux/generic-2.6/patches-2.6.31/951-revert_gcc4_4_fixes.patch
deleted file mode 100644 (file)
index 1bf19cc..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
---- a/arch/powerpc/boot/crtsavres.S
-+++ /dev/null
-@@ -1,233 +0,0 @@
--/*
-- * Special support for eabi and SVR4
-- *
-- *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
-- *   Copyright 2008 Freescale Semiconductor, Inc.
-- *   Written By Michael Meissner
-- *
-- * Based on gcc/config/rs6000/crtsavres.asm from gcc
-- *
-- * 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, or (at your option) any
-- * later version.
-- *
-- * In addition to the permissions in the GNU General Public License, the
-- * Free Software Foundation gives you unlimited permission to link the
-- * compiled version of this file with other programs, and to distribute
-- * those programs without any restriction coming from the use of this
-- * file.  (The General Public License restrictions do apply in other
-- * respects; for example, they cover modification of the file, and
-- * distribution when not linked into another program.)
-- *
-- * This file 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; see the file COPYING.  If not, write to
-- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-- * Boston, MA 02110-1301, USA.
-- *
-- *    As a special exception, if you link this library with files
-- *    compiled with GCC to produce an executable, this does not cause
-- *    the resulting executable to be covered by the GNU General Public License.
-- *    This exception does not however invalidate any other reasons why
-- *    the executable file might be covered by the GNU General Public License.
-- */
--
--      .file   "crtsavres.S"
--      .section ".text"
--
--/* On PowerPC64 Linux, these functions are provided by the linker.  */
--#ifndef __powerpc64__
--
--#define _GLOBAL(name) \
--      .type name,@function; \
--      .globl name; \
--name:
--
--/* Routines for saving integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer save area.  */
--
--_GLOBAL(_savegpr_14)
--_GLOBAL(_save32gpr_14)
--      stw     14,-72(11)      /* save gp registers */
--_GLOBAL(_savegpr_15)
--_GLOBAL(_save32gpr_15)
--      stw     15,-68(11)
--_GLOBAL(_savegpr_16)
--_GLOBAL(_save32gpr_16)
--      stw     16,-64(11)
--_GLOBAL(_savegpr_17)
--_GLOBAL(_save32gpr_17)
--      stw     17,-60(11)
--_GLOBAL(_savegpr_18)
--_GLOBAL(_save32gpr_18)
--      stw     18,-56(11)
--_GLOBAL(_savegpr_19)
--_GLOBAL(_save32gpr_19)
--      stw     19,-52(11)
--_GLOBAL(_savegpr_20)
--_GLOBAL(_save32gpr_20)
--      stw     20,-48(11)
--_GLOBAL(_savegpr_21)
--_GLOBAL(_save32gpr_21)
--      stw     21,-44(11)
--_GLOBAL(_savegpr_22)
--_GLOBAL(_save32gpr_22)
--      stw     22,-40(11)
--_GLOBAL(_savegpr_23)
--_GLOBAL(_save32gpr_23)
--      stw     23,-36(11)
--_GLOBAL(_savegpr_24)
--_GLOBAL(_save32gpr_24)
--      stw     24,-32(11)
--_GLOBAL(_savegpr_25)
--_GLOBAL(_save32gpr_25)
--      stw     25,-28(11)
--_GLOBAL(_savegpr_26)
--_GLOBAL(_save32gpr_26)
--      stw     26,-24(11)
--_GLOBAL(_savegpr_27)
--_GLOBAL(_save32gpr_27)
--      stw     27,-20(11)
--_GLOBAL(_savegpr_28)
--_GLOBAL(_save32gpr_28)
--      stw     28,-16(11)
--_GLOBAL(_savegpr_29)
--_GLOBAL(_save32gpr_29)
--      stw     29,-12(11)
--_GLOBAL(_savegpr_30)
--_GLOBAL(_save32gpr_30)
--      stw     30,-8(11)
--_GLOBAL(_savegpr_31)
--_GLOBAL(_save32gpr_31)
--      stw     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14)
--_GLOBAL(_rest32gpr_14)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15)
--_GLOBAL(_rest32gpr_15)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16)
--_GLOBAL(_rest32gpr_16)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17)
--_GLOBAL(_rest32gpr_17)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18)
--_GLOBAL(_rest32gpr_18)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19)
--_GLOBAL(_rest32gpr_19)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20)
--_GLOBAL(_rest32gpr_20)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21)
--_GLOBAL(_rest32gpr_21)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22)
--_GLOBAL(_rest32gpr_22)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23)
--_GLOBAL(_rest32gpr_23)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24)
--_GLOBAL(_rest32gpr_24)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25)
--_GLOBAL(_rest32gpr_25)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26)
--_GLOBAL(_rest32gpr_26)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27)
--_GLOBAL(_rest32gpr_27)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28)
--_GLOBAL(_rest32gpr_28)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29)
--_GLOBAL(_rest32gpr_29)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30)
--_GLOBAL(_rest32gpr_30)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31)
--_GLOBAL(_rest32gpr_31)
--      lwz     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14_x)
--_GLOBAL(_rest32gpr_14_x)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15_x)
--_GLOBAL(_rest32gpr_15_x)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16_x)
--_GLOBAL(_rest32gpr_16_x)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17_x)
--_GLOBAL(_rest32gpr_17_x)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18_x)
--_GLOBAL(_rest32gpr_18_x)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19_x)
--_GLOBAL(_rest32gpr_19_x)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20_x)
--_GLOBAL(_rest32gpr_20_x)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21_x)
--_GLOBAL(_rest32gpr_21_x)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22_x)
--_GLOBAL(_rest32gpr_22_x)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23_x)
--_GLOBAL(_rest32gpr_23_x)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24_x)
--_GLOBAL(_rest32gpr_24_x)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25_x)
--_GLOBAL(_rest32gpr_25_x)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26_x)
--_GLOBAL(_rest32gpr_26_x)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27_x)
--_GLOBAL(_rest32gpr_27_x)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28_x)
--_GLOBAL(_rest32gpr_28_x)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29_x)
--_GLOBAL(_rest32gpr_29_x)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30_x)
--_GLOBAL(_rest32gpr_30_x)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31_x)
--_GLOBAL(_rest32gpr_31_x)
--      lwz     0,4(11)
--      lwz     31,-4(11)
--      mtlr    0
--      mr      1,11
--      blr
--#endif
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -59,7 +59,7 @@ libfdtheader := fdt.h libfdt.h libfdt_in
- $(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o): \
-       $(addprefix $(obj)/,$(libfdtheader))
--src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
-+src-wlib := string.S crt0.S stdio.c main.c \
-               $(libfdt) libfdt-wrapper.c \
-               ns16550.c serial.c simple_alloc.c div64.S util.S \
-               gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
---- a/arch/powerpc/kernel/prom_init_check.sh
-+++ b/arch/powerpc/kernel/prom_init_check.sh
-@@ -48,20 +48,6 @@ do
-               fi
-       done
--      # ignore register save/restore funcitons
--      if [ "${UNDEF:0:9}" = "_restgpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:11}" = "_rest32gpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:9}" = "_savegpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:11}" = "_save32gpr_" ]; then
--              OK=1
--      fi
--
-       if [ $OK -eq 0 ]; then
-               ERROR=1
-               echo "Error: External symbol '$UNDEF' referenced" \
---- a/arch/powerpc/lib/crtsavres.S
-+++ /dev/null
-@@ -1,229 +0,0 @@
--/*
-- * Special support for eabi and SVR4
-- *
-- *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
-- *   Copyright 2008 Freescale Semiconductor, Inc.
-- *   Written By Michael Meissner
-- *
-- * Based on gcc/config/rs6000/crtsavres.asm from gcc
-- *
-- * 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, or (at your option) any
-- * later version.
-- *
-- * In addition to the permissions in the GNU General Public License, the
-- * Free Software Foundation gives you unlimited permission to link the
-- * compiled version of this file with other programs, and to distribute
-- * those programs without any restriction coming from the use of this
-- * file.  (The General Public License restrictions do apply in other
-- * respects; for example, they cover modification of the file, and
-- * distribution when not linked into another program.)
-- *
-- * This file 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; see the file COPYING.  If not, write to
-- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-- * Boston, MA 02110-1301, USA.
-- *
-- *    As a special exception, if you link this library with files
-- *    compiled with GCC to produce an executable, this does not cause
-- *    the resulting executable to be covered by the GNU General Public License.
-- *    This exception does not however invalidate any other reasons why
-- *    the executable file might be covered by the GNU General Public License.
-- */
--
--#include <asm/ppc_asm.h>
--
--      .file   "crtsavres.S"
--      .section ".text"
--
--#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
--
--/* Routines for saving integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer save area.  */
--
--_GLOBAL(_savegpr_14)
--_GLOBAL(_save32gpr_14)
--      stw     14,-72(11)      /* save gp registers */
--_GLOBAL(_savegpr_15)
--_GLOBAL(_save32gpr_15)
--      stw     15,-68(11)
--_GLOBAL(_savegpr_16)
--_GLOBAL(_save32gpr_16)
--      stw     16,-64(11)
--_GLOBAL(_savegpr_17)
--_GLOBAL(_save32gpr_17)
--      stw     17,-60(11)
--_GLOBAL(_savegpr_18)
--_GLOBAL(_save32gpr_18)
--      stw     18,-56(11)
--_GLOBAL(_savegpr_19)
--_GLOBAL(_save32gpr_19)
--      stw     19,-52(11)
--_GLOBAL(_savegpr_20)
--_GLOBAL(_save32gpr_20)
--      stw     20,-48(11)
--_GLOBAL(_savegpr_21)
--_GLOBAL(_save32gpr_21)
--      stw     21,-44(11)
--_GLOBAL(_savegpr_22)
--_GLOBAL(_save32gpr_22)
--      stw     22,-40(11)
--_GLOBAL(_savegpr_23)
--_GLOBAL(_save32gpr_23)
--      stw     23,-36(11)
--_GLOBAL(_savegpr_24)
--_GLOBAL(_save32gpr_24)
--      stw     24,-32(11)
--_GLOBAL(_savegpr_25)
--_GLOBAL(_save32gpr_25)
--      stw     25,-28(11)
--_GLOBAL(_savegpr_26)
--_GLOBAL(_save32gpr_26)
--      stw     26,-24(11)
--_GLOBAL(_savegpr_27)
--_GLOBAL(_save32gpr_27)
--      stw     27,-20(11)
--_GLOBAL(_savegpr_28)
--_GLOBAL(_save32gpr_28)
--      stw     28,-16(11)
--_GLOBAL(_savegpr_29)
--_GLOBAL(_save32gpr_29)
--      stw     29,-12(11)
--_GLOBAL(_savegpr_30)
--_GLOBAL(_save32gpr_30)
--      stw     30,-8(11)
--_GLOBAL(_savegpr_31)
--_GLOBAL(_save32gpr_31)
--      stw     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14)
--_GLOBAL(_rest32gpr_14)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15)
--_GLOBAL(_rest32gpr_15)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16)
--_GLOBAL(_rest32gpr_16)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17)
--_GLOBAL(_rest32gpr_17)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18)
--_GLOBAL(_rest32gpr_18)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19)
--_GLOBAL(_rest32gpr_19)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20)
--_GLOBAL(_rest32gpr_20)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21)
--_GLOBAL(_rest32gpr_21)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22)
--_GLOBAL(_rest32gpr_22)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23)
--_GLOBAL(_rest32gpr_23)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24)
--_GLOBAL(_rest32gpr_24)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25)
--_GLOBAL(_rest32gpr_25)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26)
--_GLOBAL(_rest32gpr_26)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27)
--_GLOBAL(_rest32gpr_27)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28)
--_GLOBAL(_rest32gpr_28)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29)
--_GLOBAL(_rest32gpr_29)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30)
--_GLOBAL(_rest32gpr_30)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31)
--_GLOBAL(_rest32gpr_31)
--      lwz     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14_x)
--_GLOBAL(_rest32gpr_14_x)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15_x)
--_GLOBAL(_rest32gpr_15_x)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16_x)
--_GLOBAL(_rest32gpr_16_x)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17_x)
--_GLOBAL(_rest32gpr_17_x)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18_x)
--_GLOBAL(_rest32gpr_18_x)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19_x)
--_GLOBAL(_rest32gpr_19_x)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20_x)
--_GLOBAL(_rest32gpr_20_x)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21_x)
--_GLOBAL(_rest32gpr_21_x)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22_x)
--_GLOBAL(_rest32gpr_22_x)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23_x)
--_GLOBAL(_rest32gpr_23_x)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24_x)
--_GLOBAL(_rest32gpr_24_x)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25_x)
--_GLOBAL(_rest32gpr_25_x)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26_x)
--_GLOBAL(_rest32gpr_26_x)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27_x)
--_GLOBAL(_rest32gpr_27_x)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28_x)
--_GLOBAL(_rest32gpr_28_x)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29_x)
--_GLOBAL(_rest32gpr_29_x)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30_x)
--_GLOBAL(_rest32gpr_30_x)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31_x)
--_GLOBAL(_rest32gpr_31_x)
--      lwz     0,4(11)
--      lwz     31,-4(11)
--      mtlr    0
--      mr      1,11
--      blr
--#endif
---- a/arch/powerpc/lib/Makefile
-+++ b/arch/powerpc/lib/Makefile
-@@ -13,7 +13,7 @@ CFLAGS_REMOVE_feature-fixups.o = -pg
- obj-y                 := string.o alloc.o \
-                          checksum_$(CONFIG_WORD_SIZE).o
--obj-$(CONFIG_PPC32)   += div64.o copy_32.o crtsavres.o
-+obj-$(CONFIG_PPC32)   += div64.o copy_32.o
- obj-$(CONFIG_HAS_IOMEM)       += devres.o
- obj-$(CONFIG_PPC64)   += copypage_64.o copyuser_64.o \
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -92,8 +92,6 @@ endif
- else
-       KBUILD_CFLAGS += $(call cc-option,-mtune=power4)
- endif
--else
--LDFLAGS_MODULE        += arch/powerpc/lib/crtsavres.o
- endif
- ifeq ($(CONFIG_TUNE_CELL),y)
diff --git a/target/linux/generic-2.6/patches-2.6.31/970-ocf_kbuild_integration.patch b/target/linux/generic-2.6/patches-2.6.31/970-ocf_kbuild_integration.patch
deleted file mode 100644 (file)
index a6d86ce..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -788,6 +788,8 @@ config CRYPTO_ANSI_CPRNG
-         for cryptographic modules.  Uses the Algorithm specified in
-         ANSI X9.31 A.2.4
-+source "crypto/ocf/Kconfig"
-+
- source "drivers/crypto/Kconfig"
- endif # if CRYPTO
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -85,6 +85,11 @@ obj-$(CONFIG_CRYPTO_ANSI_CPRNG) += ansi_
- obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
- #
-+# OCF
-+#
-+obj-$(CONFIG_OCF_OCF) += ocf/
-+
-+#
- # generic algorithms and the async_tx api
- #
- obj-$(CONFIG_XOR_BLOCKS) += xor.o
diff --git a/target/linux/generic-2.6/patches-2.6.31/971-ocf_20080917.patch b/target/linux/generic-2.6/patches-2.6.31/971-ocf_20080917.patch
deleted file mode 100644 (file)
index 29b15d5..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -129,6 +129,9 @@
-  *                                unsigned int value);
-  *    void add_interrupt_randomness(int irq);
-  *
-+ *      void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+ *      int random_input_wait(void);
-+ *
-  * add_input_randomness() uses the input layer interrupt timing, as well as
-  * the event type information from the hardware.
-  *
-@@ -140,6 +143,13 @@
-  * a better measure, since the timing of the disk interrupts are more
-  * unpredictable.
-  *
-+ * random_input_words() just provides a raw block of entropy to the input
-+ * pool, such as from a hardware entropy generator.
-+ *
-+ * random_input_wait() suspends the caller until such time as the
-+ * entropy pool falls below the write threshold, and returns a count of how
-+ * much entropy (in bits) is needed to sustain the pool.
-+ *
-  * All of these routines try to estimate how many bits of randomness a
-  * particular randomness source.  They do this by keeping track of the
-  * first and second order deltas of the event timings.
-@@ -712,6 +722,61 @@ void add_disk_randomness(struct gendisk 
- }
- #endif
-+/*
-+ * random_input_words - add bulk entropy to pool
-+ *
-+ * @buf: buffer to add
-+ * @wordcount: number of __u32 words to add
-+ * @ent_count: total amount of entropy (in bits) to credit
-+ *
-+ * this provides bulk input of entropy to the input pool
-+ *
-+ */
-+void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+{
-+      mix_pool_bytes(&input_pool, buf, wordcount*4);
-+
-+      credit_entropy_bits(&input_pool, ent_count);
-+
-+      DEBUG_ENT("crediting %d bits => %d\n",
-+                ent_count, input_pool.entropy_count);
-+      /*
-+       * Wake up waiting processes if we have enough
-+       * entropy.
-+       */
-+      if (input_pool.entropy_count >= random_read_wakeup_thresh)
-+              wake_up_interruptible(&random_read_wait);
-+}
-+EXPORT_SYMBOL(random_input_words);
-+
-+/*
-+ * random_input_wait - wait until random needs entropy
-+ *
-+ * this function sleeps until the /dev/random subsystem actually
-+ * needs more entropy, and then return the amount of entropy
-+ * that it would be nice to have added to the system.
-+ */
-+int random_input_wait(void)
-+{
-+      int count;
-+
-+      wait_event_interruptible(random_write_wait, 
-+                       input_pool.entropy_count < random_write_wakeup_thresh);
-+
-+      count = random_write_wakeup_thresh - input_pool.entropy_count;
-+
-+        /* likely we got woken up due to a signal */
-+      if (count <= 0) count = random_read_wakeup_thresh; 
-+
-+      DEBUG_ENT("requesting %d bits from input_wait()er %d<%d\n",
-+                count,
-+                input_pool.entropy_count, random_write_wakeup_thresh);
-+
-+      return count;
-+}
-+EXPORT_SYMBOL(random_input_wait);
-+
-+
- #define EXTRACT_SIZE 10
- /*********************************************************************
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -141,6 +141,7 @@ SYSCALL_DEFINE1(dup, unsigned int, filde
-       }
-       return ret;
- }
-+EXPORT_SYMBOL(sys_dup);
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
---- a/include/linux/miscdevice.h
-+++ b/include/linux/miscdevice.h
-@@ -12,6 +12,7 @@
- #define APOLLO_MOUSE_MINOR    7
- #define PC110PAD_MINOR                9
- /*#define ADB_MOUSE_MINOR     10      FIXME OBSOLETE */
-+#define CRYPTODEV_MINOR               70      /* /dev/crypto */
- #define WATCHDOG_MINOR                130     /* Watchdog timer     */
- #define TEMP_MINOR            131     /* Temperature Sensor */
- #define RTC_MINOR             135
---- a/include/linux/random.h
-+++ b/include/linux/random.h
-@@ -34,6 +34,30 @@
- /* Clear the entropy pool and associated counters.  (Superuser only.) */
- #define RNDCLEARPOOL  _IO( 'R', 0x06 )
-+#ifdef CONFIG_FIPS_RNG
-+
-+/* Size of seed value - equal to AES blocksize */
-+#define AES_BLOCK_SIZE_BYTES  16
-+#define SEED_SIZE_BYTES                       AES_BLOCK_SIZE_BYTES
-+/* Size of AES key */
-+#define KEY_SIZE_BYTES                16
-+
-+/* ioctl() structure used by FIPS 140-2 Tests */
-+struct rand_fips_test {
-+      unsigned char key[KEY_SIZE_BYTES];                      /* Input */
-+      unsigned char datetime[SEED_SIZE_BYTES];        /* Input */
-+      unsigned char seed[SEED_SIZE_BYTES];            /* Input */
-+      unsigned char result[SEED_SIZE_BYTES];          /* Output */
-+};
-+
-+/* FIPS 140-2 RNG Variable Seed Test. (Superuser only.) */
-+#define RNDFIPSVST    _IOWR('R', 0x10, struct rand_fips_test)
-+
-+/* FIPS 140-2 RNG Monte Carlo Test. (Superuser only.) */
-+#define RNDFIPSMCT    _IOWR('R', 0x11, struct rand_fips_test)
-+
-+#endif /* #ifdef CONFIG_FIPS_RNG */
-+
- struct rand_pool_info {
-       int     entropy_count;
-       int     buf_size;
-@@ -50,6 +74,10 @@ extern void add_input_randomness(unsigne
-                                unsigned int value);
- extern void add_interrupt_randomness(int irq);
-+extern void random_input_words(__u32 *buf, size_t wordcount, int ent_count);
-+extern int random_input_wait(void);
-+#define HAS_RANDOM_INPUT_WAIT 1
-+
- extern void get_random_bytes(void *buf, int nbytes);
- void generate_random_uuid(unsigned char uuid_out[16]);
diff --git a/target/linux/generic-2.6/patches-2.6.31/972-ocf_compile_fix.patch b/target/linux/generic-2.6/patches-2.6.31/972-ocf_compile_fix.patch
deleted file mode 100644 (file)
index a3fa226..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/crypto/ocf/cryptosoft.c
-+++ b/crypto/ocf/cryptosoft.c
-@@ -47,7 +47,7 @@
- #include <linux/mm.h>
- #include <linux/skbuff.h>
- #include <linux/random.h>
--#include <asm/scatterlist.h>
-+#include <linux/scatterlist.h>
- #include <cryptodev.h>
- #include <uio.h>
diff --git a/target/linux/generic-2.6/patches-2.6.31/973-ocf_2.6.27_fix.patch b/target/linux/generic-2.6/patches-2.6.31/973-ocf_2.6.27_fix.patch
deleted file mode 100644 (file)
index ecb9bef..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
---- a/crypto/ocf/random.c
-+++ b/crypto/ocf/random.c
-@@ -49,6 +49,7 @@
- #include <linux/unistd.h>
- #include <linux/poll.h>
- #include <linux/random.h>
-+#include <linux/kthread.h>
- #include <cryptodev.h>
- #ifdef CONFIG_OCF_FIPS
-@@ -81,7 +82,7 @@ struct random_op {
- static int random_proc(void *arg);
--static pid_t          randomproc = (pid_t) -1;
-+static struct task_struct *random_task;
- static spinlock_t     random_lock;
- /*
-@@ -141,13 +142,18 @@ crypto_rregister(
-       spin_lock_irqsave(&random_lock, flags);
-       list_add_tail(&rops->random_list, &random_ops);
-       if (!started) {
--              randomproc = kernel_thread(random_proc, NULL, CLONE_FS|CLONE_FILES);
--              if (randomproc < 0) {
--                      ret = randomproc;
-+              struct task_struct *t;
-+
-+              t = kthread_create(random_proc, NULL, "ocf-random");
-+              if (IS_ERR(t)) {
-+                      ret = PTR_ERR(t);
-                       printk("crypto: crypto_rregister cannot start random thread; "
-                                       "error %d", ret);
--              } else
-+              } else {
-+                      random_task = t;
-+                      wake_up_process(t);
-                       started = 1;
-+              }
-       }
-       spin_unlock_irqrestore(&random_lock, flags);
-@@ -172,7 +178,7 @@ crypto_runregister_all(u_int32_t driveri
-       spin_lock_irqsave(&random_lock, flags);
-       if (list_empty(&random_ops) && started)
--              kill_proc(randomproc, SIGKILL, 1);
-+              send_sig(SIGKILL, random_task, 1);
-       spin_unlock_irqrestore(&random_lock, flags);
-       return(0);
- }
-@@ -308,7 +314,7 @@ random_proc(void *arg)
- bad_alloc:
-       spin_lock_irq(&random_lock);
--      randomproc = (pid_t) -1;
-+      random_task = NULL;
-       started = 0;
-       spin_unlock_irq(&random_lock);
---- a/crypto/ocf/crypto.c
-+++ b/crypto/ocf/crypto.c
-@@ -74,6 +74,7 @@ __FBSDID("$FreeBSD: src/sys/opencrypto/c
- #include <linux/sched.h>
- #include <linux/spinlock.h>
- #include <linux/version.h>
-+#include <linux/kthread.h>
- #include <cryptodev.h>
- /*
-@@ -255,10 +256,10 @@ module_param(crypto_devallowsoft, int, 0
- MODULE_PARM_DESC(crypto_devallowsoft,
-          "Enable/disable use of software crypto support");
--static pid_t  cryptoproc = (pid_t) -1;
-+static struct task_struct *crypto_task;
- static struct completion cryptoproc_exited;
- static DECLARE_WAIT_QUEUE_HEAD(cryptoproc_wait);
--static pid_t  cryptoretproc = (pid_t) -1;
-+static struct task_struct *cryptoret_task;
- static struct completion cryptoretproc_exited;
- static DECLARE_WAIT_QUEUE_HEAD(cryptoretproc_wait);
-@@ -1401,7 +1402,7 @@ crypto_proc(void *arg)
-                       wait_event_interruptible(cryptoproc_wait,
-                                       !(list_empty(&crp_q) || crypto_all_qblocked) ||
-                                       !(list_empty(&crp_kq) || crypto_all_kqblocked) ||
--                                      cryptoproc == (pid_t) -1);
-+                                      crypto_task == NULL);
-                       crp_sleep = 0;
-                       if (signal_pending (current)) {
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-@@ -1414,7 +1415,7 @@ crypto_proc(void *arg)
-                       }
-                       CRYPTO_Q_LOCK();
-                       dprintk("%s - awake\n", __FUNCTION__);
--                      if (cryptoproc == (pid_t) -1)
-+                      if (crypto_task == NULL)
-                               break;
-                       cryptostats.cs_intrs++;
-               }
-@@ -1470,7 +1471,7 @@ crypto_ret_proc(void *arg)
-                       dprintk("%s - sleeping\n", __FUNCTION__);
-                       CRYPTO_RETQ_UNLOCK();
-                       wait_event_interruptible(cryptoretproc_wait,
--                                      cryptoretproc == (pid_t) -1 ||
-+                                      cryptoret_task == NULL ||
-                                       !list_empty(&crp_ret_q) ||
-                                       !list_empty(&crp_ret_kq));
-                       if (signal_pending (current)) {
-@@ -1484,7 +1485,7 @@ crypto_ret_proc(void *arg)
-                       }
-                       CRYPTO_RETQ_LOCK();
-                       dprintk("%s - awake\n", __FUNCTION__);
--                      if (cryptoretproc == (pid_t) -1) {
-+                      if (cryptoret_task == NULL) {
-                               dprintk("%s - EXITING!\n", __FUNCTION__);
-                               break;
-                       }
-@@ -1597,6 +1598,7 @@ DB_SHOW_COMMAND(kcrypto, db_show_kcrypto
- static int
- crypto_init(void)
- {
-+      struct task_struct *t;
-       int error;
-       dprintk("%s(0x%x)\n", __FUNCTION__, (int) crypto_init);
-@@ -1643,23 +1645,27 @@ crypto_init(void)
-       init_completion(&cryptoproc_exited);
-       init_completion(&cryptoretproc_exited);
--      cryptoproc = 0; /* to avoid race condition where proc runs first */
--      cryptoproc = kernel_thread(crypto_proc, NULL, CLONE_FS|CLONE_FILES);
--      if (cryptoproc < 0) {
--              error = cryptoproc;
-+      crypto_task = NULL; /* to avoid race condition where proc runs first */
-+      t = kthread_create(crypto_proc, NULL, "ocf-crypto");
-+      if (IS_ERR(t)) {
-+              error = PTR_ERR(t);
-               printk("crypto: crypto_init cannot start crypto thread; error %d",
-                       error);
-               goto bad;
-       }
-+      wake_up_process(t);
-+      crypto_task = t;
--      cryptoretproc = 0; /* to avoid race condition where proc runs first */
--      cryptoretproc = kernel_thread(crypto_ret_proc, NULL, CLONE_FS|CLONE_FILES);
--      if (cryptoretproc < 0) {
--              error = cryptoretproc;
-+      cryptoret_task = NULL; /* to avoid race condition where proc runs first */
-+      t = kthread_create(crypto_ret_proc, NULL, "ocf-cryptoret");
-+      if (IS_ERR(t)) {
-+              error = PTR_ERR(t);
-               printk("crypto: crypto_init cannot start cryptoret thread; error %d",
-                               error);
-               goto bad;
-       }
-+      wake_up_process(t);
-+      cryptoret_task = t;
-       return 0;
- bad:
-@@ -1671,7 +1677,7 @@ bad:
- static void
- crypto_exit(void)
- {
--      pid_t p;
-+      struct task_struct *t;
-       unsigned long d_flags;
-       dprintk("%s()\n", __FUNCTION__);
-@@ -1681,18 +1687,18 @@ crypto_exit(void)
-        */
-       CRYPTO_DRIVER_LOCK();
--      p = cryptoproc;
--      cryptoproc = (pid_t) -1;
--      kill_proc(p, SIGTERM, 1);
-+      t = crypto_task;
-+      crypto_task = NULL;
-+      send_sig(SIGTERM, t, 1);
-       wake_up_interruptible(&cryptoproc_wait);
-       CRYPTO_DRIVER_UNLOCK();
-       wait_for_completion(&cryptoproc_exited);
-       CRYPTO_DRIVER_LOCK();
--      p = cryptoretproc;
--      cryptoretproc = (pid_t) -1;
--      kill_proc(p, SIGTERM, 1);
-+      t = cryptoret_task;
-+      cryptoret_task = NULL;
-+      send_sig(SIGTERM, t, 1);
-       wake_up_interruptible(&cryptoretproc_wait);
-       CRYPTO_DRIVER_UNLOCK();
diff --git a/target/linux/generic-2.6/patches-2.6.31/974-ssb_b43_default_on.patch b/target/linux/generic-2.6/patches-2.6.31/974-ssb_b43_default_on.patch
deleted file mode 100644 (file)
index 98dde2a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/ssb/Kconfig
-+++ b/drivers/ssb/Kconfig
-@@ -49,7 +49,7 @@ config SSB_PCIHOST
- config SSB_B43_PCI_BRIDGE
-       bool
-       depends on SSB_PCIHOST
--      default n
-+      default y
- config SSB_PCMCIAHOST_POSSIBLE
-       bool
diff --git a/target/linux/generic-2.6/patches-2.6.31/977-textsearch_kconfig_hacks.patch b/target/linux/generic-2.6/patches-2.6.31/977-textsearch_kconfig_hacks.patch
deleted file mode 100644 (file)
index 94d6b91..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -152,16 +152,16 @@ config REED_SOLOMON_DEC16
- # Textsearch support is select'ed if needed
- #
- config TEXTSEARCH
--      boolean
-+      boolean "Textsearch support"
- config TEXTSEARCH_KMP
--      tristate
-+      tristate "Textsearch KMP"
- config TEXTSEARCH_BM
--      tristate
-+      tristate "Textsearch BM"
- config TEXTSEARCH_FSM
--      tristate
-+      tristate "Textsearch FSM"
- config HAS_IOMEM
-       boolean
diff --git a/target/linux/generic-2.6/patches-2.6.31/978-lib80211_kconfig_hacks.patch b/target/linux/generic-2.6/patches-2.6.31/978-lib80211_kconfig_hacks.patch
deleted file mode 100644 (file)
index 696ad55..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/net/wireless/Kconfig
-+++ b/net/wireless/Kconfig
-@@ -72,13 +72,13 @@ config LIB80211
-         you want this built into your kernel.
- config LIB80211_CRYPT_WEP
--      tristate
-+      tristate "LIB80211_CRYPT_WEP"
- config LIB80211_CRYPT_CCMP
--      tristate
-+      tristate "LIB80211_CRYPT_CCMP"
- config LIB80211_CRYPT_TKIP
--      tristate
-+      tristate "LIB80211_CRYPT_TKIP"
- config LIB80211_DEBUG
-       bool "lib80211 debugging messages"
diff --git a/target/linux/generic-2.6/patches-2.6.31/979-crypto_add_kconfig_prompts.patch b/target/linux/generic-2.6/patches-2.6.31/979-crypto_add_kconfig_prompts.patch
deleted file mode 100644 (file)
index 03ad2a8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -30,7 +30,7 @@ config CRYPTO_FIPS
-         this is.
- config CRYPTO_ALGAPI
--      tristate
-+      tristate "ALGAPI"
-       select CRYPTO_ALGAPI2
-       help
-         This option provides the API for cryptographic algorithms.
-@@ -39,7 +39,7 @@ config CRYPTO_ALGAPI2
-       tristate
- config CRYPTO_AEAD
--      tristate
-+      tristate "AEAD"
-       select CRYPTO_AEAD2
-       select CRYPTO_ALGAPI
-@@ -48,7 +48,7 @@ config CRYPTO_AEAD2
-       select CRYPTO_ALGAPI2
- config CRYPTO_BLKCIPHER
--      tristate
-+      tristate "BLKCIPHER"
-       select CRYPTO_BLKCIPHER2
-       select CRYPTO_ALGAPI
-@@ -59,7 +59,7 @@ config CRYPTO_BLKCIPHER2
-       select CRYPTO_WORKQUEUE
- config CRYPTO_HASH
--      tristate
-+      tristate "HASH"
-       select CRYPTO_HASH2
-       select CRYPTO_ALGAPI
-@@ -68,7 +68,7 @@ config CRYPTO_HASH2
-       select CRYPTO_ALGAPI2
- config CRYPTO_RNG
--      tristate
-+      tristate "RNG"
-       select CRYPTO_RNG2
-       select CRYPTO_ALGAPI
diff --git a/target/linux/generic-2.6/patches-2.6.31/980-vm_exports.patch b/target/linux/generic-2.6/patches-2.6.31/980-vm_exports.patch
deleted file mode 100644 (file)
index 3f1848b..0000000
+++ /dev/null
@@ -1,135 +0,0 @@
---- a/mm/shmem.c
-+++ b/mm/shmem.c
-@@ -2602,6 +2602,16 @@ int shmem_unuse(swp_entry_t entry, struc
- /* common code */
-+void shmem_set_file(struct vm_area_struct *vma, struct file *file)
-+{
-+      ima_counts_get(file);
-+      if (vma->vm_file)
-+              fput(vma->vm_file);
-+      vma->vm_file = file;
-+      vma->vm_ops = &shmem_vm_ops;
-+}
-+EXPORT_SYMBOL_GPL(shmem_set_file);
-+
- /**
-  * shmem_file_setup - get an unlinked file living in tmpfs
-  * @name: name for dentry (to be seen in /proc/<pid>/maps
-@@ -2681,10 +2691,7 @@ int shmem_zero_setup(struct vm_area_stru
-       if (IS_ERR(file))
-               return PTR_ERR(file);
--      if (vma->vm_file)
--              fput(vma->vm_file);
--      vma->vm_file = file;
--      vma->vm_ops = &shmem_vm_ops;
-+      shmem_set_file(vma, file);
-       return 0;
- }
---- a/fs/file.c
-+++ b/fs/file.c
-@@ -270,6 +270,7 @@ int expand_files(struct files_struct *fi
-       /* All good, so we try */
-       return expand_fdtable(files, nr);
- }
-+EXPORT_SYMBOL_GPL(expand_files);
- static int count_open_files(struct fdtable *fdt)
- {
---- a/kernel/exit.c
-+++ b/kernel/exit.c
-@@ -507,6 +507,7 @@ struct files_struct *get_files_struct(st
-       return files;
- }
-+EXPORT_SYMBOL_GPL(get_files_struct);
- void put_files_struct(struct files_struct *files)
- {
-@@ -526,6 +527,7 @@ void put_files_struct(struct files_struc
-               free_fdtable(fdt);
-       }
- }
-+EXPORT_SYMBOL_GPL(put_files_struct);
- void reset_files_struct(struct files_struct *files)
- {
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -159,6 +159,7 @@ void __put_task_struct(struct task_struc
-       if (!profile_handoff_task(tsk))
-               free_task(tsk);
- }
-+EXPORT_SYMBOL_GPL(__put_task_struct);
- /*
-  * macro override instead of weak attribute alias, to workaround
---- a/kernel/sched.c
-+++ b/kernel/sched.c
-@@ -5981,6 +5981,7 @@ int can_nice(const struct task_struct *p
-       return (nice_rlim <= p->signal->rlim[RLIMIT_NICE].rlim_cur ||
-               capable(CAP_SYS_NICE));
- }
-+EXPORT_SYMBOL_GPL(can_nice);
- #ifdef __ARCH_WANT_SYS_NICE
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -1064,6 +1064,7 @@ unsigned long zap_page_range(struct vm_a
-               tlb_finish_mmu(tlb, address, end);
-       return end;
- }
-+EXPORT_SYMBOL_GPL(zap_page_range);
- /**
-  * zap_vma_ptes - remove ptes mapping the vma
-@@ -2490,6 +2491,7 @@ int vmtruncate_range(struct inode *inode
-       return 0;
- }
-+EXPORT_SYMBOL_GPL(vmtruncate_range);
- /*
-  * We enter with non-exclusive mmap_sem (to exclude vma changes,
---- a/mm/vmalloc.c
-+++ b/mm/vmalloc.c
-@@ -1101,6 +1101,7 @@ void unmap_kernel_range(unsigned long ad
-       vunmap_page_range(addr, end);
-       flush_tlb_kernel_range(addr, end);
- }
-+EXPORT_SYMBOL_GPL(unmap_kernel_range);
- int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
- {
-@@ -1214,6 +1215,7 @@ struct vm_struct *get_vm_area(unsigned l
-       return __get_vm_area_node(size, flags, VMALLOC_START, VMALLOC_END,
-                               -1, GFP_KERNEL, __builtin_return_address(0));
- }
-+EXPORT_SYMBOL_GPL(get_vm_area);
- struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags,
-                               void *caller)
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -711,6 +711,7 @@ static inline int shmem_lock(struct file
- #endif
- struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
-+void shmem_set_file(struct vm_area_struct *vma, struct file *file);
- int shmem_zero_setup(struct vm_area_struct *);
- #ifndef CONFIG_MMU
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1062,6 +1062,7 @@ struct sighand_struct *lock_task_sighand
-       return sighand;
- }
-+EXPORT_SYMBOL(lock_task_sighand);
- /*
-  * send signal info to all the members of a group
diff --git a/target/linux/generic-2.6/patches-2.6.31/985-cris-headers.patch b/target/linux/generic-2.6/patches-2.6.31/985-cris-headers.patch
deleted file mode 100644 (file)
index 73ede93..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/arch/cris/include/arch-v10/arch/Kbuild
-+++ b/arch/cris/include/arch-v10/arch/Kbuild
-@@ -1,3 +1,5 @@
-+header-y += elf.h
-+header-y += ptrace.h
- header-y += user.h
- header-y += svinto.h
- header-y += sv_addr_ag.h
---- a/arch/cris/include/asm/Kbuild
-+++ b/arch/cris/include/asm/Kbuild
-@@ -1,11 +1,14 @@
- include include/asm-generic/Kbuild.asm
--header-y += arch-v10/
--header-y += arch-v32/
-+header-y += ../arch-v10/arch/
-+header-y += ../arch-v32/arch/
-+header-y += elf.h
- header-y += ethernet.h
-+header-y += page.h
- header-y += rtc.h
- header-y += sync_serial.h
-+header-y += user.h
- unifdef-y += etraxgpio.h
- unifdef-y += rs485.h
diff --git a/target/linux/generic-2.6/patches-2.6.31/991-ppc4xx_optimization.patch b/target/linux/generic-2.6/patches-2.6.31/991-ppc4xx_optimization.patch
deleted file mode 100644 (file)
index 39d5fb0..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-Upstream doesn't optimize the kernel and bootwrappers for ppc44x because
-they still want to support gcc 3.3 -- well, we don't.
-
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -123,7 +123,8 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
- KBUILD_CFLAGS         += -mno-sched-epilog
- endif
--cpu-as-$(CONFIG_4xx)          += -Wa,-m405
-+cpu-as-$(CONFIG_40x)          += -Wa,-m405
-+cpu-as-$(CONFIG_44x)          += -Wa,-m440
- cpu-as-$(CONFIG_6xx)          += -Wa,-maltivec
- cpu-as-$(CONFIG_POWER4)               += -Wa,-maltivec
- cpu-as-$(CONFIG_E500)         += -Wa,-me500
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -38,9 +38,9 @@ BOOTCFLAGS   += -I$(obj) -I$(srctree)/$(ob
- DTS_FLAGS     ?= -p 1024
- $(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
--$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
--$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
--$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
-+$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
-+$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=440
-+$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=440
- $(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
- $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
- $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
diff --git a/target/linux/generic-2.6/patches-2.6.31/998-openwrt_lzma_options.patch b/target/linux/generic-2.6/patches-2.6.31/998-openwrt_lzma_options.patch
deleted file mode 100644 (file)
index 08bb83a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/scripts/Makefile.lib
-+++ b/scripts/Makefile.lib
-@@ -228,7 +228,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) 
- quiet_cmd_lzma = LZMA    $@
- cmd_lzma = (cat $(filter-out FORCE,$^) | \
--      lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-+      lzma e -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-       (rm -f $@ ; false)
- quiet_cmd_lzo = LZO    $@
---- a/scripts/gen_initramfs_list.sh
-+++ b/scripts/gen_initramfs_list.sh
-@@ -225,7 +225,7 @@ cpio_list=
- output="/dev/stdout"
- output_file=""
- is_cpio_compressed=
--compr="gzip -9 -f"
-+compr="gzip -9 -f -"
- arg="$1"
- case "$arg" in
-@@ -239,9 +239,9 @@ case "$arg" in
-               output_file="$1"
-               cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
-               output=${cpio_list}
--              echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f"
--              echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
--              echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
-+              echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f -"
-+              echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f -"
-+              echo "$output_file" | grep -q "\.lzma$" && compr="lzma e -lc1 -lp2 -pb2 -eos -si -so"
-               echo "$output_file" | grep -q "\.cpio$" && compr="cat"
-               shift
-               ;;
-@@ -292,7 +292,7 @@ if [ ! -z ${output_file} ]; then
-       if [ "${is_cpio_compressed}" = "compressed" ]; then
-               cat ${cpio_tfile} > ${output_file}
-       else
--              (cat ${cpio_tfile} | ${compr}  - > ${output_file}) \
-+              (cat ${cpio_tfile} | ${compr} > ${output_file}) \
-               || (rm -f ${output_file} ; false)
-       fi
-       [ -z ${cpio_file} ] && rm ${cpio_tfile}
diff --git a/target/linux/generic-2.6/patches-2.6.31/999-use_preinit_as_init.patch b/target/linux/generic-2.6/patches-2.6.31/999-use_preinit_as_init.patch
deleted file mode 100644 (file)
index c85113d..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -863,10 +863,7 @@ static noinline int init_post(void)
-               printk(KERN_WARNING "Failed to execute %s.  Attempting "
-                                       "defaults...\n", execute_command);
-       }
--      run_init_process("/sbin/init");
--      run_init_process("/etc/init");
--      run_init_process("/bin/init");
--      run_init_process("/bin/sh");
-+      run_init_process("/etc/preinit");
-       panic("No init found.  Try passing init= option to kernel.");
- }
diff --git a/target/linux/generic-2.6/patches-2.6.33/001-squashfs_move_zlib_decomp.patch b/target/linux/generic-2.6/patches-2.6.33/001-squashfs_move_zlib_decomp.patch
deleted file mode 100644 (file)
index 9409679..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-From 6c4419d997d4431bb62e73475cd6b084e83efbd1 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 22 Sep 2009 19:25:24 +0100
-Subject: [PATCH] Squashfs: move zlib decompression wrapper code into a separate file
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Makefile       |    2 +-
- fs/squashfs/block.c        |   74 ++----------------------------
- fs/squashfs/squashfs.h     |    4 ++
- fs/squashfs/zlib_wrapper.c |  109 ++++++++++++++++++++++++++++++++++++++++++++
- 4 files changed, 118 insertions(+), 71 deletions(-)
- create mode 100644 fs/squashfs/zlib_wrapper.c
-
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -4,4 +4,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
--squashfs-y += namei.o super.o symlink.o
-+squashfs-y += namei.o super.o symlink.o zlib_wrapper.o
---- a/fs/squashfs/block.c
-+++ b/fs/squashfs/block.c
-@@ -29,7 +29,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/mutex.h>
- #include <linux/string.h>
- #include <linux/buffer_head.h>
- #include <linux/zlib.h>
-@@ -153,72 +152,10 @@ int squashfs_read_data(struct super_bloc
-       }
-       if (compressed) {
--              int zlib_err = 0, zlib_init = 0;
--
--              /*
--               * Uncompress block.
--               */
--
--              mutex_lock(&msblk->read_data_mutex);
--
--              msblk->stream.avail_out = 0;
--              msblk->stream.avail_in = 0;
--
--              bytes = length;
--              do {
--                      if (msblk->stream.avail_in == 0 && k < b) {
--                              avail = min(bytes, msblk->devblksize - offset);
--                              bytes -= avail;
--                              wait_on_buffer(bh[k]);
--                              if (!buffer_uptodate(bh[k]))
--                                      goto release_mutex;
--
--                              if (avail == 0) {
--                                      offset = 0;
--                                      put_bh(bh[k++]);
--                                      continue;
--                              }
--
--                              msblk->stream.next_in = bh[k]->b_data + offset;
--                              msblk->stream.avail_in = avail;
--                              offset = 0;
--                      }
--
--                      if (msblk->stream.avail_out == 0 && page < pages) {
--                              msblk->stream.next_out = buffer[page++];
--                              msblk->stream.avail_out = PAGE_CACHE_SIZE;
--                      }
--
--                      if (!zlib_init) {
--                              zlib_err = zlib_inflateInit(&msblk->stream);
--                              if (zlib_err != Z_OK) {
--                                      ERROR("zlib_inflateInit returned"
--                                              " unexpected result 0x%x,"
--                                              " srclength %d\n", zlib_err,
--                                              srclength);
--                                      goto release_mutex;
--                              }
--                              zlib_init = 1;
--                      }
--
--                      zlib_err = zlib_inflate(&msblk->stream, Z_SYNC_FLUSH);
--
--                      if (msblk->stream.avail_in == 0 && k < b)
--                              put_bh(bh[k++]);
--              } while (zlib_err == Z_OK);
--
--              if (zlib_err != Z_STREAM_END) {
--                      ERROR("zlib_inflate error, data probably corrupt\n");
--                      goto release_mutex;
--              }
--
--              zlib_err = zlib_inflateEnd(&msblk->stream);
--              if (zlib_err != Z_OK) {
--                      ERROR("zlib_inflate error, data probably corrupt\n");
--                      goto release_mutex;
--              }
--              length = msblk->stream.total_out;
--              mutex_unlock(&msblk->read_data_mutex);
-+              length = zlib_uncompress(msblk, buffer, bh, b, offset, length,
-+                      srclength, pages);
-+              if (length < 0)
-+                      goto read_failure;
-       } else {
-               /*
-                * Block is uncompressed.
-@@ -255,9 +192,6 @@ int squashfs_read_data(struct super_bloc
-       kfree(bh);
-       return length;
--release_mutex:
--      mutex_unlock(&msblk->read_data_mutex);
--
- block_release:
-       for (; k < b; k++)
-               put_bh(bh[k]);
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -70,6 +70,10 @@ extern struct inode *squashfs_iget(struc
-                               unsigned int);
- extern int squashfs_read_inode(struct inode *, long long);
-+/* zlib_wrapper.c */
-+extern int zlib_uncompress(struct squashfs_sb_info *, void **,
-+                              struct buffer_head **, int, int, int, int, int);
-+
- /*
-  * Inodes and files operations
-  */
---- /dev/null
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -0,0 +1,109 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * zlib_wrapper.c
-+ */
-+
-+
-+#include <linux/mutex.h>
-+#include <linux/buffer_head.h>
-+#include <linux/zlib.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "squashfs.h"
-+
-+int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+      struct buffer_head **bh, int b, int offset, int length, int srclength,
-+      int pages)
-+{
-+      int zlib_err = 0, zlib_init = 0;
-+      int avail, bytes, k = 0, page = 0;
-+
-+      mutex_lock(&msblk->read_data_mutex);
-+
-+      msblk->stream.avail_out = 0;
-+      msblk->stream.avail_in = 0;
-+
-+      bytes = length;
-+      do {
-+              if (msblk->stream.avail_in == 0 && k < b) {
-+                      avail = min(bytes, msblk->devblksize - offset);
-+                      bytes -= avail;
-+                      wait_on_buffer(bh[k]);
-+                      if (!buffer_uptodate(bh[k]))
-+                              goto release_mutex;
-+
-+                      if (avail == 0) {
-+                              offset = 0;
-+                              put_bh(bh[k++]);
-+                              continue;
-+                      }
-+
-+                      msblk->stream.next_in = bh[k]->b_data + offset;
-+                      msblk->stream.avail_in = avail;
-+                      offset = 0;
-+              }
-+
-+              if (msblk->stream.avail_out == 0 && page < pages) {
-+                      msblk->stream.next_out = buffer[page++];
-+                      msblk->stream.avail_out = PAGE_CACHE_SIZE;
-+              }
-+
-+              if (!zlib_init) {
-+                      zlib_err = zlib_inflateInit(&msblk->stream);
-+                      if (zlib_err != Z_OK) {
-+                              ERROR("zlib_inflateInit returned unexpected "
-+                                      "result 0x%x, srclength %d\n",
-+                                      zlib_err, srclength);
-+                              goto release_mutex;
-+                      }
-+                      zlib_init = 1;
-+              }
-+
-+              zlib_err = zlib_inflate(&msblk->stream, Z_SYNC_FLUSH);
-+
-+              if (msblk->stream.avail_in == 0 && k < b)
-+                      put_bh(bh[k++]);
-+      } while (zlib_err == Z_OK);
-+
-+      if (zlib_err != Z_STREAM_END) {
-+              ERROR("zlib_inflate error, data probably corrupt\n");
-+              goto release_mutex;
-+      }
-+
-+      zlib_err = zlib_inflateEnd(&msblk->stream);
-+      if (zlib_err != Z_OK) {
-+              ERROR("zlib_inflate error, data probably corrupt\n");
-+              goto release_mutex;
-+      }
-+
-+      mutex_unlock(&msblk->read_data_mutex);
-+      return msblk->stream.total_out;
-+
-+release_mutex:
-+      mutex_unlock(&msblk->read_data_mutex);
-+
-+      for (; k < b; k++)
-+              put_bh(bh[k]);
-+
-+      return -EIO;
-+}
diff --git a/target/linux/generic-2.6/patches-2.6.33/002-squashfs_factor_out_remaining_zlib.patch b/target/linux/generic-2.6/patches-2.6.33/002-squashfs_factor_out_remaining_zlib.patch
deleted file mode 100644 (file)
index eacbb97..0000000
+++ /dev/null
@@ -1,317 +0,0 @@
-From 37c44e85fd49676ec15ccaeea065662c1fbcda7d Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Wed, 23 Sep 2009 19:04:49 +0100
-Subject: [PATCH] Squashfs: Factor out remaining zlib dependencies into separate wrapper file
-
-Move zlib buffer init/destroy code into separate wrapper file.  Also
-make zlib z_stream field a void * removing the need to include zlib.h
-for most files.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/block.c          |    1 -
- fs/squashfs/cache.c          |    1 -
- fs/squashfs/dir.c            |    1 -
- fs/squashfs/export.c         |    1 -
- fs/squashfs/file.c           |    1 -
- fs/squashfs/fragment.c       |    1 -
- fs/squashfs/id.c             |    1 -
- fs/squashfs/inode.c          |    1 -
- fs/squashfs/namei.c          |    1 -
- fs/squashfs/squashfs.h       |    2 +
- fs/squashfs/squashfs_fs_sb.h |    2 +-
- fs/squashfs/super.c          |   14 +++------
- fs/squashfs/symlink.c        |    1 -
- fs/squashfs/zlib_wrapper.c   |   56 ++++++++++++++++++++++++++++++++---------
- 14 files changed, 51 insertions(+), 33 deletions(-)
-
---- a/fs/squashfs/block.c
-+++ b/fs/squashfs/block.c
-@@ -31,7 +31,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/buffer_head.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/cache.c
-+++ b/fs/squashfs/cache.c
-@@ -51,7 +51,6 @@
- #include <linux/sched.h>
- #include <linux/spinlock.h>
- #include <linux/wait.h>
--#include <linux/zlib.h>
- #include <linux/pagemap.h>
- #include "squashfs_fs.h"
---- a/fs/squashfs/dir.c
-+++ b/fs/squashfs/dir.c
-@@ -30,7 +30,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/export.c
-+++ b/fs/squashfs/export.c
-@@ -39,7 +39,6 @@
- #include <linux/vfs.h>
- #include <linux/dcache.h>
- #include <linux/exportfs.h>
--#include <linux/zlib.h>
- #include <linux/slab.h>
- #include "squashfs_fs.h"
---- a/fs/squashfs/file.c
-+++ b/fs/squashfs/file.c
-@@ -47,7 +47,6 @@
- #include <linux/string.h>
- #include <linux/pagemap.h>
- #include <linux/mutex.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/fragment.c
-+++ b/fs/squashfs/fragment.c
-@@ -36,7 +36,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/id.c
-+++ b/fs/squashfs/id.c
-@@ -34,7 +34,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
- #include <linux/slab.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/inode.c
-+++ b/fs/squashfs/inode.c
-@@ -40,7 +40,6 @@
- #include <linux/fs.h>
- #include <linux/vfs.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/namei.c
-+++ b/fs/squashfs/namei.c
-@@ -57,7 +57,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/dcache.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -71,6 +71,8 @@ extern struct inode *squashfs_iget(struc
- extern int squashfs_read_inode(struct inode *, long long);
- /* zlib_wrapper.c */
-+extern void *zlib_init(void);
-+extern void zlib_free(void *);
- extern int zlib_uncompress(struct squashfs_sb_info *, void **,
-                               struct buffer_head **, int, int, int, int, int);
---- a/fs/squashfs/squashfs_fs_sb.h
-+++ b/fs/squashfs/squashfs_fs_sb.h
-@@ -64,7 +64,7 @@ struct squashfs_sb_info {
-       struct mutex            read_data_mutex;
-       struct mutex            meta_index_mutex;
-       struct meta_index       *meta_index;
--      z_stream                stream;
-+      void                    *stream;
-       __le64                  *inode_lookup_table;
-       u64                     inode_table;
-       u64                     directory_table;
---- a/fs/squashfs/super.c
-+++ b/fs/squashfs/super.c
-@@ -35,7 +35,6 @@
- #include <linux/pagemap.h>
- #include <linux/init.h>
- #include <linux/module.h>
--#include <linux/zlib.h>
- #include <linux/magic.h>
- #include "squashfs_fs.h"
-@@ -87,12 +86,9 @@ static int squashfs_fill_super(struct su
-       }
-       msblk = sb->s_fs_info;
--      msblk->stream.workspace = kmalloc(zlib_inflate_workspacesize(),
--              GFP_KERNEL);
--      if (msblk->stream.workspace == NULL) {
--              ERROR("Failed to allocate zlib workspace\n");
-+      msblk->stream = zlib_init();
-+      if (msblk->stream == NULL)
-               goto failure;
--      }
-       sblk = kzalloc(sizeof(*sblk), GFP_KERNEL);
-       if (sblk == NULL) {
-@@ -292,17 +288,17 @@ failed_mount:
-       squashfs_cache_delete(msblk->block_cache);
-       squashfs_cache_delete(msblk->fragment_cache);
-       squashfs_cache_delete(msblk->read_page);
-+      zlib_free(msblk->stream);
-       kfree(msblk->inode_lookup_table);
-       kfree(msblk->fragment_index);
-       kfree(msblk->id_table);
--      kfree(msblk->stream.workspace);
-       kfree(sb->s_fs_info);
-       sb->s_fs_info = NULL;
-       kfree(sblk);
-       return err;
- failure:
--      kfree(msblk->stream.workspace);
-+      zlib_free(msblk->stream);
-       kfree(sb->s_fs_info);
-       sb->s_fs_info = NULL;
-       return -ENOMEM;
-@@ -346,10 +342,10 @@ static void squashfs_put_super(struct su
-               squashfs_cache_delete(sbi->block_cache);
-               squashfs_cache_delete(sbi->fragment_cache);
-               squashfs_cache_delete(sbi->read_page);
-+              zlib_free(sbi->stream);
-               kfree(sbi->id_table);
-               kfree(sbi->fragment_index);
-               kfree(sbi->meta_index);
--              kfree(sbi->stream.workspace);
-               kfree(sb->s_fs_info);
-               sb->s_fs_info = NULL;
-       }
---- a/fs/squashfs/symlink.c
-+++ b/fs/squashfs/symlink.c
-@@ -36,7 +36,6 @@
- #include <linux/slab.h>
- #include <linux/string.h>
- #include <linux/pagemap.h>
--#include <linux/zlib.h>
- #include "squashfs_fs.h"
- #include "squashfs_fs_sb.h"
---- a/fs/squashfs/zlib_wrapper.c
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -31,21 +31,51 @@
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
-+void *zlib_init()
-+{
-+      z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
-+      if (stream == NULL)
-+              goto failed;
-+      stream->workspace = kmalloc(zlib_inflate_workspacesize(),
-+              GFP_KERNEL);
-+      if (stream->workspace == NULL)
-+              goto failed;
-+
-+      return stream;
-+
-+failed:
-+      ERROR("Failed to allocate zlib workspace\n");
-+      kfree(stream);
-+      return NULL;
-+}
-+
-+
-+void zlib_free(void *strm)
-+{
-+      z_stream *stream = strm;
-+
-+      if (stream)
-+              kfree(stream->workspace);
-+      kfree(stream);
-+}
-+
-+
- int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-       struct buffer_head **bh, int b, int offset, int length, int srclength,
-       int pages)
- {
-       int zlib_err = 0, zlib_init = 0;
-       int avail, bytes, k = 0, page = 0;
-+      z_stream *stream = msblk->stream;
-       mutex_lock(&msblk->read_data_mutex);
--      msblk->stream.avail_out = 0;
--      msblk->stream.avail_in = 0;
-+      stream->avail_out = 0;
-+      stream->avail_in = 0;
-       bytes = length;
-       do {
--              if (msblk->stream.avail_in == 0 && k < b) {
-+              if (stream->avail_in == 0 && k < b) {
-                       avail = min(bytes, msblk->devblksize - offset);
-                       bytes -= avail;
-                       wait_on_buffer(bh[k]);
-@@ -58,18 +88,18 @@ int zlib_uncompress(struct squashfs_sb_i
-                               continue;
-                       }
--                      msblk->stream.next_in = bh[k]->b_data + offset;
--                      msblk->stream.avail_in = avail;
-+                      stream->next_in = bh[k]->b_data + offset;
-+                      stream->avail_in = avail;
-                       offset = 0;
-               }
--              if (msblk->stream.avail_out == 0 && page < pages) {
--                      msblk->stream.next_out = buffer[page++];
--                      msblk->stream.avail_out = PAGE_CACHE_SIZE;
-+              if (stream->avail_out == 0 && page < pages) {
-+                      stream->next_out = buffer[page++];
-+                      stream->avail_out = PAGE_CACHE_SIZE;
-               }
-               if (!zlib_init) {
--                      zlib_err = zlib_inflateInit(&msblk->stream);
-+                      zlib_err = zlib_inflateInit(stream);
-                       if (zlib_err != Z_OK) {
-                               ERROR("zlib_inflateInit returned unexpected "
-                                       "result 0x%x, srclength %d\n",
-@@ -79,9 +109,9 @@ int zlib_uncompress(struct squashfs_sb_i
-                       zlib_init = 1;
-               }
--              zlib_err = zlib_inflate(&msblk->stream, Z_SYNC_FLUSH);
-+              zlib_err = zlib_inflate(stream, Z_SYNC_FLUSH);
--              if (msblk->stream.avail_in == 0 && k < b)
-+              if (stream->avail_in == 0 && k < b)
-                       put_bh(bh[k++]);
-       } while (zlib_err == Z_OK);
-@@ -90,14 +120,14 @@ int zlib_uncompress(struct squashfs_sb_i
-               goto release_mutex;
-       }
--      zlib_err = zlib_inflateEnd(&msblk->stream);
-+      zlib_err = zlib_inflateEnd(stream);
-       if (zlib_err != Z_OK) {
-               ERROR("zlib_inflate error, data probably corrupt\n");
-               goto release_mutex;
-       }
-       mutex_unlock(&msblk->read_data_mutex);
--      return msblk->stream.total_out;
-+      return stream->total_out;
- release_mutex:
-       mutex_unlock(&msblk->read_data_mutex);
diff --git a/target/linux/generic-2.6/patches-2.6.33/003-squashfs_add_decompressor_framework.patch b/target/linux/generic-2.6/patches-2.6.33/003-squashfs_add_decompressor_framework.patch
deleted file mode 100644 (file)
index fdf0d40..0000000
+++ /dev/null
@@ -1,426 +0,0 @@
-From 327fbf47a419befc6bff74f3ca42d2b6f0841903 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 6 Oct 2009 04:04:15 +0100
-Subject: [PATCH] Squashfs: add a decompressor framework
-
-This adds a decompressor framework which allows multiple compression
-algorithms to be cleanly supported.
-
-Also update zlib wrapper and other code to use the new framework.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Makefile         |    2 +-
- fs/squashfs/block.c          |    6 ++--
- fs/squashfs/decompressor.c   |   58 ++++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/decompressor.h   |   55 +++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h       |   14 +++++-----
- fs/squashfs/squashfs_fs_sb.h |   41 +++++++++++++++--------------
- fs/squashfs/super.c          |   45 ++++++++++++++++++-------------
- fs/squashfs/zlib_wrapper.c   |   17 ++++++++++--
- 8 files changed, 185 insertions(+), 53 deletions(-)
- create mode 100644 fs/squashfs/decompressor.c
- create mode 100644 fs/squashfs/decompressor.h
-
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -4,4 +4,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
--squashfs-y += namei.o super.o symlink.o zlib_wrapper.o
-+squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
---- a/fs/squashfs/block.c
-+++ b/fs/squashfs/block.c
-@@ -36,7 +36,7 @@
- #include "squashfs_fs_sb.h"
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
--
-+#include "decompressor.h"
- /*
-  * Read the metadata block length, this is stored in the first two
-  * bytes of the metadata block.
-@@ -151,8 +151,8 @@ int squashfs_read_data(struct super_bloc
-       }
-       if (compressed) {
--              length = zlib_uncompress(msblk, buffer, bh, b, offset, length,
--                      srclength, pages);
-+              length = squashfs_decompress(msblk, buffer, bh, b, offset,
-+                      length, srclength, pages);
-               if (length < 0)
-                       goto read_failure;
-       } else {
---- /dev/null
-+++ b/fs/squashfs/decompressor.c
-@@ -0,0 +1,58 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * decompressor.c
-+ */
-+
-+#include <linux/types.h>
-+#include <linux/mutex.h>
-+#include <linux/buffer_head.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "decompressor.h"
-+#include "squashfs.h"
-+
-+/*
-+ * This file (and decompressor.h) implements a decompressor framework for
-+ * Squashfs, allowing multiple decompressors to be easily supported
-+ */
-+
-+static const struct squashfs_decompressor squashfs_unknown_comp_ops = {
-+      NULL, NULL, NULL, 0, "unknown", 0
-+};
-+
-+static const struct squashfs_decompressor *decompressor[] = {
-+      &squashfs_zlib_comp_ops,
-+      &squashfs_unknown_comp_ops
-+};
-+
-+
-+const struct squashfs_decompressor *squashfs_lookup_decompressor(int id)
-+{
-+      int i;
-+
-+      for (i = 0; decompressor[i]->id; i++)
-+              if (id == decompressor[i]->id)
-+                      break;
-+
-+      return decompressor[i];
-+}
---- /dev/null
-+++ b/fs/squashfs/decompressor.h
-@@ -0,0 +1,55 @@
-+#ifndef DECOMPRESSOR_H
-+#define DECOMPRESSOR_H
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * decompressor.h
-+ */
-+
-+struct squashfs_decompressor {
-+      void    *(*init)(void);
-+      void    (*free)(void *);
-+      int     (*decompress)(struct squashfs_sb_info *, void **,
-+              struct buffer_head **, int, int, int, int, int);
-+      int     id;
-+      char    *name;
-+      int     supported;
-+};
-+
-+static inline void *squashfs_decompressor_init(struct squashfs_sb_info *msblk)
-+{
-+      return msblk->decompressor->init();
-+}
-+
-+static inline void squashfs_decompressor_free(struct squashfs_sb_info *msblk,
-+      void *s)
-+{
-+      if (msblk->decompressor)
-+              msblk->decompressor->free(s);
-+}
-+
-+static inline int squashfs_decompress(struct squashfs_sb_info *msblk,
-+      void **buffer, struct buffer_head **bh, int b, int offset, int length,
-+      int srclength, int pages)
-+{
-+      return msblk->decompressor->decompress(msblk, buffer, bh, b, offset,
-+              length, srclength, pages);
-+}
-+#endif
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -51,6 +51,9 @@ extern struct squashfs_cache_entry *squa
-                               u64, int);
- extern int squashfs_read_table(struct super_block *, void *, u64, int);
-+/* decompressor.c */
-+extern const struct squashfs_decompressor *squashfs_lookup_decompressor(int);
-+
- /* export.c */
- extern __le64 *squashfs_read_inode_lookup_table(struct super_block *, u64,
-                               unsigned int);
-@@ -70,14 +73,8 @@ extern struct inode *squashfs_iget(struc
-                               unsigned int);
- extern int squashfs_read_inode(struct inode *, long long);
--/* zlib_wrapper.c */
--extern void *zlib_init(void);
--extern void zlib_free(void *);
--extern int zlib_uncompress(struct squashfs_sb_info *, void **,
--                              struct buffer_head **, int, int, int, int, int);
--
- /*
-- * Inodes and files operations
-+ * Inodes, files and decompressor operations
-  */
- /* dir.c */
-@@ -94,3 +91,6 @@ extern const struct inode_operations squ
- /* symlink.c */
- extern const struct address_space_operations squashfs_symlink_aops;
-+
-+/* zlib_wrapper.c */
-+extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
---- a/fs/squashfs/squashfs_fs_sb.h
-+++ b/fs/squashfs/squashfs_fs_sb.h
-@@ -52,25 +52,26 @@ struct squashfs_cache_entry {
- };
- struct squashfs_sb_info {
--      int                     devblksize;
--      int                     devblksize_log2;
--      struct squashfs_cache   *block_cache;
--      struct squashfs_cache   *fragment_cache;
--      struct squashfs_cache   *read_page;
--      int                     next_meta_index;
--      __le64                  *id_table;
--      __le64                  *fragment_index;
--      unsigned int            *fragment_index_2;
--      struct mutex            read_data_mutex;
--      struct mutex            meta_index_mutex;
--      struct meta_index       *meta_index;
--      void                    *stream;
--      __le64                  *inode_lookup_table;
--      u64                     inode_table;
--      u64                     directory_table;
--      unsigned int            block_size;
--      unsigned short          block_log;
--      long long               bytes_used;
--      unsigned int            inodes;
-+      const struct squashfs_decompressor      *decompressor;
-+      int                                     devblksize;
-+      int                                     devblksize_log2;
-+      struct squashfs_cache                   *block_cache;
-+      struct squashfs_cache                   *fragment_cache;
-+      struct squashfs_cache                   *read_page;
-+      int                                     next_meta_index;
-+      __le64                                  *id_table;
-+      __le64                                  *fragment_index;
-+      unsigned int                            *fragment_index_2;
-+      struct mutex                            read_data_mutex;
-+      struct mutex                            meta_index_mutex;
-+      struct meta_index                       *meta_index;
-+      void                                    *stream;
-+      __le64                                  *inode_lookup_table;
-+      u64                                     inode_table;
-+      u64                                     directory_table;
-+      unsigned int                            block_size;
-+      unsigned short                          block_log;
-+      long long                               bytes_used;
-+      unsigned int                            inodes;
- };
- #endif
---- a/fs/squashfs/super.c
-+++ b/fs/squashfs/super.c
-@@ -41,27 +41,35 @@
- #include "squashfs_fs_sb.h"
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
-+#include "decompressor.h"
- static struct file_system_type squashfs_fs_type;
- static const struct super_operations squashfs_super_ops;
--static int supported_squashfs_filesystem(short major, short minor, short comp)
-+static const struct squashfs_decompressor *supported_squashfs_filesystem(short
-+      major, short minor, short id)
- {
-+      const struct squashfs_decompressor *decompressor;
-+
-       if (major < SQUASHFS_MAJOR) {
-               ERROR("Major/Minor mismatch, older Squashfs %d.%d "
-                       "filesystems are unsupported\n", major, minor);
--              return -EINVAL;
-+              return NULL;
-       } else if (major > SQUASHFS_MAJOR || minor > SQUASHFS_MINOR) {
-               ERROR("Major/Minor mismatch, trying to mount newer "
-                       "%d.%d filesystem\n", major, minor);
-               ERROR("Please update your kernel\n");
--              return -EINVAL;
-+              return NULL;
-       }
--      if (comp != ZLIB_COMPRESSION)
--              return -EINVAL;
-+      decompressor = squashfs_lookup_decompressor(id);
-+      if (!decompressor->supported) {
-+              ERROR("Filesystem uses \"%s\" compression. This is not "
-+                      "supported\n", decompressor->name);
-+              return NULL;
-+      }
--      return 0;
-+      return decompressor;
- }
-@@ -86,10 +94,6 @@ static int squashfs_fill_super(struct su
-       }
-       msblk = sb->s_fs_info;
--      msblk->stream = zlib_init();
--      if (msblk->stream == NULL)
--              goto failure;
--
-       sblk = kzalloc(sizeof(*sblk), GFP_KERNEL);
-       if (sblk == NULL) {
-               ERROR("Failed to allocate squashfs_super_block\n");
-@@ -116,25 +120,25 @@ static int squashfs_fill_super(struct su
-               goto failed_mount;
-       }
-+      err = -EINVAL;
-+
-       /* Check it is a SQUASHFS superblock */
-       sb->s_magic = le32_to_cpu(sblk->s_magic);
-       if (sb->s_magic != SQUASHFS_MAGIC) {
-               if (!silent)
-                       ERROR("Can't find a SQUASHFS superblock on %s\n",
-                                               bdevname(sb->s_bdev, b));
--              err = -EINVAL;
-               goto failed_mount;
-       }
--      /* Check the MAJOR & MINOR versions and compression type */
--      err = supported_squashfs_filesystem(le16_to_cpu(sblk->s_major),
-+      /* Check the MAJOR & MINOR versions and lookup compression type */
-+      msblk->decompressor = supported_squashfs_filesystem(
-+                      le16_to_cpu(sblk->s_major),
-                       le16_to_cpu(sblk->s_minor),
-                       le16_to_cpu(sblk->compression));
--      if (err < 0)
-+      if (msblk->decompressor == NULL)
-               goto failed_mount;
--      err = -EINVAL;
--
-       /*
-        * Check if there's xattrs in the filesystem.  These are not
-        * supported in this version, so warn that they will be ignored.
-@@ -201,6 +205,10 @@ static int squashfs_fill_super(struct su
-       err = -ENOMEM;
-+      msblk->stream = squashfs_decompressor_init(msblk);
-+      if (msblk->stream == NULL)
-+              goto failed_mount;
-+
-       msblk->block_cache = squashfs_cache_init("metadata",
-                       SQUASHFS_CACHED_BLKS, SQUASHFS_METADATA_SIZE);
-       if (msblk->block_cache == NULL)
-@@ -288,7 +296,7 @@ failed_mount:
-       squashfs_cache_delete(msblk->block_cache);
-       squashfs_cache_delete(msblk->fragment_cache);
-       squashfs_cache_delete(msblk->read_page);
--      zlib_free(msblk->stream);
-+      squashfs_decompressor_free(msblk, msblk->stream);
-       kfree(msblk->inode_lookup_table);
-       kfree(msblk->fragment_index);
-       kfree(msblk->id_table);
-@@ -298,7 +306,6 @@ failed_mount:
-       return err;
- failure:
--      zlib_free(msblk->stream);
-       kfree(sb->s_fs_info);
-       sb->s_fs_info = NULL;
-       return -ENOMEM;
-@@ -342,7 +349,7 @@ static void squashfs_put_super(struct su
-               squashfs_cache_delete(sbi->block_cache);
-               squashfs_cache_delete(sbi->fragment_cache);
-               squashfs_cache_delete(sbi->read_page);
--              zlib_free(sbi->stream);
-+              squashfs_decompressor_free(sbi, sbi->stream);
-               kfree(sbi->id_table);
-               kfree(sbi->fragment_index);
-               kfree(sbi->meta_index);
---- a/fs/squashfs/zlib_wrapper.c
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -30,8 +30,9 @@
- #include "squashfs_fs_sb.h"
- #include "squashfs_fs_i.h"
- #include "squashfs.h"
-+#include "decompressor.h"
--void *zlib_init()
-+static void *zlib_init(void)
- {
-       z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
-       if (stream == NULL)
-@@ -50,7 +51,7 @@ failed:
- }
--void zlib_free(void *strm)
-+static void zlib_free(void *strm)
- {
-       z_stream *stream = strm;
-@@ -60,7 +61,7 @@ void zlib_free(void *strm)
- }
--int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+static int zlib_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-       struct buffer_head **bh, int b, int offset, int length, int srclength,
-       int pages)
- {
-@@ -137,3 +138,13 @@ release_mutex:
-       return -EIO;
- }
-+
-+const struct squashfs_decompressor squashfs_zlib_comp_ops = {
-+      .init = zlib_init,
-+      .free = zlib_free,
-+      .decompress = zlib_uncompress,
-+      .id = ZLIB_COMPRESSION,
-+      .name = "zlib",
-+      .supported = 1
-+};
-+
diff --git a/target/linux/generic-2.6/patches-2.6.33/004-squashfs_add_decompressor_lzma_lzo.patch b/target/linux/generic-2.6/patches-2.6.33/004-squashfs_add_decompressor_lzma_lzo.patch
deleted file mode 100644 (file)
index a378c00..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-From 1885ca0a1973944684f252094a703b7c80dfc974 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Wed, 14 Oct 2009 03:58:11 +0100
-Subject: [PATCH] Squashfs: add decompressor entries for lzma and lzo
-
-Add knowledge of lzma/lzo compression formats to the decompressor
-framework.  For now these are added as unsupported.  Without
-these entries lzma/lzo compressed filesystems will be flagged as
-having unknown compression which is undesirable.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/decompressor.c |   10 ++++++++++
- fs/squashfs/squashfs_fs.h  |    4 +++-
- 2 files changed, 13 insertions(+), 1 deletions(-)
-
---- a/fs/squashfs/decompressor.c
-+++ b/fs/squashfs/decompressor.c
-@@ -36,12 +36,22 @@
-  * Squashfs, allowing multiple decompressors to be easily supported
-  */
-+static const struct squashfs_decompressor squashfs_lzma_unsupported_comp_ops = {
-+      NULL, NULL, NULL, LZMA_COMPRESSION, "lzma", 0
-+};
-+
-+static const struct squashfs_decompressor squashfs_lzo_unsupported_comp_ops = {
-+      NULL, NULL, NULL, LZO_COMPRESSION, "lzo", 0
-+};
-+
- static const struct squashfs_decompressor squashfs_unknown_comp_ops = {
-       NULL, NULL, NULL, 0, "unknown", 0
- };
- static const struct squashfs_decompressor *decompressor[] = {
-       &squashfs_zlib_comp_ops,
-+      &squashfs_lzma_unsupported_comp_ops,
-+      &squashfs_lzo_unsupported_comp_ops,
-       &squashfs_unknown_comp_ops
- };
---- a/fs/squashfs/squashfs_fs.h
-+++ b/fs/squashfs/squashfs_fs.h
-@@ -211,7 +211,9 @@ struct meta_index {
- /*
-  * definitions for structures on disk
-  */
--#define ZLIB_COMPRESSION       1
-+#define ZLIB_COMPRESSION      1
-+#define LZMA_COMPRESSION      2
-+#define LZO_COMPRESSION               3
- struct squashfs_super_block {
-       __le32                  s_magic;
diff --git a/target/linux/generic-2.6/patches-2.6.33/005-squashfs_extra_parameter.patch b/target/linux/generic-2.6/patches-2.6.33/005-squashfs_extra_parameter.patch
deleted file mode 100644 (file)
index 0991681..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-From 5f393ede3ddb5dd4cc2a9f243182fac45f1ce10b Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Wed, 14 Oct 2009 04:07:54 +0100
-Subject: [PATCH] Squashfs: add an extra parameter to the decompressor init function
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/decompressor.h |    4 ++--
- fs/squashfs/zlib_wrapper.c |    2 +-
- 2 files changed, 3 insertions(+), 3 deletions(-)
-
---- a/fs/squashfs/decompressor.h
-+++ b/fs/squashfs/decompressor.h
-@@ -24,7 +24,7 @@
-  */
- struct squashfs_decompressor {
--      void    *(*init)(void);
-+      void    *(*init)(struct squashfs_sb_info *);
-       void    (*free)(void *);
-       int     (*decompress)(struct squashfs_sb_info *, void **,
-               struct buffer_head **, int, int, int, int, int);
-@@ -35,7 +35,7 @@ struct squashfs_decompressor {
- static inline void *squashfs_decompressor_init(struct squashfs_sb_info *msblk)
- {
--      return msblk->decompressor->init();
-+      return msblk->decompressor->init(msblk);
- }
- static inline void squashfs_decompressor_free(struct squashfs_sb_info *msblk,
---- a/fs/squashfs/zlib_wrapper.c
-+++ b/fs/squashfs/zlib_wrapper.c
-@@ -32,7 +32,7 @@
- #include "squashfs.h"
- #include "decompressor.h"
--static void *zlib_init(void)
-+static void *zlib_init(struct squashfs_sb_info *dummy)
- {
-       z_stream *stream = kmalloc(sizeof(z_stream), GFP_KERNEL);
-       if (stream == NULL)
diff --git a/target/linux/generic-2.6/patches-2.6.33/006-squashfs_add_lzma.patch b/target/linux/generic-2.6/patches-2.6.33/006-squashfs_add_lzma.patch
deleted file mode 100644 (file)
index 9fd5797..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-From f49e1efdd179d54e814ff2a8e8f469496583062c Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 20 Oct 2009 10:54:36 +0100
-Subject: [PATCH] Squashfs: add LZMA compression
-
-Add support for LZMA compressed filesystems.  This is an initial
-implementation.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Kconfig        |    5 ++
- fs/squashfs/Makefile       |    1 +
- fs/squashfs/decompressor.c |    4 +
- fs/squashfs/lzma_wrapper.c |  151 ++++++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h     |    3 +
- 5 files changed, 164 insertions(+), 0 deletions(-)
- create mode 100644 fs/squashfs/lzma_wrapper.c
-
---- a/fs/squashfs/Kconfig
-+++ b/fs/squashfs/Kconfig
-@@ -26,6 +26,11 @@ config SQUASHFS
-         If unsure, say N.
-+config SQUASHFS_LZMA
-+      bool "Include support for LZMA compressed file systems"
-+      depends on SQUASHFS
-+      select DECOMPRESS_LZMA
-+
- config SQUASHFS_EMBEDDED
-       bool "Additional option for memory-constrained systems" 
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -5,3 +5,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
- squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
-+squashfs-$(CONFIG_SQUASHFS_LZMA) += lzma_wrapper.o
---- a/fs/squashfs/decompressor.c
-+++ b/fs/squashfs/decompressor.c
-@@ -50,7 +50,11 @@ static const struct squashfs_decompresso
- static const struct squashfs_decompressor *decompressor[] = {
-       &squashfs_zlib_comp_ops,
-+#ifdef CONFIG_SQUASHFS_LZMA
-+      &squashfs_lzma_comp_ops,
-+#else
-       &squashfs_lzma_unsupported_comp_ops,
-+#endif
-       &squashfs_lzo_unsupported_comp_ops,
-       &squashfs_unknown_comp_ops
- };
---- /dev/null
-+++ b/fs/squashfs/lzma_wrapper.c
-@@ -0,0 +1,151 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * lzma_wrapper.c
-+ */
-+
-+#include <asm/unaligned.h>
-+#include <linux/buffer_head.h>
-+#include <linux/mutex.h>
-+#include <linux/vmalloc.h>
-+#include <linux/decompress/unlzma.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "squashfs.h"
-+#include "decompressor.h"
-+
-+struct squashfs_lzma {
-+      void    *input;
-+      void    *output;
-+};
-+
-+/* decompress_unlzma.c is currently non re-entrant... */
-+DEFINE_MUTEX(lzma_mutex);
-+
-+/* decompress_unlzma.c doesn't provide any context in its callbacks... */
-+static int lzma_error;
-+
-+static void error(char *m)
-+{
-+      ERROR("unlzma error: %s\n", m);
-+      lzma_error = 1;
-+}
-+
-+      
-+static void *lzma_init(struct squashfs_sb_info *msblk)
-+{
-+      struct squashfs_lzma *stream = kzalloc(sizeof(*stream), GFP_KERNEL);
-+      if (stream == NULL)
-+              goto failed;
-+      stream->input = vmalloc(msblk->block_size);
-+      if (stream->input == NULL)
-+              goto failed;
-+      stream->output = vmalloc(msblk->block_size);
-+      if (stream->output == NULL)
-+              goto failed2;
-+
-+      return stream;
-+
-+failed2:
-+      vfree(stream->input);
-+failed:
-+      ERROR("failed to allocate lzma workspace\n");
-+      kfree(stream);
-+      return NULL;
-+}
-+
-+
-+static void lzma_free(void *strm)
-+{
-+      struct squashfs_lzma *stream = strm;
-+
-+      if (stream) {
-+              vfree(stream->input);
-+              vfree(stream->output);
-+      }
-+      kfree(stream);
-+}
-+
-+
-+static int lzma_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+      struct buffer_head **bh, int b, int offset, int length, int srclength,
-+      int pages)
-+{
-+      struct squashfs_lzma *stream = msblk->stream;
-+      void *buff = stream->input;
-+      int avail, i, bytes = length, res;
-+
-+      mutex_lock(&lzma_mutex);
-+
-+      for (i = 0; i < b; i++) {
-+              wait_on_buffer(bh[i]);
-+              if (!buffer_uptodate(bh[i]))
-+                      goto block_release;
-+
-+              avail = min(bytes, msblk->devblksize - offset);
-+              memcpy(buff, bh[i]->b_data + offset, avail);
-+              buff += avail;
-+              bytes -= avail;
-+              offset = 0;
-+              put_bh(bh[i]);
-+      }
-+
-+      lzma_error = 0;
-+      res = unlzma(stream->input, length, NULL, NULL, stream->output, NULL,
-+                                                      error);
-+      if (res || lzma_error)
-+              goto failed;
-+
-+      /* uncompressed size is stored in the LZMA header (5 byte offset) */
-+      res = bytes = get_unaligned_le32(stream->input + 5);
-+      for (i = 0, buff = stream->output; bytes && i < pages; i++) {
-+              avail = min_t(int, bytes, PAGE_CACHE_SIZE);
-+              memcpy(buffer[i], buff, avail);
-+              buff += avail;
-+              bytes -= avail;
-+      }
-+      if (bytes)
-+              goto failed;
-+
-+      mutex_unlock(&lzma_mutex);
-+      return res;
-+
-+block_release:
-+      for (; i < b; i++)
-+              put_bh(bh[i]);
-+
-+failed:
-+      mutex_unlock(&lzma_mutex);
-+
-+      ERROR("lzma decompression failed, data probably corrupt\n");
-+      return -EIO;
-+}
-+
-+const struct squashfs_decompressor squashfs_lzma_comp_ops = {
-+      .init = lzma_init,
-+      .free = lzma_free,
-+      .decompress = lzma_uncompress,
-+      .id = LZMA_COMPRESSION,
-+      .name = "lzma",
-+      .supported = 1
-+};
-+
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -94,3 +94,6 @@ extern const struct address_space_operat
- /* zlib_wrapper.c */
- extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
-+
-+/* lzma wrapper.c */
-+extern const struct squashfs_decompressor squashfs_lzma_comp_ops;
diff --git a/target/linux/generic-2.6/patches-2.6.33/007-squashfs_make_lzma_available.patch b/target/linux/generic-2.6/patches-2.6.33/007-squashfs_make_lzma_available.patch
deleted file mode 100644 (file)
index 9c57d94..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-From fdf23ed283bc6ef5c25076ce2065f892120ff556 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Thu, 22 Oct 2009 04:57:38 +0100
-Subject: [PATCH] Squashfs: Make unlzma available to non initramfs/initrd code
-
-Add a config option DECOMPRESS_LZMA_NEEDED which allows subsystems to
-specify they need the unlzma code.  Normally decompress_unlzma.c is
-compiled with __init and unlzma is not exported to modules.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Kconfig                   |    1 +
- include/linux/decompress/bunzip2_mm.h |   12 ++++++++++++
- include/linux/decompress/inflate_mm.h |   12 ++++++++++++
- include/linux/decompress/mm.h         |    3 ---
- include/linux/decompress/unlzma_mm.h  |   20 ++++++++++++++++++++
- lib/Kconfig                           |    3 +++
- lib/decompress_bunzip2.c              |    1 +
- lib/decompress_inflate.c              |    1 +
- lib/decompress_unlzma.c               |    5 ++++-
- 9 files changed, 54 insertions(+), 4 deletions(-)
- create mode 100644 include/linux/decompress/bunzip2_mm.h
- create mode 100644 include/linux/decompress/inflate_mm.h
- create mode 100644 include/linux/decompress/unlzma_mm.h
-
---- a/fs/squashfs/Kconfig
-+++ b/fs/squashfs/Kconfig
-@@ -30,6 +30,7 @@ config SQUASHFS_LZMA
-       bool "Include support for LZMA compressed file systems"
-       depends on SQUASHFS
-       select DECOMPRESS_LZMA
-+      select DECOMPRESS_LZMA_NEEDED
- config SQUASHFS_EMBEDDED
---- /dev/null
-+++ b/include/linux/decompress/bunzip2_mm.h
-@@ -0,0 +1,12 @@
-+#ifndef BUNZIP2_MM_H
-+#define BUNZIP2_MM_H
-+
-+#ifdef STATIC
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+#else
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- /dev/null
-+++ b/include/linux/decompress/inflate_mm.h
-@@ -0,0 +1,12 @@
-+#ifndef INFLATE_MM_H
-+#define INFLATE_MM_H
-+
-+#ifdef STATIC
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+#else
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- a/include/linux/decompress/mm.h
-+++ b/include/linux/decompress/mm.h
-@@ -53,8 +53,6 @@ static void free(void *where)
- #define set_error_fn(x)
--#define INIT
--
- #else /* STATIC */
- /* Code active when compiled standalone for use when loading ramdisk: */
-@@ -77,7 +75,6 @@ static void free(void *where)
- static void(*error)(char *m);
- #define set_error_fn(x) error = x;
--#define INIT __init
- #define STATIC
- #include <linux/init.h>
---- /dev/null
-+++ b/include/linux/decompress/unlzma_mm.h
-@@ -0,0 +1,20 @@
-+#ifndef UNLZMA_MM_H
-+#define UNLZMA_MM_H
-+
-+#ifdef STATIC
-+
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+
-+#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
-+
-+/* Make it available to non initramfs/initrd code */
-+#define INIT
-+#include <linux/module.h>
-+#else
-+
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -121,6 +121,9 @@ config DECOMPRESS_LZO
-       select LZO_DECOMPRESS
-       tristate
-+config DECOMPRESS_LZMA_NEEDED
-+       boolean
-+
- #
- # Generic allocator support is selected if needed
- #
---- a/lib/decompress_bunzip2.c
-+++ b/lib/decompress_bunzip2.c
-@@ -52,6 +52,7 @@
- #include <linux/slab.h>
- #endif /* STATIC */
-+#include <linux/decompress/bunzip2_mm.h>
- #include <linux/decompress/mm.h>
- #ifndef INT_MAX
---- a/lib/decompress_inflate.c
-+++ b/lib/decompress_inflate.c
-@@ -23,6 +23,7 @@
- #endif /* STATIC */
-+#include <linux/decompress/inflate_mm.h>
- #include <linux/decompress/mm.h>
- #define GZIP_IOBUF_SIZE (16*1024)
---- a/lib/decompress_unlzma.c
-+++ b/lib/decompress_unlzma.c
-@@ -36,6 +36,7 @@
- #include <linux/slab.h>
- #endif /* STATIC */
-+#include <linux/decompress/unlzma_mm.h>
- #include <linux/decompress/mm.h>
- #define       MIN(a, b) (((a) < (b)) ? (a) : (b))
-@@ -531,7 +532,7 @@ static inline void INIT process_bit1(str
--STATIC inline int INIT unlzma(unsigned char *buf, int in_len,
-+STATIC int INIT unlzma(unsigned char *buf, int in_len,
-                             int(*fill)(void*, unsigned int),
-                             int(*flush)(void*, unsigned int),
-                             unsigned char *output,
-@@ -664,4 +665,6 @@ STATIC int INIT decompress(unsigned char
- {
-       return unlzma(buf, in_len - 4, fill, flush, output, posp, error_fn);
- }
-+#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
-+EXPORT_SYMBOL(unlzma);
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.33/011-mips_boot.patch b/target/linux/generic-2.6/patches-2.6.33/011-mips_boot.patch
deleted file mode 100644 (file)
index c2a043a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -121,6 +121,8 @@
- #endif
-       .endm
-+      j kernel_entry
-+      nop
- #ifndef CONFIG_NO_EXCEPT_FILL
-       /*
-        * Reserved space for exception handlers.
diff --git a/target/linux/generic-2.6/patches-2.6.33/012-extra_optimization.patch b/target/linux/generic-2.6/patches-2.6.33/012-extra_optimization.patch
deleted file mode 100644 (file)
index 0b5174c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/Makefile
-+++ b/Makefile
-@@ -529,7 +529,7 @@ all: vmlinux
- ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- KBUILD_CFLAGS += -Os
- else
--KBUILD_CFLAGS += -O2
-+KBUILD_CFLAGS += -O2 -fno-reorder-blocks -fno-tree-ch
- endif
- include $(srctree)/arch/$(SRCARCH)/Makefile
-@@ -567,6 +567,9 @@ endif
- NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
- CHECKFLAGS     += $(NOSTDINC_FLAGS)
-+# improve gcc optimization
-+CFLAGS += $(call cc-option,-funit-at-a-time,)
-+
- # warn about C99 declaration after statement
- KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
diff --git a/target/linux/generic-2.6/patches-2.6.33/013-gcc4_inline_fix.patch b/target/linux/generic-2.6/patches-2.6.33/013-gcc4_inline_fix.patch
deleted file mode 100644 (file)
index 77ab405..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/include/asm/system.h
-+++ b/arch/mips/include/asm/system.h
-@@ -194,7 +194,7 @@ extern __u64 __xchg_u64_unsupported_on_3
- #define __xchg_u64 __xchg_u64_unsupported_on_32bit_kernels
- #endif
--static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
-+static __always_inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
- {
-       switch (size) {
-       case 4:
diff --git a/target/linux/generic-2.6/patches-2.6.33/014-samsung_flash b/target/linux/generic-2.6/patches-2.6.33/014-samsung_flash
deleted file mode 100644 (file)
index 1faeb41..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -51,6 +51,7 @@
- #define SST49LF040B           0x0050
- #define SST49LF008A           0x005a
- #define AT49BV6416            0x00d6
-+#define MANUFACTURER_SAMSUNG  0x00ec
- static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
- static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-@@ -375,12 +376,19 @@ struct mtd_info *cfi_cmdset_0002(struct 
-               if (extp->MajorVersion != '1' ||
-                   (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
--                      printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
--                             "version %c.%c.\n",  extp->MajorVersion,
--                             extp->MinorVersion);
--                      kfree(extp);
--                      kfree(mtd);
--                      return NULL;
-+                      if (cfi->mfr == MANUFACTURER_SAMSUNG &&
-+                          (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
-+                          printk(KERN_NOTICE "  Newer Samsung flash detected, "
-+                                 "should be compatibile with Amd/Fujitsu.\n");
-+                      }
-+                      else {
-+                          printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
-+                                 "version %c.%c.\n",  extp->MajorVersion,
-+                                 extp->MinorVersion);
-+                          kfree(extp);
-+                          kfree(mtd);
-+                          return NULL;
-+                      }
-               }
-               /* Install our own private info structure */
diff --git a/target/linux/generic-2.6/patches-2.6.33/020-mips_multi_machine_support.patch b/target/linux/generic-2.6/patches-2.6.33/020-mips_multi_machine_support.patch
deleted file mode 100644 (file)
index 82cfb52..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
---- /dev/null
-+++ b/arch/mips/include/asm/mips_machine.h
-@@ -0,0 +1,47 @@
-+/*
-+ *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  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.
-+ *
-+ */
-+
-+#ifndef __ASM_MIPS_MACHINE_H
-+#define __ASM_MIPS_MACHINE_H
-+
-+#include <linux/init.h>
-+#include <linux/list.h>
-+
-+struct mips_machine {
-+      unsigned long           mach_type;
-+      void                    (*mach_setup)(void);
-+      char                    *mach_name;
-+      struct list_head        list;
-+};
-+
-+void mips_machine_register(struct mips_machine *) __init;
-+void mips_machine_setup(unsigned long machtype) __init;
-+void mips_machine_set_name(char *name) __init;
-+
-+extern char *mips_machine_name;
-+
-+#define MIPS_MACHINE(_type, _name, _setup)                    \
-+static char machine_name_##_type[] __initdata = _name;                \
-+static struct mips_machine machine_##_type __initdata =               \
-+{                                                             \
-+      .mach_type      = _type,                                \
-+      .mach_name      = machine_name_##_type,                 \
-+      .mach_setup     = _setup,                               \
-+};                                                            \
-+                                                              \
-+static int __init register_machine_##_type(void)              \
-+{                                                             \
-+      mips_machine_register(&machine_##_type);                \
-+      return 0;                                               \
-+}                                                             \
-+                                                              \
-+pure_initcall(register_machine_##_type)
-+
-+#endif /* __ASM_MIPS_MACHINE_H */
-+
---- /dev/null
-+++ b/arch/mips/kernel/mips_machine.c
-@@ -0,0 +1,74 @@
-+/*
-+ *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  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/mm.h>
-+
-+#include <asm/mips_machine.h>
-+#include <asm/bootinfo.h>
-+
-+static struct list_head mips_machines __initdata =
-+              LIST_HEAD_INIT(mips_machines);
-+
-+char *mips_machine_name = "Unknown";
-+
-+static struct mips_machine * __init mips_machine_find(unsigned long machtype)
-+{
-+      struct list_head *this;
-+
-+      list_for_each(this, &mips_machines) {
-+              struct mips_machine *mach;
-+
-+              mach = list_entry(this, struct mips_machine, list);
-+              if (mach->mach_type == machtype)
-+                      return mach;
-+      }
-+
-+      return NULL;
-+}
-+
-+void __init mips_machine_register(struct mips_machine *mach)
-+{
-+      list_add_tail(&mach->list, &mips_machines);
-+}
-+
-+void __init mips_machine_set_name(char *name)
-+{
-+      unsigned int len;
-+      char *p;
-+
-+      if (name == NULL)
-+              return;
-+
-+      len = strlen(name);
-+      p = kmalloc(len + 1, GFP_KERNEL);
-+      if (p) {
-+              strncpy(p, name, len);
-+              p[len] = '\0';
-+              mips_machine_name = p;
-+      } else {
-+              printk(KERN_WARNING "MIPS: no memory for machine_name\n");
-+      }
-+}
-+
-+void __init mips_machine_setup(unsigned long machtype)
-+{
-+      struct mips_machine *mach;
-+
-+      mach = mips_machine_find(machtype);
-+      if (!mach) {
-+              printk(KERN_ALERT "MIPS: no machine registered for "
-+                      "machtype %lu\n", machtype);
-+              return;
-+      }
-+
-+      mips_machine_set_name(mach->mach_name);
-+      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
-+
-+      if (mach->mach_setup)
-+              mach->mach_setup();
-+}
---- a/arch/mips/kernel/Makefile
-+++ b/arch/mips/kernel/Makefile
-@@ -93,6 +93,7 @@ obj-$(CONFIG_GPIO_TXX9)              += gpio_txx9.o
- obj-$(CONFIG_KEXEC)           += machine_kexec.o relocate_kernel.o
- obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
-+obj-$(CONFIG_MIPS_MACHINE)    += mips_machine.o
- CFLAGS_cpu-bugs64.o   = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -851,6 +851,9 @@ config MIPS_DISABLE_OBSOLETE_IDE
- config SYNC_R4K
-       bool
-+config MIPS_MACHINE
-+      def_bool n
-+
- config NO_IOPORT
-       def_bool n
---- a/arch/mips/kernel/proc.c
-+++ b/arch/mips/kernel/proc.c
-@@ -12,6 +12,7 @@
- #include <asm/cpu-features.h>
- #include <asm/mipsregs.h>
- #include <asm/processor.h>
-+#include <asm/mips_machine.h>
- unsigned int vced_count, vcei_count;
-@@ -31,8 +32,12 @@ static int show_cpuinfo(struct seq_file 
-       /*
-        * For the first processor also print the system type
-        */
--      if (n == 0)
-+      if (n == 0) {
-               seq_printf(m, "system type\t\t: %s\n", get_system_type());
-+#ifdef CONFIG_MIPS_MACHINE
-+              seq_printf(m, "machine\t\t\t: %s\n", mips_machine_name);
-+#endif
-+      }
-       seq_printf(m, "processor\t\t: %ld\n", n);
-       sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n",
diff --git a/target/linux/generic-2.6/patches-2.6.33/021-mips_image_cmdline_hack.patch b/target/linux/generic-2.6/patches-2.6.33/021-mips_image_cmdline_hack.patch
deleted file mode 100644 (file)
index 00de8d5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -854,6 +854,10 @@ config SYNC_R4K
- config MIPS_MACHINE
-       def_bool n
-+config IMAGE_CMDLINE_HACK
-+      bool "OpenWrt specific image command line hack"
-+      default n
-+
- config NO_IOPORT
-       def_bool n
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -143,6 +143,12 @@ FEXPORT(__kernel_entry)
-       j       kernel_entry
- #endif
-+#ifdef CONFIG_IMAGE_CMDLINE_HACK
-+      .ascii  "CMDLINE:"
-+EXPORT(__image_cmdline)
-+      .fill   0x400
-+#endif /* CONFIG_IMAGE_CMDLINE_HACK */
-+
-       __REF
- NESTED(kernel_entry, 16, sp)                  # kernel entry point
diff --git a/target/linux/generic-2.6/patches-2.6.33/022-mips_use_generic_thread_info_allocator.patch b/target/linux/generic-2.6/patches-2.6.33/022-mips_use_generic_thread_info_allocator.patch
deleted file mode 100644 (file)
index 786afd1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/arch/mips/include/asm/thread_info.h
-+++ b/arch/mips/include/asm/thread_info.h
-@@ -83,6 +83,7 @@ register struct thread_info *__current_t
- #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
- #define THREAD_MASK (THREAD_SIZE - 1UL)
-+#if 0
- #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
- #ifdef CONFIG_DEBUG_STACK_USAGE
-@@ -92,6 +93,7 @@ register struct thread_info *__current_t
- #endif
- #define free_thread_info(info) kfree(info)
-+#endif
- #endif /* !__ASSEMBLY__ */
diff --git a/target/linux/generic-2.6/patches-2.6.33/025-mips_disable_fpu.patch b/target/linux/generic-2.6/patches-2.6.33/025-mips_disable_fpu.patch
deleted file mode 100644 (file)
index e6b764e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-MIPS: allow disabling the kernel FPU emulator
-
-This patch allows turning off the in-kernel Algorithmics
-FPU emulator support, which allows one to save a couple of
-precious blocks on an embedded system.
-
-Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -839,6 +839,17 @@ config I8259
- config MIPS_BONITO64
-       bool
-+config MIPS_FPU_EMU
-+      bool "Enable FPU emulation"
-+      default y
-+      help
-+         This option allows building a kernel with or without the Algorithmics
-+         FPU emulator enabled. Turning off this option results in a kernel which
-+         does not catch floating operations exceptions. Make sure that your toolchain
-+         is configured to enable software floating point emulation in that case.
-+              
-+         If unsure say Y here.
-+
- config MIPS_MSC
-       bool
---- a/arch/mips/math-emu/Makefile
-+++ b/arch/mips/math-emu/Makefile
-@@ -2,12 +2,14 @@
- # Makefile for the Linux/MIPS kernel FPU emulation.
- #
--obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-+obj-y :=      kernel_linkage.o dsemul.o cp1emu.o
-+
-+obj-$(CONFIG_MIPS_FPU_EMU)    += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-          ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \
-          dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \
-          dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \
-          sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \
-          sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \
--         dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o
-+         dp_sqrt.o sp_sqrt.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/math-emu/cp1emu.c
-+++ b/arch/mips/math-emu/cp1emu.c
-@@ -58,7 +58,11 @@
- #define __mips 4
- /* Function which emulates a floating point instruction. */
-+#ifdef CONFIG_DEBUG_FS
-+DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats);
-+#endif
-+#ifdef CONFIG_MIPS_FPU_EMU
- static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *,
-       mips_instruction);
-@@ -69,10 +73,6 @@ static int fpux_emu(struct pt_regs *,
- /* Further private data for which no space exists in mips_fpu_struct */
--#ifdef CONFIG_DEBUG_FS
--DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats);
--#endif
--
- /* Control registers */
- #define FPCREG_RID    0       /* $0  = revision id */
-@@ -1277,7 +1277,6 @@ int fpu_emulator_cop1Handler(struct pt_r
-       return sig;
- }
--
- #ifdef CONFIG_DEBUG_FS
- static int fpuemu_stat_get(void *data, u64 *val)
-@@ -1326,4 +1325,11 @@ static int __init debugfs_fpuemu(void)
-       return 0;
- }
- __initcall(debugfs_fpuemu);
--#endif
-+#endif /* CONFIG_DEBUGFS */
-+#else
-+int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
-+        int has_fpu)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
---- a/arch/mips/math-emu/dsemul.c
-+++ b/arch/mips/math-emu/dsemul.c
-@@ -109,6 +109,7 @@ int mips_dsemul(struct pt_regs *regs, mi
-       return SIGILL;          /* force out of emulation loop */
- }
-+#ifdef CONFIG_MIPS_FPU_EMU
- int do_dsemulret(struct pt_regs *xcp)
- {
-       struct emuframe __user *fr;
-@@ -165,3 +166,9 @@ int do_dsemulret(struct pt_regs *xcp)
-       return 1;
- }
-+#else
-+int do_dsemulret(struct pt_regs *xcp)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
---- a/arch/mips/math-emu/kernel_linkage.c
-+++ b/arch/mips/math-emu/kernel_linkage.c
-@@ -29,6 +29,7 @@
- #define SIGNALLING_NAN 0x7ff800007ff80000LL
-+#ifdef CONFIG_MIPS_FPU_EMU
- void fpu_emulator_init_fpu(void)
- {
-       static int first = 1;
-@@ -112,4 +113,36 @@ int fpu_emulator_restore_context32(struc
-       return err;
- }
--#endif
-+#endif        /* CONFIG_64BIT */
-+#else
-+
-+void fpu_emulator_init_fpu(void)
-+{
-+      printk(KERN_INFO "FPU emulator disabled, make sure your toolchain"
-+              "was compiled with software floating point support (soft-float)\n");
-+      return;
-+}
-+
-+int fpu_emulator_save_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+#ifdef CONFIG_64BIT
-+#endif        /* CONFIG_64BIT */
-+#endif /* CONFIG_MIPS_FPU_EMU */
diff --git a/target/linux/generic-2.6/patches-2.6.33/027-mips_module_reloc.patch b/target/linux/generic-2.6/patches-2.6.33/027-mips_module_reloc.patch
deleted file mode 100644 (file)
index 024e7f1..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -93,7 +93,7 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
- cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe
- cflags-y                      += -msoft-float
- LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib
--MODFLAGS                      += -mlong-calls
-+MODFLAGS                      += -mno-long-calls
- cflags-y += -ffreestanding
---- a/arch/mips/include/asm/module.h
-+++ b/arch/mips/include/asm/module.h
-@@ -9,6 +9,11 @@ struct mod_arch_specific {
-       struct list_head dbe_list;
-       const struct exception_table_entry *dbe_start;
-       const struct exception_table_entry *dbe_end;
-+
-+      void *phys_plt_tbl;
-+      void *virt_plt_tbl;
-+      unsigned int phys_plt_offset;
-+      unsigned int virt_plt_offset;
- };
- typedef uint8_t Elf64_Byte;           /* Type for a 8-bit quantity.  */
---- a/arch/mips/kernel/module.c
-+++ b/arch/mips/kernel/module.c
-@@ -43,6 +43,117 @@ static struct mips_hi16 *mips_hi16_list;
- static LIST_HEAD(dbe_list);
- static DEFINE_SPINLOCK(dbe_lock);
-+/*
-+ * Get the potential max trampolines size required of the init and
-+ * non-init sections. Only used if we cannot find enough contiguous
-+ * physically mapped memory to put the module into.
-+ */
-+static unsigned int
-+get_plt_size(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,
-+             const char *secstrings, unsigned int symindex, bool is_init)
-+{
-+      unsigned long ret = 0;
-+      unsigned int i, j;
-+      Elf_Sym *syms;
-+
-+      /* Everything marked ALLOC (this includes the exported symbols) */
-+      for (i = 1; i < hdr->e_shnum; ++i) {
-+              unsigned int info = sechdrs[i].sh_info;
-+
-+              if (sechdrs[i].sh_type != SHT_REL
-+                  && sechdrs[i].sh_type != SHT_RELA)
-+                      continue;
-+
-+              /* Not a valid relocation section? */
-+              if (info >= hdr->e_shnum)
-+                      continue;
-+
-+              /* Don't bother with non-allocated sections */
-+              if (!(sechdrs[info].sh_flags & SHF_ALLOC))
-+                      continue;
-+
-+              /* If it's called *.init*, and we're not init, we're
-+                   not interested */
-+              if ((strstr(secstrings + sechdrs[i].sh_name, ".init") != 0)
-+                  != is_init)
-+                      continue;
-+
-+              syms = (Elf_Sym *) sechdrs[symindex].sh_addr;
-+              if (sechdrs[i].sh_type == SHT_REL) {
-+                      Elf_Mips_Rel *rel = (void *) sechdrs[i].sh_addr;
-+                      unsigned int size = sechdrs[i].sh_size / sizeof(*rel);
-+
-+                      for (j = 0; j < size; ++j) {
-+                              Elf_Sym *sym;
-+
-+                              if (ELF_MIPS_R_TYPE(rel[j]) != R_MIPS_26)
-+                                      continue;
-+
-+                              sym = syms + ELF_MIPS_R_SYM(rel[j]);
-+                              if (!is_init && sym->st_shndx != SHN_UNDEF)
-+                                      continue;
-+
-+                              ret += 4 * sizeof(int);
-+                      }
-+              } else {
-+                      Elf_Mips_Rela *rela = (void *) sechdrs[i].sh_addr;
-+                      unsigned int size = sechdrs[i].sh_size / sizeof(*rela);
-+
-+                      for (j = 0; j < size; ++j) {
-+                              Elf_Sym *sym;
-+
-+                              if (ELF_MIPS_R_TYPE(rela[j]) != R_MIPS_26)
-+                                      continue;
-+
-+                              sym = syms + ELF_MIPS_R_SYM(rela[j]);
-+                              if (!is_init && sym->st_shndx != SHN_UNDEF)
-+                                      continue;
-+
-+                              ret += 4 * sizeof(int);
-+                      }
-+              }
-+      }
-+
-+      return ret;
-+}
-+
-+#ifndef MODULE_START
-+static void *alloc_phys(unsigned long size)
-+{
-+      unsigned order;
-+      struct page *page;
-+      struct page *p;
-+
-+      size = PAGE_ALIGN(size);
-+      order = get_order(size);
-+
-+      page = alloc_pages(GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN |
-+                      __GFP_THISNODE, order);
-+      if (!page)
-+              return NULL;
-+
-+      split_page(page, order);
-+
-+      for (p = page + (size >> PAGE_SHIFT); p < page + (1 << order); ++p)
-+              __free_page(p);
-+
-+      return page_address(page);
-+}
-+#endif
-+
-+static void free_phys(void *ptr, unsigned long size)
-+{
-+      struct page *page;
-+      struct page *end;
-+
-+      page = virt_to_page(ptr);
-+      end = page + (PAGE_ALIGN(size) >> PAGE_SHIFT);
-+
-+      for (; page < end; ++page)
-+              __free_page(page);
-+}
-+
-+
- void *module_alloc(unsigned long size)
- {
- #ifdef MODULE_START
-@@ -58,21 +169,99 @@ void *module_alloc(unsigned long size)
-       return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
- #else
-+      void *ptr;
-+
-       if (size == 0)
-               return NULL;
--      return vmalloc(size);
-+
-+      ptr = alloc_phys(size);
-+
-+      /* If we failed to allocate physically contiguous memory,
-+       * fall back to regular vmalloc. The module loader code will
-+       * create jump tables to handle long jumps */
-+      if (!ptr)
-+              return vmalloc(size);
-+
-+      return ptr;
-+#endif
-+}
-+
-+static inline bool is_phys_addr(void *ptr)
-+{
-+#ifdef CONFIG_64BIT
-+      return (KSEGX((unsigned long)ptr) == CKSEG0);
-+#else
-+      return (KSEGX(ptr) == KSEG0);
- #endif
- }
- /* Free memory returned from module_alloc */
- void module_free(struct module *mod, void *module_region)
- {
--      vfree(module_region);
-+      if (is_phys_addr(module_region)) {
-+              if (mod->module_init == module_region)
-+                      free_phys(module_region, mod->init_size);
-+              else if (mod->module_core == module_region)
-+                      free_phys(module_region, mod->core_size);
-+              else
-+                      BUG();
-+      } else {
-+              vfree(module_region);
-+      }
-+}
-+
-+static void *__module_alloc(int size, bool phys)
-+{
-+      void *ptr;
-+
-+      if (phys)
-+              ptr = kmalloc(size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc(size);
-+      return ptr;
-+}
-+
-+static void __module_free(void *ptr)
-+{
-+      if (is_phys_addr(ptr))
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
- }
- int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
-                             char *secstrings, struct module *mod)
- {
-+      unsigned int symindex = 0;
-+      unsigned int core_size, init_size;
-+      int i;
-+
-+      for (i = 1; i < hdr->e_shnum; i++)
-+              if (sechdrs[i].sh_type == SHT_SYMTAB)
-+                      symindex = i;
-+
-+      core_size = get_plt_size(hdr, sechdrs, secstrings, symindex, false);
-+      init_size = get_plt_size(hdr, sechdrs, secstrings, symindex, true);
-+
-+      mod->arch.phys_plt_offset = 0;
-+      mod->arch.virt_plt_offset = 0;
-+      mod->arch.phys_plt_tbl = NULL;
-+      mod->arch.virt_plt_tbl = NULL;
-+
-+      if ((core_size + init_size) == 0)
-+              return 0;
-+
-+      mod->arch.phys_plt_tbl = __module_alloc(core_size + init_size, 1);
-+      if (!mod->arch.phys_plt_tbl)
-+              return -ENOMEM;
-+
-+      mod->arch.virt_plt_tbl = __module_alloc(core_size + init_size, 0);
-+      if (!mod->arch.virt_plt_tbl) {
-+              __module_free(mod->arch.phys_plt_tbl);
-+              mod->arch.phys_plt_tbl = NULL;
-+              return -ENOMEM;
-+      }
-+
-       return 0;
- }
-@@ -95,28 +284,36 @@ static int apply_r_mips_32_rela(struct m
-       return 0;
- }
--static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
-+static Elf_Addr add_plt_entry_to(unsigned *plt_offset,
-+                               void *start, Elf_Addr v)
- {
--      if (v % 4) {
--              pr_err("module %s: dangerous R_MIPS_26 REL relocation\n",
--                     me->name);
--              return -ENOEXEC;
--      }
-+      unsigned *tramp = start + *plt_offset;
-+      *plt_offset += 4 * sizeof(int);
--      if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
--              printk(KERN_ERR
--                     "module %s: relocation overflow\n",
--                     me->name);
--              return -ENOEXEC;
--      }
-+      /* adjust carry for addiu */
-+      if (v & 0x00008000)
-+              v += 0x10000;
--      *location = (*location & ~0x03ffffff) |
--                  ((*location + (v >> 2)) & 0x03ffffff);
-+      tramp[0] = 0x3c190000 | (v >> 16);      /* lui t9, hi16 */
-+      tramp[1] = 0x27390000 | (v & 0xffff);   /* addiu t9, t9, lo16 */
-+      tramp[2] = 0x03200008;                  /* jr t9 */
-+      tramp[3] = 0x00000000;                  /* nop */
--      return 0;
-+      return (Elf_Addr) tramp;
- }
--static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
-+static Elf_Addr add_plt_entry(struct module *me, void *location, Elf_Addr v)
-+{
-+      if (is_phys_addr(location))
-+              return add_plt_entry_to(&me->arch.phys_plt_offset,
-+                              me->arch.phys_plt_tbl, v);
-+      else
-+              return add_plt_entry_to(&me->arch.virt_plt_offset,
-+                              me->arch.virt_plt_tbl, v);
-+
-+}
-+
-+static int set_r_mips_26(struct module *me, u32 *location, u32 ofs, Elf_Addr v)
- {
-       if (v % 4) {
-               pr_err("module %s: dangerous R_MIPS_26 RELArelocation\n",
-@@ -125,17 +322,31 @@ static int apply_r_mips_26_rela(struct m
-       }
-       if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
--              printk(KERN_ERR
-+          v = add_plt_entry(me, location, v + (ofs << 2));
-+              if (!v) {
-+                      printk(KERN_ERR
-                      "module %s: relocation overflow\n",
-                      me->name);
--              return -ENOEXEC;
-+                      return -ENOEXEC;
-+              }
-+              ofs = 0;
-       }
--      *location = (*location & ~0x03ffffff) | ((v >> 2) & 0x03ffffff);
-+      *location = (*location & ~0x03ffffff) | ((ofs + (v >> 2)) & 0x03ffffff);
-       return 0;
- }
-+static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
-+{
-+      return set_r_mips_26(me, location, *location & 0x03ffffff, v);
-+}
-+
-+static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
-+{
-+      return set_r_mips_26(me, location, 0, v);
-+}
-+
- static int apply_r_mips_hi16_rel(struct module *me, u32 *location, Elf_Addr v)
- {
-       struct mips_hi16 *n;
-@@ -400,11 +611,32 @@ int module_finalize(const Elf_Ehdr *hdr,
-               list_add(&me->arch.dbe_list, &dbe_list);
-               spin_unlock_irq(&dbe_lock);
-       }
-+
-+      /* Get rid of the fixup trampoline if we're running the module
-+       * from physically mapped address space */
-+      if (me->arch.phys_plt_offset == 0) {
-+              __module_free(me->arch.phys_plt_tbl);
-+              me->arch.phys_plt_tbl = NULL;
-+      }
-+      if (me->arch.virt_plt_offset == 0) {
-+              __module_free(me->arch.virt_plt_tbl);
-+              me->arch.virt_plt_tbl = NULL;
-+      }
-+
-       return 0;
- }
- void module_arch_cleanup(struct module *mod)
- {
-+      if (mod->arch.phys_plt_tbl) {
-+              __module_free(mod->arch.phys_plt_tbl);
-+              mod->arch.phys_plt_tbl = NULL;
-+      }
-+      if (mod->arch.virt_plt_tbl) {
-+              __module_free(mod->arch.virt_plt_tbl);
-+              mod->arch.virt_plt_tbl = NULL;
-+      }
-+
-       spin_lock_irq(&dbe_lock);
-       list_del(&mod->arch.dbe_list);
-       spin_unlock_irq(&dbe_lock);
diff --git a/target/linux/generic-2.6/patches-2.6.33/028-module_exports.patch b/target/linux/generic-2.6/patches-2.6.33/028-module_exports.patch
deleted file mode 100644 (file)
index c56fbb7..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
---- a/include/asm-generic/vmlinux.lds.h
-+++ b/include/asm-generic/vmlinux.lds.h
-@@ -52,6 +52,27 @@
- #define LOAD_OFFSET 0
- #endif
-+#ifndef SYMTAB_KEEP_STR
-+#define SYMTAB_KEEP_STR *(__ksymtab_strings.*)
-+#define SYMTAB_DISCARD_STR
-+#else
-+#define SYMTAB_DISCARD_STR *(__ksymtab_strings.*)
-+#endif
-+
-+#ifndef SYMTAB_KEEP
-+#define SYMTAB_KEEP *(__ksymtab.*)
-+#define SYMTAB_DISCARD
-+#else
-+#define SYMTAB_DISCARD *(__ksymtab.*)
-+#endif
-+
-+#ifndef SYMTAB_KEEP_GPL
-+#define SYMTAB_KEEP_GPL *(__ksymtab_gpl.*)
-+#define SYMTAB_DISCARD_GPL
-+#else
-+#define SYMTAB_DISCARD_GPL *(__ksymtab_gpl.*)
-+#endif
-+
- #ifndef SYMBOL_PREFIX
- #define VMLINUX_SYMBOL(sym) sym
- #else
-@@ -258,35 +279,35 @@
-       /* Kernel symbol table: Normal symbols */                       \
-       __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
-               VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
--              *(__ksymtab)                                            \
-+              SYMTAB_KEEP                                             \
-               VMLINUX_SYMBOL(__stop___ksymtab) = .;                   \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only symbols */                     \
-       __ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {     \
-               VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;              \
--              *(__ksymtab_gpl)                                        \
-+              SYMTAB_KEEP_GPL                                         \
-               VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;               \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: Normal unused symbols */                \
-       __ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {  \
-               VMLINUX_SYMBOL(__start___ksymtab_unused) = .;           \
--              *(__ksymtab_unused)                                     \
-+              *(__ksymtab_unused.*)                                   \
-               VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;            \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only unused symbols */              \
-       __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
-               VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;       \
--              *(__ksymtab_unused_gpl)                                 \
-+              *(__ksymtab_unused_gpl.*)                               \
-               VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;        \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-future-only symbols */              \
-       __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
-               VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;       \
--              *(__ksymtab_gpl_future)                                 \
-+              *(__ksymtab_gpl_future.*)                               \
-               VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;        \
-       }                                                               \
-                                                                       \
-@@ -327,7 +348,7 @@
-                                                                       \
-       /* Kernel symbol table: strings */                              \
-         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {       \
--              *(__ksymtab_strings)                                    \
-+              SYMTAB_KEEP_STR                                         \
-       }                                                               \
-                                                                       \
-       /* __*init sections */                                          \
-@@ -642,6 +663,9 @@
-       EXIT_TEXT                                                       \
-       EXIT_DATA                                                       \
-       EXIT_CALL                                                       \
-+      SYMTAB_DISCARD                                                  \
-+      SYMTAB_DISCARD_GPL                                              \
-+      SYMTAB_DISCARD_STR                                              \
-       *(.discard)                                                     \
-       }
---- a/include/linux/module.h
-+++ b/include/linux/module.h
-@@ -194,16 +194,24 @@ void *__symbol_get_gpl(const char *symbo
- #define __CRC_SYMBOL(sym, sec)
- #endif
-+#ifdef MODULE
-+#define __EXPORT_SUFFIX(sym)
-+#else
-+#define __EXPORT_SUFFIX(sym) "." #sym
-+#endif
-+
- /* For every exported symbol, place a struct in the __ksymtab section */
- #define __EXPORT_SYMBOL(sym, sec)                             \
-       extern typeof(sym) sym;                                 \
-       __CRC_SYMBOL(sym, sec)                                  \
-       static const char __kstrtab_##sym[]                     \
--      __attribute__((section("__ksymtab_strings"), aligned(1))) \
-+      __attribute__((section("__ksymtab_strings"              \
-+        __EXPORT_SUFFIX(sym)), aligned(1)))                   \
-       = MODULE_SYMBOL_PREFIX #sym;                            \
-       static const struct kernel_symbol __ksymtab_##sym       \
-       __used                                                  \
--      __attribute__((section("__ksymtab" sec), unused))       \
-+      __attribute__((section("__ksymtab" sec                  \
-+        __EXPORT_SUFFIX(sym)), unused))                       \
-       = { (unsigned long)&sym, __kstrtab_##sym }
- #define EXPORT_SYMBOL(sym)                                    \
diff --git a/target/linux/generic-2.6/patches-2.6.33/029-arm_module_unresolved_weak_sym.patch b/target/linux/generic-2.6/patches-2.6.33/029-arm_module_unresolved_weak_sym.patch
deleted file mode 100644 (file)
index 8a3b2e2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/arch/arm/kernel/module.c
-+++ b/arch/arm/kernel/module.c
-@@ -121,6 +121,10 @@ apply_relocate(Elf32_Shdr *sechdrs, cons
-                       return -ENOEXEC;
-               }
-+              if ((IS_ERR_VALUE(sym->st_value) || !sym->st_value) &&
-+                  ELF_ST_BIND(sym->st_info) == STB_WEAK)
-+                      continue;
-+
-               loc = dstsec->sh_addr + rel->r_offset;
-               switch (ELF32_R_TYPE(rel->r_info)) {
diff --git a/target/linux/generic-2.6/patches-2.6.33/030-pci_disable_common_quirks.patch b/target/linux/generic-2.6/patches-2.6.33/030-pci_disable_common_quirks.patch
deleted file mode 100644 (file)
index 96b4b33..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
---- a/drivers/pci/Kconfig
-+++ b/drivers/pci/Kconfig
-@@ -51,6 +51,12 @@ config PCI_STUB
-         When in doubt, say N.
-+config PCI_DISABLE_COMMON_QUIRKS
-+      bool "PCI disable common quirks"
-+      depends on PCI
-+      help
-+        If you don't know what to do here, say N.
-+
- config HT_IRQ
-       bool "Interrupts on hypertransport devices"
-       default y
---- a/drivers/pci/quirks.c
-+++ b/drivers/pci/quirks.c
-@@ -96,6 +96,7 @@ static void __devinit quirk_resource_ali
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_resource_alignment);
-+#ifndef CONFIG_PCI_DISABLE_COMMON_QUIRKS
- /* The Mellanox Tavor device gives false positive parity errors
-  * Mark this device with a broken_parity_status, to allow
-  * PCI scanning code to "skip" this now blacklisted device.
-@@ -1905,7 +1906,9 @@ static void __devinit fixup_rev1_53c810(
-       }
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810);
-+#endif /* !CONFIG_PCI_DISABLE_COMMON_QUIRKS */
-+#ifndef CONFIG_PCI_DISABLE_COMMON_QUIRKS
- /* Enable 1k I/O space granularity on the Intel P64H2 */
- static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
- {
-@@ -2536,6 +2539,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150d, quirk_i82576_sriov);
- #endif        /* CONFIG_PCI_IOV */
-+#endif /* !CONFIG_PCI_DISABLE_COMMON_QUIRKS */
- static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
-                         struct pci_fixup *end)
diff --git a/target/linux/generic-2.6/patches-2.6.33/031-ppc_gcc_build_fix.patch b/target/linux/generic-2.6/patches-2.6.33/031-ppc_gcc_build_fix.patch
deleted file mode 100644 (file)
index 6002794..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-GCC 4.4.x looks to be adding support for generating out-of-line register
-saves/restores based on:
-
-http://gcc.gnu.org/ml/gcc-patches/2008-04/msg01678.html
-
-This breaks the kernel build as we'd have to link with libgcc to get the
-implementation of the register save/restores.
-
-To workaround this issue, we just stole the save/restore code from gcc
-and simplified it down for our needs (integer only).  We only do this if
-PPC32 as gcc makes believe the linker on ppc64 will deal with this and
-only if CONFIG_CC_OPTIMIZE_FOR_SIZE is set (thus -Os).
-
-Signed-off-by: Kumar Gala <[EMAIL PROTECTED]>
----
-
-If someone using cutting edge toolchains for ppc64 could test and make
-sure if we enable CONFIG_CC_OPTIMIZE_FOR_SIZE things work that would be
-nice.
-
-- k
-
- arch/powerpc/kernel/misc_32.S   |   77 +++++++++++++++++++++++++++
- arch/powerpc/kernel/ppc_ksyms.c |  111 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 188 insertions(+), 0 deletions(-)
-
---- a/arch/powerpc/kernel/misc_32.S
-+++ b/arch/powerpc/kernel/misc_32.S
-@@ -802,3 +802,80 @@ relocate_new_kernel_end:
- relocate_new_kernel_size:
-       .long relocate_new_kernel_end - relocate_new_kernel
- #endif
-+
-+#if defined(CONFIG_PPC32) && defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
-+/* Routines for saving integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer save area.  */
-+
-+_GLOBAL(_savegpr_14)   stw     14,-72(11)      /* save gp registers */
-+_GLOBAL(_savegpr_15)   stw     15,-68(11)
-+_GLOBAL(_savegpr_16)   stw     16,-64(11)
-+_GLOBAL(_savegpr_17)   stw     17,-60(11)
-+_GLOBAL(_savegpr_18)   stw     18,-56(11)
-+_GLOBAL(_savegpr_19)   stw     19,-52(11)
-+_GLOBAL(_savegpr_20)   stw     20,-48(11)
-+_GLOBAL(_savegpr_21)   stw     21,-44(11)
-+_GLOBAL(_savegpr_22)   stw     22,-40(11)
-+_GLOBAL(_savegpr_23)   stw     23,-36(11)
-+_GLOBAL(_savegpr_24)   stw     24,-32(11)
-+_GLOBAL(_savegpr_25)   stw     25,-28(11)
-+_GLOBAL(_savegpr_26)   stw     26,-24(11)
-+_GLOBAL(_savegpr_27)   stw     27,-20(11)
-+_GLOBAL(_savegpr_28)   stw     28,-16(11)
-+_GLOBAL(_savegpr_29)   stw     29,-12(11)
-+_GLOBAL(_savegpr_30)   stw     30,-8(11)
-+_GLOBAL(_savegpr_31)   stw     31,-4(11)
-+                       blr
-+
-+/* Routines for restoring integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer restore area.  */
-+
-+_GLOBAL(_restgpr_14)   lwz     14,-72(11)      /* restore gp registers */
-+_GLOBAL(_restgpr_15)   lwz     15,-68(11)
-+_GLOBAL(_restgpr_16)   lwz     16,-64(11)
-+_GLOBAL(_restgpr_17)   lwz     17,-60(11)
-+_GLOBAL(_restgpr_18)   lwz     18,-56(11)
-+_GLOBAL(_restgpr_19)   lwz     19,-52(11)
-+_GLOBAL(_restgpr_20)   lwz     20,-48(11)
-+_GLOBAL(_restgpr_21)   lwz     21,-44(11)
-+_GLOBAL(_restgpr_22)   lwz     22,-40(11)
-+_GLOBAL(_restgpr_23)   lwz     23,-36(11)
-+_GLOBAL(_restgpr_24)   lwz     24,-32(11)
-+_GLOBAL(_restgpr_25)   lwz     25,-28(11)
-+_GLOBAL(_restgpr_26)   lwz     26,-24(11)
-+_GLOBAL(_restgpr_27)   lwz     27,-20(11)
-+_GLOBAL(_restgpr_28)   lwz     28,-16(11)
-+_GLOBAL(_restgpr_29)   lwz     29,-12(11)
-+_GLOBAL(_restgpr_30)   lwz     30,-8(11)
-+_GLOBAL(_restgpr_31)   lwz     31,-4(11)
-+                       blr
-+
-+/* Routines for restoring integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer restore area.  */
-+
-+_GLOBAL(_restgpr_14_x) lwz     14,-72(11)      /* restore gp registers */
-+_GLOBAL(_restgpr_15_x) lwz     15,-68(11)
-+_GLOBAL(_restgpr_16_x) lwz     16,-64(11)
-+_GLOBAL(_restgpr_17_x) lwz     17,-60(11)
-+_GLOBAL(_restgpr_18_x) lwz     18,-56(11)
-+_GLOBAL(_restgpr_19_x) lwz     19,-52(11)
-+_GLOBAL(_restgpr_20_x) lwz     20,-48(11)
-+_GLOBAL(_restgpr_21_x) lwz     21,-44(11)
-+_GLOBAL(_restgpr_22_x) lwz     22,-40(11)
-+_GLOBAL(_restgpr_23_x) lwz     23,-36(11)
-+_GLOBAL(_restgpr_24_x) lwz     24,-32(11)
-+_GLOBAL(_restgpr_25_x) lwz     25,-28(11)
-+_GLOBAL(_restgpr_26_x) lwz     26,-24(11)
-+_GLOBAL(_restgpr_27_x) lwz     27,-20(11)
-+_GLOBAL(_restgpr_28_x) lwz     28,-16(11)
-+_GLOBAL(_restgpr_29_x) lwz     29,-12(11)
-+_GLOBAL(_restgpr_30_x) lwz     30,-8(11)
-+_GLOBAL(_restgpr_31_x) lwz     0,4(11)
-+                       lwz     31,-4(11)
-+                       mtlr    0
-+                       mr      1,11
-+                       blr
-+#endif
---- a/arch/powerpc/kernel/ppc_ksyms.c
-+++ b/arch/powerpc/kernel/ppc_ksyms.c
-@@ -185,3 +185,114 @@ EXPORT_SYMBOL(__mtdcr);
- EXPORT_SYMBOL(__mfdcr);
- #endif
- EXPORT_SYMBOL(empty_zero_page);
-+
-+#if defined(CONFIG_PPC32) && defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
-+void _savegpr_14(void);
-+void _savegpr_15(void);
-+void _savegpr_16(void);
-+void _savegpr_17(void);
-+void _savegpr_18(void);
-+void _savegpr_19(void);
-+void _savegpr_20(void);
-+void _savegpr_21(void);
-+void _savegpr_22(void);
-+void _savegpr_23(void);
-+void _savegpr_24(void);
-+void _savegpr_25(void);
-+void _savegpr_26(void);
-+void _savegpr_27(void);
-+void _savegpr_28(void);
-+void _savegpr_29(void);
-+void _savegpr_30(void);
-+void _savegpr_31(void);
-+void _restgpr_14(void);
-+void _restgpr_15(void);
-+void _restgpr_16(void);
-+void _restgpr_17(void);
-+void _restgpr_18(void);
-+void _restgpr_19(void);
-+void _restgpr_20(void);
-+void _restgpr_21(void);
-+void _restgpr_22(void);
-+void _restgpr_23(void);
-+void _restgpr_24(void);
-+void _restgpr_25(void);
-+void _restgpr_26(void);
-+void _restgpr_27(void);
-+void _restgpr_28(void);
-+void _restgpr_29(void);
-+void _restgpr_30(void);
-+void _restgpr_31(void);
-+void _restgpr_14_x(void);
-+void _restgpr_15_x(void);
-+void _restgpr_16_x(void);
-+void _restgpr_17_x(void);
-+void _restgpr_18_x(void);
-+void _restgpr_19_x(void);
-+void _restgpr_20_x(void);
-+void _restgpr_21_x(void);
-+void _restgpr_22_x(void);
-+void _restgpr_23_x(void);
-+void _restgpr_24_x(void);
-+void _restgpr_25_x(void);
-+void _restgpr_26_x(void);
-+void _restgpr_27_x(void);
-+void _restgpr_28_x(void);
-+void _restgpr_29_x(void);
-+void _restgpr_30_x(void);
-+void _restgpr_31_x(void);
-+EXPORT_SYMBOL(_savegpr_14);
-+EXPORT_SYMBOL(_savegpr_15);
-+EXPORT_SYMBOL(_savegpr_16);
-+EXPORT_SYMBOL(_savegpr_17);
-+EXPORT_SYMBOL(_savegpr_18);
-+EXPORT_SYMBOL(_savegpr_19);
-+EXPORT_SYMBOL(_savegpr_20);
-+EXPORT_SYMBOL(_savegpr_21);
-+EXPORT_SYMBOL(_savegpr_22);
-+EXPORT_SYMBOL(_savegpr_23);
-+EXPORT_SYMBOL(_savegpr_24);
-+EXPORT_SYMBOL(_savegpr_25);
-+EXPORT_SYMBOL(_savegpr_26);
-+EXPORT_SYMBOL(_savegpr_27);
-+EXPORT_SYMBOL(_savegpr_28);
-+EXPORT_SYMBOL(_savegpr_29);
-+EXPORT_SYMBOL(_savegpr_30);
-+EXPORT_SYMBOL(_savegpr_31);
-+EXPORT_SYMBOL(_restgpr_14);
-+EXPORT_SYMBOL(_restgpr_15);
-+EXPORT_SYMBOL(_restgpr_16);
-+EXPORT_SYMBOL(_restgpr_17);
-+EXPORT_SYMBOL(_restgpr_18);
-+EXPORT_SYMBOL(_restgpr_19);
-+EXPORT_SYMBOL(_restgpr_20);
-+EXPORT_SYMBOL(_restgpr_21);
-+EXPORT_SYMBOL(_restgpr_22);
-+EXPORT_SYMBOL(_restgpr_23);
-+EXPORT_SYMBOL(_restgpr_24);
-+EXPORT_SYMBOL(_restgpr_25);
-+EXPORT_SYMBOL(_restgpr_26);
-+EXPORT_SYMBOL(_restgpr_27);
-+EXPORT_SYMBOL(_restgpr_28);
-+EXPORT_SYMBOL(_restgpr_29);
-+EXPORT_SYMBOL(_restgpr_30);
-+EXPORT_SYMBOL(_restgpr_31);
-+EXPORT_SYMBOL(_restgpr_14_x);
-+EXPORT_SYMBOL(_restgpr_15_x);
-+EXPORT_SYMBOL(_restgpr_16_x);
-+EXPORT_SYMBOL(_restgpr_17_x);
-+EXPORT_SYMBOL(_restgpr_18_x);
-+EXPORT_SYMBOL(_restgpr_19_x);
-+EXPORT_SYMBOL(_restgpr_20_x);
-+EXPORT_SYMBOL(_restgpr_21_x);
-+EXPORT_SYMBOL(_restgpr_22_x);
-+EXPORT_SYMBOL(_restgpr_23_x);
-+EXPORT_SYMBOL(_restgpr_24_x);
-+EXPORT_SYMBOL(_restgpr_25_x);
-+EXPORT_SYMBOL(_restgpr_26_x);
-+EXPORT_SYMBOL(_restgpr_27_x);
-+EXPORT_SYMBOL(_restgpr_28_x);
-+EXPORT_SYMBOL(_restgpr_29_x);
-+EXPORT_SYMBOL(_restgpr_30_x);
-+EXPORT_SYMBOL(_restgpr_31_x);
-+#endif /* CONFIG_PPC32 && CONFIG_CC_OPTIMIZE_FOR_SIZE */
diff --git a/target/linux/generic-2.6/patches-2.6.33/060-block2mtd_init.patch b/target/linux/generic-2.6/patches-2.6.33/060-block2mtd_init.patch
deleted file mode 100644 (file)
index 3a47c85..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -14,6 +14,7 @@
- #include <linux/list.h>
- #include <linux/init.h>
- #include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
- #include <linux/buffer_head.h>
- #include <linux/mutex.h>
- #include <linux/mount.h>
-@@ -232,10 +233,11 @@ static void block2mtd_free_device(struct
- /* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size)
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
- {
-       struct block_device *bdev;
-       struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-       char *name;
-       if (!devname)
-@@ -273,17 +275,17 @@ static struct block2mtd_dev *add_device(
-       mutex_init(&dev->write_mutex);
--      /* Setup the MTD structure */
--      /* make the name contain the block device in */
--      name = kmalloc(sizeof("block2mtd: ") + strlen(devname) + 1,
--                      GFP_KERNEL);
-+      if (!mtdname)
-+              mtdname = devname;
-+
-+      name = kmalloc(strlen(mtdname) + 1, GFP_KERNEL);
-       if (!name)
-               goto devinit_err;
--      sprintf(name, "block2mtd: %s", devname);
-+      strcpy(name, mtdname);
-       dev->mtd.name = name;
--      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK;
-+      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK & ~(erase_size - 1);
-       dev->mtd.erasesize = erase_size;
-       dev->mtd.writesize = 1;
-       dev->mtd.type = MTD_RAM;
-@@ -296,14 +298,17 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
--      if (add_mtd_device(&dev->mtd)) {
-+      part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-+      part->name = dev->mtd.name;
-+      part->offset = 0;
-+      part->size = dev->mtd.size;
-+      if (add_mtd_partitions(&dev->mtd, part, 1)) {
-               /* Device didnt get added, so free the entry */
-               goto devinit_err;
-       }
-       list_add(&dev->list, &blkmtd_device_list);
-       INFO("mtd%d: [%s] erase_size = %dKiB [%d]", dev->mtd.index,
--                      dev->mtd.name + strlen("block2mtd: "),
--                      dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-+                      mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-       return dev;
- devinit_err:
-@@ -376,9 +381,9 @@ static char block2mtd_paramline[80 + 12]
- static int block2mtd_setup2(const char *val)
- {
--      char buf[80 + 12]; /* 80 for device, 12 for erase size */
-+      char buf[80 + 12 + 80]; /* 80 for device, 12 for erase size, 80 for name */
-       char *str = buf;
--      char *token[2];
-+      char *token[3];
-       char *name;
-       size_t erase_size = PAGE_SIZE;
-       int i, ret;
-@@ -389,7 +394,7 @@ static int block2mtd_setup2(const char *
-       strcpy(str, val);
-       kill_final_newline(str);
--      for (i = 0; i < 2; i++)
-+      for (i = 0; i < 3; i++)
-               token[i] = strsep(&str, ",");
-       if (str)
-@@ -408,8 +413,10 @@ static int block2mtd_setup2(const char *
-                       parse_err("illegal erase size");
-               }
-       }
-+      if (token[2] && (strlen(token[2]) + 1 > 80))
-+              parse_err("mtd device name too long");
--      add_device(name, erase_size);
-+      add_device(name, erase_size, token[2]);
-       return 0;
- }
-@@ -443,7 +450,7 @@ static int block2mtd_setup(const char *v
- module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
--MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
-+MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>[,<name>]]\"");
- static int __init block2mtd_init(void)
- {
---- a/fs/partitions/check.c
-+++ b/fs/partitions/check.c
-@@ -625,6 +625,7 @@ try_scan:
-       kfree(state);
-       return 0;
- }
-+EXPORT_SYMBOL(rescan_partitions);
- unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.33/065-rootfs_split.patch b/target/linux/generic-2.6/patches-2.6.33/065-rootfs_split.patch
deleted file mode 100644 (file)
index 22b3f5e..0000000
+++ /dev/null
@@ -1,625 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -53,6 +53,16 @@ config MTD_PARTITIONS
-         devices. Partitioning on NFTL 'devices' is a different - that's the
-         'normal' form of partitioning used on a block device.
-+config MTD_ROOTFS_ROOT_DEV
-+      bool "Automatically set 'rootfs' partition to be root filesystem"
-+      depends on MTD_PARTITIONS
-+      default y
-+
-+config MTD_ROOTFS_SPLIT
-+      bool "Automatically split 'rootfs' partition for squashfs"
-+      depends on MTD_PARTITIONS
-+      default y
-+
- config MTD_REDBOOT_PARTS
-       tristate "RedBoot partition table parsing"
-       depends on MTD_PARTITIONS
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -18,6 +18,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/root_dev.h>
-+#include <linux/magic.h>
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -35,7 +37,7 @@ struct mtd_part {
-  * the pointer to that structure with this macro.
-  */
- #define PART(x)  ((struct mtd_part *)(x))
--
-+#define IS_PART(mtd) (mtd->read == part_read)
- /*
-  * MTD methods which simply translate the effective address and pass through
-@@ -503,6 +505,150 @@ out_register:
-       return slave;
- }
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+#define ROOTFS_SPLIT_NAME "rootfs_data"
-+#define ROOTFS_REMOVED_NAME "<removed>"
-+
-+struct squashfs_super_block {
-+      __le32 s_magic;
-+      __le32 pad0[9];
-+      __le64 bytes_used;
-+};
-+
-+
-+static int split_squashfs(struct mtd_info *master, int offset, int *split_offset)
-+{
-+      struct squashfs_super_block sb;
-+      int len, ret;
-+
-+      ret = master->read(master, offset, sizeof(sb), &len, (void *) &sb);
-+      if (ret || (len != sizeof(sb))) {
-+              printk(KERN_ALERT "split_squashfs: error occured while reading "
-+                      "from \"%s\"\n", master->name);
-+              return -EINVAL;
-+      }
-+
-+      if (SQUASHFS_MAGIC != le32_to_cpu(sb.s_magic) ) {
-+              printk(KERN_ALERT "split_squashfs: no squashfs found in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      if (le64_to_cpu((sb.bytes_used)) <= 0) {
-+              printk(KERN_ALERT "split_squashfs: squashfs is empty in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      len = (u32) le64_to_cpu(sb.bytes_used);
-+      len += (offset & 0x000fffff);
-+      len +=  (master->erasesize - 1);
-+      len &= ~(master->erasesize - 1);
-+      len -= (offset & 0x000fffff);
-+      *split_offset = offset + len;
-+
-+      return 0;
-+}
-+
-+static int split_rootfs_data(struct mtd_info *master, struct mtd_info *rpart, const struct mtd_partition *part)
-+{
-+      struct mtd_partition *dpart;
-+      struct mtd_part *slave = NULL;
-+      int split_offset = 0;
-+      int ret;
-+
-+      ret = split_squashfs(master, part->offset, &split_offset);
-+      if (ret)
-+              return ret;
-+
-+      if (split_offset <= 0)
-+              return 0;
-+
-+      dpart = kmalloc(sizeof(*part)+sizeof(ROOTFS_SPLIT_NAME)+1, GFP_KERNEL);
-+      if (dpart == NULL) {
-+              printk(KERN_INFO "split_squashfs: no memory for partition \"%s\"\n",
-+                      ROOTFS_SPLIT_NAME);
-+              return -ENOMEM;
-+      }
-+
-+      memcpy(dpart, part, sizeof(*part));
-+      dpart->name = (unsigned char *)&dpart[1];
-+      strcpy(dpart->name, ROOTFS_SPLIT_NAME);
-+
-+      dpart->size -= split_offset - dpart->offset;
-+      dpart->offset = split_offset;
-+
-+      if (dpart == NULL)
-+              return 1;
-+
-+      printk(KERN_INFO "mtd: partition \"%s\" created automatically, ofs=%llX, len=%llX \n",
-+              ROOTFS_SPLIT_NAME, dpart->offset, dpart->size);
-+
-+      slave = add_one_partition(master, dpart, 0, split_offset);
-+      if (!slave) {
-+              kfree(dpart);
-+              return -ENOMEM;
-+      }
-+      rpart->split = &slave->mtd;
-+
-+      return 0;
-+}
-+
-+static int refresh_rootfs_split(struct mtd_info *mtd)
-+{
-+      struct mtd_partition tpart;
-+      struct mtd_part *part;
-+      char *name;
-+      //int index = 0;
-+      int offset, size;
-+      int ret;
-+
-+      part = PART(mtd);
-+
-+      /* check for the new squashfs offset first */
-+      ret = split_squashfs(part->master, part->offset, &offset);
-+      if (ret)
-+              return ret;
-+
-+      if ((offset > 0) && !mtd->split) {
-+              printk(KERN_INFO "%s: creating new split partition for \"%s\"\n", __func__, mtd->name);
-+              /* if we don't have a rootfs split partition, create a new one */
-+              tpart.name = (char *) mtd->name;
-+              tpart.size = mtd->size;
-+              tpart.offset = part->offset;
-+
-+              return split_rootfs_data(part->master, &part->mtd, &tpart);
-+      } else if ((offset > 0) && mtd->split) {
-+              /* update the offsets of the existing partition */
-+              size = mtd->size + part->offset - offset;
-+
-+              part = PART(mtd->split);
-+              part->offset = offset;
-+              part->mtd.size = size;
-+              printk(KERN_INFO "%s: %s partition \"" ROOTFS_SPLIT_NAME "\", offset: 0x%06x (0x%06x)\n",
-+                      __func__, (!strcmp(part->mtd.name, ROOTFS_SPLIT_NAME) ? "updating" : "creating"),
-+                      (u32) part->offset, (u32) part->mtd.size);
-+              name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
-+              strcpy(name, ROOTFS_SPLIT_NAME);
-+              part->mtd.name = name;
-+      } else if ((offset <= 0) && mtd->split) {
-+              printk(KERN_INFO "%s: removing partition \"%s\"\n", __func__, mtd->split->name);
-+
-+              /* mark existing partition as removed */
-+              part = PART(mtd->split);
-+              name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
-+              strcpy(name, ROOTFS_REMOVED_NAME);
-+              part->mtd.name = name;
-+              part->offset = 0;
-+              part->mtd.size = 0;
-+      }
-+
-+      return 0;
-+}
-+#endif /* CONFIG_MTD_ROOTFS_SPLIT */
-+
- /*
-  * This function, given a master MTD object and a partition table, creates
-  * and registers slave MTD objects which are bound to the master according to
-@@ -518,7 +664,7 @@ int add_mtd_partitions(struct mtd_info *
- {
-       struct mtd_part *slave;
-       uint64_t cur_offset = 0;
--      int i;
-+      int i, ret;
-       printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
-@@ -526,6 +672,21 @@ int add_mtd_partitions(struct mtd_info *
-               slave = add_one_partition(master, parts + i, i, cur_offset);
-               if (!slave)
-                       return -ENOMEM;
-+
-+              if (!strcmp(parts[i].name, "rootfs")) {
-+#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV
-+                      if (ROOT_DEV == 0) {
-+                              printk(KERN_NOTICE "mtd: partition \"rootfs\" "
-+                                      "set to be root filesystem\n");
-+                              ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, slave->mtd.index);
-+                      }
-+#endif
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+                      ret = split_rootfs_data(master, &slave->mtd, &parts[i]);
-+                      /* if (ret == 0)
-+                              j++; */
-+#endif
-+              }
-               cur_offset = slave->offset + slave->mtd.size;
-       }
-@@ -533,6 +694,32 @@ int add_mtd_partitions(struct mtd_info *
- }
- EXPORT_SYMBOL(add_mtd_partitions);
-+int refresh_mtd_partitions(struct mtd_info *mtd)
-+{
-+      int ret = 0;
-+
-+      if (IS_PART(mtd)) {
-+              struct mtd_part *part;
-+              struct mtd_info *master;
-+
-+              part = PART(mtd);
-+              master = part->master;
-+              if (master->refresh_device)
-+                      ret = master->refresh_device(master);
-+      }
-+
-+      if (!ret && mtd->refresh_device)
-+              ret = mtd->refresh_device(mtd);
-+
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+      if (!ret && IS_PART(mtd) && !strcmp(mtd->name, "rootfs"))
-+              refresh_rootfs_split(mtd);
-+#endif
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL_GPL(refresh_mtd_partitions);
-+
- static DEFINE_SPINLOCK(part_parser_lock);
- static LIST_HEAD(part_parsers);
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -29,6 +29,8 @@ struct block2mtd_dev {
-       struct block_device *blkdev;
-       struct mtd_info mtd;
-       struct mutex write_mutex;
-+      rwlock_t bdev_mutex;
-+      char devname[0];
- };
-@@ -81,6 +83,12 @@ static int block2mtd_erase(struct mtd_in
-       size_t len = instr->len;
-       int err;
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-+
-       instr->state = MTD_ERASING;
-       mutex_lock(&dev->write_mutex);
-       err = _block2mtd_erase(dev, from, len);
-@@ -93,6 +101,10 @@ static int block2mtd_erase(struct mtd_in
-       instr->state = MTD_ERASE_DONE;
-       mtd_erase_callback(instr);
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+
-       return err;
- }
-@@ -104,10 +116,14 @@ static int block2mtd_read(struct mtd_inf
-       struct page *page;
-       int index = from >> PAGE_SHIFT;
-       int offset = from & (PAGE_SIZE-1);
--      int cpylen;
-+      int cpylen, err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev || (from > mtd->size)) {
-+              err = -EINVAL;
-+              goto done;
-+      }
--      if (from > mtd->size)
--              return -EINVAL;
-       if (from + len > mtd->size)
-               len = mtd->size - from;
-@@ -122,10 +138,14 @@ static int block2mtd_read(struct mtd_inf
-               len = len - cpylen;
-               page = page_read(dev->blkdev->bd_inode->i_mapping, index);
--              if (!page)
--                      return -ENOMEM;
--              if (IS_ERR(page))
--                      return PTR_ERR(page);
-+              if (!page) {
-+                      err = -ENOMEM;
-+                      goto done;
-+              }
-+              if (IS_ERR(page)) {
-+                      err = PTR_ERR(page);
-+                      goto done;
-+              }
-               memcpy(buf, page_address(page) + offset, cpylen);
-               page_cache_release(page);
-@@ -136,7 +156,10 @@ static int block2mtd_read(struct mtd_inf
-               offset = 0;
-               index++;
-       }
--      return 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+      return err;
- }
-@@ -188,12 +211,22 @@ static int block2mtd_write(struct mtd_in
-               size_t *retlen, const u_char *buf)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      int err;
-+      int err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-       if (!len)
--              return 0;
--      if (to >= mtd->size)
--              return -ENOSPC;
-+              goto done;
-+
-+      if (to >= mtd->size) {
-+              err = -ENOSPC;
-+              goto done;
-+      }
-+
-       if (to + len > mtd->size)
-               len = mtd->size - to;
-@@ -202,6 +235,9 @@ static int block2mtd_write(struct mtd_in
-       mutex_unlock(&dev->write_mutex);
-       if (err > 0)
-               err = 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-       return err;
- }
-@@ -210,52 +246,29 @@ static int block2mtd_write(struct mtd_in
- static void block2mtd_sync(struct mtd_info *mtd)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      sync_blockdev(dev->blkdev);
--      return;
--}
--
--
--static void block2mtd_free_device(struct block2mtd_dev *dev)
--{
--      if (!dev)
--              return;
--
--      kfree(dev->mtd.name);
--      if (dev->blkdev) {
--              invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping,
--                                      0, -1);
--              close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);
--      }
-+      read_lock(&dev->bdev_mutex);
-+      if (dev->blkdev)
-+              sync_blockdev(dev->blkdev);
-+      read_unlock(&dev->bdev_mutex);
--      kfree(dev);
-+      return;
- }
--/* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
-+static int _open_bdev(struct block2mtd_dev *dev)
- {
-       struct block_device *bdev;
--      struct block2mtd_dev *dev;
--      struct mtd_partition *part;
--      char *name;
--
--      if (!devname)
--              return NULL;
--
--      dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
--      if (!dev)
--              return NULL;
-       /* Get a handle on the device */
--      bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, NULL);
-+      bdev = open_bdev_exclusive(dev->devname, FMODE_READ|FMODE_WRITE, NULL);
- #ifndef MODULE
-       if (IS_ERR(bdev)) {
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
--              dev_t devt = name_to_dev_t(devname);
-+              dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-               }
-@@ -263,17 +276,98 @@ static struct block2mtd_dev *add_device(
- #endif
-       if (IS_ERR(bdev)) {
--              ERROR("error: cannot open device %s", devname);
--              goto devinit_err;
-+              ERROR("error: cannot open device %s", dev->devname);
-+              return 1;
-       }
-       dev->blkdev = bdev;
-       if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
-               ERROR("attempting to use an MTD device as a block device");
--              goto devinit_err;
-+              return 1;
-       }
-+      return 0;
-+}
-+
-+static void _close_bdev(struct block2mtd_dev *dev)
-+{
-+      struct block_device *bdev;
-+
-+      if (!dev->blkdev)
-+              return;
-+
-+      bdev = dev->blkdev;
-+      invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping, 0, -1);
-+      close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);
-+      dev->blkdev = NULL;
-+}
-+
-+static void block2mtd_free_device(struct block2mtd_dev *dev)
-+{
-+      if (!dev)
-+              return;
-+
-+      kfree(dev->mtd.name);
-+      _close_bdev(dev);
-+      kfree(dev);
-+}
-+
-+
-+static int block2mtd_refresh(struct mtd_info *mtd)
-+{
-+      struct block2mtd_dev *dev = mtd->priv;
-+      struct block_device *bdev;
-+      dev_t devt;
-+      int err = 0;
-+
-+      /* no other mtd function can run at this point */
-+      write_lock(&dev->bdev_mutex);
-+
-+      /* get the device number for the whole disk */
-+      devt = MKDEV(MAJOR(dev->blkdev->bd_dev), 0);
-+
-+      /* close the old block device */
-+      _close_bdev(dev);
-+
-+      /* open the whole disk, issue a partition rescan, then */
-+      bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-+      if (!bdev || !bdev->bd_disk)
-+              err = -EINVAL;
-+#ifndef CONFIG_MTD_BLOCK2MTD_MODULE
-+      else
-+              err = rescan_partitions(bdev->bd_disk, bdev);
-+#endif
-+      if (bdev)
-+              close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE);
-+
-+      /* try to open the partition block device again */
-+      _open_bdev(dev);
-+      write_unlock(&dev->bdev_mutex);
-+
-+      return err;
-+}
-+
-+/* FIXME: ensure that mtd->size % erase_size == 0 */
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
-+{
-+      struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-+      char *name;
-+
-+      if (!devname)
-+              return NULL;
-+
-+      dev = kzalloc(sizeof(struct block2mtd_dev) + strlen(devname) + 1, GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      strcpy(dev->devname, devname);
-+
-+      if (_open_bdev(dev))
-+              goto devinit_err;
-+
-       mutex_init(&dev->write_mutex);
-+      rwlock_init(&dev->bdev_mutex);
-       if (!mtdname)
-               mtdname = devname;
-@@ -297,6 +391,7 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.read = block2mtd_read;
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
-+      dev->mtd.refresh_device = block2mtd_refresh;
-       part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-       part->name = dev->mtd.name;
---- a/drivers/mtd/mtdchar.c
-+++ b/drivers/mtd/mtdchar.c
-@@ -18,6 +18,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/mtd/partitions.h>
- #include <asm/uaccess.h>
-@@ -814,6 +815,13 @@ static int mtd_ioctl(struct inode *inode
-               file->f_pos = 0;
-               break;
-       }
-+#ifdef CONFIG_MTD_PARTITIONS
-+      case MTDREFRESH:
-+      {
-+              ret = refresh_mtd_partitions(mtd);
-+              break;
-+      }
-+#endif
-       default:
-               ret = -ENOTTY;
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -101,6 +101,7 @@ struct mtd_oob_ops {
-       uint8_t         *oobbuf;
- };
-+struct mtd_info;
- struct mtd_info {
-       u_char type;
-       uint32_t flags;
-@@ -241,6 +242,9 @@ struct mtd_info {
-       struct device dev;
-       int usecount;
-+      int (*refresh_device)(struct mtd_info *mtd);
-+      struct mtd_info *split;
-+
-       /* If the driver is something smart, like UBI, it may need to maintain
-        * its own reference counting. The below functions are only for driver.
-        * The driver may register its callbacks. These callbacks are not
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -34,12 +34,14 @@
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_partition;
- struct mtd_partition {
-       char *name;                     /* identifier string */
-       uint64_t size;                  /* partition size */
-       uint64_t offset;                /* offset within the master MTD space */
-       uint32_t mask_flags;            /* master MTD flags to mask out for this partition */
-       struct nand_ecclayout *ecclayout;       /* out of band layout for this partition (NAND only)*/
-+      int (*refresh_partition)(struct mtd_info *);
- };
- #define MTDPART_OFS_NXTBLK    (-2)
-@@ -51,6 +53,7 @@ struct mtd_info;
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
-+int refresh_mtd_partitions(struct mtd_info *);
- /*
-  * Functions dealing with the various ways of partitioning the space
---- a/include/mtd/mtd-abi.h
-+++ b/include/mtd/mtd-abi.h
-@@ -110,6 +110,7 @@ struct otp_info {
- #define MEMERASE64            _IOW('M', 20, struct erase_info_user64)
- #define MEMWRITEOOB64         _IOWR('M', 21, struct mtd_oob_buf64)
- #define MEMREADOOB64          _IOWR('M', 22, struct mtd_oob_buf64)
-+#define MTDREFRESH            _IO('M', 23)
- /*
-  * Obsolete legacy interface. Keep it in order not to break userspace
diff --git a/target/linux/generic-2.6/patches-2.6.33/066-block2mtd_probe.patch b/target/linux/generic-2.6/patches-2.6.33/066-block2mtd_probe.patch
deleted file mode 100644 (file)
index b2b1a34..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -268,6 +268,7 @@ static int _open_bdev(struct block2mtd_d
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
-+              wait_for_device_probe();
-               dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
diff --git a/target/linux/generic-2.6/patches-2.6.33/070-redboot_space.patch b/target/linux/generic-2.6/patches-2.6.33/070-redboot_space.patch
deleted file mode 100644 (file)
index 6ace83c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -249,14 +249,21 @@ static int parse_redboot_partitions(stru
- #endif
-               names += strlen(names)+1;
--#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-               if(fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_base) {
--                      i++;
--                      parts[i].offset = parts[i-1].size + parts[i-1].offset;
--                      parts[i].size = fl->next->img->flash_base - parts[i].offset;
--                      parts[i].name = nullname;
--              }
-+                      if (!strcmp(parts[i].name, "rootfs")) {
-+                              parts[i].size = fl->next->img->flash_base;
-+                              parts[i].size &= ~(master->erasesize - 1);
-+                              parts[i].size -= parts[i].offset;
-+#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-+                              nrparts--;
-+                      } else {
-+                              i++;
-+                              parts[i].offset = parts[i-1].size + parts[i-1].offset;
-+                              parts[i].size = fl->next->img->flash_base - parts[i].offset;
-+                              parts[i].name = nullname;
- #endif
-+                      }
-+              }
-               tmp_fl = fl;
-               fl = fl->next;
-               kfree(tmp_fl);
diff --git a/target/linux/generic-2.6/patches-2.6.33/071-redboot_boardconfig.patch b/target/linux/generic-2.6/patches-2.6.33/071-redboot_boardconfig.patch
deleted file mode 100644 (file)
index f9bc4fe..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -11,6 +11,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
-+#define BOARD_CONFIG_PART             "boardconfig"
-+
- struct fis_image_desc {
-     unsigned char name[16];      // Null terminated name
-     uint32_t    flash_base;    // Address within FLASH of image
-@@ -41,6 +43,7 @@ static int parse_redboot_partitions(stru
-                              struct mtd_partition **pparts,
-                              unsigned long fis_origin)
- {
-+      unsigned long max_offset = 0;
-       int nrparts = 0;
-       struct fis_image_desc *buf;
-       struct mtd_partition *parts;
-@@ -209,14 +212,14 @@ static int parse_redboot_partitions(stru
-               }
-       }
- #endif
--      parts = kzalloc(sizeof(*parts)*nrparts + nulllen + namelen, GFP_KERNEL);
-+      parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + sizeof(BOARD_CONFIG_PART), GFP_KERNEL);
-       if (!parts) {
-               ret = -ENOMEM;
-               goto out;
-       }
--      nullname = (char *)&parts[nrparts];
-+      nullname = (char *)&parts[nrparts + 1];
- #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-       if (nulllen > 0) {
-               strcpy(nullname, nullstring);
-@@ -235,6 +238,8 @@ static int parse_redboot_partitions(stru
-       }
- #endif
-       for ( ; i<nrparts; i++) {
-+              if(max_offset < buf[i].flash_base + buf[i].size)
-+                      max_offset = buf[i].flash_base + buf[i].size;
-               parts[i].size = fl->img->size;
-               parts[i].offset = fl->img->flash_base;
-               parts[i].name = names;
-@@ -268,6 +273,14 @@ static int parse_redboot_partitions(stru
-               fl = fl->next;
-               kfree(tmp_fl);
-       }
-+      if(master->size - max_offset >= master->erasesize)
-+      {
-+              parts[nrparts].size = master->size - max_offset;
-+              parts[nrparts].offset = max_offset;
-+              parts[nrparts].name = names;
-+              strcpy(names, BOARD_CONFIG_PART);
-+              nrparts++;
-+      }
-       ret = nrparts;
-       *pparts = parts;
-  out:
diff --git a/target/linux/generic-2.6/patches-2.6.33/080-mtd_plat_nand_chip_fixup.patch b/target/linux/generic-2.6/patches-2.6.33/080-mtd_plat_nand_chip_fixup.patch
deleted file mode 100644 (file)
index 16ce76c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/include/linux/mtd/nand.h
-+++ b/include/linux/mtd/nand.h
-@@ -491,6 +491,7 @@ struct platform_nand_chip {
-       int                     chip_delay;
-       unsigned int            options;
-       const char              **part_probe_types;
-+      int                     (*chip_fixup)(struct mtd_info *mtd);
-       void                    (*set_parts)(uint64_t size,
-                                       struct platform_nand_chip *chip);
-       void                    *priv;
---- a/drivers/mtd/nand/plat_nand.c
-+++ b/drivers/mtd/nand/plat_nand.c
-@@ -91,7 +91,18 @@ static int __devinit plat_nand_probe(str
-       }
-       /* Scan to find existance of the device */
--      if (nand_scan(&data->mtd, 1)) {
-+      if (nand_scan_ident(&data->mtd, 1)) {
-+              res = -ENXIO;
-+              goto out;
-+      }
-+
-+      if (pdata->chip.chip_fixup) {
-+              res = pdata->chip.chip_fixup(&data->mtd);
-+              if (res)
-+                      goto out;
-+      }
-+
-+      if (nand_scan_tail(&data->mtd)) {
-               err = -ENXIO;
-               goto out;
-       }
diff --git a/target/linux/generic-2.6/patches-2.6.33/081-mtd_myloader_partition_parser.patch b/target/linux/generic-2.6/patches-2.6.33/081-mtd_myloader_partition_parser.patch
deleted file mode 100644 (file)
index 61b822e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -181,6 +181,22 @@ config MTD_AR7_PARTS
-       ---help---
-         TI AR7 partitioning support
-+config MTD_MYLOADER_PARTS
-+      tristate "MyLoader partition parsing"
-+      depends on MTD_PARTITIONS && (ADM5120 || ATHEROS_AR231X || ATHEROS_AR71XX)
-+      ---help---
-+        MyLoader is a bootloader which allows the user to define partitions
-+        in flash devices, by putting a table in the second erase block
-+        on the device, similar to a partition table. This table gives the 
-+        offsets and lengths of the user defined partitions.
-+
-+        If you need code which can detect and parse these tables, and
-+        register MTD 'partitions' corresponding to each image detected,
-+        enable this option.
-+
-+        You will still need the parsing functions to be called by the driver
-+        for your particular device. It won't happen automatically.
-+
- comment "User Modules And Translation Layers"
- config MTD_CHAR
---- a/drivers/mtd/Makefile
-+++ b/drivers/mtd/Makefile
-@@ -13,6 +13,7 @@ obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdli
- obj-$(CONFIG_MTD_AFS_PARTS)   += afs.o
- obj-$(CONFIG_MTD_AR7_PARTS)   += ar7part.o
- obj-$(CONFIG_MTD_OF_PARTS)      += ofpart.o
-+obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
- # 'Users' - code which presents functionality to userspace.
- obj-$(CONFIG_MTD_CHAR)                += mtdchar.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/082-mtd_info_move_forward_decl.patch b/target/linux/generic-2.6/patches-2.6.33/082-mtd_info_move_forward_decl.patch
deleted file mode 100644 (file)
index 13f0a21..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -33,6 +33,7 @@
-  * Note: writeable partitions require their size and offset be
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_info;
- struct mtd_partition;
- struct mtd_partition {
-@@ -49,7 +50,6 @@ struct mtd_partition {
- #define MTDPART_SIZ_FULL      (0)
--struct mtd_info;
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
diff --git a/target/linux/generic-2.6/patches-2.6.33/083-mtd_fix_nand_correct_data_return_code.patch b/target/linux/generic-2.6/patches-2.6.33/083-mtd_fix_nand_correct_data_return_code.patch
deleted file mode 100644 (file)
index f630059..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/drivers/mtd/nand/nand_ecc.c
-+++ b/drivers/mtd/nand/nand_ecc.c
-@@ -507,8 +507,7 @@ int __nand_correct_data(unsigned char *b
-       if ((bitsperbyte[b0] + bitsperbyte[b1] + bitsperbyte[b2]) == 1)
-               return 1;       /* error in ecc data; no action needed */
--      printk(KERN_ERR "uncorrectable error : ");
--      return -1;
-+      return -EBADMSG;
- }
- EXPORT_SYMBOL(__nand_correct_data);
diff --git a/target/linux/generic-2.6/patches-2.6.33/084-mtd_m25p80_add_pm25lv_flash_support.patch b/target/linux/generic-2.6/patches-2.6.33/084-mtd_m25p80_add_pm25lv_flash_support.patch
deleted file mode 100644 (file)
index 54cc6bb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -645,6 +645,10 @@ static const struct spi_device_id m25p_i
-       { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
-       { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
-+      /* PMC -- pm25x "blocks" are 32K, sectors are 4K */
-+      { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K) },
-+      { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K) },
-+
-       /* Spansion -- single (large) sector size only, at least
-        * for the chips listed here (without boot sectors).
-        */
diff --git a/target/linux/generic-2.6/patches-2.6.33/085-mtd_m25p80_add_en25pxx_support.patch b/target/linux/generic-2.6/patches-2.6.33/085-mtd_m25p80_add_en25pxx_support.patch
deleted file mode 100644 (file)
index 607430b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -645,6 +645,10 @@ static const struct spi_device_id m25p_i
-       { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
-       { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
-+      /* EON -- en25pxx */
-+      { "en25p32", INFO(0x1c2016, 0, 64 * 1024,  64, 0) },
-+      { "en25p64", INFO(0x1c2017, 0, 64 * 1024, 128, 0) },
-+
-       /* PMC -- pm25x "blocks" are 32K, sectors are 4K */
-       { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K) },
-       { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K) },
diff --git a/target/linux/generic-2.6/patches-2.6.33/086-mtd_m25p80_add_xxxs33b_support.patch b/target/linux/generic-2.6/patches-2.6.33/086-mtd_m25p80_add_xxxs33b_support.patch
deleted file mode 100644 (file)
index 2f6d899..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -649,6 +649,11 @@ static const struct spi_device_id m25p_i
-       { "en25p32", INFO(0x1c2016, 0, 64 * 1024,  64, 0) },
-       { "en25p64", INFO(0x1c2017, 0, 64 * 1024, 128, 0) },
-+      /* Numonyx -- xxxs33b */
-+      { "160s33b",  INFO(0x898911, 0, 64 * 1024,  64, 0) },
-+      { "320s33b",  INFO(0x898912, 0, 64 * 1024, 128, 0) },
-+      { "640s33b",  INFO(0x898913, 0, 64 * 1024, 256, 0) },
-+
-       /* PMC -- pm25x "blocks" are 32K, sectors are 4K */
-       { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K) },
-       { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K) },
-@@ -833,11 +838,12 @@ static int __devinit m25p_probe(struct s
-       dev_set_drvdata(&spi->dev, flash);
-       /*
--       * Atmel and SST serial flash tend to power
-+       * Atmel, SST and Intel/Numonyx serial flash tend to power
-        * up with the software protection bits set
-        */
-       if (info->jedec_id >> 16 == 0x1f ||
-+          info->jedec_id >> 16 == 0x89 ||
-           info->jedec_id >> 16 == 0xbf) {
-               write_enable(flash);
-               write_sr(flash, 0);
diff --git a/target/linux/generic-2.6/patches-2.6.33/087-mtd-m25p80-add-w25q32-chip-support.patch b/target/linux/generic-2.6/patches-2.6.33/087-mtd-m25p80-add-w25q32-chip-support.patch
deleted file mode 100644 (file)
index 8d32ec2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -706,6 +706,7 @@ static const struct spi_device_id m25p_i
-       { "w25x80", INFO(0xef3014, 0, 64 * 1024,  16, SECT_4K) },
-       { "w25x16", INFO(0xef3015, 0, 64 * 1024,  32, SECT_4K) },
-       { "w25x32", INFO(0xef3016, 0, 64 * 1024,  64, SECT_4K) },
-+      { "w25q32", INFO(0xef4016, 0, 64 * 1024,  64, SECT_4K) },
-       { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
-       /* Catalyst / On Semiconductor -- non-JEDEC */
diff --git a/target/linux/generic-2.6/patches-2.6.33/100-netfilter_layer7_2.21.patch b/target/linux/generic-2.6/patches-2.6.33/100-netfilter_layer7_2.21.patch
deleted file mode 100644 (file)
index be7d97f..0000000
+++ /dev/null
@@ -1,2132 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -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 */
---- a/include/net/netfilter/nf_conntrack.h
-+++ b/include/net/netfilter/nf_conntrack.h
-@@ -116,6 +116,22 @@ struct nf_conn {
-       u_int32_t secmark;
- #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: */
-       union nf_conntrack_proto proto;
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -858,6 +858,27 @@ config NETFILTER_XT_MATCH_STATE
-         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)
-+       depends on NF_CT_ACCT
-+      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
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -89,6 +89,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) 
- 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
---- a/net/netfilter/nf_conntrack_core.c
-+++ b/net/netfilter/nf_conntrack_core.c
-@@ -201,6 +201,14 @@ destroy_conntrack(struct nf_conntrack *n
-        * 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));
---- a/net/netfilter/nf_conntrack_standalone.c
-+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -171,6 +171,12 @@ static int ct_seq_show(struct seq_file *
-               goto release;
- #endif
-+#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;
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.c
-@@ -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
-+
-+
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regmagic.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regsub.c
-@@ -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';
-+}
---- /dev/null
-+++ b/net/netfilter/xt_layer7.c
-@@ -0,0 +1,666 @@
-+/*
-+  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.21");
-+
-+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("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, 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, 28)
-+static bool 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
-+static bool 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
-+                return 0;
-+        }
-+      return 1;
-+}
-+
-+
-+#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();
-+
-+      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/target/linux/generic-2.6/patches-2.6.33/101-netfilter_layer7_pktmatch.patch b/target/linux/generic-2.6/patches-2.6.33/101-netfilter_layer7_pktmatch.patch
deleted file mode 100644 (file)
index f65e301..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
---- a/include/linux/netfilter/xt_layer7.h
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -8,6 +8,7 @@ struct xt_layer7_info {
-     char protocol[MAX_PROTOCOL_LEN];
-     char pattern[MAX_PATTERN_LEN];
-     u_int8_t invert;
-+    u_int8_t pkt;
- };
- #endif /* _XT_LAYER7_H */
---- a/net/netfilter/xt_layer7.c
-+++ b/net/netfilter/xt_layer7.c
-@@ -314,33 +314,35 @@ static int match_no_append(struct nf_con
- }
- /* 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)
-+static int add_datastr(char *target, int offset, char *app_data, int len)
- {
-       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;
-+      if (!target) 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++) {
-+      for(i = 0; i < maxdatalen-offset-1 && i < len; i++) {
-               if(app_data[i] != '\0') {
-                       /* the kernel version of tolower mungs 'upper ascii' */
--                      master_conntrack->layer7.app_data[length+oldlength] =
-+                      target[length+offset] =
-                               isascii(app_data[i])? 
-                                       tolower(app_data[i]) : app_data[i];
-                       length++;
-               }
-       }
-+      target[length+offset] = '\0';
-+
-+      return length;
-+}
-+
-+/* 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;
--      master_conntrack->layer7.app_data[length+oldlength] = '\0';
--      master_conntrack->layer7.app_data_len = length + oldlength;
-+      length = add_datastr(master_conntrack->layer7.app_data, master_conntrack->layer7.app_data_len, app_data, appdatalen);
-+      master_conntrack->layer7.app_data_len += length;
-       return length;
- }
-@@ -438,7 +440,7 @@ match(const struct sk_buff *skbin,
-       enum ip_conntrack_info master_ctinfo, ctinfo;
-       struct nf_conn *master_conntrack, *conntrack;
--      unsigned char * app_data;
-+      unsigned char *app_data, *tmp_data;
-       unsigned int pattern_result, appdatalen;
-       regexp * comppattern;
-@@ -466,8 +468,8 @@ match(const struct sk_buff *skbin,
-               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) {
-+      if(!info->pkt && (total_acct_packets(master_conntrack) > num_packets ||
-+         master_conntrack->layer7.app_proto)) {
-               pattern_result = match_no_append(conntrack, master_conntrack, 
-                                                ctinfo, master_ctinfo, info);
-@@ -500,6 +502,25 @@ match(const struct sk_buff *skbin,
-       /* the return value gets checked later, when we're ready to use it */
-       comppattern = compile_and_cache(info->pattern, info->protocol);
-+      if (info->pkt) {
-+              tmp_data = kmalloc(maxdatalen, GFP_ATOMIC);
-+              if(!tmp_data){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
-+                      return info->invert;
-+              }
-+
-+              tmp_data[0] = '\0';
-+              add_datastr(tmp_data, 0, app_data, appdatalen);
-+              pattern_result = ((comppattern && regexec(comppattern, tmp_data)) ? 1 : 0);
-+
-+              kfree(tmp_data);
-+              tmp_data = NULL;
-+              spin_unlock_bh(&l7_lock);
-+
-+              return (pattern_result ^ info->invert);
-+      }
-+
-       /* 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){
diff --git a/target/linux/generic-2.6/patches-2.6.33/110-netfilter_match_speedup.patch b/target/linux/generic-2.6/patches-2.6.33/110-netfilter_match_speedup.patch
deleted file mode 100644 (file)
index e99c6db..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
---- a/include/linux/netfilter_ipv4/ip_tables.h
-+++ b/include/linux/netfilter_ipv4/ip_tables.h
-@@ -62,6 +62,7 @@ struct ipt_ip {
- #define IPT_F_FRAG            0x01    /* Set if rule is a fragment rule */
- #define IPT_F_GOTO            0x02    /* Set if jump is a goto */
- #define IPT_F_MASK            0x03    /* All possible flag bits mask. */
-+#define IPT_F_NO_DEF_MATCH    0x80    /* Internal: no default match rules present */
- /* Values for "inv" field in struct ipt_ip. */
- #define IPT_INV_VIA_IN                0x01    /* Invert the sense of IN IFACE. */
---- a/net/ipv4/netfilter/ip_tables.c
-+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -88,6 +88,9 @@ ip_packet_match(const struct iphdr *ip,
- #define FWINV(bool, invflg) ((bool) ^ !!(ipinfo->invflags & (invflg)))
-+      if (ipinfo->flags & IPT_F_NO_DEF_MATCH)
-+              return true;
-+
-       if (FWINV((ip->saddr&ipinfo->smsk.s_addr) != ipinfo->src.s_addr,
-                 IPT_INV_SRCIP) ||
-           FWINV((ip->daddr&ipinfo->dmsk.s_addr) != ipinfo->dst.s_addr,
-@@ -138,13 +141,35 @@ ip_packet_match(const struct iphdr *ip,
-               return false;
-       }
-+#undef FWINV
-       return true;
- }
- static bool
--ip_checkentry(const struct ipt_ip *ip)
-+ip_checkentry(struct ipt_ip *ip)
- {
--      if (ip->flags & ~IPT_F_MASK) {
-+#define FWINV(bool, invflg) ((bool) || (ip->invflags & (invflg)))
-+
-+      if (FWINV(ip->smsk.s_addr, IPT_INV_SRCIP) ||
-+              FWINV(ip->dmsk.s_addr, IPT_INV_DSTIP))
-+              goto has_match_rules;
-+
-+      if (FWINV(!!((const unsigned long *)ip->iniface_mask)[0],
-+              IPT_INV_VIA_IN) ||
-+          FWINV(!!((const unsigned long *)ip->outiface_mask)[0],
-+              IPT_INV_VIA_OUT))
-+              goto has_match_rules;
-+
-+      if (FWINV(ip->proto, IPT_INV_PROTO))
-+              goto has_match_rules;
-+
-+      if (FWINV(ip->flags&IPT_F_FRAG, IPT_INV_FRAG))
-+              goto has_match_rules;
-+
-+      ip->flags |= IPT_F_NO_DEF_MATCH;
-+
-+has_match_rules:
-+      if (ip->flags & ~(IPT_F_MASK|IPT_F_NO_DEF_MATCH)) {
-               duprintf("Unknown flag bits set: %08X\n",
-                        ip->flags & ~IPT_F_MASK);
-               return false;
-@@ -154,6 +179,8 @@ ip_checkentry(const struct ipt_ip *ip)
-                        ip->invflags & ~IPT_INV_MASK);
-               return false;
-       }
-+
-+#undef FWINV
-       return true;
- }
-@@ -196,7 +223,6 @@ static inline bool unconditional(const s
-       static const struct ipt_ip uncond;
-       return memcmp(ip, &uncond, sizeof(uncond)) == 0;
--#undef FWINV
- }
- #if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \
-@@ -321,8 +347,28 @@ ipt_do_table(struct sk_buff *skb,
-       struct xt_match_param mtpar;
-       struct xt_target_param tgpar;
--      /* Initialization */
-       ip = ip_hdr(skb);
-+
-+      IP_NF_ASSERT(table->valid_hooks & (1 << hook));
-+      xt_info_rdlock_bh();
-+      private = table->private;
-+      table_base = private->entries[smp_processor_id()];
-+      e = get_entry(table_base, private->hook_entry[hook]);
-+
-+      if (e->target_offset <= sizeof(struct ipt_entry) &&
-+              (e->ip.flags & IPT_F_NO_DEF_MATCH)) {
-+                      struct ipt_entry_target *t = ipt_get_target(e);
-+                      if (!t->u.kernel.target->target) {
-+                              int v = ((struct ipt_standard_target *)t)->verdict;
-+                              if ((v < 0) && (v != IPT_RETURN)) {
-+                                      ADD_COUNTER(e->counters, ntohs(ip->tot_len), 1);
-+                                      xt_info_rdunlock_bh();
-+                                      return (unsigned)(-v) - 1;
-+                              }
-+                      }
-+      }
-+
-+      /* Initialization */
-       indev = in ? in->name : nulldevname;
-       outdev = out ? out->name : nulldevname;
-       /* We handle fragments by dealing with the first fragment as
-@@ -339,13 +385,6 @@ ipt_do_table(struct sk_buff *skb,
-       mtpar.family  = tgpar.family = NFPROTO_IPV4;
-       mtpar.hooknum = tgpar.hooknum = hook;
--      IP_NF_ASSERT(table->valid_hooks & (1 << hook));
--      xt_info_rdlock_bh();
--      private = table->private;
--      table_base = private->entries[smp_processor_id()];
--
--      e = get_entry(table_base, private->hook_entry[hook]);
--
-       /* For return from builtin chain */
-       back = get_entry(table_base, private->underflow[hook]);
-@@ -992,6 +1031,7 @@ copy_entries_to_user(unsigned int total_
-               unsigned int i;
-               const struct ipt_entry_match *m;
-               const struct ipt_entry_target *t;
-+              u8 flags;
-               e = (struct ipt_entry *)(loc_cpu_entry + off);
-               if (copy_to_user(userptr + off
-@@ -1002,6 +1042,14 @@ copy_entries_to_user(unsigned int total_
-                       goto free_counters;
-               }
-+              flags = e->ip.flags & ~IPT_F_NO_DEF_MATCH;
-+              if (copy_to_user(userptr + off
-+                               + offsetof(struct ipt_entry, ip.flags),
-+                               &flags, sizeof(flags)) != 0) {
-+                      ret = -EFAULT;
-+                      goto free_counters;
-+              }
-+
-               for (i = sizeof(struct ipt_entry);
-                    i < e->target_offset;
-                    i += m->u.match_size) {
diff --git a/target/linux/generic-2.6/patches-2.6.33/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.33/150-netfilter_imq.patch
deleted file mode 100644 (file)
index 510ce70..0000000
+++ /dev/null
@@ -1,1336 +0,0 @@
---- /dev/null
-+++ b/drivers/net/imq.c
-@@ -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");
-+
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -109,6 +109,129 @@ config EQUALIZER
-         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
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -165,6 +165,7 @@ 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
---- /dev/null
-+++ b/include/linux/imq.h
-@@ -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 */
-+
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -1168,6 +1168,7 @@ extern int               dev_alloc_name(struct net_de
- 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_queue(struct net_device *dev,
---- /dev/null
-+++ b/include/linux/netfilter/xt_IMQ.h
-@@ -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 */
-+
---- /dev/null
-+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
-@@ -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 */
-+
---- /dev/null
-+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
-@@ -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 */
-+
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -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
-@@ -327,6 +330,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_dst;
- #ifdef CONFIG_XFRM
-@@ -363,6 +369,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
-@@ -384,6 +393,10 @@
-       /* 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
-@@ -432,6 +445,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);
-@@ -1976,6 +1995,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);
---- a/include/net/netfilter/nf_queue.h
-+++ b/include/net/netfilter/nf_queue.h
-@@ -13,6 +13,12 @@ struct nf_queue_entry {
-       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 @@ extern int nf_unregister_queue_handler(u
-                                      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 */
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -97,6 +97,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>
-@@ -1810,7 +1813,11 @@ int dev_hard_start_xmit(struct sk_buff *
-       int rc = NETDEV_TX_OK;
-       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)) {
-@@ -1912,8 +1919,7 @@ static inline u16 dev_cap_txqueue(struct
-       return queue_index;
- }
--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)
- {
-       u16 queue_index;
-       struct sock *sk = skb->sk;
-@@ -1939,6 +1945,7 @@ static struct netdev_queue *dev_pick_tx(
-       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,
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -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 @@ static int sock_pipe_buf_steal(struct pi
-       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 const struct pipe_buf_operations sock_pipe_buf_ops = {
-@@ -398,6 +478,26 @@ static void skb_release_head_state(struc
-               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);
-@@ -538,6 +638,9 @@ static void __copy_skb_header(struct sk_
-       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;
-@@ -2779,6 +2882,13 @@ void __init skb_init(void)
-                                               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
- }
- /**
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -396,6 +396,18 @@ config NETFILTER_XT_TARGET_LED
-         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
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -46,6 +46,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CONNMAR
- 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
---- a/net/netfilter/nf_queue.c
-+++ b/net/netfilter/nf_queue.c
-@@ -20,6 +20,26 @@ static const struct nf_queue_handler *qu
- 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 @@ void nf_unregister_queue_handlers(const 
- }
- 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 @@ static void nf_queue_entry_release_refs(
-       /* 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 @@ static int __nf_queue(struct sk_buff *sk
- #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 @@ static int __nf_queue(struct sk_buff *sk
-               .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 @@ static int __nf_queue(struct sk_buff *sk
-       }
- #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) {
---- /dev/null
-+++ b/net/netfilter/xt_IMQ.c
-@@ -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/target/linux/generic-2.6/patches-2.6.33/180-netfilter_depends.patch b/target/linux/generic-2.6/patches-2.6.33/180-netfilter_depends.patch
deleted file mode 100644 (file)
index fc00d15..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -160,7 +160,6 @@ config NF_CONNTRACK_FTP
- config NF_CONNTRACK_H323
-       tristate "H.323 protocol support"
--      depends on (IPV6 || IPV6=n)
-       depends on NETFILTER_ADVANCED
-       help
-         H.323 is a VoIP signalling protocol from ITU-T. As one of the most
-@@ -505,7 +504,6 @@ config NETFILTER_XT_TARGET_SECMARK
- config NETFILTER_XT_TARGET_TCPMSS
-       tristate '"TCPMSS" target support'
--      depends on (IPV6 || IPV6=n)
-       default m if NETFILTER_ADVANCED=n
-       ---help---
-         This option adds a `TCPMSS' target, which allows you to alter the
diff --git a/target/linux/generic-2.6/patches-2.6.33/190-netfilter_rtsp.patch b/target/linux/generic-2.6/patches-2.6.33/190-netfilter_rtsp.patch
deleted file mode 100644 (file)
index 29e8208..0000000
+++ /dev/null
@@ -1,1366 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/nf_conntrack_rtsp.h
-@@ -0,0 +1,63 @@
-+/*
-+ * RTSP extension for IP connection tracking.
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.h
-+ *
-+ *      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.
-+ */
-+#ifndef _IP_CONNTRACK_RTSP_H
-+#define _IP_CONNTRACK_RTSP_H
-+
-+//#define IP_NF_RTSP_DEBUG 1
-+#define IP_NF_RTSP_VERSION "0.6.21"
-+
-+#ifdef __KERNEL__
-+/* port block types */
-+typedef enum {
-+    pb_single,  /* client_port=x */
-+    pb_range,   /* client_port=x-y */
-+    pb_discon   /* client_port=x/y (rtspbis) */
-+} portblock_t;
-+
-+/* We record seq number and length of rtsp headers here, all in host order. */
-+
-+/*
-+ * This structure is per expected connection.  It is a member of struct
-+ * ip_conntrack_expect.  The TCP SEQ for the conntrack expect is stored
-+ * there and we are expected to only store the length of the data which
-+ * needs replaced.  If a packet contains multiple RTSP messages, we create
-+ * one expected connection per message.
-+ *
-+ * We use these variables to mark the entire header block.  This may seem
-+ * like overkill, but the nature of RTSP requires it.  A header may appear
-+ * multiple times in a message.  We must treat two Transport headers the
-+ * same as one Transport header with two entries.
-+ */
-+struct ip_ct_rtsp_expect
-+{
-+    u_int32_t   len;        /* length of header block */
-+    portblock_t pbtype;     /* Type of port block that was requested */
-+    u_int16_t   loport;     /* Port that was requested, low or first */
-+    u_int16_t   hiport;     /* Port that was requested, high or second */
-+#if 0
-+    uint        method;     /* RTSP method */
-+    uint        cseq;       /* CSeq from request */
-+#endif
-+};
-+
-+extern unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,
-+                               struct ip_ct_rtsp_expect *prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+
-+extern void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+#define RTSP_PORT   554
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _IP_CONNTRACK_RTSP_H */
---- /dev/null
-+++ b/include/linux/netfilter_helpers.h
-@@ -0,0 +1,133 @@
-+/*
-+ * Helpers for netfiler modules.  This file provides implementations for basic
-+ * functions such as strncasecmp(), etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_STRNCASECMP        nf_strncasecmp()
-+ *   NF_NEED_STRTOU16           nf_strtou16()
-+ *   NF_NEED_STRTOU32           nf_strtou32()
-+ */
-+#ifndef _NETFILTER_HELPERS_H
-+#define _NETFILTER_HELPERS_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+#define iseol(c) ( (c) == '\r' || (c) == '\n' )
-+
-+/*
-+ * The standard strncasecmp()
-+ */
-+#ifdef NF_NEED_STRNCASECMP
-+static int
-+nf_strncasecmp(const char* s1, const char* s2, u_int32_t len)
-+{
-+    if (s1 == NULL || s2 == NULL)
-+    {
-+        if (s1 == NULL && s2 == NULL)
-+        {
-+            return 0;
-+        }
-+        return (s1 == NULL) ? -1 : 1;
-+    }
-+    while (len > 0 && tolower(*s1) == tolower(*s2))
-+    {
-+        len--;
-+        s1++;
-+        s2++;
-+    }
-+    return ( (len == 0) ? 0 : (tolower(*s1) - tolower(*s2)) );
-+}
-+#endif /* NF_NEED_STRNCASECMP */
-+
-+/*
-+ * Parse a string containing a 16-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU16
-+static int
-+nf_strtou16(const char* pbuf, u_int16_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (isdigit(pbuf[n]))
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU16 */
-+
-+/*
-+ * Parse a string containing a 32-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU32
-+static int
-+nf_strtou32(const char* pbuf, u_int32_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (pbuf[n] >= '0' && pbuf[n] <= '9')
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU32 */
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.
-+ */
-+#ifdef NF_NEED_NEXTLINE
-+static int
-+nf_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    while (p[off] != '\n')
-+    {
-+        if (len-off <= 1)
-+        {
-+            return 0;
-+        }
-+
-+        physlen++;
-+        off++;
-+    }
-+
-+    /* if we saw a crlf, physlen needs adjusted */
-+    if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+    {
-+        physlen--;
-+    }
-+
-+    /* advance past the newline */
-+    off++;
-+
-+    *plineoff = *poff;
-+    *plinelen = physlen;
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_HELPERS_H */
---- /dev/null
-+++ b/include/linux/netfilter_mime.h
-@@ -0,0 +1,89 @@
-+/*
-+ * MIME functions for netfilter modules.  This file provides implementations
-+ * for basic MIME parsing.  MIME headers are used in many protocols, such as
-+ * HTTP, RTSP, SIP, etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_MIME_NEXTLINE      nf_mime_nextline()
-+ */
-+#ifndef _NETFILTER_MIME_H
-+#define _NETFILTER_MIME_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.  If the current line is empty, *plinelen will be set to zero.  If
-+ * not, it will be set to the actual line length (including CRLF).
-+ *
-+ * 'line' in this context means logical line (includes LWS continuations).
-+ * Returns 1 on success, 0 on failure.
-+ */
-+#ifdef NF_NEED_MIME_NEXTLINE
-+static int
-+nf_mime_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+    int     is_first_line = 1;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    do
-+    {
-+        while (p[off] != '\n')
-+        {
-+            if (len-off <= 1)
-+            {
-+                return 0;
-+            }
-+
-+            physlen++;
-+            off++;
-+        }
-+
-+        /* if we saw a crlf, physlen needs adjusted */
-+        if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+        {
-+            physlen--;
-+        }
-+
-+        /* advance past the newline */
-+        off++;
-+
-+        /* check for an empty line */
-+        if (physlen == 0)
-+        {
-+            break;
-+        }
-+
-+        /* check for colon on the first physical line */
-+        if (is_first_line)
-+        {
-+            is_first_line = 0;
-+            if (memchr(p+(*poff), ':', physlen) == NULL)
-+            {
-+                return 0;
-+            }
-+        }
-+    }
-+    while (p[off] == ' ' || p[off] == '\t');
-+
-+    *plineoff = *poff;
-+    *plinelen = (physlen == 0) ? 0 : (off - *poff);
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_MIME_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_MIME_H */
---- a/net/ipv4/netfilter/Makefile
-+++ b/net/ipv4/netfilter/Makefile
-@@ -26,6 +26,7 @@ obj-$(CONFIG_NF_NAT_AMANDA) += nf_nat_am
- obj-$(CONFIG_NF_NAT_FTP) += nf_nat_ftp.o
- obj-$(CONFIG_NF_NAT_H323) += nf_nat_h323.o
- obj-$(CONFIG_NF_NAT_IRC) += nf_nat_irc.o
-+obj-$(CONFIG_NF_NAT_RTSP) += nf_nat_rtsp.o
- obj-$(CONFIG_NF_NAT_PPTP) += nf_nat_pptp.o
- obj-$(CONFIG_NF_NAT_SIP) += nf_nat_sip.o
- obj-$(CONFIG_NF_NAT_SNMP_BASIC) += nf_nat_snmp_basic.o
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -267,6 +267,16 @@ config NF_CONNTRACK_TFTP
-         To compile it as a module, choose M here.  If unsure, say N.
-+config NF_CONNTRACK_RTSP
-+      tristate "RTSP protocol support"
-+      depends on NF_CONNTRACK
-+      help
-+              Support the RTSP protocol.  This allows UDP transports to be setup
-+              properly, including RTP and RDT.
-+
-+              If you want to compile it as a module, say 'M' here and read
-+              Documentation/modules.txt.  If unsure, say 'Y'.
-+
- config NF_CT_NETLINK
-       tristate 'Connection tracking netlink interface'
-       select NETFILTER_NETLINK
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -33,6 +33,7 @@ obj-$(CONFIG_NF_CONNTRACK_PPTP) += nf_co
- obj-$(CONFIG_NF_CONNTRACK_SANE) += nf_conntrack_sane.o
- obj-$(CONFIG_NF_CONNTRACK_SIP) += nf_conntrack_sip.o
- obj-$(CONFIG_NF_CONNTRACK_TFTP) += nf_conntrack_tftp.o
-+obj-$(CONFIG_NF_CONNTRACK_RTSP) += nf_conntrack_rtsp.o
- # transparent proxy support
- obj-$(CONFIG_NETFILTER_TPROXY) += nf_tproxy_core.o
---- a/net/ipv4/netfilter/Kconfig
-+++ b/net/ipv4/netfilter/Kconfig
-@@ -257,6 +257,11 @@ config NF_NAT_IRC
-       depends on NF_CONNTRACK && NF_NAT
-       default NF_NAT && NF_CONNTRACK_IRC
-+config NF_NAT_RTSP
-+      tristate
-+      depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
-+      default NF_NAT && NF_CONNTRACK_RTSP
-+
- config NF_NAT_TFTP
-       tristate
-       depends on NF_CONNTRACK && NF_NAT
---- /dev/null
-+++ b/net/netfilter/nf_conntrack_rtsp.c
-@@ -0,0 +1,517 @@
-+/*
-+ * RTSP extension for IP connection tracking
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.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.
-+ *
-+ * Module load syntax:
-+ *   insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                              max_outstanding=n setup_timeout=secs
-+ *
-+ * If no ports are specified, the default will be port 554.
-+ *
-+ * With max_outstanding you can define the maximum number of not yet
-+ * answered SETUP requests per RTSP session (default 8).
-+ * With setup_timeout you can specify how long the system waits for
-+ * an expected data channel (default 300 seconds).
-+ *
-+ * 2005-02-13: Harald Welte <laforge at netfilter.org>
-+ *    - port to 2.6
-+ *    - update to recent post-2.6.11 api changes
-+ * 2006-09-14: Steven Van Acker <deepstar at singularity.be>
-+ *      - removed calls to NAT code from conntrack helper: NAT no longer needed to use rtsp-conntrack
-+ * 2007-04-18: Michael Guntsche <mike at it-loops.com>
-+ *                    - Port to new NF API
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/netfilter.h>
-+#include <linux/ip.h>
-+#include <linux/inet.h>
-+#include <net/tcp.h>
-+
-+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+#include <net/netfilter/nf_conntrack_helper.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#define NF_NEED_STRTOU32
-+#define NF_NEED_NEXTLINE
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#include <linux/ctype.h>
-+#define MAX_SIMUL_SETUP 8 /* XXX: use max_outstanding */
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS 8
-+static int ports[MAX_PORTS];
-+static int num_ports = 0;
-+static int max_outstanding = 8;
-+static unsigned int setup_timeout = 300;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP connection tracking module");
-+MODULE_LICENSE("GPL");
-+module_param_array(ports, int, &num_ports, 0400);
-+MODULE_PARM_DESC(ports, "port numbers of RTSP servers");
-+module_param(max_outstanding, int, 0400);
-+MODULE_PARM_DESC(max_outstanding, "max number of outstanding SETUP requests per RTSP session");
-+module_param(setup_timeout, int, 0400);
-+MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels");
-+
-+static char *rtsp_buffer;
-+static DEFINE_SPINLOCK(rtsp_buffer_lock);
-+
-+unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,struct ip_ct_rtsp_expect* prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+EXPORT_SYMBOL_GPL(nf_nat_rtsp_hook);
-+
-+/*
-+ * Max mappings we will allow for one RTSP connection (for RTP, the number
-+ * of allocated ports is twice this value).  Note that SMIL burns a lot of
-+ * ports so keep this reasonably high.  If this is too low, you will see a
-+ * lot of "no free client map entries" messages.
-+ */
-+#define MAX_PORT_MAPS 16
-+
-+/*** default port list was here in the masq code: 554, 3030, 4040 ***/
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*
-+ * Parse an RTSP packet.
-+ *
-+ * Returns zero if parsing failed.
-+ *
-+ * Parameters:
-+ *  IN      ptcp        tcp data pointer
-+ *  IN      tcplen      tcp data len
-+ *  IN/OUT  ptcpoff     points to current tcp offset
-+ *  OUT     phdrsoff    set to offset of rtsp headers
-+ *  OUT     phdrslen    set to length of rtsp headers
-+ *  OUT     pcseqoff    set to offset of CSeq header
-+ *  OUT     pcseqlen    set to length of CSeq header
-+ */
-+static int
-+rtsp_parse_message(char* ptcp, uint tcplen, uint* ptcpoff,
-+                   uint* phdrsoff, uint* phdrslen,
-+                   uint* pcseqoff, uint* pcseqlen,
-+                   uint* transoff, uint* translen)
-+{
-+      uint    entitylen = 0;
-+      uint    lineoff;
-+      uint    linelen;
-+
-+      if (!nf_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen))
-+              return 0;
-+
-+      *phdrsoff = *ptcpoff;
-+      while (nf_mime_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen)) {
-+              if (linelen == 0) {
-+                      if (entitylen > 0)
-+                              *ptcpoff += min(entitylen, tcplen - *ptcpoff);
-+                      break;
-+              }
-+              if (lineoff+linelen > tcplen) {
-+                      INFOP("!! overrun !!\n");
-+                      break;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "CSeq:", 5) == 0) {
-+                      *pcseqoff = lineoff;
-+                      *pcseqlen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0) {
-+                      *transoff = lineoff;
-+                      *translen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Content-Length:", 15) == 0) {
-+                      uint off = lineoff+15;
-+                      SKIP_WSPACE(ptcp+lineoff, linelen, off);
-+                      nf_strtou32(ptcp+off, &entitylen);
-+              }
-+      }
-+      *phdrslen = (*ptcpoff) - (*phdrsoff);
-+
-+      return 1;
-+}
-+
-+/*
-+ * Find lo/hi client ports (if any) in transport header
-+ * In:
-+ *   ptcp, tcplen = packet
-+ *   tranoff, tranlen = buffer to search
-+ *
-+ * Out:
-+ *   pport_lo, pport_hi = lo/hi ports (host endian)
-+ *
-+ * Returns nonzero if any client ports found
-+ *
-+ * Note: it is valid (and expected) for the client to request multiple
-+ * transports, so we need to parse the entire line.
-+ */
-+static int
-+rtsp_parse_transport(char* ptran, uint tranlen,
-+                     struct ip_ct_rtsp_expect* prtspexp)
-+{
-+      int     rc = 0;
-+      uint    off = 0;
-+
-+      if (tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+          nf_strncasecmp(ptran, "Transport:", 10) != 0) {
-+              INFOP("sanity check failed\n");
-+              return 0;
-+      }
-+
-+      DEBUGP("tran='%.*s'\n", (int)tranlen, ptran);
-+      off += 10;
-+      SKIP_WSPACE(ptran, tranlen, off);
-+
-+      /* Transport: tran;field;field=val,tran;field;field=val,... */
-+      while (off < tranlen) {
-+              const char* pparamend;
-+              uint        nextparamoff;
-+
-+              pparamend = memchr(ptran+off, ',', tranlen-off);
-+              pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+              nextparamoff = pparamend-ptran;
-+
-+              while (off < nextparamoff) {
-+                      const char* pfieldend;
-+                      uint        nextfieldoff;
-+
-+                      pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+                      nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+                      if (strncmp(ptran+off, "client_port=", 12) == 0) {
-+                              u_int16_t   port;
-+                              uint        numlen;
-+
-+                              off += 12;
-+                              numlen = nf_strtou16(ptran+off, &port);
-+                              off += numlen;
-+                              if (prtspexp->loport != 0 && prtspexp->loport != port)
-+                                      DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                              else {
-+                                      DEBUGP("lo port found : %hu\n", port);
-+                                      prtspexp->loport = prtspexp->hiport = port;
-+                                      if (ptran[off] == '-') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_range;
-+                                              prtspexp->hiport = port;
-+
-+                                              // If we have a range, assume rtp:
-+                                              // loport must be even, hiport must be loport+1
-+                                              if ((prtspexp->loport & 0x0001) != 0 ||
-+                                                  prtspexp->hiport != prtspexp->loport+1) {
-+                                                      DEBUGP("incorrect range: %hu-%hu, correcting\n",
-+                                                             prtspexp->loport, prtspexp->hiport);
-+                                                      prtspexp->loport &= 0xfffe;
-+                                                      prtspexp->hiport = prtspexp->loport+1;
-+                                              }
-+                                      } else if (ptran[off] == '/') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_discon;
-+                                              prtspexp->hiport = port;
-+                                      }
-+                                      rc = 1;
-+                              }
-+                      }
-+
-+                      /*
-+                       * Note we don't look for the destination parameter here.
-+                       * If we are using NAT, the NAT module will handle it.  If not,
-+                       * and the client is sending packets elsewhere, the expectation
-+                       * will quietly time out.
-+                       */
-+
-+                      off = nextfieldoff;
-+              }
-+
-+              off = nextparamoff;
-+      }
-+
-+      return rc;
-+}
-+
-+void expected(struct nf_conn *ct, struct nf_conntrack_expect *exp)
-+{
-+    if(nf_nat_rtsp_hook_expectfn) {
-+        nf_nat_rtsp_hook_expectfn(ct,exp);
-+    }
-+}
-+
-+/*** conntrack functions ***/
-+
-+/* outbound packet: client->server */
-+
-+static inline int
-+help_out(struct sk_buff *skb, unsigned char *rb_ptr, unsigned int datalen,
-+                struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct ip_ct_rtsp_expect expinfo;
-+
-+      int dir = CTINFO2DIR(ctinfo);   /* = IP_CT_DIR_ORIGINAL */
-+      //struct  tcphdr* tcph = (void*)iph + iph->ihl * 4;
-+      //uint    tcplen = pktlen - iph->ihl * 4;
-+      char*   pdata = rb_ptr;
-+      //uint    datalen = tcplen - tcph->doff * 4;
-+      uint    dataoff = 0;
-+      int ret = NF_ACCEPT;
-+
-+      struct nf_conntrack_expect *exp;
-+
-+      __be16 be_loport;
-+
-+      memset(&expinfo, 0, sizeof(expinfo));
-+
-+      while (dataoff < datalen) {
-+              uint    cmdoff = dataoff;
-+              uint    hdrsoff = 0;
-+              uint    hdrslen = 0;
-+              uint    cseqoff = 0;
-+              uint    cseqlen = 0;
-+              uint    transoff = 0;
-+              uint    translen = 0;
-+              uint    off;
-+
-+              if (!rtsp_parse_message(pdata, datalen, &dataoff,
-+                                      &hdrsoff, &hdrslen,
-+                                      &cseqoff, &cseqlen,
-+                                      &transoff, &translen))
-+                      break;      /* not a valid message */
-+
-+              if (strncmp(pdata+cmdoff, "SETUP ", 6) != 0)
-+                      continue;   /* not a SETUP message */
-+              DEBUGP("found a setup message\n");
-+
-+              off = 0;
-+              if(translen) {
-+                      rtsp_parse_transport(pdata+transoff, translen, &expinfo);
-+              }
-+
-+              if (expinfo.loport == 0) {
-+                      DEBUGP("no udp transports found\n");
-+                      continue;   /* no udp transports found */
-+              }
-+
-+              DEBUGP("udp transport found, ports=(%d,%hu,%hu)\n",
-+                     (int)expinfo.pbtype, expinfo.loport, expinfo.hiport);
-+
-+              exp = nf_ct_expect_alloc(ct);
-+              if (!exp) {
-+                      ret = NF_DROP;
-+                      goto out;
-+              }
-+
-+              be_loport = htons(expinfo.loport);
-+
-+              nf_ct_expect_init(exp, NF_CT_EXPECT_CLASS_DEFAULT,
-+                      ct->tuplehash[!dir].tuple.src.l3num,
-+                      &ct->tuplehash[!dir].tuple.src.u3, &ct->tuplehash[!dir].tuple.dst.u3,
-+                      IPPROTO_UDP, NULL, &be_loport);
-+
-+              exp->master = ct;
-+
-+              exp->expectfn = expected;
-+              exp->flags = 0;
-+
-+              if (expinfo.pbtype == pb_range) {
-+                      DEBUGP("Changing expectation mask to handle multiple ports\n");
-+                      exp->mask.src.u.udp.port  = 0xfffe;
-+              }
-+
-+              DEBUGP("expect_related %u.%u.%u.%u:%u-%u.%u.%u.%u:%u\n",
-+                     NIPQUAD(exp->tuple.src.u3.ip),
-+                     ntohs(exp->tuple.src.u.udp.port),
-+                     NIPQUAD(exp->tuple.dst.u3.ip),
-+                     ntohs(exp->tuple.dst.u.udp.port));
-+
-+              if (nf_nat_rtsp_hook)
-+                      /* pass the request off to the nat helper */
-+                      ret = nf_nat_rtsp_hook(skb, ctinfo, hdrsoff, hdrslen, &expinfo, exp);
-+              else if (nf_ct_expect_related(exp) != 0) {
-+                      INFOP("nf_ct_expect_related failed\n");
-+                      ret  = NF_DROP;
-+              }
-+              nf_ct_expect_put(exp);
-+              goto out;
-+      }
-+out:
-+
-+      return ret;
-+}
-+
-+
-+static inline int
-+help_in(struct sk_buff *skb, size_t pktlen,
-+ struct nf_conn* ct, enum ip_conntrack_info ctinfo)
-+{
-+ return NF_ACCEPT;
-+}
-+
-+static int help(struct sk_buff *skb, unsigned int protoff,
-+              struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct tcphdr _tcph, *th;
-+      unsigned int dataoff, datalen;
-+      char *rb_ptr;
-+      int ret = NF_DROP;
-+
-+      /* Until there's been traffic both ways, don't look in packets. */
-+      if (ctinfo != IP_CT_ESTABLISHED &&
-+          ctinfo != IP_CT_ESTABLISHED + IP_CT_IS_REPLY) {
-+              DEBUGP("conntrackinfo = %u\n", ctinfo);
-+              return NF_ACCEPT;
-+      }
-+
-+      /* Not whole TCP header? */
-+      th = skb_header_pointer(skb, protoff, sizeof(_tcph), &_tcph);
-+
-+      if (!th)
-+              return NF_ACCEPT;
-+
-+      /* No data ? */
-+      dataoff = protoff + th->doff*4;
-+      datalen = skb->len - dataoff;
-+      if (dataoff >= skb->len)
-+              return NF_ACCEPT;
-+
-+      spin_lock_bh(&rtsp_buffer_lock);
-+      rb_ptr = skb_header_pointer(skb, dataoff,
-+                                  skb->len - dataoff, rtsp_buffer);
-+      BUG_ON(rb_ptr == NULL);
-+
-+#if 0
-+      /* Checksum invalid?  Ignore. */
-+      /* FIXME: Source route IP option packets --RR */
-+      if (tcp_v4_check(tcph, tcplen, iph->saddr, iph->daddr,
-+                       csum_partial((char*)tcph, tcplen, 0)))
-+      {
-+              DEBUGP("bad csum: %p %u %u.%u.%u.%u %u.%u.%u.%u\n",
-+                     tcph, tcplen, NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));
-+              return NF_ACCEPT;
-+      }
-+#endif
-+
-+      switch (CTINFO2DIR(ctinfo)) {
-+      case IP_CT_DIR_ORIGINAL:
-+              ret = help_out(skb, rb_ptr, datalen, ct, ctinfo);
-+              break;
-+      case IP_CT_DIR_REPLY:
-+              DEBUGP("IP_CT_DIR_REPLY\n");
-+              /* inbound packet: server->client */
-+              ret = NF_ACCEPT;
-+              break;
-+      }
-+
-+      spin_unlock_bh(&rtsp_buffer_lock);
-+
-+      return ret;
-+}
-+
-+static struct nf_conntrack_helper rtsp_helpers[MAX_PORTS];
-+static char rtsp_names[MAX_PORTS][10];
-+static struct nf_conntrack_expect_policy rtsp_expect_policy;
-+
-+/* This function is intentionally _NOT_ defined as __exit */
-+static void
-+fini(void)
-+{
-+      int i;
-+      for (i = 0; i < num_ports; i++) {
-+              DEBUGP("unregistering port %d\n", ports[i]);
-+              nf_conntrack_helper_unregister(&rtsp_helpers[i]);
-+      }
-+      kfree(rtsp_buffer);
-+}
-+
-+static int __init
-+init(void)
-+{
-+      int i, ret;
-+      struct nf_conntrack_helper *hlpr;
-+      char *tmpname;
-+
-+      printk("nf_conntrack_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      if (max_outstanding < 1) {
-+              printk("nf_conntrack_rtsp: max_outstanding must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+      if (setup_timeout < 0) {
-+              printk("nf_conntrack_rtsp: setup_timeout must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+
-+      rtsp_expect_policy.max_expected = max_outstanding;
-+      rtsp_expect_policy.timeout = setup_timeout;
-+
-+      rtsp_buffer = kmalloc(65536, GFP_KERNEL);
-+      if (!rtsp_buffer)
-+              return -ENOMEM;
-+
-+      /* If no port given, default to standard rtsp port */
-+      if (ports[0] == 0) {
-+              ports[0] = RTSP_PORT;
-+      }
-+
-+      for (i = 0; (i < MAX_PORTS) && ports[i]; i++) {
-+              hlpr = &rtsp_helpers[i];
-+              memset(hlpr, 0, sizeof(struct nf_conntrack_helper));
-+              hlpr->tuple.src.u.tcp.port = htons(ports[i]);
-+              hlpr->tuple.dst.protonum = IPPROTO_TCP;
-+              hlpr->expect_policy = &rtsp_expect_policy;
-+              hlpr->me = THIS_MODULE;
-+              hlpr->help = help;
-+
-+              tmpname = &rtsp_names[i][0];
-+              if (ports[i] == RTSP_PORT) {
-+                      sprintf(tmpname, "rtsp");
-+              } else {
-+                      sprintf(tmpname, "rtsp-%d", i);
-+              }
-+              hlpr->name = tmpname;
-+
-+              DEBUGP("port #%d: %d\n", i, ports[i]);
-+
-+              ret = nf_conntrack_helper_register(hlpr);
-+
-+              if (ret) {
-+                      printk("nf_conntrack_rtsp: ERROR registering port %d\n", ports[i]);
-+                      fini();
-+                      return -EBUSY;
-+              }
-+              num_ports++;
-+      }
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+EXPORT_SYMBOL(nf_nat_rtsp_hook_expectfn);
-+
---- /dev/null
-+++ b/net/ipv4/netfilter/nf_nat_rtsp.c
-@@ -0,0 +1,496 @@
-+/*
-+ * RTSP extension for TCP NAT alteration
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_nat_irc.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.
-+ *
-+ * Module load syntax:
-+ *      insmod nf_nat_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                           stunaddr=<address>
-+ *                           destaction=[auto|strip|none]
-+ *
-+ * If no ports are specified, the default will be port 554 only.
-+ *
-+ * stunaddr specifies the address used to detect that a client is using STUN.
-+ * If this address is seen in the destination parameter, it is assumed that
-+ * the client has already punched a UDP hole in the firewall, so we don't
-+ * mangle the client_port.  If none is specified, it is autodetected.  It
-+ * only needs to be set if you have multiple levels of NAT.  It should be
-+ * set to the external address that the STUN clients detect.  Note that in
-+ * this case, it will not be possible for clients to use UDP with servers
-+ * between the NATs.
-+ *
-+ * If no destaction is specified, auto is used.
-+ *   destaction=auto:  strip destination parameter if it is not stunaddr.
-+ *   destaction=strip: always strip destination parameter (not recommended).
-+ *   destaction=none:  do not touch destination parameter (not recommended).
-+ */
-+
-+#include <linux/module.h>
-+#include <net/tcp.h>
-+#include <net/netfilter/nf_nat_helper.h>
-+#include <net/netfilter/nf_nat_rule.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+
-+#include <linux/inet.h>
-+#include <linux/ctype.h>
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS       8
-+#define DSTACT_AUTO     0
-+#define DSTACT_STRIP    1
-+#define DSTACT_NONE     2
-+
-+static char*    stunaddr = NULL;
-+static char*    destaction = NULL;
-+
-+static u_int32_t extip = 0;
-+static int       dstact = 0;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP network address translation module");
-+MODULE_LICENSE("GPL");
-+module_param(stunaddr, charp, 0644);
-+MODULE_PARM_DESC(stunaddr, "Address for detecting STUN");
-+module_param(destaction, charp, 0644);
-+MODULE_PARM_DESC(destaction, "Action for destination parameter (auto/strip/none)");
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*** helper functions ***/
-+
-+static void
-+get_skb_tcpdata(struct sk_buff* skb, char** pptcpdata, uint* ptcpdatalen)
-+{
-+    struct iphdr*   iph  = ip_hdr(skb);
-+    struct tcphdr*  tcph = (void *)iph + ip_hdrlen(skb);
-+
-+    *pptcpdata = (char*)tcph +  tcph->doff*4;
-+    *ptcpdatalen = ((char*)skb_transport_header(skb) + skb->len) - *pptcpdata;
-+}
-+
-+/*** nat functions ***/
-+
-+/*
-+ * Mangle the "Transport:" header:
-+ *   - Replace all occurences of "client_port=<spec>"
-+ *   - Handle destination parameter
-+ *
-+ * In:
-+ *   ct, ctinfo = conntrack context
-+ *   skb        = packet
-+ *   tranoff    = Transport header offset from TCP data
-+ *   tranlen    = Transport header length (incl. CRLF)
-+ *   rport_lo   = replacement low  port (host endian)
-+ *   rport_hi   = replacement high port (host endian)
-+ *
-+ * Returns packet size difference.
-+ *
-+ * Assumes that a complete transport header is present, ending with CR or LF
-+ */
-+static int
-+rtsp_mangle_tran(enum ip_conntrack_info ctinfo,
-+                 struct nf_conntrack_expect* exp,
-+                                                               struct ip_ct_rtsp_expect* prtspexp,
-+                 struct sk_buff* skb, uint tranoff, uint tranlen)
-+{
-+    char*       ptcp;
-+    uint        tcplen;
-+    char*       ptran;
-+    char        rbuf1[16];      /* Replacement buffer (one port) */
-+    uint        rbuf1len;       /* Replacement len (one port) */
-+    char        rbufa[16];      /* Replacement buffer (all ports) */
-+    uint        rbufalen;       /* Replacement len (all ports) */
-+    u_int32_t   newip;
-+    u_int16_t   loport, hiport;
-+    uint        off = 0;
-+    uint        diff;           /* Number of bytes we removed */
-+
-+    struct nf_conn *ct = exp->master;
-+    struct nf_conntrack_tuple *t;
-+
-+    char    szextaddr[15+1];
-+    uint    extaddrlen;
-+    int     is_stun;
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    ptran = ptcp+tranoff;
-+
-+    if (tranoff+tranlen > tcplen || tcplen-tranoff < tranlen ||
-+        tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+        nf_strncasecmp(ptran, "Transport:", 10) != 0)
-+    {
-+        INFOP("sanity check failed\n");
-+        return 0;
-+    }
-+    off += 10;
-+    SKIP_WSPACE(ptcp+tranoff, tranlen, off);
-+
-+    newip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+    t = &exp->tuple;
-+    t->dst.u3.ip = newip;
-+
-+    extaddrlen = extip ? sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(extip))
-+                       : sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(newip));
-+    DEBUGP("stunaddr=%s (%s)\n", szextaddr, (extip?"forced":"auto"));
-+
-+    rbuf1len = rbufalen = 0;
-+    switch (prtspexp->pbtype)
-+    {
-+    case pb_single:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu\n", loport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu", loport);
-+        }
-+        break;
-+    case pb_range:
-+        for (loport = prtspexp->loport; loport != 0; loport += 2) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                hiport = loport + ~exp->mask.src.u.udp.port;
-+                DEBUGP("using ports %hu-%hu\n", loport, hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu-%hu", loport, loport+1);
-+        }
-+        break;
-+    case pb_discon:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (1 of 2)\n", loport);
-+                break;
-+            }
-+        }
-+        for (hiport = prtspexp->hiport; hiport != 0; hiport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(hiport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (2 of 2)\n", hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0 && hiport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            if (hiport == loport+1)
-+            {
-+                rbufalen = sprintf(rbufa, "%hu-%hu", loport, hiport);
-+            }
-+            else
-+            {
-+                rbufalen = sprintf(rbufa, "%hu/%hu", loport, hiport);
-+            }
-+        }
-+        break;
-+    }
-+
-+    if (rbuf1len == 0)
-+    {
-+        return 0;   /* cannot get replacement port(s) */
-+    }
-+
-+    /* Transport: tran;field;field=val,tran;field;field=val,... */
-+    while (off < tranlen)
-+    {
-+        uint        saveoff;
-+        const char* pparamend;
-+        uint        nextparamoff;
-+
-+        pparamend = memchr(ptran+off, ',', tranlen-off);
-+        pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+        nextparamoff = pparamend-ptcp;
-+
-+        /*
-+         * We pass over each param twice.  On the first pass, we look for a
-+         * destination= field.  It is handled by the security policy.  If it
-+         * is present, allowed, and equal to our external address, we assume
-+         * that STUN is being used and we leave the client_port= field alone.
-+         */
-+        is_stun = 0;
-+        saveoff = off;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (dstact != DSTACT_NONE && strncmp(ptran+off, "destination=", 12) == 0)
-+            {
-+                if (strncmp(ptran+off+12, szextaddr, extaddrlen) == 0)
-+                {
-+                    is_stun = 1;
-+                }
-+                if (dstact == DSTACT_STRIP || (dstact == DSTACT_AUTO && !is_stun))
-+                {
-+                    diff = nextfieldoff-off;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                                         off, diff, NULL, 0))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+        if (is_stun)
-+        {
-+            continue;
-+        }
-+        off = saveoff;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (strncmp(ptran+off, "client_port=", 12) == 0)
-+            {
-+                u_int16_t   port;
-+                uint        numlen;
-+                uint        origoff;
-+                uint        origlen;
-+                char*       rbuf    = rbuf1;
-+                uint        rbuflen = rbuf1len;
-+
-+                off += 12;
-+                origoff = (ptran-ptcp)+off;
-+                origlen = 0;
-+                numlen = nf_strtou16(ptran+off, &port);
-+                off += numlen;
-+                origlen += numlen;
-+                if (port != prtspexp->loport)
-+                {
-+                    DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                }
-+                else
-+                {
-+                    if (ptran[off] == '-' || ptran[off] == '/')
-+                    {
-+                        off++;
-+                        origlen++;
-+                        numlen = nf_strtou16(ptran+off, &port);
-+                        off += numlen;
-+                        origlen += numlen;
-+                        rbuf = rbufa;
-+                        rbuflen = rbufalen;
-+                    }
-+
-+                    /*
-+                     * note we cannot just memcpy() if the sizes are the same.
-+                     * the mangle function does skb resizing, checks for a
-+                     * cloned skb, and updates the checksums.
-+                     *
-+                     * parameter 4 below is offset from start of tcp data.
-+                     */
-+                    diff = origlen-rbuflen;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                              origoff, origlen, rbuf, rbuflen))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+
-+        off = nextparamoff;
-+    }
-+
-+    return 1;
-+}
-+
-+static uint
-+help_out(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+       unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+       struct nf_conntrack_expect* exp)
-+{
-+    char*   ptcp;
-+    uint    tcplen;
-+    uint    hdrsoff;
-+    uint    hdrslen;
-+    uint    lineoff;
-+    uint    linelen;
-+    uint    off;
-+
-+    //struct iphdr* iph = (struct iphdr*)skb->nh.iph;
-+    //struct tcphdr* tcph = (struct tcphdr*)((void*)iph + iph->ihl*4);
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    hdrsoff = matchoff;//exp->seq - ntohl(tcph->seq);
-+    hdrslen = matchlen;
-+    off = hdrsoff;
-+    DEBUGP("NAT rtsp help_out\n");
-+
-+    while (nf_mime_nextline(ptcp, hdrsoff+hdrslen, &off, &lineoff, &linelen))
-+    {
-+        if (linelen == 0)
-+        {
-+            break;
-+        }
-+        if (off > hdrsoff+hdrslen)
-+        {
-+            INFOP("!! overrun !!");
-+            break;
-+        }
-+        DEBUGP("hdr: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+
-+        if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0)
-+        {
-+            uint oldtcplen = tcplen;
-+          DEBUGP("hdr: Transport\n");
-+            if (!rtsp_mangle_tran(ctinfo, exp, prtspexp, skb, lineoff, linelen))
-+            {
-+              DEBUGP("hdr: Transport mangle failed");
-+                break;
-+            }
-+            get_skb_tcpdata(skb, &ptcp, &tcplen);
-+            hdrslen -= (oldtcplen-tcplen);
-+            off -= (oldtcplen-tcplen);
-+            lineoff -= (oldtcplen-tcplen);
-+            linelen -= (oldtcplen-tcplen);
-+            DEBUGP("rep: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+        }
-+    }
-+
-+    return NF_ACCEPT;
-+}
-+
-+static unsigned int
-+help(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+     unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+     struct nf_conntrack_expect* exp)
-+{
-+    int dir = CTINFO2DIR(ctinfo);
-+    int rc = NF_ACCEPT;
-+
-+    switch (dir)
-+    {
-+    case IP_CT_DIR_ORIGINAL:
-+        rc = help_out(skb, ctinfo, matchoff, matchlen, prtspexp, exp);
-+        break;
-+    case IP_CT_DIR_REPLY:
-+      DEBUGP("unmangle ! %u\n", ctinfo);
-+      /* XXX: unmangle */
-+      rc = NF_ACCEPT;
-+        break;
-+    }
-+    //UNLOCK_BH(&ip_rtsp_lock);
-+
-+    return rc;
-+}
-+
-+static void expected(struct nf_conn* ct, struct nf_conntrack_expect *exp)
-+{
-+    struct nf_nat_multi_range_compat mr;
-+    u_int32_t newdstip, newsrcip, newip;
-+
-+    struct nf_conn *master = ct->master;
-+
-+    newdstip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    newsrcip = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    //FIXME (how to port that ?)
-+    //code from 2.4 : newip = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC) ? newsrcip : newdstip;
-+    newip = newdstip;
-+
-+    DEBUGP("newsrcip=%u.%u.%u.%u, newdstip=%u.%u.%u.%u, newip=%u.%u.%u.%u\n",
-+           NIPQUAD(newsrcip), NIPQUAD(newdstip), NIPQUAD(newip));
-+
-+    mr.rangesize = 1;
-+    // We don't want to manip the per-protocol, just the IPs.
-+    mr.range[0].flags = IP_NAT_RANGE_MAP_IPS;
-+    mr.range[0].min_ip = mr.range[0].max_ip = newip;
-+
-+    nf_nat_setup_info(ct, &mr.range[0], IP_NAT_MANIP_DST);
-+}
-+
-+
-+static void __exit fini(void)
-+{
-+      nf_nat_rtsp_hook = NULL;
-+        nf_nat_rtsp_hook_expectfn = NULL;
-+      synchronize_net();
-+}
-+
-+static int __init init(void)
-+{
-+      printk("nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      BUG_ON(nf_nat_rtsp_hook);
-+      nf_nat_rtsp_hook = help;
-+        nf_nat_rtsp_hook_expectfn = &expected;
-+
-+      if (stunaddr != NULL)
-+              extip = in_aton(stunaddr);
-+
-+      if (destaction != NULL) {
-+              if (strcmp(destaction, "auto") == 0)
-+                      dstact = DSTACT_AUTO;
-+
-+              if (strcmp(destaction, "strip") == 0)
-+                      dstact = DSTACT_STRIP;
-+
-+              if (strcmp(destaction, "none") == 0)
-+                      dstact = DSTACT_NONE;
-+      }
-+
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
diff --git a/target/linux/generic-2.6/patches-2.6.33/200-sched_esfq.patch b/target/linux/generic-2.6/patches-2.6.33/200-sched_esfq.patch
deleted file mode 100644 (file)
index 1d51358..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
---- a/include/linux/pkt_sched.h
-+++ b/include/linux/pkt_sched.h
-@@ -173,8 +173,37 @@ struct tc_sfq_xstats {
-  *
-  *    The only reason for this is efficiency, it is possible
-  *    to change these parameters in compile time.
-+ *
-+ *    If you need to play with these values, use esfq instead.
-  */
-+/* ESFQ section */
-+
-+enum
-+{
-+        /* traditional */
-+      TCA_SFQ_HASH_CLASSIC,
-+      TCA_SFQ_HASH_DST,
-+      TCA_SFQ_HASH_SRC,
-+      TCA_SFQ_HASH_FWMARK,
-+      /* conntrack */
-+      TCA_SFQ_HASH_CTORIGDST,
-+      TCA_SFQ_HASH_CTORIGSRC,
-+      TCA_SFQ_HASH_CTREPLDST,
-+      TCA_SFQ_HASH_CTREPLSRC,
-+      TCA_SFQ_HASH_CTNATCHG,
-+};
-+
-+struct tc_esfq_qopt
-+{
-+      unsigned        quantum;        /* Bytes per round allocated to flow */
-+      int             perturb_period; /* Period of hash perturbation */
-+      __u32           limit;          /* Maximal packets in queue */
-+      unsigned        divisor;        /* Hash divisor  */
-+      unsigned        flows;          /* Maximal number of flows  */
-+      unsigned        hash_kind;      /* Hash function to use for flow identification */
-+};
-+
- /* RED section */
- enum {
---- a/net/sched/Kconfig
-+++ b/net/sched/Kconfig
-@@ -137,6 +137,37 @@ config NET_SCH_SFQ
-         To compile this code as a module, choose M here: the
-         module will be called sch_sfq.
-+config NET_SCH_ESFQ
-+      tristate "Enhanced Stochastic Fairness Queueing (ESFQ)"
-+      ---help---
-+        Say Y here if you want to use the Enhanced Stochastic Fairness
-+        Queueing (ESFQ) packet scheduling algorithm for some of your network
-+        devices or as a leaf discipline for a classful qdisc such as HTB or
-+        CBQ (see the top of <file:net/sched/sch_esfq.c> for details and
-+        references to the SFQ algorithm).
-+
-+        This is an enchanced SFQ version which allows you to control some
-+        hardcoded values in the SFQ scheduler.
-+
-+        ESFQ also adds control of the hash function used to identify packet
-+        flows. The original SFQ discipline hashes by connection; ESFQ add
-+        several other hashing methods, such as by src IP or by dst IP, which
-+        can be more fair to users in some networking situations.
-+
-+        To compile this code as a module, choose M here: the
-+        module will be called sch_esfq.
-+
-+config NET_SCH_ESFQ_NFCT
-+      bool "Connection Tracking Hash Types"
-+      depends on NET_SCH_ESFQ && NF_CONNTRACK
-+      ---help---
-+        Say Y here to enable support for hashing based on netfilter connection
-+        tracking information. This is useful for a router that is also using
-+        NAT to connect privately-addressed hosts to the Internet. If you want
-+        to provide fair distribution of upstream bandwidth, ESFQ must use
-+        connection tracking information, since all outgoing packets will share
-+        the same source address.
-+
- config NET_SCH_TEQL
-       tristate "True Link Equalizer (TEQL)"
-       ---help---
---- a/net/sched/Makefile
-+++ b/net/sched/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_NET_SCH_GRED)   += sch_gred.o
- obj-$(CONFIG_NET_SCH_INGRESS) += sch_ingress.o 
- obj-$(CONFIG_NET_SCH_DSMARK)  += sch_dsmark.o
- obj-$(CONFIG_NET_SCH_SFQ)     += sch_sfq.o
-+obj-$(CONFIG_NET_SCH_ESFQ)    += sch_esfq.o
- obj-$(CONFIG_NET_SCH_TBF)     += sch_tbf.o
- obj-$(CONFIG_NET_SCH_TEQL)    += sch_teql.o
- obj-$(CONFIG_NET_SCH_PRIO)    += sch_prio.o
---- /dev/null
-+++ b/net/sched/sch_esfq.c
-@@ -0,0 +1,702 @@
-+/*
-+ * net/sched/sch_esfq.c       Extended Stochastic Fairness Queueing discipline.
-+ *
-+ *            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:   Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
-+ *
-+ * Changes:   Alexander Atanasov, <alex@ssi.bg>
-+ *            Added dynamic depth,limit,divisor,hash_kind options.
-+ *            Added dst and src hashes.
-+ *
-+ *            Alexander Clouter, <alex@digriz.org.uk>
-+ *            Ported ESFQ to Linux 2.6.
-+ *
-+ *            Corey Hickey, <bugfood-c@fatooh.org>
-+ *            Maintenance of the Linux 2.6 port.
-+ *            Added fwmark hash (thanks to Robert Kurjata).
-+ *            Added usage of jhash.
-+ *            Added conntrack support.
-+ *            Added ctnatchg hash (thanks to Ben Pfountz).
-+ */
-+
-+#include <linux/module.h>
-+#include <asm/uaccess.h>
-+#include <asm/system.h>
-+#include <linux/bitops.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/jiffies.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/socket.h>
-+#include <linux/sockios.h>
-+#include <linux/in.h>
-+#include <linux/errno.h>
-+#include <linux/interrupt.h>
-+#include <linux/if_ether.h>
-+#include <linux/inet.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/notifier.h>
-+#include <linux/init.h>
-+#include <net/ip.h>
-+#include <net/netlink.h>
-+#include <linux/ipv6.h>
-+#include <net/route.h>
-+#include <linux/skbuff.h>
-+#include <net/sock.h>
-+#include <net/pkt_sched.h>
-+#include <linux/jhash.h>
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+#include <net/netfilter/nf_conntrack.h>
-+#endif
-+
-+/*    Stochastic Fairness Queuing algorithm.
-+      For more comments look at sch_sfq.c.
-+      The difference is that you can change limit, depth,
-+      hash table size and choose alternate hash types.
-+
-+      classic:        same as in sch_sfq.c
-+      dst:            destination IP address
-+      src:            source IP address
-+      fwmark:         netfilter mark value
-+      ctorigdst:      original destination IP address
-+      ctorigsrc:      original source IP address
-+      ctrepldst:      reply destination IP address
-+      ctreplsrc:      reply source IP
-+
-+*/
-+
-+#define ESFQ_HEAD 0
-+#define ESFQ_TAIL 1
-+
-+/* This type should contain at least SFQ_DEPTH*2 values */
-+typedef unsigned int esfq_index;
-+
-+struct esfq_head
-+{
-+      esfq_index      next;
-+      esfq_index      prev;
-+};
-+
-+struct esfq_sched_data
-+{
-+/* Parameters */
-+      int             perturb_period;
-+      unsigned        quantum;        /* Allotment per round: MUST BE >= MTU */
-+      int             limit;
-+      unsigned        depth;
-+      unsigned        hash_divisor;
-+      unsigned        hash_kind;
-+/* Variables */
-+      struct timer_list perturb_timer;
-+      int             perturbation;
-+      esfq_index      tail;           /* Index of current slot in round */
-+      esfq_index      max_depth;      /* Maximal depth */
-+
-+      esfq_index      *ht;                    /* Hash table */
-+      esfq_index      *next;                  /* Active slots link */
-+      short           *allot;                 /* Current allotment per slot */
-+      unsigned short  *hash;                  /* Hash value indexed by slots */
-+      struct sk_buff_head     *qs;            /* Slot queue */
-+      struct esfq_head        *dep;           /* Linked list of slots, indexed by depth */
-+};
-+
-+/* This contains the info we will hash. */
-+struct esfq_packet_info
-+{
-+      u32     proto;          /* protocol or port */
-+      u32     src;            /* source from packet header */
-+      u32     dst;            /* destination from packet header */
-+      u32     ctorigsrc;      /* original source from conntrack */
-+      u32     ctorigdst;      /* original destination from conntrack */
-+      u32     ctreplsrc;      /* reply source from conntrack */
-+      u32     ctrepldst;      /* reply destination from conntrack */
-+      u32     mark;           /* netfilter mark (fwmark) */
-+};
-+
-+static __inline__ unsigned esfq_jhash_1word(struct esfq_sched_data *q,u32 a)
-+{
-+      return jhash_1word(a, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_2words(struct esfq_sched_data *q, u32 a, u32 b)
-+{
-+      return jhash_2words(a, b, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_3words(struct esfq_sched_data *q, u32 a, u32 b, u32 c)
-+{
-+      return jhash_3words(a, b, c, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static unsigned esfq_hash(struct esfq_sched_data *q, struct sk_buff *skb)
-+{
-+      struct esfq_packet_info info;
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      enum ip_conntrack_info ctinfo;
-+      struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
-+#endif
-+
-+      switch (skb->protocol) {
-+      case __constant_htons(ETH_P_IP):
-+      {
-+              struct iphdr *iph = ip_hdr(skb);
-+              info.dst = iph->daddr;
-+              info.src = iph->saddr;
-+              if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) &&
-+                  (iph->protocol == IPPROTO_TCP ||
-+                   iph->protocol == IPPROTO_UDP ||
-+                   iph->protocol == IPPROTO_SCTP ||
-+                   iph->protocol == IPPROTO_DCCP ||
-+                   iph->protocol == IPPROTO_ESP))
-+                      info.proto = *(((u32*)iph) + iph->ihl);
-+              else
-+                      info.proto = iph->protocol;
-+              break;
-+      }
-+      case __constant_htons(ETH_P_IPV6):
-+      {
-+              struct ipv6hdr *iph = ipv6_hdr(skb);
-+              /* Hash ipv6 addresses into a u32. This isn't ideal,
-+               * but the code is simple. */
-+              info.dst = jhash2(iph->daddr.s6_addr32, 4, q->perturbation);
-+              info.src = jhash2(iph->saddr.s6_addr32, 4, q->perturbation);
-+              if (iph->nexthdr == IPPROTO_TCP ||
-+                  iph->nexthdr == IPPROTO_UDP ||
-+                  iph->nexthdr == IPPROTO_SCTP ||
-+                  iph->nexthdr == IPPROTO_DCCP ||
-+                  iph->nexthdr == IPPROTO_ESP)
-+                      info.proto = *(u32*)&iph[1];
-+              else
-+                      info.proto = iph->nexthdr;
-+              break;
-+      }
-+      default:
-+              info.dst   = (u32)(unsigned long)skb_dst(skb);
-+              info.src   = (u32)(unsigned long)skb->sk;
-+              info.proto = skb->protocol;
-+      }
-+
-+      info.mark = skb->mark;
-+
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      /* defaults if there is no conntrack info */
-+      info.ctorigsrc = info.src;
-+      info.ctorigdst = info.dst;
-+      info.ctreplsrc = info.dst;
-+      info.ctrepldst = info.src;
-+      /* collect conntrack info */
-+      if (ct && ct != &nf_conntrack_untracked) {
-+              if (skb->protocol == __constant_htons(ETH_P_IP)) {
-+                      info.ctorigsrc = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+                      info.ctorigdst = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip;
-+                      info.ctreplsrc = ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip;
-+                      info.ctrepldst = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+              }
-+              else if (skb->protocol == __constant_htons(ETH_P_IPV6)) {
-+                      /* Again, hash ipv6 addresses into a single u32. */
-+                      info.ctorigsrc = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctorigdst = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip6, 4, q->perturbation);
-+                      info.ctreplsrc = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctrepldst = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip6, 4, q->perturbation);
-+              }
-+
-+      }
-+#endif
-+
-+      switch(q->hash_kind) {
-+      case TCA_SFQ_HASH_CLASSIC:
-+              return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+      case TCA_SFQ_HASH_DST:
-+              return esfq_jhash_1word(q, info.dst);
-+      case TCA_SFQ_HASH_SRC:
-+              return esfq_jhash_1word(q, info.src);
-+      case TCA_SFQ_HASH_FWMARK:
-+              return esfq_jhash_1word(q, info.mark);
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      case TCA_SFQ_HASH_CTORIGDST:
-+              return esfq_jhash_1word(q, info.ctorigdst);
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+              return esfq_jhash_1word(q, info.ctorigsrc);
-+      case TCA_SFQ_HASH_CTREPLDST:
-+              return esfq_jhash_1word(q, info.ctrepldst);
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      case TCA_SFQ_HASH_CTNATCHG:
-+      {
-+              if (info.ctorigdst == info.ctreplsrc)
-+                      return esfq_jhash_1word(q, info.ctorigsrc);
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      }
-+#endif
-+      default:
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash method. Falling back to classic.\n");
-+      }
-+      return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+}
-+
-+static inline void esfq_link(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d = q->qs[x].qlen + q->depth;
-+
-+      p = d;
-+      n = q->dep[d].next;
-+      q->dep[x].next = n;
-+      q->dep[x].prev = p;
-+      q->dep[p].next = q->dep[n].prev = x;
-+}
-+
-+static inline void esfq_dec(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+
-+      if (n == p && q->max_depth == q->qs[x].qlen + 1)
-+              q->max_depth--;
-+
-+      esfq_link(q, x);
-+}
-+
-+static inline void esfq_inc(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+      d = q->qs[x].qlen;
-+      if (q->max_depth < d)
-+              q->max_depth = d;
-+
-+      esfq_link(q, x);
-+}
-+
-+static unsigned int esfq_drop(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index d = q->max_depth;
-+      struct sk_buff *skb;
-+      unsigned int len;
-+
-+      /* Queue is full! Find the longest slot and
-+         drop a packet from it */
-+
-+      if (d > 1) {
-+              esfq_index x = q->dep[d+q->depth].next;
-+              skb = q->qs[x].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[x]);
-+              kfree_skb(skb);
-+              esfq_dec(q, x);
-+              sch->q.qlen--;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      if (d == 1) {
-+              /* It is difficult to believe, but ALL THE SLOTS HAVE LENGTH 1. */
-+              d = q->next[q->tail];
-+              q->next[q->tail] = q->next[d];
-+              q->allot[q->next[d]] += q->quantum;
-+              skb = q->qs[d].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[d]);
-+              kfree_skb(skb);
-+              esfq_dec(q, d);
-+              sch->q.qlen--;
-+              q->ht[q->hash[d]] = q->depth;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      return 0;
-+}
-+
-+static void esfq_q_enqueue(struct sk_buff *skb, struct esfq_sched_data *q, unsigned int end)
-+{
-+      unsigned hash = esfq_hash(q, skb);
-+      unsigned depth = q->depth;
-+      esfq_index x;
-+
-+      x = q->ht[hash];
-+      if (x == depth) {
-+              q->ht[hash] = x = q->dep[depth].next;
-+              q->hash[x] = hash;
-+      }
-+
-+      if (end == ESFQ_TAIL)
-+              __skb_queue_tail(&q->qs[x], skb);
-+      else
-+              __skb_queue_head(&q->qs[x], skb);
-+
-+      esfq_inc(q, x);
-+      if (q->qs[x].qlen == 1) {               /* The flow is new */
-+              if (q->tail == depth) { /* It is the first flow */
-+                      q->tail = x;
-+                      q->next[x] = x;
-+                      q->allot[x] = q->quantum;
-+              } else {
-+                      q->next[x] = q->next[q->tail];
-+                      q->next[q->tail] = x;
-+                      q->tail = x;
-+              }
-+      }
-+}
-+
-+static int esfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_enqueue(skb, q, ESFQ_TAIL);
-+      sch->qstats.backlog += skb->len;
-+      if (++sch->q.qlen < q->limit-1) {
-+              sch->bstats.bytes += skb->len;
-+              sch->bstats.packets++;
-+              return 0;
-+      }
-+
-+      sch->qstats.drops++;
-+      esfq_drop(sch);
-+      return NET_XMIT_CN;
-+}
-+
-+static struct sk_buff *esfq_peek(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index a;
-+
-+      /* No active slots */
-+      if (q->tail == q->depth)
-+              return NULL;
-+
-+      a = q->next[q->tail];
-+      return skb_peek(&q->qs[a]);
-+}
-+
-+static struct sk_buff *esfq_q_dequeue(struct esfq_sched_data *q)
-+{
-+      struct sk_buff *skb;
-+      unsigned depth = q->depth;
-+      esfq_index a, old_a;
-+
-+      /* No active slots */
-+      if (q->tail == depth)
-+              return NULL;
-+
-+      a = old_a = q->next[q->tail];
-+
-+      /* Grab packet */
-+      skb = __skb_dequeue(&q->qs[a]);
-+      esfq_dec(q, a);
-+
-+      /* Is the slot empty? */
-+      if (q->qs[a].qlen == 0) {
-+              q->ht[q->hash[a]] = depth;
-+              a = q->next[a];
-+              if (a == old_a) {
-+                      q->tail = depth;
-+                      return skb;
-+              }
-+              q->next[q->tail] = a;
-+              q->allot[a] += q->quantum;
-+      } else if ((q->allot[a] -= skb->len) <= 0) {
-+              q->tail = a;
-+              a = q->next[a];
-+              q->allot[a] += q->quantum;
-+      }
-+
-+      return skb;
-+}
-+
-+static struct sk_buff *esfq_dequeue(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct sk_buff *skb;
-+
-+      skb = esfq_q_dequeue(q);
-+      if (skb == NULL)
-+              return NULL;
-+      sch->q.qlen--;
-+      sch->qstats.backlog -= skb->len;
-+      return skb;
-+}
-+
-+static void esfq_q_destroy(struct esfq_sched_data *q)
-+{
-+      del_timer(&q->perturb_timer);
-+      if(q->ht)
-+              kfree(q->ht);
-+      if(q->dep)
-+              kfree(q->dep);
-+      if(q->next)
-+              kfree(q->next);
-+      if(q->allot)
-+              kfree(q->allot);
-+      if(q->hash)
-+              kfree(q->hash);
-+      if(q->qs)
-+              kfree(q->qs);
-+}
-+
-+static void esfq_destroy(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_destroy(q);
-+}
-+
-+
-+static void esfq_reset(struct Qdisc* sch)
-+{
-+      struct sk_buff *skb;
-+
-+      while ((skb = esfq_dequeue(sch)) != NULL)
-+              kfree_skb(skb);
-+}
-+
-+static void esfq_perturbation(unsigned long arg)
-+{
-+      struct Qdisc *sch = (struct Qdisc*)arg;
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+
-+      q->perturbation = net_random()&0x1F;
-+
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+}
-+
-+static unsigned int esfq_check_hash(unsigned int kind)
-+{
-+      switch (kind) {
-+      case TCA_SFQ_HASH_CTORIGDST:
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+      case TCA_SFQ_HASH_CTREPLDST:
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+      case TCA_SFQ_HASH_CTNATCHG:
-+#ifndef CONFIG_NET_SCH_ESFQ_NFCT
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Conntrack hash types disabled in kernel config. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+#endif
-+      case TCA_SFQ_HASH_CLASSIC:
-+      case TCA_SFQ_HASH_DST:
-+      case TCA_SFQ_HASH_SRC:
-+      case TCA_SFQ_HASH_FWMARK:
-+              return kind;
-+      default:
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash type. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+      }
-+}
-+
-+static int esfq_q_init(struct esfq_sched_data *q, struct nlattr *opt)
-+{
-+      struct tc_esfq_qopt *ctl = nla_data(opt);
-+      esfq_index p = ~0U/2;
-+      int i;
-+
-+      if (opt && opt->nla_len < nla_attr_size(sizeof(*ctl)))
-+              return -EINVAL;
-+
-+      q->perturbation = 0;
-+      q->hash_kind = TCA_SFQ_HASH_CLASSIC;
-+      q->max_depth = 0;
-+      if (opt == NULL) {
-+              q->perturb_period = 0;
-+              q->hash_divisor = 1024;
-+              q->tail = q->limit = q->depth = 128;
-+
-+      } else {
-+              struct tc_esfq_qopt *ctl = nla_data(opt);
-+              if (ctl->quantum)
-+                      q->quantum = ctl->quantum;
-+              q->perturb_period = ctl->perturb_period*HZ;
-+              q->hash_divisor = ctl->divisor ? : 1024;
-+              q->tail = q->limit = q->depth = ctl->flows ? : 128;
-+
-+              if ( q->depth > p - 1 )
-+                      return -EINVAL;
-+
-+              if (ctl->limit)
-+                      q->limit = min_t(u32, ctl->limit, q->depth);
-+
-+              if (ctl->hash_kind) {
-+                      q->hash_kind = esfq_check_hash(ctl->hash_kind);
-+              }
-+      }
-+
-+      q->ht = kmalloc(q->hash_divisor*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->ht)
-+              goto err_case;
-+      q->dep = kmalloc((1+q->depth*2)*sizeof(struct esfq_head), GFP_KERNEL);
-+      if (!q->dep)
-+              goto err_case;
-+      q->next = kmalloc(q->depth*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->next)
-+              goto err_case;
-+      q->allot = kmalloc(q->depth*sizeof(short), GFP_KERNEL);
-+      if (!q->allot)
-+              goto err_case;
-+      q->hash = kmalloc(q->depth*sizeof(unsigned short), GFP_KERNEL);
-+      if (!q->hash)
-+              goto err_case;
-+      q->qs = kmalloc(q->depth*sizeof(struct sk_buff_head), GFP_KERNEL);
-+      if (!q->qs)
-+              goto err_case;
-+
-+      for (i=0; i< q->hash_divisor; i++)
-+              q->ht[i] = q->depth;
-+      for (i=0; i<q->depth; i++) {
-+              skb_queue_head_init(&q->qs[i]);
-+              q->dep[i+q->depth].next = i+q->depth;
-+              q->dep[i+q->depth].prev = i+q->depth;
-+      }
-+
-+      for (i=0; i<q->depth; i++)
-+              esfq_link(q, i);
-+      return 0;
-+err_case:
-+      esfq_q_destroy(q);
-+      return -ENOBUFS;
-+}
-+
-+static int esfq_init(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      int err;
-+
-+      q->quantum = psched_mtu(qdisc_dev(sch)); /* default */
-+      if ((err = esfq_q_init(q, opt)))
-+              return err;
-+
-+      init_timer(&q->perturb_timer);
-+      q->perturb_timer.data = (unsigned long)sch;
-+      q->perturb_timer.function = esfq_perturbation;
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+
-+      return 0;
-+}
-+
-+static int esfq_change(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct esfq_sched_data new;
-+      struct sk_buff *skb;
-+      int err;
-+
-+      /* set up new queue */
-+      memset(&new, 0, sizeof(struct esfq_sched_data));
-+      new.quantum = psched_mtu(qdisc_dev(sch)); /* default */
-+      if ((err = esfq_q_init(&new, opt)))
-+              return err;
-+
-+      /* copy all packets from the old queue to the new queue */
-+      sch_tree_lock(sch);
-+      while ((skb = esfq_q_dequeue(q)) != NULL)
-+              esfq_q_enqueue(skb, &new, ESFQ_TAIL);
-+
-+      /* clean up the old queue */
-+      esfq_q_destroy(q);
-+
-+      /* copy elements of the new queue into the old queue */
-+      q->perturb_period = new.perturb_period;
-+      q->quantum        = new.quantum;
-+      q->limit          = new.limit;
-+      q->depth          = new.depth;
-+      q->hash_divisor   = new.hash_divisor;
-+      q->hash_kind      = new.hash_kind;
-+      q->tail           = new.tail;
-+      q->max_depth      = new.max_depth;
-+      q->ht    = new.ht;
-+      q->dep   = new.dep;
-+      q->next  = new.next;
-+      q->allot = new.allot;
-+      q->hash  = new.hash;
-+      q->qs    = new.qs;
-+
-+      /* finish up */
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      } else {
-+              q->perturbation = 0;
-+      }
-+      sch_tree_unlock(sch);
-+      return 0;
-+}
-+
-+static int esfq_dump(struct Qdisc *sch, struct sk_buff *skb)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      unsigned char *b = skb_tail_pointer(skb);
-+      struct tc_esfq_qopt opt;
-+
-+      opt.quantum = q->quantum;
-+      opt.perturb_period = q->perturb_period/HZ;
-+
-+      opt.limit = q->limit;
-+      opt.divisor = q->hash_divisor;
-+      opt.flows = q->depth;
-+      opt.hash_kind = q->hash_kind;
-+
-+      NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
-+
-+      return skb->len;
-+
-+nla_put_failure:
-+      nlmsg_trim(skb, b);
-+      return -1;
-+}
-+
-+static struct Qdisc_ops esfq_qdisc_ops =
-+{
-+      .next           =       NULL,
-+      .cl_ops         =       NULL,
-+      .id             =       "esfq",
-+      .priv_size      =       sizeof(struct esfq_sched_data),
-+      .enqueue        =       esfq_enqueue,
-+      .dequeue        =       esfq_dequeue,
-+      .peek           =       esfq_peek,
-+      .drop           =       esfq_drop,
-+      .init           =       esfq_init,
-+      .reset          =       esfq_reset,
-+      .destroy        =       esfq_destroy,
-+      .change         =       esfq_change,
-+      .dump           =       esfq_dump,
-+      .owner          =       THIS_MODULE,
-+};
-+
-+static int __init esfq_module_init(void)
-+{
-+      return register_qdisc(&esfq_qdisc_ops);
-+}
-+static void __exit esfq_module_exit(void)
-+{
-+      unregister_qdisc(&esfq_qdisc_ops);
-+}
-+module_init(esfq_module_init)
-+module_exit(esfq_module_exit)
-+MODULE_LICENSE("GPL");
diff --git a/target/linux/generic-2.6/patches-2.6.33/201-jhash3.patch b/target/linux/generic-2.6/patches-2.6.33/201-jhash3.patch
deleted file mode 100644 (file)
index 0218fa1..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
---- a/include/linux/jhash.h
-+++ b/include/linux/jhash.h
-@@ -3,80 +3,95 @@
- /* jhash.h: Jenkins hash support.
-  *
-- * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)
-+ * Copyright (C) 2006. Bob Jenkins (bob_jenkins@burtleburtle.net)
-  *
-  * http://burtleburtle.net/bob/hash/
-  *
-  * These are the credits from Bob's sources:
-  *
-- * lookup2.c, by Bob Jenkins, December 1996, Public Domain.
-- * hash(), hash2(), hash3, and mix() are externally useful functions.
-- * Routines to test the hash are included if SELF_TEST is defined.
-- * You can use this free for any purpose.  It has no warranty.
-+ * lookup3.c, by Bob Jenkins, May 2006, Public Domain.
-  *
-- * Copyright (C) 2003 David S. Miller (davem@redhat.com)
-+ * These are functions for producing 32-bit hashes for hash table lookup.
-+ * hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() 
-+ * are externally useful functions.  Routines to test the hash are included 
-+ * if SELF_TEST is defined.  You can use this free for any purpose.  It's in
-+ * the public domain.  It has no warranty.
-+ *
-+ * Copyright (C) 2009 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
-  *
-  * I've modified Bob's hash to be useful in the Linux kernel, and
-- * any bugs present are surely my fault.  -DaveM
-+ * any bugs present are my fault.  Jozsef
-  */
--/* NOTE: Arguments are modified. */
--#define __jhash_mix(a, b, c) \
-+#define __rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
-+
-+/* __jhash_mix - mix 3 32-bit values reversibly. */
-+#define __jhash_mix(a,b,c) \
-+{ \
-+  a -= c;  a ^= __rot(c, 4);  c += b; \
-+  b -= a;  b ^= __rot(a, 6);  a += c; \
-+  c -= b;  c ^= __rot(b, 8);  b += a; \
-+  a -= c;  a ^= __rot(c,16);  c += b; \
-+  b -= a;  b ^= __rot(a,19);  a += c; \
-+  c -= b;  c ^= __rot(b, 4);  b += a; \
-+}
-+
-+/* __jhash_final - final mixing of 3 32-bit values (a,b,c) into c */
-+#define __jhash_final(a,b,c) \
- { \
--  a -= b; a -= c; a ^= (c>>13); \
--  b -= c; b -= a; b ^= (a<<8); \
--  c -= a; c -= b; c ^= (b>>13); \
--  a -= b; a -= c; a ^= (c>>12);  \
--  b -= c; b -= a; b ^= (a<<16); \
--  c -= a; c -= b; c ^= (b>>5); \
--  a -= b; a -= c; a ^= (c>>3);  \
--  b -= c; b -= a; b ^= (a<<10); \
--  c -= a; c -= b; c ^= (b>>15); \
-+  c ^= b; c -= __rot(b,14); \
-+  a ^= c; a -= __rot(c,11); \
-+  b ^= a; b -= __rot(a,25); \
-+  c ^= b; c -= __rot(b,16); \
-+  a ^= c; a -= __rot(c,4);  \
-+  b ^= a; b -= __rot(a,14); \
-+  c ^= b; c -= __rot(b,24); \
- }
--/* The golden ration: an arbitrary value */
--#define JHASH_GOLDEN_RATIO    0x9e3779b9
-+/* An arbitrary initial parameter */
-+#define JHASH_GOLDEN_RATIO    0xdeadbeef
- /* The most generic version, hashes an arbitrary sequence
-  * of bytes.  No alignment or length assumptions are made about
-- * the input key.
-+ * the input key. The result depends on endianness.
-  */
- static inline u32 jhash(const void *key, u32 length, u32 initval)
- {
--      u32 a, b, c, len;
-+      u32 a,b,c;
-       const u8 *k = key;
--      len = length;
--      a = b = JHASH_GOLDEN_RATIO;
--      c = initval;
--
--      while (len >= 12) {
--              a += (k[0] +((u32)k[1]<<8) +((u32)k[2]<<16) +((u32)k[3]<<24));
--              b += (k[4] +((u32)k[5]<<8) +((u32)k[6]<<16) +((u32)k[7]<<24));
--              c += (k[8] +((u32)k[9]<<8) +((u32)k[10]<<16)+((u32)k[11]<<24));
--
--              __jhash_mix(a,b,c);
-+      /* Set up the internal state */
-+      a = b = c = JHASH_GOLDEN_RATIO + length + initval;
-+      /* all but the last block: affect some 32 bits of (a,b,c) */
-+      while (length > 12) {
-+              a += (k[0] + ((u32)k[1]<<8) + ((u32)k[2]<<16) + ((u32)k[3]<<24));
-+              b += (k[4] + ((u32)k[5]<<8) + ((u32)k[6]<<16) + ((u32)k[7]<<24));
-+              c += (k[8] + ((u32)k[9]<<8) + ((u32)k[10]<<16) + ((u32)k[11]<<24));
-+              __jhash_mix(a, b, c);
-+              length -= 12;
-               k += 12;
--              len -= 12;
-       }
--      c += length;
--      switch (len) {
--      case 11: c += ((u32)k[10]<<24);
--      case 10: c += ((u32)k[9]<<16);
--      case 9 : c += ((u32)k[8]<<8);
--      case 8 : b += ((u32)k[7]<<24);
--      case 7 : b += ((u32)k[6]<<16);
--      case 6 : b += ((u32)k[5]<<8);
-+      /* last block: affect all 32 bits of (c) */
-+      /* all the case statements fall through */
-+      switch (length) {
-+      case 12: c += (u32)k[11]<<24;
-+      case 11: c += (u32)k[10]<<16;
-+      case 10: c += (u32)k[9]<<8;
-+      case 9 : c += k[8];
-+      case 8 : b += (u32)k[7]<<24;
-+      case 7 : b += (u32)k[6]<<16;
-+      case 6 : b += (u32)k[5]<<8;
-       case 5 : b += k[4];
--      case 4 : a += ((u32)k[3]<<24);
--      case 3 : a += ((u32)k[2]<<16);
--      case 2 : a += ((u32)k[1]<<8);
-+      case 4 : a += (u32)k[3]<<24;
-+      case 3 : a += (u32)k[2]<<16;
-+      case 2 : a += (u32)k[1]<<8;
-       case 1 : a += k[0];
--      };
--
--      __jhash_mix(a,b,c);
-+              __jhash_final(a, b, c);
-+      case 0 :
-+              break;
-+      }
-       return c;
- }
-@@ -86,58 +101,57 @@ static inline u32 jhash(const void *key,
-  */
- static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
- {
--      u32 a, b, c, len;
-+      u32 a, b, c;
--      a = b = JHASH_GOLDEN_RATIO;
--      c = initval;
--      len = length;
-+      /* Set up the internal state */
-+      a = b = c = JHASH_GOLDEN_RATIO + (length<<2) + initval;
--      while (len >= 3) {
-+      /* handle most of the key */
-+      while (length > 3) {
-               a += k[0];
-               b += k[1];
-               c += k[2];
-               __jhash_mix(a, b, c);
--              k += 3; len -= 3;
-+              length -= 3;
-+              k += 3;
-       }
--      c += length * 4;
--
--      switch (len) {
--      case 2 : b += k[1];
--      case 1 : a += k[0];
--      };
--
--      __jhash_mix(a,b,c);
-+      /* handle the last 3 u32's */
-+      /* all the case statements fall through */ 
-+      switch (length) {
-+      case 3: c += k[2];
-+      case 2: b += k[1];
-+      case 1: a += k[0];
-+              __jhash_final(a, b, c);
-+      case 0:     /* case 0: nothing left to add */
-+              break;
-+      }
-       return c;
- }
--
- /* A special ultra-optimized versions that knows they are hashing exactly
-  * 3, 2 or 1 word(s).
-- *
-- * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally
-- *       done at the end is not done here.
-  */
- static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
- {
--      a += JHASH_GOLDEN_RATIO;
--      b += JHASH_GOLDEN_RATIO;
--      c += initval;
-+      a += JHASH_GOLDEN_RATIO + initval;
-+      b += JHASH_GOLDEN_RATIO + initval;
-+      c += JHASH_GOLDEN_RATIO + initval;
--      __jhash_mix(a, b, c);
-+      __jhash_final(a, b, c);
-       return c;
- }
- static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
- {
--      return jhash_3words(a, b, 0, initval);
-+      return jhash_3words(0, a, b, initval);
- }
- static inline u32 jhash_1word(u32 a, u32 initval)
- {
--      return jhash_3words(a, 0, 0, initval);
-+      return jhash_3words(0, 0, a, initval);
- }
- #endif /* _LINUX_JHASH_H */
diff --git a/target/linux/generic-2.6/patches-2.6.33/202-mips_mem_functions_performance.patch b/target/linux/generic-2.6/patches-2.6.33/202-mips_mem_functions_performance.patch
deleted file mode 100644 (file)
index 6ea9ba5..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/arch/mips/include/asm/string.h
-+++ b/arch/mips/include/asm/string.h
-@@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ 
- #define __HAVE_ARCH_MEMSET
- extern void *memset(void *__s, int __c, size_t __count);
-+#define memset(__s, __c, len)                                 \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memset((__s), (__c), __len);            \
-+      else                                                    \
-+              __ret = __builtin_memset((__s), (__c), __len);  \
-+      __ret;                                                  \
-+})
- #define __HAVE_ARCH_MEMCPY
- extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
-+#define memcpy(dst, src, len)                                 \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memcpy((dst), (src), __len);            \
-+      else                                                    \
-+              __ret = __builtin_memcpy((dst), (src), __len);  \
-+      __ret;                                                  \
-+})
- #define __HAVE_ARCH_MEMMOVE
- extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
-+#define memmove(dst, src, len)                                        \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memmove((dst), (src), __len);           \
-+      else                                                    \
-+              __ret = __builtin_memmove((dst), (src), __len); \
-+      __ret;                                                  \
-+})
-+
-+#define __HAVE_ARCH_MEMCMP
-+#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len))
- #endif /* _ASM_STRING_H */
---- a/arch/mips/lib/Makefile
-+++ b/arch/mips/lib/Makefile
-@@ -3,7 +3,7 @@
- #
- lib-y += csum_partial.o delay.o memcpy.o memcpy-inatomic.o memset.o \
--         strlen_user.o strncpy_user.o strnlen_user.o uncached.o
-+         strlen_user.o strncpy_user.o strnlen_user.o uncached.o memcmp.o
- obj-y                 += iomap.o
- obj-$(CONFIG_PCI)     += iomap-pci.o
---- /dev/null
-+++ b/arch/mips/lib/memcmp.c
-@@ -0,0 +1,22 @@
-+/*
-+ *  copied from linux/lib/string.c
-+ *
-+ *  Copyright (C) 1991, 1992  Linus Torvalds
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+
-+#undef memcmp
-+int memcmp(const void *cs, const void *ct, size_t count)
-+{
-+      const unsigned char *su1, *su2;
-+      int res = 0;
-+
-+      for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
-+              if ((res = *su1 - *su2) != 0)
-+                      break;
-+      return res;
-+}
-+EXPORT_SYMBOL(memcmp);
-+
diff --git a/target/linux/generic-2.6/patches-2.6.33/203-slab_maxsize.patch b/target/linux/generic-2.6/patches-2.6.33/203-slab_maxsize.patch
deleted file mode 100644 (file)
index 0c1ae72..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/include/linux/slab.h
-+++ b/include/linux/slab.h
-@@ -124,8 +124,8 @@ int kmem_ptr_validate(struct kmem_cache 
-  * to do various tricks to work around compiler limitations in order to
-  * ensure proper constant folding.
-  */
--#define KMALLOC_SHIFT_HIGH    ((MAX_ORDER + PAGE_SHIFT - 1) <= 25 ? \
--                              (MAX_ORDER + PAGE_SHIFT - 1) : 25)
-+#define KMALLOC_SHIFT_HIGH    ((MAX_ORDER + PAGE_SHIFT - 1) <= 17 ? \
-+                              (MAX_ORDER + PAGE_SHIFT - 1) : 17)
- #define KMALLOC_MAX_SIZE      (1UL << KMALLOC_SHIFT_HIGH)
- #define KMALLOC_MAX_ORDER     (KMALLOC_SHIFT_HIGH - PAGE_SHIFT)
diff --git a/target/linux/generic-2.6/patches-2.6.33/204-jffs2_eofdetect.patch b/target/linux/generic-2.6/patches-2.6.33/204-jffs2_eofdetect.patch
deleted file mode 100644 (file)
index 16d3e1f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
---- a/fs/jffs2/build.c
-+++ b/fs/jffs2/build.c
-@@ -111,6 +111,17 @@ static int jffs2_build_filesystem(struct
-       dbg_fsbuild("scanned flash completely\n");
-       jffs2_dbg_dump_block_lists_nolock(c);
-+      if (c->flags & (1 << 7)) {
-+              printk("%s(): unlocking the mtd device... ", __func__);
-+              if (c->mtd->unlock)
-+                      c->mtd->unlock(c->mtd, 0, c->mtd->size);
-+              printk("done.\n");
-+
-+              printk("%s(): erasing all blocks after the end marker... ", __func__);
-+              jffs2_erase_pending_blocks(c, -1);
-+              printk("done.\n");
-+      }
-+
-       dbg_fsbuild("pass 1 starting\n");
-       c->flags |= JFFS2_SB_FLAG_BUILDING;
-       /* Now scan the directory tree, increasing nlink according to every dirent found. */
---- a/fs/jffs2/scan.c
-+++ b/fs/jffs2/scan.c
-@@ -72,7 +72,7 @@ static int file_dirty(struct jffs2_sb_in
-               return ret;
-       if ((ret = jffs2_scan_dirty_space(c, jeb, jeb->free_size)))
-               return ret;
--      /* Turned wasted size into dirty, since we apparently 
-+      /* Turned wasted size into dirty, since we apparently
-          think it's recoverable now. */
-       jeb->dirty_size += jeb->wasted_size;
-       c->dirty_size += jeb->wasted_size;
-@@ -144,8 +144,11 @@ int jffs2_scan_medium(struct jffs2_sb_in
-               /* reset summary info for next eraseblock scan */
-               jffs2_sum_reset_collected(s);
--              ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
--                                              buf_size, s);
-+              if (c->flags & (1 << 7))
-+                      ret = BLK_STATE_ALLFF;
-+              else
-+                      ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
-+                                                      buf_size, s);
-               if (ret < 0)
-                       goto out;
-@@ -400,7 +403,7 @@ static int jffs2_scan_xref_node(struct j
-       if (!ref)
-               return -ENOMEM;
--      /* BEFORE jffs2_build_xattr_subsystem() called, 
-+      /* BEFORE jffs2_build_xattr_subsystem() called,
-        * and AFTER xattr_ref is marked as a dead xref,
-        * ref->xid is used to store 32bit xid, xd is not used
-        * ref->ino is used to store 32bit inode-number, ic is not used
-@@ -473,7 +476,7 @@ static int jffs2_scan_eraseblock (struct
-               struct jffs2_sum_marker *sm;
-               void *sumptr = NULL;
-               uint32_t sumlen;
--            
-+
-               if (!buf_size) {
-                       /* XIP case. Just look, point at the summary if it's there */
-                       sm = (void *)buf + c->sector_size - sizeof(*sm);
-@@ -489,9 +492,9 @@ static int jffs2_scan_eraseblock (struct
-                               buf_len = sizeof(*sm);
-                       /* Read as much as we want into the _end_ of the preallocated buffer */
--                      err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len, 
-+                      err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len,
-                                                 jeb->offset + c->sector_size - buf_len,
--                                                buf_len);                             
-+                                                buf_len);
-                       if (err)
-                               return err;
-@@ -510,9 +513,9 @@ static int jffs2_scan_eraseblock (struct
-                               }
-                               if (buf_len < sumlen) {
-                                       /* Need to read more so that the entire summary node is present */
--                                      err = jffs2_fill_scan_buf(c, sumptr, 
-+                                      err = jffs2_fill_scan_buf(c, sumptr,
-                                                                 jeb->offset + c->sector_size - sumlen,
--                                                                sumlen - buf_len);                            
-+                                                                sumlen - buf_len);
-                                       if (err)
-                                               return err;
-                               }
-@@ -525,7 +528,7 @@ static int jffs2_scan_eraseblock (struct
-                       if (buf_size && sumlen > buf_size)
-                               kfree(sumptr);
--                      /* If it returns with a real error, bail. 
-+                      /* If it returns with a real error, bail.
-                          If it returns positive, that's a block classification
-                          (i.e. BLK_STATE_xxx) so return that too.
-                          If it returns zero, fall through to full scan. */
-@@ -546,6 +549,17 @@ static int jffs2_scan_eraseblock (struct
-                       return err;
-       }
-+      if ((buf[0] == 0xde) &&
-+              (buf[1] == 0xad) &&
-+              (buf[2] == 0xc0) &&
-+              (buf[3] == 0xde)) {
-+              /* end of filesystem. erase everything after this point */
-+              printk("%s(): End of filesystem marker found at 0x%x\n", __func__, jeb->offset);
-+              c->flags |= (1 << 7);
-+
-+              return BLK_STATE_ALLFF;
-+      }
-+
-       /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
-       ofs = 0;
-@@ -671,7 +685,7 @@ scan_more:
-                               scan_end = buf_len;
-                               goto more_empty;
-                       }
--                      
-+
-                       /* See how much more there is to read in this eraseblock... */
-                       buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
-                       if (!buf_len) {
-@@ -907,7 +921,7 @@ scan_more:
-       D1(printk(KERN_DEBUG "Block at 0x%08x: free 0x%08x, dirty 0x%08x, unchecked 0x%08x, used 0x%08x, wasted 0x%08x\n",
-                 jeb->offset,jeb->free_size, jeb->dirty_size, jeb->unchecked_size, jeb->used_size, jeb->wasted_size));
--      
-+
-       /* mark_node_obsolete can add to wasted !! */
-       if (jeb->wasted_size) {
-               jeb->dirty_size += jeb->wasted_size;
diff --git a/target/linux/generic-2.6/patches-2.6.33/205-skb_padding.patch b/target/linux/generic-2.6/patches-2.6.33/205-skb_padding.patch
deleted file mode 100644 (file)
index 6e6d28b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -1377,11 +1377,18 @@ static inline int skb_network_offset(con
-  *
-  * Various parts of the networking layer expect at least 32 bytes of
-  * headroom, you should not reduce this.
-+ *
-+ * This has been changed to 64 to acommodate for routing between ethernet
-+ * and wireless, but only for new allocations
-  */
- #ifndef NET_SKB_PAD
- #define NET_SKB_PAD   32
- #endif
-+#ifndef NET_SKB_PAD_ALLOC
-+#define NET_SKB_PAD_ALLOC     64
-+#endif
-+
- extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
- static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
-@@ -1471,9 +1478,9 @@ static inline void __skb_queue_purge(str
- static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
-                                             gfp_t gfp_mask)
- {
--      struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask);
-+      struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask);
-       if (likely(skb))
--              skb_reserve(skb, NET_SKB_PAD);
-+              skb_reserve(skb, NET_SKB_PAD_ALLOC);
-       return skb;
- }
-@@ -1556,7 +1563,7 @@ static inline int __skb_cow(struct sk_bu
-               delta = headroom - skb_headroom(skb);
-       if (delta || cloned)
--              return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
-+              return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD_ALLOC), 0,
-                                       GFP_ATOMIC);
-       return 0;
- }
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -339,9 +339,9 @@ struct sk_buff *__netdev_alloc_skb(struc
-       int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1;
-       struct sk_buff *skb;
--      skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node);
-+      skb = __alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask, 0, node);
-       if (likely(skb)) {
--              skb_reserve(skb, NET_SKB_PAD);
-+              skb_reserve(skb, NET_SKB_PAD_ALLOC);
-               skb->dev = dev;
-       }
-       return skb;
diff --git a/target/linux/generic-2.6/patches-2.6.33/207-powerpc_asm_segment_h.patch b/target/linux/generic-2.6/patches-2.6.33/207-powerpc_asm_segment_h.patch
deleted file mode 100644 (file)
index 1272e82..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
---- /dev/null
-+++ b/include/asm-powerpc/segment.h
-@@ -0,0 +1,6 @@
-+#ifndef _ASM_SEGMENT_H
-+#define _ASM_SEGMENT_H
-+
-+/* Only here because we have some old header files that expect it.. */
-+
-+#endif /* _ASM_SEGMENT_H */
diff --git a/target/linux/generic-2.6/patches-2.6.33/208-mips_oprofile_fix.patch b/target/linux/generic-2.6/patches-2.6.33/208-mips_oprofile_fix.patch
deleted file mode 100644 (file)
index 0cbf4ed..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -49,7 +49,9 @@ ifneq ($(SUBARCH),$(ARCH))
- endif
- ifndef CONFIG_FUNCTION_TRACER
--cflags-y := -ffunction-sections
-+  ifndef CONFIG_PROFILING
-+    cflags-y := -ffunction-sections
-+  endif
- endif
- ifdef CONFIG_FUNCTION_GRAPH_TRACER
-   ifndef KBUILD_MCOUNT_RA_ADDRESS
---- a/arch/mips/oprofile/op_model_mipsxx.c
-+++ b/arch/mips/oprofile/op_model_mipsxx.c
-@@ -298,6 +298,11 @@ static void reset_counters(void *arg)
-       }
- }
-+static irqreturn_t mipsxx_perfcount_int(int irq, void *dev_id)
-+{
-+      return mipsxx_perfcount_handler();
-+}
-+
- static int __init mipsxx_init(void)
- {
-       int counters;
-@@ -374,6 +379,10 @@ static int __init mipsxx_init(void)
-       save_perf_irq = perf_irq;
-       perf_irq = mipsxx_perfcount_handler;
-+      if (cp0_perfcount_irq >= 0)
-+              return request_irq(cp0_perfcount_irq, mipsxx_perfcount_int,
-+                      IRQF_SHARED, "Perfcounter", save_perf_irq);
-+
-       return 0;
- }
-@@ -381,6 +390,9 @@ static void mipsxx_exit(void)
- {
-       int counters = op_model_mipsxx_ops.num_counters;
-+      if (cp0_perfcount_irq >= 0)
-+              free_irq(cp0_perfcount_irq, save_perf_irq);
-+
-       counters = counters_per_cpu_to_total(counters);
-       on_each_cpu(reset_counters, (void *)(long)counters, 1);
diff --git a/target/linux/generic-2.6/patches-2.6.33/209-mini_fo.patch b/target/linux/generic-2.6/patches-2.6.33/209-mini_fo.patch
deleted file mode 100644 (file)
index b2625cd..0000000
+++ /dev/null
@@ -1,7782 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -180,6 +180,7 @@ source "fs/ubifs/Kconfig"
- source "fs/cramfs/Kconfig"
- source "fs/squashfs/Kconfig"
- source "fs/freevxfs/Kconfig"
-+source "fs/mini_fo/Kconfig"
- source "fs/minix/Kconfig"
- source "fs/omfs/Kconfig"
- source "fs/hpfs/Kconfig"
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -77,6 +77,7 @@ obj-$(CONFIG_SQUASHFS)               += squashfs/
- obj-y                         += ramfs/
- obj-$(CONFIG_HUGETLBFS)               += hugetlbfs/
- obj-$(CONFIG_CODA_FS)         += coda/
-+obj-$(CONFIG_MINI_FO)         += mini_fo/
- obj-$(CONFIG_MINIX_FS)                += minix/
- obj-$(CONFIG_FAT_FS)          += fat/
- obj-$(CONFIG_BFS_FS)          += bfs/
---- /dev/null
-+++ b/fs/mini_fo/aux.c
-@@ -0,0 +1,577 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/* check if file exists in storage  */
-+int exists_in_storage(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+      if(dtost(dentry) == MODIFIED || dtost(dentry) == CREATED || dtost(dentry) == DEL_REWRITTEN)
-+              return 1;
-+      return 0;
-+}
-+
-+/* check if dentry is in an existing state */
-+int is_mini_fo_existant(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) == DELETED || dtost(dentry) == NON_EXISTANT)
-+              return 0;
-+      else
-+              return 1;
-+}
-+
-+/*
-+ * This function will create a negative storage dentry for
-+ * dentry, what is required for many create like options.
-+ * It will create the storage structure if necessary.
-+ */
-+int get_neg_sto_dentry(dentry_t *dentry)
-+{
-+      int err = 0;
-+      unsigned int len;
-+      const unsigned char *name;
-+
-+      if(!dentry ||
-+         !dtopd(dentry) ||
-+         !(dtost(dentry) == UNMODIFIED ||
-+           dtost(dentry) == NON_EXISTANT ||
-+           dtost(dentry) == DELETED)) {
-+              printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      /* Have we got a neg. dentry already? */
-+      if(dtohd2(dentry)) {
-+              err = 0;
-+              goto out;
-+      }
-+      if(dtost(dentry->d_parent) == UNMODIFIED) {
-+              /* build sto struct */
-+              err = build_sto_structure(dentry->d_parent->d_parent, dentry->d_parent);
-+              if(err ||
-+                 dtost(dentry->d_parent) != MODIFIED) {
-+                      printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: ERROR building sto structure.\n");
-+                      err = -1;
-+                      goto out;
-+              }
-+      }
-+
-+      len = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+
-+      dtohd2(dentry) =
-+              lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+
-+ out:
-+      return err;
-+}
-+
-+int check_mini_fo_dentry(dentry_t *dentry)
-+{
-+      ASSERT(dentry != NULL);
-+      ASSERT(dtopd(dentry) != NULL);
-+      ASSERT((dtohd(dentry) != NULL) || (dtohd2(dentry) != NULL));
-+
-+/*    if(dtost(dentry) == MODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT(dtohd(dentry) != NULL); */
-+/*            ASSERT(dtohd(dentry)->d_inode != NULL); */
-+/*            ASSERT(dtohd2(dentry) != NULL); */
-+/*            ASSERT(dtohd2(dentry)->d_inode != NULL); */
-+/*    } */
-+/*    else if(dtost(dentry) == UNMODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT( */
-+/*    } */
-+      return 0;
-+}
-+
-+int check_mini_fo_file(file_t *file)
-+{
-+      ASSERT(file != NULL);
-+      ASSERT(ftopd(file) != NULL);
-+      ASSERT(file->f_dentry != NULL);
-+
-+      /* violent checking, check depending of state and type
-+       *      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {}
-+       */
-+      ASSERT((ftohf(file) != NULL) || (ftohf2(file) != NULL));
-+      return 0;
-+}
-+
-+int check_mini_fo_inode(inode_t *inode)
-+{
-+      ASSERT(inode != NULL);
-+      ASSERT(itopd(inode) != NULL);
-+      ASSERT((itohi(inode) != NULL) || (itohi2(inode) != NULL));
-+      return 0;
-+}
-+
-+/*
-+ * will walk a base path as provided by get_mini_fo_bpath and return
-+ * the (hopefully ;-) ) positive dentry of the renamed base dir.
-+ *
-+ * This does some work of path_init.
-+ */
-+dentry_t *bpath_walk(super_block_t *sb, char *bpath)
-+{
-+      int err;
-+        struct vfsmount *mnt;
-+      struct nameidata nd;
-+
-+      /* be paranoid */
-+      if(!bpath || bpath[0] != '/') {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid string.\n");
-+              return NULL;
-+      }
-+      if(!sb || !stopd(sb)) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid sb.\n");
-+              return NULL;
-+      }
-+
-+      /* fix this: how do I reach this lock?
-+       * read_lock(&current->fs->lock); */
-+      mnt = mntget(stopd(sb)->hidden_mnt);
-+      /* read_unlock(&current->fs->lock); */
-+
-+      err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-+
-+      /* validate */
-+      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-+              return NULL;
-+      }
-+      return nd.dentry;
-+}
-+
-+
-+/* returns the full path of the basefile incl. its name */
-+int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len)
-+{
-+      char *buf_walker;
-+      int len = 0;
-+      dentry_t *sky_walker;
-+
-+      if(!dentry || !dtohd(dentry)) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              len += sky_walker->d_name.len + 1 ; /* 1 for '/' */
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* 1 to oil the loop */
-+      *bpath = (char*)  kmalloc(len + 1, GFP_KERNEL);
-+      if(!*bpath) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: out of mem.\n");
-+              return -1;
-+      }
-+      buf_walker = *bpath+len; /* put it on last char */
-+      *buf_walker = '\n';
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              buf_walker -= sky_walker->d_name.len;
-+              strncpy(buf_walker,
-+                      sky_walker->d_name.name,
-+                      sky_walker->d_name.len);
-+              *(--buf_walker) = '/';
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* bpath_len doesn't count newline! */
-+      *bpath_len = len;
-+      return 0;
-+}
-+
-+int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                  dentry_t *src_dentry, struct vfsmount *src_mnt)
-+{
-+      void *buf;
-+      mm_segment_t old_fs;
-+      file_t *tgt_file;
-+      file_t *src_file;
-+      int bytes, len, tmp, err;
-+      err = 0;
-+
-+      if(!(tgt_dentry->d_inode && src_dentry->d_inode)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, neg. dentry passed.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dget(tgt_dentry);
-+      dget(src_dentry);
-+      mntget(tgt_mnt);
-+      mntget(src_mnt);
-+
-+      /* open file write only */
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      if(!tgt_file || IS_ERR(tgt_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-+              err = PTR_ERR(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* open file read only */
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      if(!src_file || IS_ERR(src_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-+              err = PTR_ERR(src_file);
-+
-+              /* close target file */
-+              fput(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* check if the filesystem(s) support read respective write */
-+      if(!src_file->f_op->read || !tgt_file->f_op->write) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, no fs read or write support.\n");
-+              err = -EPERM;
-+              goto out_close;
-+      }
-+
-+      /* allocate a page for transfering the data */
-+      buf = (void *) __get_free_page(GFP_KERNEL);
-+      if(!buf) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, out of kernel mem.\n");
-+              goto out_err;
-+      }
-+
-+      tgt_file->f_pos = 0;
-+      src_file->f_pos = 0;
-+
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+
-+      /* Doing this I assume that a read operation will return a full
-+       * buffer while there is still data to read, and a less than
-+       * full buffer when all data has been read.
-+       */
-+      bytes = len = PAGE_SIZE;
-+      while(bytes == len) {
-+              bytes = src_file->f_op->read(src_file, buf, len,
-+                                           &src_file->f_pos);
-+              tmp = tgt_file->f_op->write(tgt_file, buf, bytes,
-+                                          &tgt_file->f_pos);
-+              if(tmp != bytes) {
-+                      printk(KERN_CRIT "mini_fo_cp_cont: ERROR writing.\n");
-+                      goto out_close_unset;
-+              }
-+      }
-+
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+      fput(tgt_file);
-+      fput(src_file);
-+      goto out;
-+
-+ out_close_unset:
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+
-+ out_close:
-+      fput(tgt_file);
-+      fput(src_file);
-+
-+ out_err:
-+      dput(tgt_dentry);
-+      dput(src_dentry);
-+
-+      /* mk: not sure if this need to be done */
-+      mntput(tgt_mnt);
-+      mntput(src_mnt);
-+
-+ out:
-+      return err;
-+}
-+
-+/* mk:
-+ * ndl (no-duplicate list) stuff
-+ * This is used in mini_fo_readdir, to save the storage directory contents
-+ * and later when reading base, match them against the list in order
-+ * to avoid duplicates.
-+ */
-+
-+/* add a file specified by name and len to the ndl
-+ * Return values: 0 on success, <0 on failure.
-+ */
-+int ndl_add_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct ndl_entry *tmp_entry;
-+
-+      tmp_entry = (struct ndl_entry *)
-+              kmalloc(sizeof(struct ndl_entry), GFP_KERNEL);
-+      if(!tmp_entry) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+        tmp_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!tmp_entry->name) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+      strncpy(tmp_entry->name, name, len);
-+        tmp_entry->len = len;
-+
-+        list_add(&tmp_entry->list, &rd->ndl_list);
-+        rd->ndl_size++;
-+        return 0;
-+}
-+
-+/* delete all list entries and free memory */
-+void ndl_put_list(struct readdir_data *rd)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return;
-+      while(!list_empty(&rd->ndl_list)) {
-+              tmp = rd->ndl_list.next;
-+                list_del(tmp);
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+              kfree(tmp_entry->name);
-+                kfree(tmp_entry);
-+        }
-+      rd->ndl_size = 0;
-+}
-+
-+/* Check if a file specified by name and len is in the ndl
-+ * Return value: 0 if not in list, 1 if file is found in ndl.
-+ */
-+int ndl_check_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return 0;
-+
-+      list_for_each(tmp, &rd->ndl_list) {
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+                if(tmp_entry->len != len)
-+                        continue;
-+                if(!strncmp(tmp_entry->name, name, len))
-+                        return 1;
-+        }
-+        return 0;
-+}
-+
-+/* mk:
-+ * Recursive function to create corresponding directorys in the storage fs.
-+ * The function will build the storage directorys up to dentry.
-+ */
-+int build_sto_structure(dentry_t *dir, dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(dentry->d_parent != dir) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [1].\n");
-+              return 1;
-+      }
-+
-+              if(dtost(dir) != MODIFIED) {
-+              err = build_sto_structure(dir->d_parent, dentry->d_parent);
-+              if(err)
-+                      return err;
-+      }
-+
-+      /* ok, coming back again. */
-+      check_mini_fo_dentry(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(!hidden_sto_dentry) {
-+              /*
-+               * This is the case after creating the first
-+               * hidden_sto_dentry.
-+               * After one negative storage_dentry, all pointers to
-+               * hidden_storage dentries are set to NULL. We need to
-+               * create the negative dentry before we create the storage
-+               * file.
-+               */
-+              unsigned int len;
-+              const unsigned char *name;
-+              len = dtohd(dentry)->d_name.len;
-+              name = dtohd(dentry)->d_name.name;
-+              hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              dtohd2(dentry) = hidden_sto_dentry;
-+      }
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      /* lets be safe */
-+      if(dtohd2(dir) != hidden_sto_dir_dentry) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [2].\n");
-+              return 1;
-+      }
-+
-+      /* check for errors in lock_parent */
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if(IS_ERR(hidden_sto_dir_dentry)) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: lock_parent failed.\n");
-+              return err;
-+      }
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      dir->d_inode->i_mode);
-+
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [1].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return err;
-+      }
-+
-+      /* everything ok! */
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [2].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return 1;
-+      }
-+
-+      /* interpose the new inode and set new state */
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      dtopd(dentry)->state = MODIFIED;
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+      fist_copy_attr_timesizes(dir->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dir->d_inode->i_nlink++;
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+      return 0;
-+}
-+
-+
-+#if 0 /* unused */
-+
-+/*
-+ * Read "len" bytes from "filename" into "buf".
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_read_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+    /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDONLY, 0);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_read_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->read)
-+      return -2;  /* file(system) doesn't allow reads */
-+
-+    /* now read len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->read(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+
-+
-+/*
-+ * Write "len" bytes from "buf" to "filename"
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_write_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+                              /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDWR|O_CREAT, 0640);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_write_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->write)
-+      return -2;  /* file(system) doesn't allow writes */
-+
-+    /* now write len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->write(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+#endif /* unused */
-+
---- /dev/null
-+++ b/fs/mini_fo/ChangeLog
-@@ -0,0 +1,281 @@
-+2006-01-24  Markus Klotzbuecher  <mk@mary.denx.de>
-+
-+      * Add tons of ugly ifdefs to Ed L. Cashin's mutex patch to
-+          retain backwards compatibility.
-+
-+2006-01-24  Ed L. Cashin <ecashin@coraid.com>
-+
-+      * Support for the new mutex infrastructure
-+      (7892f2f48d165a34b0b8130c8a195dfd807b8cb6)
-+
-+2005-10-15  Markus Klotzbuecher  <mk@localhost.localdomain>
-+
-+      * Bugfix for a serious memory leak in mini_fo_follow_link.
-+
-+2005-09-21  Markus Klotzbuecher  <mk@mary>
-+
-+      * new release 0.6.1
-+
-+      * fix of a compiler warning due to changes in 2.6.13
-+
-+2005-09-21  Klaus Wenninger  <klaus.wenninger@siemens.com>
-+
-+      * file.c: readdir: fix for a bug that caused directory entries
-+          to show up twice when using storage filesystems such as
-+          minixfs or pramfs.
-+
-+2005-06-30  Eric Lammerts <eric@lammerts.org>
-+
-+      * fix for an oops when overwriting a binary thats beeing
-+          executed.
-+
-+2005-06-09    <mk@mary>
-+
-+      * Renamed overlay to mini_fo-overlay.
-+
-+      * Added mini_fo-merge script to allow merging of storage and base
-+      after making modifications.
-+
-+2005-05-22  root  <mk@mary>
-+
-+      * Added overlay script that allows to easily mount mini_fo ontop
-+      of a given base directory
-+
-+2005-05-10    <mk@mary>
-+
-+      * inode.c: xattr functions return -EOPNOSUPP instead of
-+          -ENOSUPP, what confuses "ls -l"
-+
-+      * Changed license from LGPL to GPL.
-+
-+2005-05-08  root  <mk@mary>
-+
-+      * Makefile: clean it up and added make install and make
-+          uninstall.
-+
-+2005-05-06    <mk@mary>
-+
-+      * merged devel branch back to main. [v0-6-0-pre3]
-+
-+      * removed unused files print.c and fist_ioctl. [devel-0-0-18]
-+
-+      * ioctl: removed fist_ioctl stuff, that is not needed for
-+          now.
-+
-+2005-05-03    <mk@mary>
-+
-+      * file.c: simplified mini_fo_open and mini_fo_setattr using
-+          new state changing functions. [devel-0-0-17]
-+
-+      * inode.c: Fixed getattr state bug (see below) in 2.4 function
-+          mini_fo_inode revalidate.
-+
-+      * inode.c: found an other bug in mini_fo_getattr. States are not
-+        reliable in this function, as a file can be opened, unlinked and
-+        the getattr function called. This results in a deleted dentry
-+        with an inode. Fix is to ignore states and simply use the inode
-+        available.
-+
-+2005-04-29    <mk@mary>
-+
-+      * file.c: Bugfix and cleanup in fasync and fsync. [devel-0-0-16]
-+
-+      * file.c: do not use mini_fo_lock so the generic version is
-+          used (I guess).
-+
-+      * inode.c: getattr, never call getattr on lower files, as this
-+          will cause the inum to change.
-+
-+      * inode.c: rename_reg_file renamed to rename_nondir, as it
-+          doesn't matter as long it't not a dir. Removed all
-+          rename_dev_file etc.
-+
-+      * tagged as devel-0-0-15
-+
-+      * inode.c: added support for chosing support for extended
-+          attrs at compile time by XATTR define in mini_fo.h .
-+
-+      * inode.c: fixed mini_fo_getattr to use mini_fo inode and not
-+          lower again, what avoids inode number changes that confused
-+          rm again. This is the proper solution.
-+
-+2005-04-24    <mk@mary>
-+
-+      * all files: updated Copyright notive to 2005. [devel-0-0-14]
-+
-+      * inode.c: fixed mini_fo_getattr to not change the inode
-+          number, even if lower files change.
-+
-+      * super.c: fixed a bug that caused deleted base file to show
-+          up suddenly after some time, or after creating a special
-+          file. The problem was that after some time or after special
-+          file creating sync_sb_inodes is called by the vfs, that
-+          called our mini_fo_put_inode. There was (wrongly) called
-+          __meta_put_lists, that nuked the lists, although the inode
-+          was going to continue its life. Moving __meta_put_lists to
-+          mini_fo_clear_inode, where an inode is really destroyed,
-+          solved the problem.
-+
-+
-+2005-04-23    <mk@mary>
-+
-+      * state.c, aux.c: more cleaning up and
-+          simplifications. [devel-0-0-13]
-+
-+      * inode.c: implemented mini_fo_getattr, that was required for
-+          2.6 because inode_revalidate has been remove there, and the
-+        old "du" bug returned.
-+
-+
-+2005-04-20    <mk@mary>
-+
-+      * aux.c: get_neg_sto_dentry(): allow to be called for dentries
-+          in state UNMODIFIED, NON_EXISTANT _and_ DELETED.
-+
-+2005-04-19    <mk@mary>
-+
-+      * Fixed a bug under 2.6 that caused files deleted via mini_fo
-+          not to be deleted properly and therefore the fs filled up
-+          untill no memory was left. [devel-0-0-12]
-+
-+      * Added basic hard link support. This means that creating
-+          hardlinks will work, but existing ones will be treated as
-+          individual files. [devel-0-0-11]
-+
-+2005-04-17    <mk@mary>
-+
-+      * Bugfixes
-+
-+2005-04-13  root  <mk@mary>
-+
-+      * Added file state.c for the state transition
-+          functions. Doesn't work very well yet, though...
-+
-+2005-04-12    <mk@mary>
-+
-+      * Porting to 2.6 started, which is easier than expected, also
-+          due to Olivier previous work.
-+
-+2005-04-08    <mk@mary>
-+
-+      * Fixed the bug that caused du to return invalid sizes of
-+          directory trees. The problem was that
-+          mini_fo_inode_revalidate didn't always copy the attributes
-+          from the base inode properly.
-+
-+2005-04-01  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Merged devel branch back to main trunk and updated the
-+          RELEASE notes. This will be 0-6-0-pre1.
-+
-+2005-03-31  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed some bugs in rename_reg_file, that only showed up in
-+          the kernel compile test. Kernel compiles cleanly ontop of
-+          mini_fo, now also make mrproper etc. work. Seems pretty stable.
-+
-+2005-03-28  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Many, many directory renaming bugfixes and a lot of other
-+          cleanup. Dir renaming seems to work relatively stable.
-+
-+2005-03-22  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing lightweight directory renaming. Some
-+          basic testing indicates it works fine.
-+        Next is to implement testcases for the testsuite and confirm
-+          everything is really working ok.
-+
-+2005-03-18  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing meta.c stuff required for directory
-+          renaming.
-+
-+2005-03-17  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed all compile warnings + an extremly old bug that
-+          somehow crept in while reworking the wol stuff to the META
-+          system. Turning on -Werror again... :-)
-+
-+      * Fixed some bugs in the new rename_reg_file function.
-+
-+      * Rewrote mini_fo rename and split it into several
-+          subfunctions, that handle the different types
-+          seperately. Rewrote the regular file function aswell, as it
-+          was implemented somewhat inefficient.
-+
-+2005-03-16  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Implemented new META subsystem, removed old WOL stuff in favor
-+        if it.
-+
-+      * After some basic testing everything seems ok...
-+
-+2005-03-11  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Renaming a non regular file caused trouble because I always
-+        tried to copy the contents. Now I only do this for regular
-+        files. mini_fo_rename still isn't implemented properly, renaming
-+        of device files, symlinks etc. results in a empty regular file
-+        instead of the proper type.
-+
-+      * Directory renaming suddenly works! What a surprise! I guess
-+          this is because renaming is implemented as making a copy and
-+          removing the original. Still this might not work
-+          everywhere...
-+
-+2005-03-09  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Bugfix, when a mini_fo directory that exists in storage
-+        (state: MODIFIED, CREATED and DEL_REWRITTEN) is deleted, a
-+        possibly existing WOL file contained in it needs to be
-+        deleted too.
-+
-+      * Starting cleanup: defined state names in order to get rid of
-+          the state numbers.
-+
-+2005-03-08  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Makefile fix, fist_ioctl was built against wrong sources if ARCH=um
-+
-+      * Fixed a bug in dentry.c, mini_fo_d_hash. In state 4 =
-+          DEL_REWRITTEN the hash was calculated from the base dentry,
-+          which was wrong and and caused assertions in
-+          __mini_fo_hidden_dentry to fail.
-+
-+2005-02-21    <mk@mary>
-+
-+      * Implemented directory deleting (inode.c)
-+
-+      * main.c: made mini_fo_parse_options a little more robust.
-+
-+2004-12-22    <mk@mary>
-+
-+      * Makefile cleanup and uml stuff, removed unneccessary files
-+
-+      * Created a new and hopefully more informative README
-+
-+      * CHANGELOG: created a new CHANGELOG and added old entries reversely
-+
-+
-+2004-10-24 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Fix: owner and group where not correctly copied from base to
-+          storage.
-+
-+
-+2004-10-05 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of fsync, fasync and lock mini_fo functions.
-+
-+
-+2004-09-29 Bob Lee <bob@pantasys.com>
-+
-+      * Fix of a serious pointer bug
-+
-+
-+2004-09-28 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of mini_fo_mknod and mini_fo_rename, support
-+          for device files.
-+
---- /dev/null
-+++ b/fs/mini_fo/dentry.c
-@@ -0,0 +1,244 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/*
-+ * THIS IS A BOOLEAN FUNCTION: returns 1 if valid, 0 otherwise.
-+ */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_d_revalidate(dentry_t *dentry, struct nameidata *nd)
-+#else
-+mini_fo_d_revalidate(dentry_t *dentry, int flags)
-+#endif
-+{
-+      int err1 = 1; /* valid = 1, invalid = 0 */
-+      int err2 = 1;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      hidden_dentry  = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry &&
-+         hidden_dentry->d_op &&
-+         hidden_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, nd);
-+#else
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, flags);
-+#endif
-+      }
-+      if(hidden_sto_dentry &&
-+         hidden_sto_dentry->d_op &&
-+         hidden_sto_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           nd);
-+#else
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           flags);
-+#endif
-+      }
-+
-+      /* mk: if one of the lower level dentries are valid,
-+       * the mini_fo dentry is too.
-+       */
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_d_hash(dentry_t *dentry, qstr_t *name)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry);
-+       * hidden_sto_dentry = mini_fo_hidden_sto_dentry(dentry); */
-+
-+      /* state 1, 3, 4, 5: build the hash for the storage dentry */
-+      if((dtopd(dentry)->state == MODIFIED) ||
-+         (dtopd(dentry)->state == CREATED) ||
-+         (dtopd(dentry)->state == DEL_REWRITTEN) ||
-+         (dtopd(dentry)->state == DELETED)) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 2: build the hash for the base dentry */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 6: build hash for the dentry that exists */
-+      if(dtopd(dentry)->state == NON_EXISTANT) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+                      goto out;
-+              }
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+                      goto out;
-+              }
-+      }
-+
-+      printk(KERN_CRIT "mini_fo: d_hash: invalid state detected.\n");
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_d_compare(dentry_t *dentry, qstr_t *a, qstr_t *b)
-+{
-+      int err;
-+      dentry_t *hidden_dentry=NULL;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry); */
-+      if(dtohd2(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else if(dtohd(dentry))
-+              hidden_dentry = dtohd(dentry);
-+
-+      if (hidden_dentry && hidden_dentry->d_op && hidden_dentry->d_op->d_compare) {
-+              err = hidden_dentry->d_op->d_compare(hidden_dentry, a, b);
-+      } else {
-+              err = ((a->len != b->len) || memcmp(a->name, b->name, b->len));
-+      }
-+
-+      return err;
-+}
-+
-+
-+int
-+mini_fo_d_delete(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      int err = 0;
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_delete: negative dentry passed.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              if(hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_delete) {
-+                      err = hidden_dentry->d_op->d_delete(hidden_dentry);
-+              }
-+      }
-+      if(hidden_sto_dentry) {
-+              if(hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_delete) {
-+                      err = hidden_sto_dentry->d_op->d_delete(hidden_sto_dentry);
-+              }
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+void
-+mini_fo_d_release(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_release: no private data.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_dentry);
-+      }
-+      if(hidden_sto_dentry) {
-+                /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_sto_dentry);
-+      }
-+
-+      /* free private data (mini_fo_dentry_info) here */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* just to be safe */
-+ out:
-+      return;
-+}
-+
-+
-+/*
-+ * we don't really need mini_fo_d_iput, because dentry_iput will call iput() if
-+ * mini_fo_d_iput is not defined. We left this implemented for ease of
-+ * tracing/debugging.
-+ */
-+void
-+mini_fo_d_iput(dentry_t *dentry, inode_t *inode)
-+{
-+      iput(inode);
-+}
-+
-+
-+struct dentry_operations mini_fo_dops = {
-+      d_revalidate:   mini_fo_d_revalidate,
-+      d_hash:         mini_fo_d_hash,
-+      d_compare:              mini_fo_d_compare,
-+      d_release:              mini_fo_d_release,
-+      d_delete:               mini_fo_d_delete,
-+      d_iput:         mini_fo_d_iput,
-+};
---- /dev/null
-+++ b/fs/mini_fo/file.c
-@@ -0,0 +1,713 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1))
-+
-+/*******************
-+ * File Operations *
-+ *******************/
-+
-+STATIC loff_t
-+mini_fo_llseek(file_t *file, loff_t offset, int origin)
-+{
-+      loff_t err;
-+      file_t *hidden_file = NULL;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to llseek from a directory */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      /* always set hidden position to this one */
-+      hidden_file->f_pos = file->f_pos;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      memcpy(&(hidden_file->f_ra),
-+             &(file->f_ra),
-+             sizeof(struct file_ra_state));
-+#else
-+      if (file->f_reada) { /* update readahead information if needed */
-+              hidden_file->f_reada = file->f_reada;
-+              hidden_file->f_ramax = file->f_ramax;
-+              hidden_file->f_raend = file->f_raend;
-+              hidden_file->f_ralen = file->f_ralen;
-+              hidden_file->f_rawin = file->f_rawin;
-+      }
-+#endif
-+      if (hidden_file->f_op && hidden_file->f_op->llseek)
-+              err = hidden_file->f_op->llseek(hidden_file, offset, origin);
-+      else
-+              err = generic_file_llseek(hidden_file, offset, origin);
-+
-+      if (err < 0)
-+              goto out;
-+
-+      if (err != file->f_pos) {
-+              file->f_pos = err;
-+              // ION maybe this?
-+              //      file->f_pos = hidden_file->f_pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              file->f_reada = 0;
-+#endif
-+              file->f_version++;
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* mk: fanout capable */
-+STATIC ssize_t
-+mini_fo_read(file_t *file, char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      loff_t pos = *ppos;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to read from a directory */
-+              /* printk(KERN_CRIT "mini_fo_read: ERROR: trying to read data from a directory.\n"); */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->read)
-+              goto out;
-+
-+      err = hidden_file->f_op->read(hidden_file, buf, count, &pos);
-+      *ppos = pos;
-+
-+      if (err >= 0) {
-+              /* atime should also be updated for reads of size zero or more */
-+              fist_copy_attr_atime(file->f_dentry->d_inode,
-+                                   hidden_file->f_dentry->d_inode);
-+      }
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * MAJOR HACK
-+       * because pread() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on read() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+      if (hidden_file->f_reada) { /* update readahead information if needed */
-+              file->f_reada = hidden_file->f_reada;
-+              file->f_ramax = hidden_file->f_ramax;
-+              file->f_raend = hidden_file->f_raend;
-+              file->f_ralen = hidden_file->f_ralen;
-+              file->f_rawin = hidden_file->f_rawin;
-+      }
-+#else
-+      memcpy(&(file->f_ra),&(hidden_file->f_ra),sizeof(struct file_ra_state));
-+#endif
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* this mini_fo_write() does not modify data pages! */
-+STATIC ssize_t
-+mini_fo_write(file_t *file, const char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      loff_t pos = *ppos;
-+
-+      /* mk: fan out: */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      /* This is bad! We have no storage file to write to. This
-+                       * should never happen because if a file is opened for
-+                       * writing, a copy should have been made earlier.
-+                       */
-+                      printk(KERN_CRIT "mini_fo: write : ERROR, no storage file to write.\n");
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      inode = file->f_dentry->d_inode;
-+      hidden_inode = itohi2(inode);
-+      if(!hidden_inode) {
-+              printk(KERN_CRIT "mini_fo: write: no sto inode found, not good.\n");
-+              goto out;
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->write)
-+              goto out;
-+
-+      /* adjust for append -- seek to the end of the file */
-+      if (file->f_flags & O_APPEND)
-+              pos = inode->i_size;
-+
-+      err = hidden_file->f_op->write(hidden_file, buf, count, &pos);
-+
-+      /*
-+       * copy ctime and mtime from lower layer attributes
-+       * atime is unchanged for both layers
-+       */
-+      if (err >= 0)
-+              fist_copy_attr_times(inode, hidden_inode);
-+
-+      *ppos = pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * XXX: MAJOR HACK
-+       *
-+       * because pwrite() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on write() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+#endif
-+      /* update this inode's size */
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+ out:
-+      return err;
-+}
-+
-+/* Global variable to hold a file_t pointer.
-+ * This serves to allow mini_fo_filldir function to know which file is
-+ * beeing read, which is required for two reasons:
-+ *
-+ *   - be able to call wol functions in order to avoid listing deleted
-+ *     base files.
-+ *   - if we're reading a directory which is in state 1, we need to
-+ *     maintain a list (in mini_fo_filldir) of which files allready
-+ *     have been copied to userspace,to detect files existing in base
-+ *     and storage and not list them twice.
-+ */
-+filldir_t mini_fo_filldir_orig;
-+file_t *mini_fo_filldir_file;
-+
-+/* mainly copied from fs/readdir.c */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                u64 ino, unsigned int d_type)
-+#else
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                ino_t ino, unsigned int d_type)
-+#endif
-+{
-+      struct getdents_callback * buf = (struct getdents_callback *) __buf;
-+      file_t* file = mini_fo_filldir_file;
-+
-+      /* In theses states we filter meta files in storage (WOL) */
-+      if(file && (dtopd(file->f_dentry)->state == MODIFIED ||
-+                  dtopd(file->f_dentry)->state == CREATED ||
-+                  dtopd(file->f_dentry)->state == DEL_REWRITTEN)) {
-+
-+              int tmp = strlen(META_FILENAME);
-+              if(tmp  == namlen) {
-+                      if(!strncmp(name, META_FILENAME, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      /* check if we are merging the contents of storage and base */
-+      if(file && dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* check if we are still reading storage contents, if
-+               * yes, we just save the name of the file for duplicate
-+               * checking later. */
-+
-+              if(!ftopd(file)->rd.sto_done) {
-+                      /* put file into ndl list */
-+                      if(ndl_add_entry(&ftopd(file)->rd, name, namlen))
-+                              printk(KERN_CRIT "mini_fo_filldir: Error adding to ndl.\n");
-+              } else {
-+                      /* check if file has been deleted */
-+                      if(meta_check_d_entry(file->f_dentry, name, namlen))
-+                              return 0;
-+
-+                      /* do duplicate checking */
-+                      if(ndl_check_entry(&ftopd(file)->rd, name, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      return mini_fo_filldir_orig(buf, name, namlen, offset, ino, d_type);
-+}
-+
-+
-+STATIC int
-+mini_fo_readdir(file_t *file, void *dirent, filldir_t filldir)
-+{
-+      int err = 0;/* mk: ??? -ENOTDIR; */
-+      file_t *hidden_file = NULL;
-+      file_t *hidden_sto_file = NULL;
-+      inode_t *inode;
-+      struct getdents_callback *buf;
-+      int oldcount;
-+
-+#if defined(FIST_FILTER_NAME) || defined(FIST_FILTER_SCA)
-+      struct mini_fo_getdents_callback buf;
-+#endif /* FIST_FILTER_NAME || FIST_FILTER_SCA */
-+
-+      buf = (struct getdents_callback *) dirent;
-+      oldcount = buf->count;
-+      inode = file->f_dentry->d_inode;
-+      mini_fo_filldir_file = file;
-+      mini_fo_filldir_orig = filldir;
-+
-+      ftopd(file)->rd.sto_done = 0;
-+      do {
-+              if (ftopd(file) != NULL) {
-+                      if(ftohf2(file)) {
-+                              hidden_sto_file = ftohf2(file);
-+                              err = vfs_readdir(hidden_sto_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_sto_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_sto_file->f_dentry->d_inode);
-+                              /* not finshed yet, we'll be called again */
-+                              if (buf->count != oldcount)
-+                                      break;
-+                      }
-+
-+                      ftopd(file)->rd.sto_done = 1;
-+
-+                      if(ftohf(file)) {
-+                              hidden_file = ftohf(file);
-+                              err = vfs_readdir(hidden_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_file->f_dentry->d_inode);
-+                      }
-+
-+              }
-+      } while (0);
-+
-+      /* mk:
-+       * we need to check if all the directory data has been copied to userspace,
-+       * or if we will be called again by userspace to complete the operation.
-+       */
-+      if(buf->count == oldcount) {
-+              ndl_put_list(&ftopd(file)->rd);
-+      }
-+
-+      /* unset this, safe */
-+      mini_fo_filldir_file = NULL;
-+      return err;
-+}
-+
-+
-+STATIC unsigned int
-+mini_fo_poll(file_t *file, poll_table *wait)
-+{
-+      unsigned int mask = DEFAULT_POLLMASK;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->poll)
-+              goto out;
-+
-+      mask = hidden_file->f_op->poll(hidden_file, wait);
-+
-+ out:
-+      return mask;
-+}
-+
-+/* FIST-LITE special version of mmap */
-+STATIC int
-+mini_fo_mmap(file_t *file, vm_area_t *vma)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      /* fanout capability */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      ASSERT(hidden_file != NULL);
-+      ASSERT(hidden_file->f_op != NULL);
-+      ASSERT(hidden_file->f_op->mmap != NULL);
-+
-+      vma->vm_file = hidden_file;
-+      err = hidden_file->f_op->mmap(hidden_file, vma);
-+      get_file(hidden_file); /* make sure it doesn't get freed on us */
-+      fput(file);            /* no need to keep extra ref on ours */
-+
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_open(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      int hidden_flags;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      /* fanout stuff */
-+      file_t *hidden_sto_file = NULL;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      __ftopd(file) =
-+              kmalloc(sizeof(struct mini_fo_file_info), GFP_KERNEL);
-+      if (!ftopd(file)) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* init the readdir_helper structure */
-+      INIT_LIST_HEAD(&ftopd(file)->rd.ndl_list);
-+      ftopd(file)->rd.ndl_size = 0;
-+
-+      /* In certain paths this could stay uninitalized and cause trouble */
-+      ftohf(file) = NULL;
-+      ftohf2(file) = NULL;
-+      hidden_flags = file->f_flags;
-+
-+      /* create storage files? */
-+      if(dtost(file->f_dentry) == UNMODIFIED) {
-+              if(!IS_WRITE_FLAG(file->f_flags)) {
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+                      /* dentry_open will decrement mnt refcnt if err.
-+                       * otherwise fput() will do an mntput() for us upon file close. */
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file;      /* link two files */
-+                      goto out;
-+              }
-+              else {
-+                      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+                              err = dir_unmod_to_mod(file->f_dentry);
-+                      } else
-+                              err = nondir_unmod_to_mod(file->f_dentry, 1);
-+
-+                      if (err) {
-+                              printk("mini_fo_open: ERROR creating storage file.\n");
-+                              goto out;
-+                      }
-+              }
-+      }
-+      hidden_sto_dentry = dtohd2(file->f_dentry);
-+      dget(hidden_sto_dentry);
-+
-+      if(dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* Directorys are special, interpose on both lower level files */
-+              if(S_ISDIR(itohi(inode)->i_mode)) {
-+                      /* check for invalid file types of lower level files */
-+                      if(!(S_ISDIR(itohi(inode)->i_mode) && S_ISDIR(itohi2(inode)->i_mode))) {
-+                              printk(KERN_CRIT "mini_fo_open: meta data corruption detected.\n");
-+                              dput(hidden_sto_dentry);
-+                              err = -EINVAL;
-+                              goto out;
-+                      }
-+
-+                      /* lower level directorys are ok, open the base file */
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              dput(hidden_sto_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file; /* link the two files */
-+              }
-+      }
-+
-+      if(!exists_in_storage(file->f_dentry)) {
-+              printk(KERN_CRIT "mini_fo_open: invalid file state detected.\n");
-+              err = -EINVAL;
-+              dput(hidden_sto_dentry);
-+
-+              /* If the base file has been opened, we need to close it here */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* ok, now we can safely open the storage file */
-+      mntget(stopd(inode->i_sb)->hidden_mnt2);
-+      hidden_sto_file = dentry_open(hidden_sto_dentry,
-+                                    stopd(inode->i_sb)->hidden_mnt2,
-+                                    hidden_flags);
-+
-+      /* dentry_open dputs the dentry if it fails */
-+      if (IS_ERR(hidden_sto_file)) {
-+              err = PTR_ERR(hidden_sto_file);
-+              /* close base file if open */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+      ftohf2(file) = hidden_sto_file; /* link storage file */
-+
-+ out:
-+      if (err < 0 && ftopd(file)) {
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_flush(file_t *file, fl_owner_t id)
-+#else
-+mini_fo_flush(file_t *file)
-+#endif
-+{
-+      int err1 = 0;           /* assume ok (see open.c:close_fp) */
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      /* mk: we don't do any state checking here, as its not worth the time.
-+       * Just flush the lower level files if they exist.
-+       */
-+      if(ftopd(file) != NULL) {
-+              if(ftohf(file) != NULL) {
-+                      hidden_file = ftohf(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err1 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err1 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+              if(ftohf2(file) != NULL) {
-+                      hidden_file = ftohf2(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err2 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err2 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+      }
-+      return (err1 | err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_release(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf(file)) {
-+                      hidden_file = ftohf(file);
-+                      fput(hidden_file);
-+              }
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+                      fput(hidden_file);
-+              }
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+mini_fo_fsync(file_t *file, dentry_t *dentry, int datasync)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+
-+      check_mini_fo_file(file);
-+
-+      if ((hidden_file = ftohf(file)) != NULL) {
-+              hidden_dentry = dtohd(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err1 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+
-+      if ((hidden_file = ftohf2(file)) != NULL) {
-+              hidden_dentry = dtohd2(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err2 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+      else
-+              goto err;
-+
-+err:
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_fasync(int fd, file_t *file, int flag)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      if((hidden_file = ftohf(file)) != NULL) {
-+              err1 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+      if((hidden_file = ftohf2(file)) != NULL) {
-+              err2 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+
-+      return (err1 || err2);
-+}
-+
-+
-+
-+struct file_operations mini_fo_dir_fops =
-+      {
-+              read:   generic_read_dir,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed lock:     mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
-+
-+struct file_operations mini_fo_main_fops =
-+      {
-+              llseek: mini_fo_llseek,
-+              read:   mini_fo_read,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed: lock:    mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/fist.h
-@@ -0,0 +1,254 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __FIST_H_
-+#define __FIST_H_
-+
-+/*
-+ * KERNEL ONLY CODE:
-+ */
-+#ifdef __KERNEL__
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
-+#include <generated/autoconf.h>
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
-+#include <linux/autoconf.h>
-+#else
-+#include <linux/config.h>
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#ifdef CONFIG_MODVERSIONS
-+# define MODVERSIONS
-+# include <linux/modversions.h>
-+#endif /* CONFIG_MODVERSIONS */
-+#endif /* KERNEL_VERSION < 2.6.0 */
-+#include <linux/sched.h>
-+#include <linux/kernel.h>
-+#include <linux/mm.h>
-+#include <linux/string.h>
-+#include <linux/stat.h>
-+#include <linux/errno.h>
-+#include <linux/wait.h>
-+#include <linux/limits.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#include <linux/locks.h>
-+#else
-+#include <linux/buffer_head.h>
-+#include <linux/pagemap.h>
-+#include <linux/namei.h>
-+#include <linux/module.h>
-+#include <linux/mount.h>
-+#include <linux/page-flags.h>
-+#include <linux/writeback.h>
-+#include <linux/statfs.h>
-+#endif
-+#include <linux/smp.h>
-+#include <linux/smp_lock.h>
-+#include <linux/file.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/poll.h>
-+#include <linux/list.h>
-+#include <linux/init.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
-+#include <linux/xattr.h>
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#include <linux/security.h>
-+#endif
-+
-+#include <linux/swap.h>
-+
-+#include <asm/system.h>
-+/* #include <asm/segment.h> */
-+#include <asm/mman.h>
-+#include <linux/seq_file.h>
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* those mapped to ATTR_* were copied from linux/fs.h */
-+#define FA_MODE               ATTR_MODE
-+#define FA_UID                ATTR_UID
-+#define FA_GID                ATTR_GID
-+#define FA_SIZE               ATTR_SIZE
-+#define FA_ATIME      ATTR_ATIME
-+#define FA_MTIME      ATTR_MTIME
-+#define FA_CTIME      ATTR_CTIME
-+#define FA_ATIME_SET  ATTR_ATIME_SET
-+#define FA_MTIME_SET  ATTR_MTIME_SET
-+#define FA_FORCE      ATTR_FORCE
-+#define FA_ATTR_FLAGS ATTR_ATTR_FLAG
-+
-+/* must be greater than all other ATTR_* flags! */
-+#define FA_NLINK      2048
-+#define FA_BLKSIZE    4096
-+#define FA_BLOCKS     8192
-+#define FA_TIMES      (FA_ATIME|FA_MTIME|FA_CTIME)
-+#define FA_ALL                0
-+
-+/* macros to manage changes between kernels */
-+#define INODE_DATA(i) (&(i)->i_data)
-+
-+#define MIN(x,y) ((x < y) ? (x) : (y))
-+#define MAX(x,y) ((x > y) ? (x) : (y))
-+#define MAXPATHLEN PATH_MAX
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5)
-+# define lookup_one_len(a,b,c) lookup_one(a,b)
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5) */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8)
-+# define generic_file_llseek default_llseek
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8) */
-+
-+#ifndef SEEK_SET
-+# define SEEK_SET 0
-+#endif /* not SEEK_SET */
-+
-+#ifndef SEEK_CUR
-+# define SEEK_CUR 1
-+#endif /* not SEEK_CUR */
-+
-+#ifndef SEEK_END
-+# define SEEK_END 2
-+#endif /* not SEEK_END */
-+
-+#ifndef DEFAULT_POLLMASK
-+# define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
-+#endif /* not DEFAULT_POLLMASK */
-+
-+/* XXX: fix this so fistgen generates kfree() code directly */
-+#define kfree_s(a,b) kfree(a)
-+
-+/*
-+ * TYPEDEFS:
-+ */
-+typedef struct dentry dentry_t;
-+typedef struct file file_t;
-+typedef struct inode inode_t;
-+typedef inode_t vnode_t;
-+typedef struct page page_t;
-+typedef struct qstr qstr_t;
-+typedef struct super_block super_block_t;
-+typedef super_block_t vfs_t;
-+typedef struct vm_area_struct vm_area_t;
-+
-+
-+/*
-+ * EXTERNALS:
-+ */
-+
-+#define FPPF(str,page) printk("PPF %s 0x%x/%d: Lck:%d Err:%d Ref:%d Upd:%d Other::%d:%d:%d:%d:\n", \
-+              str, \
-+              (int) page, \
-+              (int) page->index, \
-+              (PageLocked(page) ? 1 : 0), \
-+              (PageError(page) ? 1 : 0), \
-+              (PageReferenced(page) ? 1 : 0), \
-+              (Page_Uptodate(page) ? 1 : 0), \
-+              (PageDecrAfter(page) ? 1 : 0), \
-+              (PageSlab(page) ? 1 : 0), \
-+              (PageSwapCache(page) ? 1 : 0), \
-+              (PageReserved(page) ? 1 : 0) \
-+              )
-+#define EZKDBG printk("EZK %s:%d:%s\n",__FILE__,__LINE__,__FUNCTION__)
-+#if 0
-+# define EZKDBG1 printk("EZK %s:%d\n",__FILE__,__LINE__)
-+#else
-+# define EZKDBG1
-+#endif
-+
-+extern int fist_get_debug_value(void);
-+extern int fist_set_debug_value(int val);
-+#if 0 /* mini_fo doesn't need these */
-+extern void fist_dprint_internal(int level, char *str,...);
-+extern void fist_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_print_inode(char *str, const inode_t *inode);
-+extern void fist_print_file(char *str, const file_t *file);
-+extern void fist_print_buffer_flags(char *str, struct buffer_head *buffer);
-+extern void fist_print_page_flags(char *str, page_t *page);
-+extern void fist_print_page_bytes(char *str, page_t *page);
-+extern void fist_print_pte_flags(char *str, const page_t *page);
-+extern void fist_checkinode(inode_t *inode, char *msg);
-+extern void fist_print_sb(char *str, const super_block_t *sb);
-+
-+/* Â§$% by mk: special debug functions */
-+extern void fist_mk_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_mk_print_inode(char *str, const inode_t *inode);
-+
-+extern char *add_indent(void);
-+extern char *del_indent(void);
-+#endif/* mini_fo doesn't need these */
-+
-+
-+#define STATIC
-+#define ASSERT(EX)    \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED: %s at %s:%d (%s)\n", #EX,   \
-+             __FILE__, __LINE__, __FUNCTION__);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+/* same ASSERT, but tell me who was the caller of the function */
-+#define ASSERT2(EX)   \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED (caller): %s at %s:%d (%s)\n", #EX,  \
-+             file, line, func);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+
-+#if 0 /* mini_fo doesn't need these */
-+#define dprintk(format, args...) printk(KERN_DEBUG format, ##args)
-+#define fist_dprint(level, str, args...) fist_dprint_internal(level, KERN_DEBUG str, ## args)
-+#define print_entry_location() fist_dprint(4, "%sIN:  %s %s:%d\n", add_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_location() fist_dprint(4, "%s OUT: %s %s:%d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_status(status) fist_dprint(4, "%s OUT: %s %s:%d, STATUS: %d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, status)
-+#define print_exit_pointer(status) \
-+do { \
-+  if (IS_ERR(status)) \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: %ld\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+  else \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: 0x%x\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+} while (0)
-+#endif/* mini_fo doesn't need these */
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/*
-+ * DEFINITIONS FOR USER AND KERNEL CODE:
-+ * (Note: ioctl numbers 1--9 are reserved for fistgen, the rest
-+ *  are auto-generated automatically based on the user's .fist file.)
-+ */
-+# define FIST_IOCTL_GET_DEBUG_VALUE   _IOR(0x15, 1, int)
-+# define FIST_IOCTL_SET_DEBUG_VALUE   _IOW(0x15, 2, int)
-+
-+#endif /* not __FIST_H_ */
---- /dev/null
-+++ b/fs/mini_fo/inode.c
-@@ -0,0 +1,1564 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = create_sto_reg_file(dentry, mode, nd);
-+#else
-+      err = create_sto_reg_file(dentry, mode);
-+#endif
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC dentry_t *
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry, struct nameidata* nd)
-+#else
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry)
-+#endif
-+{
-+      int err = 0;
-+      dentry_t *hidden_dir_dentry;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      /* whiteout flag */
-+      int del_flag = 0;
-+      char *bpath = NULL;
-+
-+      const char *name;
-+      unsigned int namelen;
-+
-+      /* Don't allow lookups of META-files */
-+      namelen = strlen(META_FILENAME);
-+      if(namelen == dentry->d_name.len) {
-+              if(!strncmp(dentry->d_name.name, META_FILENAME, namelen)) {
-+                      err = -ENOENT;
-+                      goto out;
-+              }
-+      }
-+
-+      hidden_dir_dentry = dtohd(dentry->d_parent);
-+      hidden_sto_dir_dentry = dtohd2(dentry->d_parent);
-+
-+      name = dentry->d_name.name;
-+      namelen = dentry->d_name.len;
-+
-+      /* must initialize dentry operations */
-+      dentry->d_op = &mini_fo_dops;
-+
-+      /* setup the del_flag */
-+      del_flag = __meta_check_d_entry(dir, name, namelen);
-+      bpath = __meta_check_r_entry(dir, name, namelen);
-+
-+      /* perform the lookups of base and storage files:
-+       *
-+       * This caused some serious trouble, as a lookup_one_len passing
-+       * a negative dentry oopses. Solution is to only do the lookup
-+       * if the dentry is positive, else we set it to NULL
-+       * More trouble, who said a *_dir_dentry can't be NULL?
-+       */
-+      if(bpath) {
-+              /* Cross-Interposing (C), yeah! */
-+              hidden_dentry = bpath_walk(dir->i_sb, bpath);
-+              if(!hidden_dentry || !hidden_dentry->d_inode) {
-+                      printk(KERN_CRIT "mini_fo_lookup: bpath_walk failed.\n");
-+                      err= -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* this can be set up safely without fear of spaghetti
-+               * interposing as it is only used for copying times */
-+              hidden_dir_dentry = hidden_dentry->d_parent;
-+              kfree(bpath);
-+      }
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+              hidden_dentry =
-+                      lookup_one_len(name, hidden_dir_dentry, namelen);
-+      else
-+              hidden_dentry = NULL;
-+
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+              hidden_sto_dentry =
-+                      lookup_one_len(name, hidden_sto_dir_dentry, namelen);
-+      else
-+              hidden_sto_dentry =  NULL;
-+
-+      /* catch error in lookup */
-+      if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-+              /* mk: we need to call dput on the dentry, whose
-+               * lookup_one_len operation failed, in order to avoid
-+               * unmount trouble.
-+               */
-+              if(IS_ERR(hidden_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from base dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_dentry);
-+              } else {
-+                      dput(hidden_dentry);
-+              }
-+              if(IS_ERR(hidden_sto_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from storage dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_sto_dentry);
-+              } else {
-+                      dput(hidden_sto_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* allocate dentry private data */
-+      __dtopd(dentry) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+
-+      if (!dtopd(dentry)) {
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      /* check for different states of the mini_fo file to be looked up. */
-+
-+      /* state 1, file has been modified */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              /* update parent directory's atime */
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = MODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state1).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 2, file is unmodified */
-+      if(hidden_dentry && hidden_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = UNMODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry; /* could be negative */
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state2).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 3, file has been newly created */
-+      if(hidden_sto_dentry && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = CREATED;
-+              dtohd(dentry) = hidden_dentry; /* could be negative */
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state3).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+
-+      /* state 4, file has deleted and created again. */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         hidden_sto_dentry->d_inode && del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = DEL_REWRITTEN;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(NULL,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state4).\n");
-+                      goto out_free;
-+              }
-+              /* We will never need this dentry again, as the file has been
-+               * deleted from base */
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 5, file has been deleted in base */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         !hidden_sto_dentry->d_inode && del_flag) {
-+
-+              /* check which parents atime we need for updating */
-+              if(hidden_sto_dir_dentry->d_inode)
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_sto_dir_dentry->d_inode);
-+              else
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = DELETED;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              /* add negative dentry to dcache to speed up lookups */
-+              d_add(dentry, NULL);
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 6, file does not exist */
-+      if(((hidden_dentry && !hidden_dentry->d_inode) ||
-+          (hidden_sto_dentry && !hidden_sto_dentry->d_inode)) && !del_flag)
-+              {
-+                      /* check which parents atime we need for updating */
-+                      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+                              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+                      else
-+                              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+                      dtopd(dentry)->state = NON_EXISTANT;
-+                      dtohd(dentry) = hidden_dentry;
-+                      dtohd2(dentry) = hidden_sto_dentry;
-+                      d_add(dentry, NULL);
-+                      goto out;
-+              }
-+
-+      /* if we get to here, were in an invalid state. bad. */
-+      printk(KERN_CRIT "mini_fo_lookup: ERROR, meta data corruption detected.\n");
-+
-+      /* end state checking */
-+ out_free:
-+      d_drop(dentry);         /* so that our bad dentry will get destroyed */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* be safe */
-+
-+ out_dput:
-+      if(hidden_dentry)
-+              dput(hidden_dentry);
-+      if(hidden_sto_dentry)
-+              dput(hidden_sto_dentry); /* drops usage count and marks for release */
-+
-+ out:
-+      /* initalize wol if file exists and is directory */
-+      if(dentry->d_inode) {
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      itopd(dentry->d_inode)->deleted_list_size = -1;
-+                      itopd(dentry->d_inode)->renamed_list_size = -1;
-+                      meta_build_lists(dentry);
-+              }
-+      }
-+      return ERR_PTR(err);
-+}
-+
-+
-+STATIC int
-+mini_fo_link(dentry_t *old_dentry, inode_t *dir, dentry_t *new_dentry)
-+{
-+      int err;
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_dir_dentry;
-+
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(dir);
-+
-+      /* no links to directorys and existing targets target allowed */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode) ||
-+         is_mini_fo_existant(new_dentry)) {
-+              err = -EPERM;
-+              goto out;
-+      }
-+
-+      /* bring it directly from unmod to del_rew */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              err = meta_add_d_entry(old_dentry->d_parent,
-+                                     old_dentry->d_name.name,
-+                                     old_dentry->d_name.len);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              dput(dtohd(old_dentry));
-+              dtohd(old_dentry) = NULL;
-+              dtost(old_dentry) = DEL_REWRITTEN;
-+      }
-+
-+      err = get_neg_sto_dentry(new_dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      /* was: hidden_dir_dentry = lock_parent(hidden_new_dentry); */
-+      hidden_dir_dentry = dget(hidden_new_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = vfs_link(hidden_old_dentry,
-+                     hidden_dir_dentry->d_inode,
-+                     hidden_new_dentry);
-+      if (err || !hidden_new_dentry->d_inode)
-+              goto out_lock;
-+
-+      dtost(new_dentry) = CREATED;
-+      err = mini_fo_tri_interpose(NULL, hidden_new_dentry, new_dentry, dir->i_sb, 0);
-+      if (err)
-+              goto out_lock;
-+
-+      fist_copy_attr_timesizes(dir, hidden_new_dentry->d_inode);
-+      /* propagate number of hard-links */
-+      old_dentry->d_inode->i_nlink = itohi2(old_dentry->d_inode)->i_nlink;
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_dir_dentry);
-+
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+      if (!new_dentry->d_inode)
-+              d_drop(new_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_unlink(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              err = nondir_mod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              err = nondir_unmod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              err = nondir_creat_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              err = nondir_del_rew_to_del(dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_unlink: ERROR, invalid state detected.\n");
-+
-+ out:
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+
-+      if(!err) {
-+              /* is this causing my pain? d_delete(dentry); */
-+              d_drop(dentry);
-+      }
-+
-+      dput(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_symlink(inode_t *dir, dentry_t *dentry, const char *symname)
-+{
-+      int err=0;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        umode_t mode;
-+#endif
-+
-+      /* Fail if the symlink file exists */
-+      if(!(dtost(dentry) == DELETED ||
-+           dtost(dentry) == NON_EXISTANT)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      dget(hidden_sto_dentry);
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      mode = S_IALLUGO;
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry, symname, mode);
-+#else
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry,
-+                        symname);
-+#endif
-+      if (err || !hidden_sto_dentry->d_inode)
-+                goto out_lock;
-+
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        } else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+        /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+        dput(hidden_sto_dentry);
-+        if (!dentry->d_inode)
-+                d_drop(dentry);
-+ out:
-+        return err;
-+}
-+
-+STATIC int
-+mini_fo_mkdir(inode_t *dir, dentry_t *dentry, int mode)
-+{
-+      int err;
-+
-+      err = create_sto_dir(dentry, mode);
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rmdir(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *meta_dentry;
-+      inode_t *hidden_sto_dir = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+      check_mini_fo_inode(dir);
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              /* XXX: disabled, because it does not bother to check files on
-+               * the original filesystem - just a hack, but better than simply
-+               * removing it without testing */
-+              err = -EINVAL;
-+              goto out;
-+
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was:hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+              dput(dtohd(dentry));
-+
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* carefull with R files */
-+              if( __meta_is_r_entry(dir,
-+                                    dentry->d_name.name,
-+                                    dentry->d_name.len) == 1) {
-+                      err = meta_remove_r_entry(dentry->d_parent,
-+                                                dentry->d_name.name,
-+                                                dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rmdir: meta_remove_r_entry failed.\n");
-+                              goto out;
-+                      }
-+              }
-+              else {
-+                      /* ok, add deleted file to META */
-+                      meta_add_d_entry(dentry->d_parent,
-+                                       dentry->d_name.name,
-+                                       dentry->d_name.len);
-+              }
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              /* XXX: simply adding it to the delete list here is fscking dangerous!
-+               * as a temporary hack, i will disable rmdir on unmodified directories
-+               * for now.
-+               */
-+              err = -EINVAL;
-+              goto out;
-+
-+              err = get_neg_sto_dentry(dentry);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* dput base dentry, this will relase the inode and free the
-+               * dentry, as we will never need it again. */
-+              dput(dtohd(dentry));
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* add deleted file to META-file */
-+              meta_add_d_entry(dentry->d_parent,
-+                               dentry->d_name.name,
-+                               dentry->d_name.len);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = NON_EXISTANT;
-+
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = DELETED;
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_rmdir: ERROR, invalid state detected.\n");
-+
-+ out:
-+      if(!err) {
-+              d_drop(dentry);
-+      }
-+
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+      dput(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, dev_t dev)
-+#else
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      err = create_sto_nod(dentry, mode, dev);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo_mknod: creating sto nod failed.\n");
-+              err = -EINVAL;
-+      }
-+
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rename(inode_t *old_dir, dentry_t *old_dentry,
-+             inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      /* dispatch */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode))
-+              return rename_directory(old_dir, old_dentry, new_dir, new_dentry);
-+      return rename_nondir(old_dir, old_dentry, new_dir, new_dentry);
-+
-+}
-+
-+int rename_directory(inode_t *old_dir, dentry_t *old_dentry,
-+                   inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err, bpath_len;
-+      char *bpath;
-+
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_old_dir_dentry;
-+      dentry_t *hidden_new_dir_dentry;
-+
-+      err = 0;
-+      bpath = NULL;
-+      bpath_len = 0;
-+
-+      /* this is a test, chuck out if it works */
-+      if(!(dtopd(new_dentry)->state == DELETED ||
-+           dtopd(new_dentry)->state == NON_EXISTANT)) {
-+              printk(KERN_CRIT "mini_fo: rename_directory: \
-+                                  uh, ah, new_dentry not negative.\n");
-+              /* return -1; */
-+      }
-+
-+      /* state = UNMODIFIED */
-+      if(dtopd(old_dentry)->state == UNMODIFIED) {
-+              err = dir_unmod_to_mod(old_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+
-+      /* state = MODIFIED */
-+      if(dtopd(old_dentry)->state == MODIFIED) {
-+              bpath = meta_check_r_entry(old_dentry->d_parent,
-+                                         old_dentry->d_name.name,
-+                                         old_dentry->d_name.len);
-+              if(bpath) {
-+                      err = meta_remove_r_entry(old_dentry->d_parent,
-+                                                old_dentry->d_name.name,
-+                                                old_dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rename_directory:\
-+                                                   meta_remove_r_entry \
-+                                                  failed.\n");
-+                              goto out;
-+                      }
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath,
-+                                             strlen(bpath),
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      kfree(bpath);
-+              }
-+              else {/* wol it */
-+                      err = meta_add_d_entry(old_dentry->d_parent,
-+                                             old_dentry->d_name.name,
-+                                             old_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+                      /* put it on rename list */
-+                      err = get_mini_fo_bpath(old_dentry,
-+                                              &bpath,
-+                                              &bpath_len);
-+                      if (err)
-+                              goto out;
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath, bpath_len,
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+              }
-+              /* no state change, MODIFIED stays MODIFIED */
-+      }
-+      /* state = CREATED */
-+      if(dtopd(old_dentry)->state == CREATED ||
-+         dtopd(old_dentry)->state == DEL_REWRITTEN) {
-+              if(dtohd(old_dentry))
-+                      dput(dtohd(old_dentry));
-+
-+              if(dtopd(new_dentry)->state == DELETED) {
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+                      dtohd(old_dentry) = NULL;
-+              }
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      dtopd(old_dentry)->state = CREATED;
-+                      /* steal new dentry's neg. base dentry */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      dtohd(new_dentry) = NULL;
-+              }
-+      }
-+      if(dtopd(new_dentry)->state == UNMODIFIED ||
-+         dtopd(new_dentry)->state == NON_EXISTANT) {
-+              err = get_neg_sto_dentry(new_dentry);
-+              if(err)
-+                      goto out;
-+      }
-+
-+      /* now move sto file */
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+      hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+      double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+      err = vfs_rename(hidden_old_dir_dentry->d_inode, hidden_old_dentry,
-+                       hidden_new_dir_dentry->d_inode, hidden_new_dentry);
-+      if(err)
-+              goto out_lock;
-+
-+      fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+      if (new_dir != old_dir)
-+              fist_copy_attr_all(old_dir,
-+                                 hidden_old_dir_dentry->d_inode);
-+
-+ out_lock:
-+      /* double_unlock will dput the new/old parent dentries
-+       * whose refcnts were incremented via get_parent above. */
-+      double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int rename_nondir(inode_t *old_dir, dentry_t *old_dentry,
-+                inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err=0;
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(old_dir);
-+      check_mini_fo_inode(new_dir);
-+
-+      /* state: UNMODIFIED */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      /* the easy states */
-+      if(exists_in_storage(old_dentry)) {
-+
-+              dentry_t *hidden_old_dentry;
-+              dentry_t *hidden_new_dentry;
-+              dentry_t *hidden_old_dir_dentry;
-+              dentry_t *hidden_new_dir_dentry;
-+
-+              /* if old file is MODIFIED, add it to the deleted_list */
-+              if(dtopd(old_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(old_dentry->d_parent,
-+                                       old_dentry->d_name.name,
-+                                       old_dentry->d_name.len);
-+
-+                      dput(dtohd(old_dentry));
-+              }
-+              /* if old file is CREATED, we only release the base dentry */
-+              if(dtopd(old_dentry)->state == CREATED) {
-+                      if(dtohd(old_dentry))
-+                              dput(dtohd(old_dentry));
-+              }
-+
-+              /* now setup the new states (depends on new_dentry state) */
-+              /* new dentry state =  MODIFIED */
-+              if(dtopd(new_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* new dentry will be d_put'ed later by the vfs
-+                       * so don't do it here
-+                       * dput(dtohd(new_dentry));
-+                       */
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  UNMODIFIED */
-+              else if(dtopd(new_dentry)->state == UNMODIFIED) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* is this right??? */
-+                      /*dput(dtohd(new_dentry));*/
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  CREATED */
-+              else if(dtopd(new_dentry)->state == CREATED) {
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  NON_EXISTANT */
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * Dr. dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  DEL_REWRITTEN or DELETED */
-+              else if(dtopd(new_dentry)->state == DEL_REWRITTEN ||
-+                      dtopd(new_dentry)->state == DELETED) {
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              else { /* not possible, uhh, ahh */
-+                      printk(KERN_CRIT
-+                             "mini_fo: rename_reg_file: invalid state detected [1].\n");
-+                      return -1;
-+              }
-+
-+              /* now we definitely have a sto file */
-+              hidden_old_dentry = dtohd2(old_dentry);
-+              hidden_new_dentry = dtohd2(new_dentry);
-+
-+              dget(hidden_old_dentry);
-+              dget(hidden_new_dentry);
-+
-+              hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+              hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+              double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+              err = vfs_rename(hidden_old_dir_dentry->d_inode,
-+                               hidden_old_dentry,
-+                               hidden_new_dir_dentry->d_inode,
-+                               hidden_new_dentry);
-+              if(err)
-+                      goto out_lock;
-+
-+              fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+              if (new_dir != old_dir)
-+                      fist_copy_attr_all(old_dir, hidden_old_dir_dentry->d_inode);
-+
-+      out_lock:
-+              /* double_unlock will dput the new/old parent dentries
-+               * whose refcnts were incremented via get_parent above.
-+               */
-+              double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+              dput(hidden_new_dentry);
-+              dput(hidden_old_dentry);
-+      out:
-+              return err;
-+      }
-+      else { /* invalid state */
-+              printk(KERN_CRIT "mini_fo: rename_reg_file: ERROR: invalid state detected [2].\n");
-+              return -1;
-+      }
-+}
-+
-+
-+STATIC int
-+mini_fo_readlink(dentry_t *dentry, char *buf, int bufsiz)
-+{
-+      int err=0;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              hidden_dentry = dtohd2(dentry);
-+      } else if(dtohd(dentry) && dtohd(dentry)->d_inode) {
-+              hidden_dentry = dtohd(dentry);
-+      } else {
-+              goto out;
-+      }
-+
-+      if (!hidden_dentry->d_inode->i_op ||
-+          !hidden_dentry->d_inode->i_op->readlink) {
-+              err = -EINVAL;          goto out;
-+      }
-+
-+      err = hidden_dentry->d_inode->i_op->readlink(hidden_dentry,
-+                                                   buf,
-+                                                   bufsiz);
-+      if (err > 0)
-+              fist_copy_attr_atime(dentry->d_inode, hidden_dentry->d_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+static int mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#else
-+static void* mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#endif
-+{
-+      char *buf;
-+      int len = PAGE_SIZE, err;
-+      mm_segment_t old_fs;
-+
-+      /* in 2.6 this is freed by mini_fo_put_link called by __do_follow_link */
-+      buf = kmalloc(len, GFP_KERNEL);
-+      if (!buf) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* read the symlink, and then we will follow it */
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+      err = dentry->d_inode->i_op->readlink(dentry, buf, len);
-+      set_fs(old_fs);
-+      if (err < 0) {
-+              kfree(buf);
-+              buf = NULL;
-+              goto out;
-+      }
-+      buf[err] = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        nd_set_link(nd, buf);
-+        err = 0;
-+#else
-+      err = vfs_follow_link(nd, buf);
-+#endif
-+
-+ out:
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      kfree(buf);
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+        return err;
-+#else
-+        return ERR_PTR(err);
-+#endif
-+}
-+
-+STATIC
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd)
-+#else
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
-+#endif
-+{
-+        char *link;
-+        link = nd_get_link(nd);
-+        kfree(link);
-+}
-+#endif
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
-+#else
-+mini_fo_permission(inode_t *inode, int mask)
-+#endif
-+{
-+      inode_t *hidden_inode;
-+      int mode;
-+      int err;
-+
-+      if(itohi2(inode)) {
-+              hidden_inode = itohi2(inode);
-+      } else {
-+              hidden_inode = itohi(inode);
-+      }
-+      mode = inode->i_mode;
-+
-+      /* not really needed, as permission handles everything:
-+       *      err = vfs_permission(inode, mask);
-+       *      if (err)
-+       *              goto out;
-+       */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = permission(hidden_inode, mask, nd);
-+#else
-+      err = permission(hidden_inode, mask);
-+#endif
-+
-+      /*  out: */
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_inode_revalidate(dentry_t *dentry)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      inode_t *hidden_inode;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else {
-+                printk(KERN_CRIT "mini_fo_inode_revalidate: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      if (hidden_inode && hidden_inode->i_op && hidden_inode->i_op->revalidate){
-+              err = hidden_inode->i_op->revalidate(hidden_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+      fist_copy_attr_all(dentry->d_inode, hidden_inode);
-+ out:
-+      return err;
-+}
-+#endif
-+
-+STATIC int
-+mini_fo_setattr(dentry_t *dentry, struct iattr *ia)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(!is_mini_fo_existant(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [1].\n");
-+              goto out;
-+      }
-+
-+      if(dtost(dentry) == UNMODIFIED) {
-+              if(!IS_COPY_FLAG(ia->ia_valid))
-+                      goto out; /* we ignore these changes to base */
-+
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      err = dir_unmod_to_mod(dentry);
-+              } else {
-+                      /* we copy contents if file is not beeing truncated */
-+                      if(S_ISREG(dentry->d_inode->i_mode) &&
-+                         !(ia->ia_size == 0 && (ia->ia_valid & ATTR_SIZE))) {
-+                              err = nondir_unmod_to_mod(dentry, 1);
-+                      } else
-+                              err = nondir_unmod_to_mod(dentry, 0);
-+              }
-+              if(err) {
-+                      err = -EINVAL;
-+                      printk(KERN_CRIT "mini_fo_setattr: ERROR changing states.\n");
-+                      goto out;
-+              }
-+      }
-+      if(!exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [2].\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      ASSERT(dentry->d_inode);
-+      ASSERT(dtohd2(dentry));
-+      ASSERT(itopd(dentry->d_inode));
-+      ASSERT(itohi2(dentry->d_inode));
-+
-+      err = notify_change(dtohd2(dentry), ia);
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
-+{
-+      int err = 0;
-+        dentry_t *hidden_dentry;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+      } else {
-+                printk(KERN_CRIT "mini_fo_getattr: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      fist_copy_attr_all(dentry->d_inode, hidden_dentry->d_inode);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      generic_fillattr(dentry->d_inode, stat);
-+      if (!stat->blksize) {
-+              struct super_block *s = hidden_dentry->d_inode->i_sb;
-+              unsigned blocks;
-+              blocks = (stat->size+s->s_blocksize-1) >> s->s_blocksize_bits;
-+              stat->blocks = (s->s_blocksize / 512) * blocks;
-+              stat->blksize = s->s_blocksize;
-+      }
-+ out:
-+        return err;
-+}
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+#if 0 /* no xattr_alloc() and xattr_free() */
-+/* This is lifted from fs/xattr.c */
-+static void *
-+xattr_alloc(size_t size, size_t limit)
-+{
-+      void *ptr;
-+
-+      if (size > limit)
-+              return ERR_PTR(-E2BIG);
-+
-+      if (!size)      /* size request, no buffer is needed */
-+              return NULL;
-+      else if (size <= PAGE_SIZE)
-+              ptr = kmalloc((unsigned long) size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc((unsigned long) size);
-+      if (!ptr)
-+              return ERR_PTR(-ENOMEM);
-+      return ptr;
-+}
-+
-+static void
-+xattr_free(void *ptr, size_t size)
-+{
-+      if (!size)      /* size request, no buffer was needed */
-+              return;
-+      else if (size <= PAGE_SIZE)
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
-+}
-+#endif /* no xattr_alloc() and xattr_free() */
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      /* Define these anyway so we don't need as much ifdef'ed code. */
-+      char *encoded_name = NULL;
-+      char *encoded_value = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->getxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, encoded_name, encoded_value, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) \
-+     && LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,23)) \
-+     || LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               const void *value, size_t size, int flags)
-+#else
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               void *value, size_t size, int flags)
-+#endif
-+
-+{
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+
-+      /* Define these anyway, so we don't have as much ifdef'ed code. */
-+      char *encoded_value = NULL;
-+      char *encoded_name = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->setxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->setxattr(hidden_dentry, encoded_name, encoded_value, size, flags);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_removexattr(struct dentry *dentry, const char *name) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_name;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->removexattr) {
-+              encoded_name = (char *)name;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, encoded_name);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_listxattr(struct dentry *dentry, char *list, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_list = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->listxattr) {
-+              encoded_list = list;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, encoded_list, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+
-+struct inode_operations mini_fo_symlink_iops =
-+      {
-+              readlink:       mini_fo_readlink,
-+              follow_link: mini_fo_follow_link,
-+              /* mk: permission:      mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+              put_link:       mini_fo_put_link,
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+      };
-+
-+struct inode_operations mini_fo_dir_iops =
-+      {
-+              create: mini_fo_create,
-+              lookup: mini_fo_lookup,
-+              link:   mini_fo_link,
-+              unlink: mini_fo_unlink,
-+              symlink:        mini_fo_symlink,
-+              mkdir:  mini_fo_mkdir,
-+              rmdir:  mini_fo_rmdir,
-+              mknod:  mini_fo_mknod,
-+              rename: mini_fo_rename,
-+              /* no readlink/follow_link for non-symlinks */
-+              // off because we have setattr
-+              //    truncate: mini_fo_truncate,
-+              /* mk:permission:       mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
-+
-+struct inode_operations mini_fo_main_iops =
-+      {
-+              /* permission:  mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr:    mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/main.c
-@@ -0,0 +1,423 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#include <linux/module.h>
-+
-+/* This definition must only appear after we include <linux/module.h> */
-+#ifndef MODULE_LICENSE
-+# define MODULE_LICENSE(bison)
-+#endif /* not MODULE_LICENSE */
-+
-+/*
-+ * This is the mini_fo tri interpose function, which extends the
-+ * functionality of the regular interpose by interposing a higher
-+ * level inode on top of two lower level ones: the base filesystem
-+ * inode and the storage filesystem inode.
-+ *
-+ *  sb we pass is mini_fo's super_block
-+ */
-+int
-+mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                    dentry_t *hidden_sto_dentry,
-+                    dentry_t *dentry, super_block_t *sb, int flag)
-+{
-+      inode_t *hidden_inode = NULL;
-+      inode_t *hidden_sto_inode = NULL; /* store corresponding storage inode */
-+      int err = 0;
-+      inode_t *inode;
-+
-+      /* Pointer to hidden_sto_inode if exists, else to hidden_inode.
-+       * This is used to copy the attributes of the correct inode. */
-+      inode_t *master_inode;
-+
-+      if(hidden_dentry)
-+              hidden_inode = hidden_dentry->d_inode;
-+      if(hidden_sto_dentry)
-+              hidden_sto_inode = hidden_sto_dentry->d_inode;
-+
-+      ASSERT(dentry->d_inode == NULL);
-+
-+      /* mk: One of the inodes associated with the dentrys is likely to
-+       * be NULL, so carefull:
-+       */
-+      ASSERT((hidden_inode != NULL) || (hidden_sto_inode != NULL));
-+
-+      if(hidden_sto_inode)
-+              master_inode = hidden_sto_inode;
-+      else
-+              master_inode = hidden_inode;
-+
-+      /*
-+       * We allocate our new inode below, by calling iget.
-+       * iget will call our read_inode which will initialize some
-+       * of the new inode's fields
-+       */
-+
-+      /*
-+       * original: inode = iget(sb, hidden_inode->i_ino);
-+       */
-+      inode = iget(sb, iunique(sb, 25));
-+      if (!inode) {
-+              err = -EACCES;          /* should be impossible??? */
-+              goto out;
-+      }
-+
-+      /*
-+       * interpose the inode if not already interposed
-+       *   this is possible if the inode is being reused
-+       * XXX: what happens if we get_empty_inode() but there's another already?
-+       * for now, ASSERT() that this can't happen; fix later.
-+       */
-+      if (itohi(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi(inode) != NULL.\n");
-+      }
-+      if (itohi2(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi2(inode) != NULL.\n");
-+      }
-+
-+      /* mk: Carefull, igrab can't handle NULL inodes (ok, why should it?), so
-+       * we need to check here:
-+       */
-+      if(hidden_inode)
-+              itohi(inode) = igrab(hidden_inode);
-+      else
-+              itohi(inode) = NULL;
-+
-+      if(hidden_sto_inode)
-+              itohi2(inode) = igrab(hidden_sto_inode);
-+      else
-+              itohi2(inode) = NULL;
-+
-+
-+      /* Use different set of inode ops for symlinks & directories*/
-+      if (S_ISLNK(master_inode->i_mode))
-+              inode->i_op = &mini_fo_symlink_iops;
-+      else if (S_ISDIR(master_inode->i_mode))
-+              inode->i_op = &mini_fo_dir_iops;
-+
-+      /* Use different set of file ops for directories */
-+      if (S_ISDIR(master_inode->i_mode))
-+              inode->i_fop = &mini_fo_dir_fops;
-+
-+      /* properly initialize special inodes */
-+      if (S_ISBLK(master_inode->i_mode) || S_ISCHR(master_inode->i_mode) ||
-+          S_ISFIFO(master_inode->i_mode) || S_ISSOCK(master_inode->i_mode)) {
-+              init_special_inode(inode, master_inode->i_mode, master_inode->i_rdev);
-+      }
-+
-+      /* Fix our inode's address operations to that of the lower inode */
-+      if (inode->i_mapping->a_ops != master_inode->i_mapping->a_ops) {
-+              inode->i_mapping->a_ops = master_inode->i_mapping->a_ops;
-+      }
-+
-+      /* only (our) lookup wants to do a d_add */
-+      if (flag)
-+              d_add(dentry, inode);
-+      else
-+              d_instantiate(dentry, inode);
-+
-+      ASSERT(dtopd(dentry) != NULL);
-+
-+      /* all well, copy inode attributes */
-+      fist_copy_attr_all(inode, master_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+/* parse mount options "base=" and "sto=" */
-+dentry_t *
-+mini_fo_parse_options(super_block_t *sb, char *options)
-+{
-+      dentry_t *hidden_root = ERR_PTR(-EINVAL);
-+      dentry_t *hidden_root2 = ERR_PTR(-EINVAL);
-+      struct nameidata nd, nd2;
-+      char *name, *tmp, *end;
-+      int err = 0;
-+
-+      /* We don't want to go off the end of our arguments later on. */
-+      for (end = options; *end; end++);
-+
-+      while (options < end) {
-+              tmp = options;
-+              while (*tmp && *tmp != ',')
-+                      tmp++;
-+              *tmp = '\0';
-+              if (!strncmp("base=", options, 5)) {
-+                      name = options + 5;
-+                      printk(KERN_INFO "mini_fo: using base directory: %s\n", name);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if (path_init(name, LOOKUP_FOLLOW, &nd))
-+                              err = path_walk(name, &nd);
-+#else
-+                      err = path_lookup(name, LOOKUP_FOLLOW, &nd);
-+#endif
-+                      if (err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden directory '%s'\n", name);
-+                              hidden_root = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root = nd.dentry;
-+                      stopd(sb)->base_dir_dentry = nd.dentry;
-+                      stopd(sb)->hidden_mnt = nd.mnt;
-+
-+              } else if(!strncmp("sto=", options, 4)) {
-+                      /* parse the storage dir */
-+                      name = options + 4;
-+                      printk(KERN_INFO "mini_fo: using storage directory: %s\n", name);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if(path_init(name, LOOKUP_FOLLOW, &nd2))
-+                              err = path_walk(name, &nd2);
-+#else
-+                        err = path_lookup(name, LOOKUP_FOLLOW, &nd2);
-+#endif
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden storage directory '%s'\n", name);
-+
-+                              hidden_root2 = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root2 = nd2.dentry;
-+                      stopd(sb)->storage_dir_dentry = nd2.dentry;
-+                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      stohs2(sb) = hidden_root2->d_sb;
-+
-+                      /* validate storage dir, this is done in
-+                       * mini_fo_read_super for the base directory.
-+                       */
-+                      if (IS_ERR(hidden_root2)) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: storage dentry lookup failed (err = %ld)\n", PTR_ERR(hidden_root2));
-+                              goto out;
-+                      }
-+                      if (!hidden_root2->d_inode) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: no storage dir to interpose on.\n");
-+                              goto out;
-+                      }
-+                      stohs2(sb) = hidden_root2->d_sb;
-+              } else {
-+                      printk(KERN_WARNING "mini_fo: unrecognized option '%s'\n", options);
-+                      hidden_root = ERR_PTR(-EINVAL);
-+                      goto out;
-+              }
-+              options = tmp + 1;
-+      }
-+
-+ out:
-+      if(IS_ERR(hidden_root2))
-+              return hidden_root2;
-+      return hidden_root;
-+}
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+static int
-+#else
-+super_block_t *
-+#endif
-+mini_fo_read_super(super_block_t *sb, void *raw_data, int silent)
-+{
-+      dentry_t *hidden_root;
-+      int err = 0;
-+
-+      if (!raw_data) {
-+              printk(KERN_WARNING "mini_fo_read_super: missing argument\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      /*
-+       * Allocate superblock private data
-+       */
-+      __stopd(sb) = kmalloc(sizeof(struct mini_fo_sb_info), GFP_KERNEL);
-+      if (!stopd(sb)) {
-+              printk(KERN_WARNING "%s: out of memory\n", __FUNCTION__);
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+      stohs(sb) = NULL;
-+
-+      hidden_root = mini_fo_parse_options(sb, raw_data);
-+      if (IS_ERR(hidden_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: lookup_dentry failed (err = %ld)\n", PTR_ERR(hidden_root));
-+              err = PTR_ERR(hidden_root);
-+              goto out_free;
-+      }
-+      if (!hidden_root->d_inode) {
-+              printk(KERN_WARNING "mini_fo_read_super: no directory to interpose on\n");
-+              goto out_free;
-+      }
-+      stohs(sb) = hidden_root->d_sb;
-+
-+      /*
-+       * Linux 2.4.2-ac3 and beyond has code in
-+       * mm/filemap.c:generic_file_write() that requires sb->s_maxbytes
-+       * to be populated.  If not set, all write()s under that sb will
-+       * return 0.
-+       *
-+       * Linux 2.4.4+ automatically sets s_maxbytes to MAX_NON_LFS;
-+       * the filesystem should override it only if it supports LFS.
-+       */
-+      /* non-SCA code is good to go with LFS */
-+      sb->s_maxbytes = hidden_root->d_sb->s_maxbytes;
-+
-+      sb->s_op = &mini_fo_sops;
-+      /*
-+       * we can't use d_alloc_root if we want to use
-+       * our own interpose function unchanged,
-+       * so we simply replicate *most* of the code in d_alloc_root here
-+       */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      sb->s_root = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
-+#else
-+      sb->s_root = d_alloc(NULL, &(const struct qstr){hash: 0, name: "/", len : 1});
-+#endif
-+      if (IS_ERR(sb->s_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: d_alloc failed\n");
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      sb->s_root->d_op = &mini_fo_dops;
-+      sb->s_root->d_sb = sb;
-+      sb->s_root->d_parent = sb->s_root;
-+
-+      /* link the upper and lower dentries */
-+      __dtopd(sb->s_root) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+      if (!dtopd(sb->s_root)) {
-+              err = -ENOMEM;
-+              goto out_dput2;
-+      }
-+      dtopd(sb->s_root)->state = MODIFIED;
-+      dtohd(sb->s_root) = hidden_root;
-+
-+      /* fanout relevant, interpose on storage root dentry too */
-+      dtohd2(sb->s_root) = stopd(sb)->storage_dir_dentry;
-+
-+      /* ...and call tri-interpose to interpose root dir inodes
-+       * if (mini_fo_interpose(hidden_root, sb->s_root, sb, 0))
-+       */
-+      if(mini_fo_tri_interpose(hidden_root, dtohd2(sb->s_root), sb->s_root, sb, 0))
-+              goto out_dput2;
-+
-+      /* initalize the wol list */
-+      itopd(sb->s_root->d_inode)->deleted_list_size = -1;
-+      itopd(sb->s_root->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(sb->s_root);
-+
-+      goto out;
-+
-+ out_dput2:
-+      dput(sb->s_root);
-+ out_dput:
-+      dput(hidden_root);
-+      dput(dtohd2(sb->s_root)); /* release the hidden_sto_dentry too */
-+ out_free:
-+      kfree(stopd(sb));
-+      __stopd(sb) = NULL;
-+ out:
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        return err;
-+#else
-+        if (err) {
-+              return ERR_PTR(err);
-+        } else {
-+              return sb;
-+        }
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+static int mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data, struct vfsmount *mnt)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super, mnt);
-+}
-+#else
-+static struct super_block *mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super);
-+}
-+#endif
-+
-+void mini_fo_kill_block_super(struct super_block *sb)
-+{
-+      generic_shutdown_super(sb);
-+      /*
-+       *      XXX: BUG: Halcrow: Things get unstable sometime after this point:
-+       *      lib/rwsem-spinlock.c:127: spin_is_locked on uninitialized
-+       *      fs/fs-writeback.c:402: spin_lock(fs/super.c:a0381828) already
-+       *      locked by fs/fs-writeback.c/402
-+       *
-+       *      Apparently, someone's not releasing a lock on sb_lock...
-+       */
-+}
-+
-+static struct file_system_type mini_fo_fs_type = {
-+      .owner          = THIS_MODULE,
-+      .name           = "mini_fo",
-+      .get_sb         = mini_fo_get_sb,
-+      .kill_sb        = mini_fo_kill_block_super,
-+      .fs_flags       = 0,
-+};
-+
-+
-+#else
-+static DECLARE_FSTYPE(mini_fo_fs_type, "mini_fo", mini_fo_read_super, 0);
-+#endif
-+
-+static int __init init_mini_fo_fs(void)
-+{
-+      printk("Registering mini_fo version $Id$\n");
-+      return register_filesystem(&mini_fo_fs_type);
-+}
-+static void __exit exit_mini_fo_fs(void)
-+{
-+      printk("Unregistering mini_fo version $Id$\n");
-+      unregister_filesystem(&mini_fo_fs_type);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+EXPORT_NO_SYMBOLS;
-+#endif
-+
-+MODULE_AUTHOR("Erez Zadok <ezk@cs.sunysb.edu>");
-+MODULE_DESCRIPTION("FiST-generated mini_fo filesystem");
-+MODULE_LICENSE("GPL");
-+
-+/* MODULE_PARM(fist_debug_var, "i"); */
-+/* MODULE_PARM_DESC(fist_debug_var, "Debug level"); */
-+
-+module_init(init_mini_fo_fs)
-+module_exit(exit_mini_fo_fs)
---- /dev/null
-+++ b/fs/mini_fo/Makefile
-@@ -0,0 +1,17 @@
-+#
-+# Makefile for mini_fo 2.4 and 2.6 Linux kernels
-+#
-+# Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+#
-+# 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.
-+#
-+
-+obj-$(CONFIG_MINI_FO) := mini_fo.o
-+mini_fo-objs   := meta.o dentry.o file.o inode.o main.o super.o state.o aux.o
-+
-+# dependencies
-+${mini_fo-objs}: mini_fo.h fist.h
-+
---- /dev/null
-+++ b/fs/mini_fo/meta.c
-@@ -0,0 +1,1000 @@
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+int meta_build_lists(dentry_t *dentry)
-+{
-+      struct mini_fo_inode_info *inode_info;
-+
-+      dentry_t *meta_dentry = 0;
-+      file_t *meta_file = 0;
-+      mm_segment_t old_fs;
-+      void *buf;
-+
-+      int bytes, len;
-+      struct vfsmount *meta_mnt;
-+      char *entry;
-+
-+      inode_info = itopd(dentry->d_inode);
-+      if(!(inode_info->deleted_list_size == -1 &&
-+           inode_info->renamed_list_size == -1)) {
-+              printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                  Error, list(s) not virgin.\n");
-+              return -1;
-+      }
-+
-+      /* init our meta lists */
-+      INIT_LIST_HEAD(&inode_info->deleted_list);
-+      inode_info->deleted_list_size = 0;
-+
-+      INIT_LIST_HEAD(&inode_info->renamed_list);
-+      inode_info->renamed_list_size = 0;
-+
-+      /* might there be a META-file? */
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           dtohd2(dentry),
-+                                           strlen(META_FILENAME));
-+              if(!meta_dentry->d_inode) {
-+                      dput(meta_dentry);
-+                      goto out_ok;
-+              }
-+              /* $%& err, is this correct? */
-+              meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              mntget(meta_mnt);
-+
-+
-+              /* open META-file for reading */
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              if(!meta_file || IS_ERR(meta_file)) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR opening META file.\n");
-+                      goto out_err;
-+              }
-+
-+              /* check if fs supports reading */
-+              if(!meta_file->f_op->read) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, fs does not support reading.\n");
-+                      goto out_err_close;
-+              }
-+
-+              /* allocate a page for transfering the data */
-+              buf = (void *) __get_free_page(GFP_KERNEL);
-+              if(!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, out of mem.\n");
-+                      goto out_err_close;
-+              }
-+              meta_file->f_pos = 0;
-+              old_fs = get_fs();
-+              set_fs(KERNEL_DS);
-+              do {
-+                      char *c;
-+                      bytes = meta_file->f_op->read(meta_file, buf, PAGE_SIZE, &meta_file->f_pos);
-+                      if(bytes == PAGE_SIZE) {
-+                              /* trim a cut off filename and adjust f_pos to get it next time */
-+                              for(c = (char*) buf+PAGE_SIZE;
-+                                  *c != '\n';
-+                                  c--, bytes--, meta_file->f_pos--);
-+                      }
-+                      entry = (char *) buf;
-+                      while(entry < (char *) buf+bytes) {
-+
-+                              char *old_path;
-+                              char *dir_name;
-+                              int old_len, new_len;
-+
-+                              /* len without '\n'*/
-+                              len = (int) (strchr(entry, '\n') - entry);
-+                              switch (*entry) {
-+                              case 'D':
-+                                      /* format: "D filename" */
-+                                      meta_list_add_d_entry(dentry,
-+                                                            entry+2,
-+                                                            len-2);
-+                                      break;
-+                              case 'R':
-+                                      /* format: "R path/xy/dir newDir" */
-+                                      old_path = entry+2;
-+                                      dir_name = strchr(old_path, ' ') + 1;
-+                                      old_len =  dir_name - old_path - 1;
-+                                      new_len = ((int) entry) + len - ((int ) dir_name);
-+                                      meta_list_add_r_entry(dentry,
-+                                                            old_path,
-+                                                            old_len,
-+                                                            dir_name,
-+                                                            new_len);
-+                                      break;
-+                              default:
-+                                      /* unknown entry type detected */
-+                                      break;
-+                              }
-+                              entry += len+1;
-+                      }
-+
-+              } while(meta_file->f_pos < meta_dentry->d_inode->i_size);
-+
-+              free_page((unsigned long) buf);
-+              set_fs(old_fs);
-+              fput(meta_file);
-+      }
-+      goto out_ok;
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out_err:
-+      mntput(meta_mnt);
-+      dput(meta_dentry);
-+      return -1;
-+ out_ok:
-+      return 1; /* check this!!! inode_info->wol_size; */
-+}
-+
-+/* cleanups up all lists and free's the mem by dentry */
-+int meta_put_lists(dentry_t *dentry)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_put_lists: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_put_lists(dentry->d_inode);
-+}
-+
-+/* cleanups up all lists and free's the mem by inode */
-+int __meta_put_lists(inode_t *inode)
-+{
-+      int err = 0;
-+      if(!inode || !itopd(inode)) {
-+              printk("mini_fo: __meta_put_lists: invalid inode passed.\n");
-+              return -1;
-+      }
-+      err = __meta_put_d_list(inode);
-+      err |= __meta_put_r_list(inode);
-+      return err;
-+}
-+
-+int meta_sync_lists(dentry_t *dentry)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_sync_lists: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      err = meta_sync_d_list(dentry, 0);
-+      err |= meta_sync_r_list(dentry, 1);
-+      return err;
-+}
-+
-+
-+/* remove all D entries from the renamed list and free the mem */
-+int __meta_put_d_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: __meta_put_d_list: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the DELETED-list */
-+        if(inode_info->deleted_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->deleted_list)) {
-+              tmp = inode_info->deleted_list.next;
-+              list_del(tmp);
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+      }
-+      inode_info->deleted_list_size = 0;
-+
-+      return 0;
-+}
-+
-+/* remove all R entries from the renamed list and free the mem */
-+int __meta_put_r_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+      struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_put_r_list: invalid inode.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the RENAMED-list */
-+        if(inode_info->renamed_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->renamed_list)) {
-+              tmp = inode_info->renamed_list.next;
-+              list_del(tmp);
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+      }
-+      inode_info->renamed_list_size = 0;
-+
-+      return 0;
-+}
-+
-+int meta_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      err = meta_list_add_d_entry(dentry, name, len);
-+      err |= meta_write_d_entry(dentry,name,len);
-+      return err;
-+}
-+
-+/* add a D entry to the deleted list */
-+int meta_list_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0)
-+                return -1;
-+
-+        del_entry = (struct deleted_entry *)
-+              kmalloc(sizeof(struct deleted_entry), GFP_KERNEL);
-+        del_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!del_entry || !del_entry->name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  out of mem.\n");
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(del_entry->name, name, len);
-+        del_entry->len = len;
-+
-+        list_add(&del_entry->list, &inode_info->deleted_list);
-+        inode_info->deleted_list_size++;
-+        return 0;
-+}
-+
-+int meta_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+      int err = 0;
-+      err = meta_list_add_r_entry(dentry,
-+                                  old_name, old_len,
-+                                  new_name, new_len);
-+      err |= meta_write_r_entry(dentry,
-+                                old_name, old_len,
-+                                new_name, new_len);
-+      return err;
-+}
-+
-+/* add a R entry to the renamed list */
-+int meta_list_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+
-+        ren_entry = (struct renamed_entry *)
-+              kmalloc(sizeof(struct renamed_entry), GFP_KERNEL);
-+        ren_entry->old_name = (char*) kmalloc(old_len, GFP_KERNEL);
-+        ren_entry->new_name = (char*) kmalloc(new_len, GFP_KERNEL);
-+
-+        if(!ren_entry || !ren_entry->old_name || !ren_entry->new_name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  out of mem.\n");
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(ren_entry->old_name, old_name, old_len);
-+        ren_entry->old_len = old_len;
-+        strncpy(ren_entry->new_name, new_name, new_len);
-+        ren_entry->new_len = new_len;
-+
-+        list_add(&ren_entry->list, &inode_info->renamed_list);
-+        inode_info->renamed_list_size++;
-+        return 0;
-+}
-+
-+
-+int meta_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+
-+      err = meta_list_remove_r_entry(dentry, name, len);
-+      err |= meta_sync_lists(dentry);
-+      return err;
-+}
-+
-+int meta_list_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_list_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_list_remove_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_list_remove_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT
-+                     "mini_fo: __meta_list_remove_r_entry: \
-+                        invalid inode passed.\n");
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+        if(inode_info->renamed_list_size == 0)
-+                return 1;
-+
-+      list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      list_del(tmp);
-+                      kfree(ren_entry->new_name);
-+                      kfree(ren_entry->old_name);
-+                      kfree(ren_entry);
-+                      inode_info->renamed_list_size--;
-+                      return 0;
-+              }
-+      }
-+      return 1;
-+}
-+
-+
-+/* append a single D entry to the meta file */
-+int meta_write_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry), strlen (META_FILENAME));
-+
-+      /* We need to create a META-file */
-+        if(!meta_dentry->d_inode) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR,
-+                         NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt); /* $%& is this necessary? */
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: len for name, 1 for \n and 2 for "D " */
-+      buf = (char *) kmalloc(len+3, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'D';
-+      buf[1] = ' ';
-+      strncpy(buf+2, name, len);
-+      buf[len+2] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, len+3,
-+                                     &meta_file->f_pos);
-+      if(bytes != len+3) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR writing.\n");
-+              err = -1;
-+      }
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* append a single R entry to the meta file */
-+int meta_write_r_entry(dentry_t *dentry,
-+                     const char *old_name, int old_len,
-+                     const char *new_name, int new_len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+      struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->renamed_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* build the storage structure? */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen (META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt);
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+      buf_len = old_len + new_len + 4;
-+      buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'R';
-+      buf[1] = ' ';
-+      strncpy(buf + 2, old_name, old_len);
-+      buf[old_len + 2] = ' ';
-+      strncpy(buf + old_len + 3, new_name, new_len);
-+      buf[buf_len -1] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, buf_len, &meta_file->f_pos);
-+      if(bytes != buf_len) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: ERROR writing.\n");
-+              err = -1;
-+      }
-+
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* sync D list to disk, append data if app_flag is 1 */
-+/* check the meta_mnt, which seems not to be used (properly)  */
-+
-+int meta_sync_d_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  invalid inode passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+
-+              /* size: len for name, 1 for \n and 2 for "D " */
-+              buf = (char *) kmalloc(del_entry->len+3, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+
-+              buf[0] = 'D';
-+              buf[1] = ' ';
-+              strncpy(buf+2, del_entry->name, del_entry->len);
-+              buf[del_entry->len+2] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             del_entry->len+3,
-+                                             &meta_file->f_pos);
-+              if(bytes != del_entry->len+3) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+
-+}
-+
-+int meta_sync_r_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              /* size:
-+               * 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+              buf_len = ren_entry->old_len + ren_entry->new_len + 4;
-+              buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+              buf[0] = 'R';
-+              buf[1] = ' ';
-+              strncpy(buf + 2, ren_entry->old_name, ren_entry->old_len);
-+              buf[ren_entry->old_len + 2] = ' ';
-+              strncpy(buf + ren_entry->old_len + 3,
-+                      ren_entry->new_name, ren_entry->new_len);
-+              buf[buf_len - 1] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             buf_len, &meta_file->f_pos);
-+              if(bytes != buf_len) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+int meta_check_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode)
-+              printk(KERN_CRIT "mini_fo: meta_check_d_dentry: \
-+                                  invalid dentry passed.\n");
-+      return __meta_check_d_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_check_d_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT "mini_fo: __meta_check_d_dentry: \
-+                                  invalid inode passed.\n");
-+
-+        inode_info = itopd(inode);
-+
-+        if(inode_info->deleted_list_size <= 0)
-+                return 0;
-+
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              if(del_entry->len != len)
-+                      continue;
-+
-+              if(!strncmp(del_entry->name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+/*
-+ * check if file has been renamed and return path to orig. base dir.
-+ * Implements no error return values so far, what of course sucks.
-+ * String is null terminated.'
-+ */
-+char* meta_check_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid dentry passed.\n");
-+              return NULL;
-+      }
-+      return __meta_check_r_entry(dentry->d_inode, name, len);
-+}
-+
-+char* __meta_check_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+      char *old_path;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid inode passed.\n");
-+              return NULL;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return NULL;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      old_path = (char *)
-+                              kmalloc(ren_entry->old_len+1, GFP_KERNEL);
-+                      strncpy(old_path,
-+                              ren_entry->old_name,
-+                              ren_entry->old_len);
-+                      old_path[ren_entry->old_len]='\0';
-+                      return old_path;
-+              }
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * This version only checks if entry exists and return:
-+ *     1 if exists,
-+ *     0 if not,
-+ *    -1 if error.
-+ */
-+int meta_is_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_is_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_is_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return -1;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/mini_fo.h
-@@ -0,0 +1,510 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __MINI_FO_H_
-+#define __MINI_FO_H_
-+
-+#ifdef __KERNEL__
-+
-+/* META stuff */
-+#define META_FILENAME "META_dAfFgHE39ktF3HD2sr"
-+
-+/* use xattrs? */
-+#define XATTR
-+
-+/* File attributes that when changed, result in a file beeing copied to storage */
-+#define COPY_FLAGS ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE
-+
-+/*
-+ * mini_fo filestates
-+ */
-+#define MODIFIED       1
-+#define UNMODIFIED     2
-+#define CREATED        3
-+#define DEL_REWRITTEN  4
-+#define DELETED        5
-+#define NON_EXISTANT   6
-+
-+/* fist file systems superblock magic */
-+# define MINI_FO_SUPER_MAGIC 0xf15f
-+
-+/*
-+ * STRUCTURES:
-+ */
-+
-+/* mini_fo inode data in memory */
-+struct mini_fo_inode_info {
-+      inode_t *wii_inode;
-+      inode_t *wii_inode2; /* pointer to storage inode */
-+
-+      /* META-data lists */
-+      /* deleted list, ex wol */
-+      struct list_head deleted_list;
-+      int deleted_list_size;
-+
-+      /* renamed list */
-+      struct list_head renamed_list;
-+      int renamed_list_size;
-+
-+      /* add other lists here ... */
-+};
-+
-+/* mini_fo dentry data in memory */
-+struct mini_fo_dentry_info {
-+      dentry_t *wdi_dentry;
-+      dentry_t *wdi_dentry2; /* pointer to  storage dentry */
-+      unsigned int state;  /* state of the mini_fo dentry */
-+};
-+
-+
-+/* mini_fo super-block data in memory */
-+struct mini_fo_sb_info {
-+      super_block_t *wsi_sb, *wsi_sb2; /* mk: might point to the same sb */
-+      struct vfsmount *hidden_mnt, *hidden_mnt2;
-+      dentry_t *base_dir_dentry;
-+      dentry_t *storage_dir_dentry;
-+      ;
-+};
-+
-+/* readdir_data, readdir helper struct */
-+struct readdir_data {
-+      struct list_head ndl_list; /* linked list head ptr */
-+      int ndl_size; /* list size */
-+      int sto_done; /* flag to show that the storage dir entries have
-+                     * all been read an now follow base entries */
-+};
-+
-+/* file private data. */
-+struct mini_fo_file_info {
-+      struct file *wfi_file;
-+      struct file *wfi_file2; /* pointer to storage file */
-+      struct readdir_data rd;
-+};
-+
-+/* struct ndl_entry */
-+struct ndl_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/********************************
-+ *  META-data structures
-+ ********************************/
-+
-+/* deleted entry */
-+struct deleted_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* renamed entry */
-+struct renamed_entry {
-+      struct list_head list;
-+      char *old_name;     /* old directory with full path */
-+      int old_len;        /* length of above string */
-+      char *new_name;     /* new directory name */
-+      int new_len;        /* length of above string */
-+};
-+
-+/* attr_change entry */
-+struct attr_change_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* link entry */
-+struct link_entry {
-+      struct list_head list;
-+      int links_moved;
-+      int inum_base;
-+      int inum_sto;
-+      char *weird_name;
-+      int weird_name_len;
-+};
-+
-+
-+/* Some other stuff required for mini_fo_filldir64, copied from
-+ * fs/readdir.c
-+ */
-+
-+#define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1))
-+#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
-+
-+
-+struct linux_dirent64 {
-+        u64             d_ino;
-+        s64             d_off;
-+        unsigned short  d_reclen;
-+        unsigned char   d_type;
-+        char            d_name[0];
-+};
-+
-+
-+struct getdents_callback64 {
-+        struct linux_dirent64 * current_dir;
-+        struct linux_dirent64 * previous;
-+        int count;
-+        int error;
-+};
-+
-+struct linux_dirent {
-+      unsigned long   d_ino;
-+      unsigned long   d_off;
-+      unsigned short  d_reclen;
-+      char            d_name[1];
-+};
-+
-+struct getdents_callback {
-+      struct linux_dirent * current_dir;
-+      struct linux_dirent * previous;
-+      int count;
-+      int error;
-+};
-+
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* file TO private_data */
-+# define ftopd(file) ((struct mini_fo_file_info *)((file)->private_data))
-+# define __ftopd(file) ((file)->private_data)
-+/* file TO hidden_file */
-+# define ftohf(file) ((ftopd(file))->wfi_file)
-+# define ftohf2(file) ((ftopd(file))->wfi_file2)
-+
-+/* inode TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->i_private)
-+# define __itopd(ino) ((ino)->i_private)
-+#else
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->u.generic_ip)
-+# define __itopd(ino) ((ino)->u.generic_ip)
-+#endif
-+/* inode TO hidden_inode */
-+# define itohi(ino) (itopd(ino)->wii_inode)
-+# define itohi2(ino) (itopd(ino)->wii_inode2)
-+
-+/* superblock TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->s_fs_info)
-+# define __stopd(super) ((super)->s_fs_info)
-+#else
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->u.generic_sbp)
-+# define __stopd(super) ((super)->u.generic_sbp)
-+#endif
-+
-+/* unused? # define vfs2priv stopd */
-+/* superblock TO hidden_superblock */
-+
-+# define stohs(super) (stopd(super)->wsi_sb)
-+# define stohs2(super) (stopd(super)->wsi_sb2)
-+
-+/* dentry TO private_data */
-+# define dtopd(dentry) ((struct mini_fo_dentry_info *)(dentry)->d_fsdata)
-+# define __dtopd(dentry) ((dentry)->d_fsdata)
-+/* dentry TO hidden_dentry */
-+# define dtohd(dent) (dtopd(dent)->wdi_dentry)
-+# define dtohd2(dent) (dtopd(dent)->wdi_dentry2)
-+
-+/* dentry to state */
-+# define dtost(dent) (dtopd(dent)->state)
-+# define sbt(sb) ((sb)->s_type->name)
-+
-+#define IS_WRITE_FLAG(flag) (flag & (O_RDWR | O_WRONLY | O_APPEND))
-+#define IS_COPY_FLAG(flag) (flag & (COPY_FLAGS))
-+
-+/* macros to simplify non-SCA code */
-+#  define MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages)
-+#  define MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages)
-+#  define FREE_PAGE_POINTERS(hidden_pages, num)
-+#  define FREE_PAGEDATA_POINTERS(hidden_pages_data, num)
-+#  define FOR_EACH_PAGE
-+#  define CURRENT_HIDDEN_PAGE hidden_page
-+#  define CURRENT_HIDDEN_PAGEDATA hidden_page_data
-+#  define CURRENT_HIDDEN_PAGEINDEX page->index
-+
-+/*
-+ * EXTERNALS:
-+ */
-+extern struct file_operations mini_fo_main_fops;
-+extern struct file_operations mini_fo_dir_fops;
-+extern struct inode_operations mini_fo_main_iops;
-+extern struct inode_operations mini_fo_dir_iops;
-+extern struct inode_operations mini_fo_symlink_iops;
-+extern struct super_operations mini_fo_sops;
-+extern struct dentry_operations mini_fo_dops;
-+extern struct vm_operations_struct mini_fo_shared_vmops;
-+extern struct vm_operations_struct mini_fo_private_vmops;
-+extern struct address_space_operations mini_fo_aops;
-+
-+#if 0 /* unused by mini_fo */
-+extern int mini_fo_interpose(dentry_t *hidden_dentry, dentry_t *this_dentry, super_block_t *sb, int flag);
-+#if defined(FIST_FILTER_DATA) || defined(FIST_FILTER_SCA)
-+extern page_t *mini_fo_get1page(file_t *file, int index);
-+extern int mini_fo_fill_zeros(file_t *file, page_t *page, unsigned from);
-+# endif /* FIST_FILTER_DATA || FIST_FILTER_SCA */
-+
-+
-+#  define mini_fo_hidden_dentry(d) __mini_fo_hidden_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+#  define mini_fo_hidden_sto_dentry(d) __mini_fo_hidden_sto_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+
-+extern dentry_t *__mini_fo_hidden_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+extern dentry_t *__mini_fo_hidden_sto_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+
-+extern int mini_fo_read_file(const char *filename, void *buf, int len);
-+extern int mini_fo_write_file(const char *filename, void *buf, int len);
-+extern dentry_t *fist_lookup(dentry_t *dir, const char *name, vnode_t **out, uid_t uid, gid_t gid);
-+#endif /* unused by mini_fo */
-+
-+/* state transition functions */
-+extern int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag);
-+extern int nondir_del_rew_to_del(dentry_t *dentry);
-+extern int nondir_creat_to_del(dentry_t *dentry);
-+extern int nondir_mod_to_del(dentry_t *dentry);
-+extern int nondir_unmod_to_del(dentry_t *dentry);
-+
-+extern int dir_unmod_to_mod(dentry_t *dentry);
-+
-+/* rename specials */
-+extern int rename_directory(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+extern int rename_nondir(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+
-+/* misc stuff */
-+extern int mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                               dentry_t *hidden_sto_dentry,
-+                               dentry_t *dentry,
-+                               super_block_t *sb, int flag);
-+
-+extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                         dentry_t *src_dentry, struct vfsmount *src_mnt);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, dev_t dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd);
-+#else
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, int dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode);
-+#endif
-+
-+extern int create_sto_dir(dentry_t *dentry, int mode);
-+
-+extern int exists_in_storage(dentry_t *dentry);
-+extern int is_mini_fo_existant(dentry_t *dentry);
-+extern int get_neg_sto_dentry(dentry_t *dentry);
-+extern int build_sto_structure(dentry_t *dir, dentry_t *dentry);
-+extern int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len);
-+extern dentry_t *bpath_walk(super_block_t *sb, char *bpath);
-+extern int bpath_put(dentry_t *dentry);
-+
-+/* check_mini_fo types functions */
-+extern int check_mini_fo_dentry(dentry_t *dentry);
-+extern int check_mini_fo_file(file_t *file);
-+extern int check_mini_fo_inode(inode_t *inode);
-+
-+/* General meta functions, can be called from outside of meta.c */
-+extern int meta_build_lists(dentry_t *dentry);
-+extern int meta_put_lists(dentry_t *dentry);
-+extern int __meta_put_lists(inode_t *inode);
-+
-+extern int meta_add_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_add_r_entry(dentry_t *dentry,
-+                          const char *old_name, int old_len,
-+                          const char *new_name, int new_len);
-+
-+extern int meta_remove_r_entry(dentry_t *dentry, const char *name, int len);
-+
-+extern int meta_check_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_check_d_entry(inode_t *inode, const char *name, int len);
-+
-+extern char* meta_check_r_entry(dentry_t *dentry, const char *name, int len);
-+extern char* __meta_check_r_entry(inode_t *inode, const char *name, int len);
-+extern int meta_is_r_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_is_r_entry(inode_t *inode, const char *name, int len);
-+
-+/* Specific meta functions, should be called only inside meta.c */
-+extern int __meta_put_d_list(inode_t *inode);
-+extern int __meta_put_r_list(inode_t *inode);
-+
-+extern int meta_list_add_d_entry(dentry_t *dentry,
-+                               const char *name, int len);
-+extern int meta_list_add_r_entry(dentry_t *dentry,
-+                               const char *old_name, int old_len,
-+                               const char *new_name, int new_len);
-+
-+extern int meta_list_remove_r_entry(dentry_t *dentry,
-+                                  const char *name, int len);
-+
-+extern int __meta_list_remove_r_entry(inode_t *inode,
-+                                    const char *name, int len);
-+
-+extern int meta_write_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_write_r_entry(dentry_t *dentry,
-+                            const char *old_name, int old_len,
-+                            const char *new_name, int new_len);
-+
-+extern int meta_sync_lists(dentry_t *dentry);
-+extern int meta_sync_d_list(dentry_t *dentry, int app_flag);
-+extern int meta_sync_r_list(dentry_t *dentry, int app_flag);
-+
-+/* ndl stuff */
-+extern int ndl_add_entry(struct readdir_data *rd, const char *name, int len);
-+extern void ndl_put_list(struct readdir_data *rd);
-+extern int ndl_check_entry(struct readdir_data *rd,
-+                         const char *name, int len);
-+
-+
-+# define copy_inode_size(dst, src) \
-+    dst->i_size = src->i_size; \
-+    dst->i_blocks = src->i_blocks;
-+
-+static inline void
-+fist_copy_attr_atime(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+}
-+static inline void
-+fist_copy_attr_times(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+}
-+static inline void
-+fist_copy_attr_timesizes(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+      copy_inode_size(dest, src);
-+}
-+static inline void
-+fist_copy_attr_all(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_mode = src->i_mode;
-+      dest->i_nlink = src->i_nlink;
-+      dest->i_uid = src->i_uid;
-+      dest->i_gid = src->i_gid;
-+      dest->i_rdev = src->i_rdev;
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+      dest->i_blksize = src->i_blksize;
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,12)
-+      dest->i_blkbits = src->i_blkbits;
-+# endif /* linux 2.4.12 and newer */
-+      copy_inode_size(dest, src);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      dest->i_attr_flags = src->i_attr_flags;
-+#else
-+      dest->i_flags = src->i_flags;
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+/* copied from linux/fs.h */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      if (m1 != m2) {
-+              if ((unsigned long) m1 < (unsigned long) m2) {
-+                      struct mutex *tmp = m2;
-+                      m2 = m1; m1 = tmp;
-+              }
-+              mutex_lock(m1);
-+      }
-+      mutex_lock(m2);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      mutex_unlock(m1);
-+      if (m1 != m2)
-+              mutex_unlock(m2);
-+      dput(d1);
-+      dput(d2);
-+}
-+
-+#else
-+static inline void double_down(struct semaphore *s1, struct semaphore *s2)
-+{
-+        if (s1 != s2) {
-+                if ((unsigned long) s1 < (unsigned long) s2) {
-+                        struct semaphore *tmp = s2;
-+                        s2 = s1; s1 = tmp;
-+                }
-+                down(s1);
-+        }
-+        down(s2);
-+}
-+
-+static inline void double_up(struct semaphore *s1, struct semaphore *s2)
-+{
-+        up(s1);
-+        if (s1 != s2)
-+                up(s2);
-+}
-+
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_down(&d1->d_inode->i_sem, &d2->d_inode->i_sem);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_up(&d1->d_inode->i_sem,&d2->d_inode->i_sem);
-+        dput(d1);
-+        dput(d2);
-+}
-+#endif   /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
-+#endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
-+#endif /* __KERNEL__ */
-+
-+/*
-+ * Definitions for user and kernel code
-+ */
-+
-+/* ioctls */
-+
-+#endif        /* not __MINI_FO_H_ */
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-merge
-@@ -0,0 +1,180 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+BASE=
-+STO=
-+HELP=
-+DRYRUN=
-+VERBOSE=
-+TMP="/tmp/"
-+META_NAME="META_dAfFgHE39ktF3HD2sr"
-+SKIP_DEL_LIST="skip-delete-list.mini_fo-merge"
-+
-+COMMAND=
-+exec_command()
-+{
-+    if [ x$DRYRUN == "xset" ]; then
-+      echo "  would run: $COMMAND"
-+    elif ! [ x$DRYRUN == "xset" ]; then
-+      if [ x$VERBOSE == "xset" ]; then
-+          echo "  running: $COMMAND"
-+      fi
-+      eval $COMMAND
-+    fi
-+}
-+
-+usage()
-+{
-+cat <<EOF
-+
-+USAGE: $0 -b <base dir> -s <storage dir>
-+Version 0.1
-+
-+This script merges the contents of a mini_fo storage file system back
-+to the base file system.
-+
-+!!! Warning: This will modify the base filesystem and can destroy data
-+             if used wrongly.
-+
-+Options:
-+     -b <base dir>
-+          the directory of the base file system.
-+
-+     -s <storage dir>
-+          the directory of the storage file system.
-+
-+     -d   dry run, will not change anything and print the commands that
-+          would be executed.
-+
-+     -t   tmp dir for storing temporary file. default: $TMP
-+
-+     -v   show what operations are performed.
-+
-+     -h   displays this message.
-+
-+EOF
-+}
-+
-+# parse parameters
-+while getopts hdvt:b:s: OPTS
-+  do
-+  case $OPTS in
-+      h)  HELP="set";;
-+      d)  DRYRUN="set";;
-+      v)  VERBOSE="set";;
-+      b)  BASE="$OPTARG";;
-+      s)  STO="$OPTARG";;
-+      t)  TMP="$OPTARG";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+if ! [ -d "$BASE" ] || ! [ -d "$STO" ]; then
-+    echo -e "$0:\n Error, -s and/or -b argument missing. type $0 -h for help."
-+    exit -1;
-+fi
-+
-+# get full paths
-+pushd $STO; STO=`pwd`; popd
-+pushd $BASE; BASE=`pwd`; popd
-+TMP=${TMP%/}
-+
-+
-+cat<<EOF
-+###############################################################################
-+# mini_fo-merge
-+#
-+# base dir:       $BASE
-+# storage dir:    $STO
-+# meta filename:  $META_NAME
-+# dry run:        $DRYRUN
-+# verbose:        $VERBOSE
-+# tmp files:      $TMP
-+###############################################################################
-+
-+EOF
-+
-+rm $TMP/$SKIP_DEL_LIST
-+
-+# first process all renamed dirs
-+echo "Merging renamed directories..."
-+pushd $STO &> /dev/null
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^R ' | tr -s ':R' ' ' | while read ENTRY; do
-+    echo "entry: $ENTRY"
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    OLD_B_DIR=`echo $ENTRY | cut -d ' ' -f 2 | sed -e 's/\///'`
-+    NEW_NAME=`echo $ENTRY | cut -d ' ' -f 3`
-+    NEW_B_DIR=`echo $META_FILE | sed -e "s/$META_NAME/$NEW_NAME/" | sed -e 's/^\.\///'`
-+    echo "META_FILE: $META_FILE"
-+    echo "OLD_B_DIR: $OLD_B_DIR"
-+    echo "NEW_NAME: $NEW_NAME"
-+    echo  "NEW_B_DIR: $NEW_B_DIR"
-+
-+    pushd $BASE &> /dev/null
-+    # remove an existing dir in storage
-+    COMMAND="rm -rf $NEW_B_DIR"; exec_command
-+    COMMAND="cp -R $OLD_B_DIR $NEW_B_DIR"; exec_command
-+    echo ""
-+    popd &> /dev/null
-+
-+    # remember this dir to exclude it from deleting later
-+    echo $NEW_B_DIR >> $TMP/$SKIP_DEL_LIST
-+done
-+
-+# delete all whiteouted files from base
-+echo -e "\nDeleting whiteout'ed files from base file system..."
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^D ' | sed -e 's/:D//' | while read ENTRY; do
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    DEL_NAME=`echo $ENTRY | cut -d ' ' -f 2`
-+    DEL_FILE=`echo $META_FILE | sed -e "s/$META_NAME/$DEL_NAME/" | sed -e 's/^\.\///'`
-+    grep -x $DEL_FILE $TMP/$SKIP_DEL_LIST &> /dev/null
-+    if [ $? -ne 0 ]; then
-+      pushd $BASE &> /dev/null
-+      COMMAND="rm -rf $DEL_FILE"; exec_command
-+      popd &> /dev/null
-+    else
-+      echo "  excluding: $DEL_FILE as in skip-del-list."
-+    fi
-+done
-+
-+# create all dirs and update permissions
-+echo -e "\nSetting up directory structures in base file system..."
-+find . -type d | sed -e 's/^\.\///' | while read DIR; do
-+    PERMS=`stat -c %a $DIR`
-+    DIR_UID=`stat -c %u $DIR`
-+    DIR_GID=`stat -c %g $DIR`
-+    pushd $BASE &> /dev/null
-+    if ! [ -d $DIR ]; then
-+      COMMAND="mkdir -p $DIR"; exec_command
-+    fi
-+    COMMAND="chmod $PERMS $DIR"; exec_command
-+    COMMAND="chown $DIR_UID:$DIR_GID $DIR"; exec_command
-+    popd &> /dev/null
-+done
-+
-+# merge all non-directory files
-+echo -e "\nMerging all non-directory files...."
-+for i in b c p f l s; do
-+    find . -type $i | sed -e 's/^\.\///' | grep -v "$META_NAME" | while read FILE; do
-+      pushd $BASE #&> /dev/null
-+      COMMAND="cp -df $STO/$FILE $BASE/$FILE"; exec_command
-+      popd &> /dev/null
-+    done
-+done
-+popd &> /dev/null
-+
-+#rm $TMP/$SKIP_DEL_LIST
-+
-+echo "Done!"
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-overlay
-@@ -0,0 +1,130 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+HELP=
-+SUFF=
-+MNTP=
-+MNT_DIR="/mnt"
-+STO=
-+STO_DIR="/tmp"
-+BASE=
-+
-+usage()
-+{
-+cat <<EOF
-+
-+Usage: $0 [-s suffix] [-d sto_dir_dir] [-m mount point] base_dir
-+Version 0.1
-+
-+This script overlays the given base directory using the mini_fo file
-+system. If only the base directory base_dir is given, $0
-+will use a storage directory called "sto-<base_dir_name>" in $STO_DIR,
-+and mount point "mini_fo-<base_dir_dir>" in $MNT_DIR.
-+
-+Options:
-+     -s <suffix>
-+          add given suffix to storage directory and the mount
-+          point. This is usefull for overlaying one base directory
-+          several times and avoiding conflicts with storage directory
-+          names and mount points.
-+
-+     -d <sto_dir_dir>
-+          change the directory in which the storage directory will be
-+          created (default is currently "$STO_DIR".
-+
-+     -m <mount point>
-+          use an alternative directory to create the mini_fo
-+          mountpoint (default is currently "$MNT_DIR".
-+
-+     -h   displays this message.
-+
-+EOF
-+exit 1;
-+}
-+
-+while getopts hm:s:d: OPTS
-+  do
-+  case $OPTS in
-+      s)  SUFF="$OPTARG";;
-+      d)  STO_DIR="$OPTARG";;
-+      m)  MNT_DIR="$OPTARG";;
-+      h)  HELP="set";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+shift $(($OPTIND - 1))
-+
-+BASE="$1"
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+# fix suffix
-+if [ "x$SUFF" != "x" ]; then
-+    SUFF="-$SUFF"
-+fi
-+
-+# kill trailing slashes
-+MNT_DIR=${MNT_DIR%/}
-+STO_DIR=${STO_DIR%/}
-+BASE=${BASE%/}
-+
-+
-+if ! [ -d "$BASE" ]; then
-+    echo "invalid base dir $BASE, run $0 -h for help."
-+    exit -1
-+fi
-+
-+# check opts
-+if ! [ -d "$MNT_DIR" ]; then
-+    echo "invalid mount dir $MNT_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+if ! [ -d "$STO_DIR" ]; then
-+    echo "invalid sto_dir_dir $STO_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+MNTP="$MNT_DIR/mini_fo-`basename $BASE`$SUFF"
-+STO="$STO_DIR/sto-`basename $BASE`$SUFF"
-+
-+# create the mount point if it doesn't exist
-+mkdir -p $MNTP
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create mount point $MNTP"
-+fi
-+
-+mkdir -p $STO
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create storage dir $STO"
-+fi
-+
-+# check if fs is already mounted
-+mount | grep mini_fo | grep $MNTP &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, existing mini_fo mount at $MNTP."
-+    exit -1
-+fi
-+
-+mount | grep mini_fo | grep $STO &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, $STO seems to be used already."
-+    exit -1
-+fi
-+
-+# mount
-+mount -t mini_fo -o base=$BASE,sto=$STO $BASE $MNTP
-+
-+if [ $? -ne 0 ]; then
-+    echo "Error, mounting failed, maybe no permisson to mount?"
-+fi
---- /dev/null
-+++ b/fs/mini_fo/mmap.c
-@@ -0,0 +1,637 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+#ifdef FIST_COUNT_WRITES
-+/* for counting writes in the middle vs. regular writes */
-+unsigned long count_writes = 0, count_writes_middle = 0;
-+#endif /* FIST_COUNT_WRITES */
-+
-+/* forward declaration of commit write and prepare write */
-+STATIC int mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+STATIC int mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+
-+
-+/*
-+ * Function for handling creation of holes when lseek-ing past the
-+ * end of the file and then writing some data.
-+ */
-+int
-+mini_fo_fill_zeros(file_t* file, page_t *page, unsigned from)
-+{
-+      int err = 0;
-+      dentry_t *dentry = file->f_dentry;
-+      inode_t *inode = dentry->d_inode;
-+      page_t *tmp_page;
-+      int index;
-+
-+      print_entry_location();
-+
-+      for (index = inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+              tmp_page = mini_fo_get1page(file, index);
-+              if (IS_ERR(tmp_page)) {
-+                      err = PTR_ERR(tmp_page);
-+                      goto out;
-+              }
-+
-+              /*
-+               * zero out rest of the contents of the page between the appropriate
-+               * offsets.
-+               */
-+              memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+              if (! (err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+
-+              page_cache_release(tmp_page);
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+      /* zero out appropriate parts of last page */
-+
-+      /*
-+       * if the encoding type is block, then adjust the 'from' (where the
-+       * zeroing will start) offset appropriately
-+       */
-+      from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+
-+      if ((from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0) {
-+
-+              memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, from - (inode->i_size & ~PAGE_CACHE_MASK));
-+              if (! (err = mini_fo_prepare_write(file, page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, page, 0, PAGE_CACHE_SIZE);
-+
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_writepage(page_t *page)
-+{
-+      int err = -EIO;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      char *kaddr, *hidden_kaddr;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      /*
-+       * writepage is called when shared mmap'ed files need to write
-+       * their pages, while prepare/commit_write are called from the
-+       * non-paged write() interface.  (However, in 2.3 the two interfaces
-+       * share the same cache, while in 2.2 they didn't.)
-+       *
-+       * So we pretty much have to duplicate much of what commit_write does.
-+       */
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      /* get page address, and encode it */
-+      kaddr = (char *) kmap(page);
-+      hidden_kaddr = (char*) kmap(hidden_page);
-+      mini_fo_encode_block(kaddr, hidden_kaddr, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then return error */
-+      kunmap(page);
-+      kunmap(hidden_page);
-+
-+      /* call lower writepage (expects locked page) */
-+      err = hidden_inode->i_mapping->a_ops->writepage(hidden_page);
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,1)
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+# endif /* kernel older than 2.4.1 */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+      if (err)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+ out:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,1)
-+      UnlockPage(page);
-+# endif /* kernel 2.4.1 and newer */
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * returns unlocked, up-to-date page (if ok), with increased refcnt.
-+ */
-+page_t *
-+mini_fo_get1page(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+      wait_on_page(page);
-+      if (!Page_Uptodate(page)) {
-+              lock_page(page);
-+              err = mapping->a_ops->readpage(file, page);
-+              if (err) {
-+                      page = ERR_PTR(err);
-+                      goto out;
-+              }
-+              wait_on_page(page);
-+              if (!Page_Uptodate(page)) {
-+                      page = ERR_PTR(-EIO);
-+                      goto out;
-+              }
-+      }
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * similar to get1page, but doesn't guarantee that it will return
-+ * an unlocked page.
-+ */
-+page_t *
-+mini_fo_get1page_cached(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * readpage is called from generic_page_read and the fault handler.
-+ * If your file system uses generic_page_read for the read op, it
-+ * must implement readpage.
-+ *
-+ * Readpage expects a locked page, and must unlock it.
-+ */
-+STATIC int
-+mini_fo_do_readpage(file_t *file, page_t *page)
-+{
-+      int err = -EIO;
-+      dentry_t *dentry;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      char *page_data;
-+      page_t *hidden_page;
-+      char *hidden_page_data;
-+      int real_size;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+      hidden_dentry = dtohd(dentry);
-+      inode = dentry->d_inode;
-+      hidden_inode = itohi(inode);
-+
-+      fist_dprint(7, "%s: requesting page %d from file %s\n", __FUNCTION__, page->index, dentry->d_name.name);
-+
-+      MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGE = NULL;
-+
-+      /* find lower page (returns a locked page) */
-+      FOR_EACH_PAGE {
-+              fist_dprint(8, "%s: Current page index = %d\n", __FUNCTION__, CURRENT_HIDDEN_PAGEINDEX);
-+              CURRENT_HIDDEN_PAGE = read_cache_page(hidden_inode->i_mapping,
-+                                                    CURRENT_HIDDEN_PAGEINDEX,
-+                                                    (filler_t *) hidden_inode->i_mapping->a_ops->readpage,
-+                                                    (void *) hidden_file);
-+              if (IS_ERR(CURRENT_HIDDEN_PAGE)) {
-+                      err = PTR_ERR(CURRENT_HIDDEN_PAGE);
-+                      CURRENT_HIDDEN_PAGE = NULL;
-+                      goto out_release;
-+              }
-+      }
-+
-+      /*
-+       * wait for the page data to show up
-+       * (signaled by readpage as unlocking the page)
-+       */
-+      FOR_EACH_PAGE {
-+              wait_on_page(CURRENT_HIDDEN_PAGE);
-+              if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                      /*
-+                       * call readpage() again if we returned from wait_on_page with a
-+                       * page that's not up-to-date; that can happen when a partial
-+                       * page has a few buffers which are ok, but not the whole
-+                       * page.
-+                       */
-+                      lock_page(CURRENT_HIDDEN_PAGE);
-+                      err = hidden_inode->i_mapping->a_ops->readpage(hidden_file,
-+                                                                     CURRENT_HIDDEN_PAGE);
-+                      if (err) {
-+                              CURRENT_HIDDEN_PAGE = NULL;
-+                              goto out_release;
-+                      }
-+                      wait_on_page(CURRENT_HIDDEN_PAGE);
-+                      if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                              err = -EIO;
-+                              goto out_release;
-+                      }
-+              }
-+      }
-+
-+      /* map pages, get their addresses */
-+      page_data = (char *) kmap(page);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGEDATA = (char *) kmap(CURRENT_HIDDEN_PAGE);
-+
-+      /* if decode_block could fail, then return error */
-+      err = 0;
-+      real_size = hidden_inode->i_size - (page->index << PAGE_CACHE_SHIFT);
-+      if (real_size <= 0)
-+              memset(page_data, 0, PAGE_CACHE_SIZE);
-+      else if (real_size < PAGE_CACHE_SIZE) {
-+              mini_fo_decode_block(hidden_page_data, page_data, real_size, inode, inode->i_sb, page->index);
-+              memset(page_data + real_size, 0, PAGE_CACHE_SIZE - real_size);
-+      } else
-+              mini_fo_decode_block(hidden_page_data, page_data, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+
-+      FOR_EACH_PAGE
-+              kunmap(CURRENT_HIDDEN_PAGE);
-+      kunmap(page);
-+
-+ out_release:
-+      FOR_EACH_PAGE
-+              if (CURRENT_HIDDEN_PAGE)
-+                      page_cache_release(CURRENT_HIDDEN_PAGE); /* undo read_cache_page */
-+
-+      FREE_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      FREE_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+
-+ out:
-+      if (err == 0)
-+              SetPageUptodate(page);
-+      else
-+              ClearPageUptodate(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_readpage(file_t *file, page_t *page)
-+{
-+      int err;
-+      print_entry_location();
-+
-+      err = mini_fo_do_readpage(file, page);
-+
-+      /*
-+       * we have to unlock our page, b/c we _might_ have gotten a locked page.
-+       * but we no longer have to wakeup on our page here, b/c UnlockPage does
-+       * it
-+       */
-+      UnlockPage(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = 0;
-+
-+      print_entry_location();
-+
-+      /*
-+       * we call kmap(page) only here, and do the kunmap
-+       * and the actual downcalls, including unlockpage and uncache
-+       * in commit_write.
-+       */
-+      kmap(page);
-+
-+      /* fast path for whole page writes */
-+      if (from == 0 && to == PAGE_CACHE_SIZE)
-+              goto out;
-+      /* read the page to "revalidate" our data */
-+      /* call the helper function which doesn't unlock the page */
-+      if (!Page_Uptodate(page))
-+              err = mini_fo_do_readpage(file, page);
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = -ENOMEM;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      file_t *hidden_file = NULL;
-+      loff_t pos;
-+      unsigned bytes = to - from;
-+      unsigned hidden_from, hidden_to, hidden_bytes;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      ASSERT(file != NULL);
-+      /*
-+       * here we have a kmapped page, with data from the user copied
-+       * into it.  we need to encode_block it, and then call the lower
-+       * commit_write.  We also need to simulate same behavior of
-+       * generic_file_write, and call prepare_write on the lower f/s first.
-+       */
-+#ifdef FIST_COUNT_WRITES
-+      count_writes++;
-+# endif /* FIST_COUNT_WRITES */
-+
-+      /* this is append and/or extend -- we can't have holes so fill them in */
-+      if (page->index > (hidden_inode->i_size >> PAGE_CACHE_SHIFT)) {
-+              page_t *tmp_page;
-+              int index;
-+              for (index = hidden_inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+                      tmp_page = mini_fo_get1page(file, index);
-+                      if (IS_ERR(tmp_page)) {
-+                              err = PTR_ERR(tmp_page);
-+                              goto out;
-+                      }
-+                      /* zero out the contents of the page at the appropriate offsets */
-+                      memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+                      if (!(err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                              err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+                      page_cache_release(tmp_page);
-+                      if (err < 0)
-+                              goto out;
-+                      if (current->need_resched)
-+                              schedule();
-+              }
-+      }
-+
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_inode->i_mutex);
-+#else
-+      down(&hidden_inode->i_sem);
-+#endif
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+#if FIST_ENCODING_BLOCKSIZE > 1
-+#  error encoding_blocksize greater than 1 is not yet supported
-+# endif /* FIST_ENCODING_BLOCKSIZE > 1 */
-+
-+      hidden_from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+      hidden_to = ((to + FIST_ENCODING_BLOCKSIZE - 1) & (~(FIST_ENCODING_BLOCKSIZE - 1)));
-+      if ((page->index << PAGE_CACHE_SHIFT) + to > hidden_inode->i_size) {
-+
-+              /*
-+               * if this call to commit_write had introduced holes and the code
-+               * for handling holes was invoked, then the beginning of this page
-+               * must be zeroed out
-+               * zero out bytes from 'size_of_file%pagesize' to 'from'.
-+               */
-+              if ((hidden_from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0)
-+                      memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, hidden_from - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+      }
-+      hidden_bytes = hidden_to - hidden_from;
-+
-+      /* call lower prepare_write */
-+      err = -EINVAL;
-+      if (hidden_inode->i_mapping &&
-+          hidden_inode->i_mapping->a_ops &&
-+          hidden_inode->i_mapping->a_ops->prepare_write)
-+              err = hidden_inode->i_mapping->a_ops->prepare_write(hidden_file,
-+                                                                  hidden_page,
-+                                                                  hidden_from,
-+                                                                  hidden_to);
-+      if (err)
-+              /* don't leave locked pages behind, esp. on an ENOSPC */
-+              goto out_unlock;
-+
-+      fist_dprint(8, "%s: encoding %d bytes\n", __FUNCTION__, hidden_bytes);
-+      mini_fo_encode_block((char *) page_address(page) + hidden_from, (char*) page_address(hidden_page) + hidden_from, hidden_bytes, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then goto unlock and return error */
-+
-+      /* call lower commit_write */
-+      err = hidden_inode->i_mapping->a_ops->commit_write(hidden_file,
-+                                                         hidden_page,
-+                                                         hidden_from,
-+                                                         hidden_to);
-+
-+      if (err < 0)
-+              goto out_unlock;
-+
-+      err = bytes;    /* convert error to no. of bytes */
-+
-+      inode->i_blocks = hidden_inode->i_blocks;
-+      /* we may have to update i_size */
-+      pos = (page->index << PAGE_CACHE_SHIFT) + to;
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+      mark_inode_dirty_sync(inode);
-+
-+ out_unlock:
-+      UnlockPage(hidden_page);
-+      page_cache_release(hidden_page);
-+      kunmap(page);           /* kmap was done in prepare_write */
-+ out:
-+      /* we must set our page as up-to-date */
-+      if (err < 0)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_inode->i_mutex);
-+#else
-+      up(&hidden_inode->i_sem);
-+#endif
-+      print_exit_status(err);
-+      return err;                     /* assume all is ok */
-+}
-+
-+
-+STATIC int
-+mini_fo_bmap(struct address_space *mapping, long block)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+
-+      print_entry_location();
-+
-+      inode = (inode_t *) mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      if (hidden_inode->i_mapping->a_ops->bmap)
-+              err = hidden_inode->i_mapping->a_ops->bmap(hidden_inode->i_mapping, block);
-+      print_exit_location();
-+      return err;
-+}
-+
-+
-+/*
-+ * This function is copied verbatim from mm/filemap.c.
-+ * XXX: It should be simply moved to some header file instead -- bug Al about it!
-+ */
-+static inline int sync_page(struct page *page)
-+{
-+      struct address_space *mapping = page->mapping;
-+
-+      if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
-+              return mapping->a_ops->sync_page(page);
-+      return 0;
-+}
-+
-+
-+/*
-+ * XXX: we may not need this function if not FIST_FILTER_DATA.
-+ * FIXME: for FIST_FILTER_SCA, get all lower pages and sync them each.
-+ */
-+STATIC int
-+mini_fo_sync_page(page_t *page)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      err = sync_page(hidden_page);
-+
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
---- /dev/null
-+++ b/fs/mini_fo/README
-@@ -0,0 +1,163 @@
-+README for the mini_fo overlay file system
-+=========================================
-+
-+
-+WHAT IS MINI_FO?
-+----------------
-+
-+mini_fo is a virtual kernel file system that can make read-only
-+file systems writable. This is done by redirecting modifying operations
-+to a writeable location called "storage directory", and leaving the
-+original data in the "base directory" untouched. When reading, the
-+file system merges the modifed and original data so that only the
-+newest versions will appear. This occurs transparently to the user,
-+who can access the data like on any other read-write file system.
-+
-+Base and storage directories may be located on the same or on
-+different partitions and may be of different file system types. While
-+the storage directory obviously needs to be writable, the base may or
-+may not be writable, what doesn't matter as it will no be modified
-+anyway.
-+
-+
-+WHAT IS GOOD FOR?
-+-----------------
-+
-+The primary purpose of the mini_fo file system is to allow easy
-+software updates to embedded systems, that often store their root
-+file system in a read-only flash file system, but there are many
-+more as for example sandboxing, or for allowing live-cds to
-+permanently store information.
-+
-+
-+BUILDING
-+--------
-+This should be simple. Adjust the Makefile to point to the correct
-+kernel headers you want to build the module for. Then:
-+
-+    # make
-+
-+should build "mini_fo.o" for a 2.4 kernel or "mini_fo.ko" for a 2.6
-+kernel.
-+
-+If you are building the module for you current kernel, you can install
-+the module (as root):
-+
-+    # make install
-+
-+or uninstall with
-+
-+    # make uninstall
-+
-+
-+USING THE FILE SYSTEM
-+--------------------
-+
-+the general mount syntax is:
-+
-+   mount -t mini_fo -o base=<base directory>,sto=<storage directory>\
-+                            <base directory> <mount point>
-+
-+Example:
-+
-+You have mounted a cdrom to /mnt/cdrom and want to modifiy some files
-+on it:
-+
-+load the module (as root)
-+
-+    # insmod mini_fo.o for a 2.4 kernel or
-+
-+    # insmod mini_fo.ko for a 2.6 kernel
-+
-+
-+create a storage dir in tmp and a mountpoint for mini_fo:
-+
-+    # mkdir /tmp/sto
-+    # mkdir /mnt/mini_fo
-+
-+and mount the mini_fo file system:
-+
-+    # mount -t mini_fo -o base=/mnt/cdrom,sto=/tmp/sto /mnt/cdrom /mnt/mini_fo
-+
-+
-+Now the data stored on the cd can be accessed via the mini_fo
-+mountpoint just like any read-write file system, files can be modified
-+and deleted, new ones can be created and so on. When done unmount the
-+file system:
-+
-+    # unmount /mnt/mini_fo
-+
-+Note that if the file system is mounted again using the same storage
-+file system, of course it will appear in the modified state again. If
-+you remount it using an new empty storage directory, it will be
-+unmodified. Therefore by executing:
-+
-+    # cd /tmp/sto
-+    # rm -rf *
-+
-+you can nuke all the changes you made to the original file system. But
-+ remember NEVER do this while the mini_fo file system is mounted!
-+
-+
-+Alternatively you can use the mini_fo-overlay bash script, that
-+simplifies managing mini_fo mounts. See TOOLS Section.
-+
-+
-+TOOLS
-+-----
-+
-+mini_fo-merge (experimental):
-+
-+This is a bash script that will merge changes contained in the storage
-+directory back to the base directory. This allows mini_fo to function
-+as a cache file system by overlaying a slow (network, ...) file system
-+and using a fast (ramdisk, ...) as storage. When done, changes can be
-+merged back to the (slow) base with mini_fo-merge. See "mini_fo-merge
-+-h" for details.
-+
-+It can be usefull for merging changes back after a successfull test
-+(patches, software updates...)
-+
-+
-+mini_fo-overlay:
-+
-+This bash script simplifies managing one or more mini_fo mounts. For
-+overlaying a directory called "basedir1", you can just call:
-+
-+    # mini_fo-overlay basedir1
-+
-+This will mount mini_fo with "basedir1" as base, "/tmp/sto-basedir1/"
-+as storage to "/mnt/mini_fo-basedir1/". It has more options though,
-+type "mini_fo-overlay -h" for details.
-+
-+
-+DOCUMENTATION, REPORTING BUGS, GETTING HELP
-+-------------------------------------------
-+
-+Please visit the mini_fo project page at:
-+
-+http://www.denx.de/twiki/bin/view/Know/MiniFOHome
-+
-+
-+WARNINGS
-+--------
-+
-+Never modify the base or the storage directorys while the mini_fo
-+file system is mounted, or you might crash you system. Simply accessing
-+and reading should not cause any trouble.
-+
-+Exporting a mini_fo mount point via NFS has not been tested, and may
-+or may not work.
-+
-+Check the RELEASE_NOTES for details on bugs and features.
-+
-+
-+
-+Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+
-+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.
-+
-+
---- /dev/null
-+++ b/fs/mini_fo/RELEASE_NOTES
-@@ -0,0 +1,111 @@
-+Release:      mini_fo-0.6.1 (v0-6-1)
-+Date:         21.09.2005
-+
-+
-+Changes:
-+--------
-+v0-6-1:
-+
-+- bugfixes (see ChangeLog)
-+
-+- two helper scripts "mini_fo_merge" and "mini_fo_overlay" (see
-+  README for details).
-+
-+v0-6-0:
-+
-+- Support for 2.4 and 2.6 (see Makefile)
-+
-+- Partial hard link support (creating works as expected, but already
-+  existing links in the base file system will be treated as if they
-+  were individual files).
-+
-+- Various bugfixes and cleanups.
-+
-+
-+v0-6-0-pre1:
-+
-+- This is mini_fo-0-6-0-pre1! This release is a complete rewrite of
-+  many vital mini_fo parts such as the old whiteout list code which
-+  has been replaced by the new META subsystem.
-+
-+- Light weight directory renaming implemented. This means if a
-+  directory is renamed via the mini_fo filesystem this will no longer
-+  result in a complete copy in storage, instead only one empty
-+  directory will be created. All base filed contained in the original
-+  directory stay there until modified.
-+
-+- Special files (creating, renaming, deleting etc.) now working.
-+
-+- Many bugfixes and cleanup, mini_fo is now a lot more stable.
-+
-+
-+v0-5-10:
-+
-+- Final release of the 0-5-* versions. Next will be a complete rewrite
-+  of many features. This release contains several bugfixes related to
-+  directory renaming.
-+
-+
-+v0-5-10-pre6:
-+
-+- Lots of cleanup and several bugfixes related to directory deleting
-+
-+- Directory renaming suddenly works, what is most likely due to the
-+  fact tha that "mv" is smart: if the classic rename doesn't work it
-+  will assume that source and target file are on different fs and will
-+  copy the directory and try to remove the source directory. Until
-+  directory removing wasn't implemented, it would fail to do this and
-+  rollback.
-+  So, directory renaming works for now, but it doesn't yet do what you
-+  would expect from a overlay fs, so use with care.
-+
-+
-+v0-5-10-pre5:
-+
-+- implemented directory deleting
-+- made parsing of mount options more stable
-+- New format of mount options! (See README)
-+- I can't reproduce the unknown panic with 2.4.25 anymore, so I'll
-+  happily assume it never existed!
-+
-+
-+Implemented features:
-+---------------------
-+
-+- creating hard links (see BUGS on already existing hard links)
-+- lightweight directory renaming
-+- renaming device files, pipes, sockets, etc.
-+- creating, renaming, deleting of special files
-+- deleting directorys
-+- general directory reading (simple "ls" )
-+- creating files in existing directorys
-+- creating directorys
-+- renaming files.
-+- reading and writing files (involves opening)
-+- appending to files (creates copy in storage)
-+- deleting files
-+- llseek works too, what allows editors to work
-+- persistency (a deleted file stay deleted over remounts)
-+- use of symbolic links
-+- creating of device files
-+
-+
-+Not (yet) implemented features:
-+-------------------------------
-+
-+- full hard link support.
-+
-+
-+
-+BUGS:
-+-----
-+
-+Hard links in the base file system will be treated as individual
-+files, not as links to one inode.
-+
-+The main problem with hard links isn't allowing to create them, but
-+their pure existence. If you modify a base hard link, the changes made
-+will only show up on this link, the other link will remain in the
-+original state. I hope to fix this someday. Please note that this does
-+not effect the special hard links '.' and '..', that are handled
-+seperately by the lower fs.
---- /dev/null
-+++ b/fs/mini_fo/state.c
-@@ -0,0 +1,620 @@
-+/*
-+ * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+/* create the storage file, setup new states */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+int create_sto_reg_file(dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: wrong type or state.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode, nd);
-+#else
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode);
-+#endif
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file [2].\n");
-+                err = -EINVAL;
-+                goto out_lock;
-+        }
-+
-+        /* interpose the new inode */
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == UNMODIFIED) {
-+                dtost(dentry) = MODIFIED;
-+                /* interpose on new inode */
-+                if(itohi2(dentry->d_inode) != NULL) {
-+                        printk(KERN_CRIT "mini_fo: create_sto_file: invalid inode detected.\n");
-+                        err = -EINVAL;
-+                        goto out_lock;
-+                }
-+                itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+      fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* create the sto dir, setup states */
-+int create_sto_dir(dentry_t *dentry, int mode)
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+        dentry_t *hidden_sto_dir_dentry;
-+
-+      /* had to take the "!S_ISDIR(mode))" check out, because it failed */
-+      if(exists_in_storage(dentry)) {
-+                printk(KERN_CRIT "mini_fo: create_sto_dir: wrong type or state.\\
-+n");
-+                err = -EINVAL;
-+                goto out;
-+        }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      mode);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir.\n");
-+              goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir [2].\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == NON_EXISTANT) {
-+              dtopd(dentry)->state = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              dtopd(dentry)->state = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo:  create_sto_dir: ERROR, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_nod(dentry_t *dentry, int mode, dev_t dev)
-+#else
-+int create_sto_nod(dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+                printk(KERN_CRIT "mini_fo: create_sto_nod: ERROR getting neg. sto dentry.\n");
-+                goto out;
-+        }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mknod(hidden_sto_dir_dentry->d_inode, hidden_sto_dentry, mode, dev);
-+      if(err)
-+              goto out_lock;
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_nod: creating storage inode failed [1].\n");
-+              err = -EINVAL; /* return something indicating failure */
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == NON_EXISTANT) {
-+              dtost(dentry) = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == UNMODIFIED) {
-+              dtost(dentry) = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo: create_sto_nod: error, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+
-+/* unimplemented (and possibly not usefull):
-+
-+   nondir-del_to_del_rew
-+   nondir-non_exist_to_creat
-+
-+   dir-unmod_to_del
-+   dir-mod_to_del
-+   dir-creat_to_del
-+   dir-del_rew_to_del
-+   dir-del_to_del_rew
-+   dir-non_exist_to_creat
-+*/
-+
-+
-+/* bring a file of any type from state UNMODIFIED to MODIFIED */
-+int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag)
-+{
-+      int err = 0;
-+      struct vfsmount *tgt_mnt;
-+      struct vfsmount *src_mnt;
-+      dentry_t *tgt_dentry;
-+      dentry_t *src_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if((dtost(dentry) != UNMODIFIED) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      /* create sto file */
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+      /* handle different types of nondirs */
-+      if(S_ISCHR(dentry->d_inode->i_mode) ||
-+         S_ISBLK(dentry->d_inode->i_mode)) {
-+              err = vfs_mknod(hidden_sto_dir_dentry->d_inode,
-+                              hidden_sto_dentry,
-+                              dtohd(dentry)->d_inode->i_mode,
-+                              dtohd(dentry)->d_inode->i_rdev);
-+      }
-+
-+      else if(S_ISREG(dentry->d_inode->i_mode)) {
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode, NULL);
-+#else
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode);
-+#endif
-+      }
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      /* interpose on new inode */
-+      if(itohi2(dentry->d_inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR, invalid inode detected.\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+
-+        fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dtost(dentry) = MODIFIED;
-+
-+      /* copy contents if regular file and cp_flag = 1 */
-+      if((cp_flag == 1) && S_ISREG(dentry->d_inode->i_mode)) {
-+
-+              /* unlock first */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              dput(hidden_sto_dir_dentry);
-+
-+              tgt_dentry = dtohd2(dentry);
-+              tgt_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              src_dentry = dtohd(dentry);
-+              src_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt;
-+
-+              err = mini_fo_cp_cont(tgt_dentry, tgt_mnt,
-+                                    src_dentry, src_mnt);
-+              if(err) {
-+                      printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                          ERROR copying contents.\n");
-+              }
-+              goto out;
-+      }
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* this function is currently identical to nondir_creat_to_del */
-+int nondir_del_rew_to_del(dentry_t *dentry)
-+{
-+      return nondir_creat_to_del(dentry);
-+}
-+
-+int nondir_creat_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      /* for now this function serves for both state DEL_REWRITTEN and
-+       * CREATED */
-+      if(!(dtost(dentry) == CREATED || (dtost(dentry) == DEL_REWRITTEN)) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del/del_rew_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      dtost(dentry) = NON_EXISTANT;
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_mod_to_del(dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != MODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_unmod_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+       /* next we have to get a negative dentry for the storage file */
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if(err)
-+              goto out;
-+
-+      /* add deleted file to META lists */
-+      err = meta_add_d_entry(dentry->d_parent,
-+                             dentry->d_name.name,
-+                             dentry->d_name.len);
-+
-+      if(err)
-+              goto out;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+ out:
-+      return err;
-+}
-+
-+/* bring a dir from state UNMODIFIED to MODIFIED */
-+int dir_unmod_to_mod(dentry_t *dentry)
-+{
-+      int err;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         !S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* this creates our dir incl. sto. structure */
-+      err = build_sto_structure(dentry->d_parent, dentry);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  build_sto_structure failed.\n");
-+              goto out;
-+      }
-+ out:
-+      return err;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/super.c
-@@ -0,0 +1,281 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+STATIC void
-+mini_fo_read_inode(inode_t *inode)
-+{
-+      static struct address_space_operations mini_fo_empty_aops;
-+
-+      __itopd(inode) = kmalloc(sizeof(struct mini_fo_inode_info), GFP_KERNEL);
-+      if (!itopd(inode)) {
-+              printk("<0>%s:%s:%d: No kernel memory!\n", __FILE__, __FUNCTION__, __LINE__);
-+              ASSERT(NULL);
-+      }
-+      itohi(inode) = NULL;
-+      itohi2(inode) = NULL;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      inode->i_version++;
-+#else
-+      inode->i_version = ++event;     /* increment inode version */
-+#endif
-+      inode->i_op = &mini_fo_main_iops;
-+      inode->i_fop = &mini_fo_main_fops;
-+#if 0
-+      /*
-+       * XXX: To export a file system via NFS, it has to have the
-+       * FS_REQUIRES_DEV flag, so turn it on.  But should we inherit it from
-+       * the lower file system, or can we allow our file system to be exported
-+       * even if the lower one cannot be natively exported.
-+       */
-+      inode->i_sb->s_type->fs_flags |= FS_REQUIRES_DEV;
-+      /*
-+       * OK, the above was a hack, which is now turned off because it may
-+       * cause a panic/oops on some systems.  The correct way to export a
-+       * "nodev" filesystem is via using nfs-utils > 1.0 and the "fsid=" export
-+       * parameter, which requires 2.4.20 or later.
-+       */
-+#endif
-+      /* I don't think ->a_ops is ever allowed to be NULL */
-+      inode->i_mapping->a_ops = &mini_fo_empty_aops;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * No need to call write_inode() on the lower inode, as it
-+ * will have been marked 'dirty' anyway. But we might need
-+ * to write some of our own stuff to disk.
-+ */
-+STATIC void
-+mini_fo_write_inode(inode_t *inode, int sync)
-+{
-+      print_entry_location();
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+STATIC void
-+mini_fo_put_inode(inode_t *inode)
-+{
-+      /*
-+       * This is really funky stuff:
-+       * Basically, if i_count == 1, iput will then decrement it and this inode will be destroyed.
-+       * It is currently holding a reference to the hidden inode.
-+       * Therefore, it needs to release that reference by calling iput on the hidden inode.
-+       * iput() _will_ do it for us (by calling our clear_inode), but _only_ if i_nlink == 0.
-+       * The problem is, NFS keeps i_nlink == 1 for silly_rename'd files.
-+       * So we must for our i_nlink to 0 here to trick iput() into calling our clear_inode.
-+       */
-+      if (atomic_read(&inode->i_count) == 1)
-+              inode->i_nlink = 0;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * we now define delete_inode, because there are two VFS paths that may
-+ * destroy an inode: one of them calls clear inode before doing everything
-+ * else that's needed, and the other is fine.  This way we truncate the inode
-+ * size (and its pages) and then clear our own inode, which will do an iput
-+ * on our and the lower inode.
-+ */
-+STATIC void
-+mini_fo_delete_inode(inode_t *inode)
-+{
-+      print_entry_location();
-+
-+      fist_checkinode(inode, "mini_fo_delete_inode IN");
-+      inode->i_size = 0;              /* every f/s seems to do that */
-+      clear_inode(inode);
-+
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+/* final actions when unmounting a file system */
-+STATIC void
-+mini_fo_put_super(super_block_t *sb)
-+{
-+      if (stopd(sb)) {
-+              mntput(stopd(sb)->hidden_mnt);
-+              mntput(stopd(sb)->hidden_mnt2);
-+
-+              /* mk: no! dput(stopd(sb)->base_dir_dentry);
-+                 dput(stopd(sb)->storage_dir_dentry); */
-+
-+              kfree(stopd(sb));
-+              __stopd(sb) = NULL;
-+      }
-+}
-+
-+
-+#ifdef NOT_NEEDED
-+/*
-+ * This is called in do_umount before put_super.
-+ * The superblock lock is not held yet.
-+ * We probably do not need to define this or call write_super
-+ * on the hidden_sb, because sync_supers() will get to hidden_sb
-+ * sooner or later.  But it is also called from file_fsync()...
-+ */
-+STATIC void
-+mini_fo_write_super(super_block_t *sb)
-+{
-+      return;
-+}
-+#endif /* NOT_NEEDED */
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_statfs(struct dentry *d, struct kstatfs *buf)
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_statfs(super_block_t *sb, struct kstatfs *buf)
-+#else
-+mini_fo_statfs(super_block_t *sb, struct statfs *buf)
-+#endif
-+{
-+      int err = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+      struct dentry *hidden_d;
-+
-+      hidden_d = dtohd(d);
-+      err = vfs_statfs(hidden_d, buf);
-+#else
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+      err = vfs_statfs(hidden_sb, buf);
-+#endif
-+
-+      return err;
-+}
-+
-+
-+/*
-+ * XXX: not implemented.  This is not allowed yet.
-+ * Should we call this on the hidden_sb?  Probably not.
-+ */
-+STATIC int
-+mini_fo_remount_fs(super_block_t *sb, int *flags, char *data)
-+{
-+      //printk(KERN_CRIT "mini_fo_remount_fs: WARNING, this function is umimplemented.\n");
-+      return -ENOSYS;
-+}
-+
-+
-+/*
-+ * Called by iput() when the inode reference count reached zero
-+ * and the inode is not hashed anywhere.  Used to clear anything
-+ * that needs to be, before the inode is completely destroyed and put
-+ * on the inode free list.
-+ */
-+STATIC void
-+mini_fo_clear_inode(inode_t *inode)
-+{
-+      /*
-+       * Decrement a reference to a hidden_inode, which was incremented
-+       * by our read_inode when it was created initially.
-+       */
-+
-+      /* release the wol_list */
-+      if(S_ISDIR(inode->i_mode)) {
-+              __meta_put_lists(inode);
-+      }
-+
-+      /* mk: fan out fun */
-+      if(itohi(inode))
-+              iput(itohi(inode));
-+      if(itohi2(inode))
-+              iput(itohi2(inode));
-+
-+      // XXX: why this assertion fails?
-+      // because it doesn't like us
-+      // ASSERT((inode->i_state & I_DIRTY) == 0);
-+      kfree(itopd(inode));
-+      __itopd(inode) = NULL;
-+}
-+
-+
-+/*
-+ * Called in do_umount() if the MNT_FORCE flag was used and this
-+ * function is defined.  See comment in linux/fs/super.c:do_umount().
-+ * Used only in nfs, to kill any pending RPC tasks, so that subsequent
-+ * code can actually succeed and won't leave tasks that need handling.
-+ *
-+ * PS. I wonder if this is somehow useful to undo damage that was
-+ * left in the kernel after a user level file server (such as amd)
-+ * dies.
-+ */
-+STATIC void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_umount_begin(struct vfsmount *mnt, int flags)
-+{
-+      struct vfsmount *hidden_mnt;
-+
-+      hidden_mnt = stopd(mnt->mnt_sb)->hidden_mnt;
-+
-+      if (hidden_mnt->mnt_sb->s_op->umount_begin)
-+              hidden_mnt->mnt_sb->s_op->umount_begin(hidden_mnt, flags);
-+
-+}
-+#else
-+mini_fo_umount_begin(super_block_t *sb)
-+{
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+
-+      if (hidden_sb->s_op->umount_begin)
-+              hidden_sb->s_op->umount_begin(hidden_sb);
-+
-+}
-+#endif
-+
-+
-+struct super_operations mini_fo_sops =
-+{
-+      read_inode:             mini_fo_read_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      write_inode:    mini_fo_write_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_inode:              mini_fo_put_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      delete_inode:   mini_fo_delete_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_super:              mini_fo_put_super,
-+      statfs:         mini_fo_statfs,
-+      remount_fs:             mini_fo_remount_fs,
-+      clear_inode:    mini_fo_clear_inode,
-+      umount_begin:   mini_fo_umount_begin,
-+};
---- /dev/null
-+++ b/fs/mini_fo/Kconfig
-@@ -0,0 +1,3 @@
-+config MINI_FO
-+      tristate "Mini fanout overlay filesystem"
-+
diff --git a/target/linux/generic-2.6/patches-2.6.33/210-mini_fo_2.6.25_fixes.patch b/target/linux/generic-2.6/patches-2.6.33/210-mini_fo_2.6.25_fixes.patch
deleted file mode 100644 (file)
index d71e3b6..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
---- a/fs/mini_fo/main.c
-+++ b/fs/mini_fo/main.c
-@@ -79,6 +79,7 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-        * of the new inode's fields
-        */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       /*
-        * original: inode = iget(sb, hidden_inode->i_ino);
-        */
-@@ -87,6 +88,13 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-               err = -EACCES;          /* should be impossible??? */
-               goto out;
-       }
-+#else
-+      inode = mini_fo_iget(sb, iunique(sb, 25));
-+      if (IS_ERR(inode)) {
-+              err = PTR_ERR(inode);
-+              goto out;
-+      }
-+#endif
-       /*
-        * interpose the inode if not already interposed
-@@ -184,9 +192,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root = nd.dentry;
--                      stopd(sb)->base_dir_dentry = nd.dentry;
--                      stopd(sb)->hidden_mnt = nd.mnt;
-+                      hidden_root = nd_get_dentry(&nd);
-+                      stopd(sb)->base_dir_dentry = nd_get_dentry(&nd);
-+                      stopd(sb)->hidden_mnt = nd_get_mnt(&nd);
-               } else if(!strncmp("sto=", options, 4)) {
-                       /* parse the storage dir */
-@@ -204,9 +212,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root2 = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root2 = nd2.dentry;
--                      stopd(sb)->storage_dir_dentry = nd2.dentry;
--                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      hidden_root2 = nd_get_dentry(&nd2);
-+                      stopd(sb)->storage_dir_dentry = nd_get_dentry(&nd2);
-+                      stopd(sb)->hidden_mnt2 = nd_get_mnt(&nd2);
-                       stohs2(sb) = hidden_root2->d_sb;
-                       /* validate storage dir, this is done in
---- a/fs/mini_fo/mini_fo.h
-+++ b/fs/mini_fo/mini_fo.h
-@@ -302,6 +302,10 @@ extern int mini_fo_tri_interpose(dentry_
- extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-                          dentry_t *src_dentry, struct vfsmount *src_mnt);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+extern struct inode *mini_fo_iget(struct super_block *sb, unsigned long ino);
-+#endif
-+
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-@@ -501,6 +505,29 @@ static inline void double_unlock(struct 
- #endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
- #endif /* __KERNEL__ */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->path.dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->path.mnt);
-+}
-+#else
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->mnt);
-+}
-+#endif
-+
- /*
-  * Definitions for user and kernel code
-  */
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -262,10 +262,31 @@ mini_fo_umount_begin(super_block_t *sb)
- }
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+struct inode *
-+mini_fo_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      mini_fo_read_inode(inode);
-+
-+      unlock_new_inode(inode);
-+      return inode;
-+}
-+#endif /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) */
- struct super_operations mini_fo_sops =
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       read_inode:             mini_fo_read_inode,
-+#endif
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -164,11 +164,11 @@ dentry_t *bpath_walk(super_block_t *sb, 
-       err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-       /* validate */
--      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+      if (err || !nd_get_dentry(&nd) || !nd_get_dentry(&nd)->d_inode) {
-               printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-               return NULL;
-       }
--      return nd.dentry;
-+      return nd_get_dentry(&nd);
- }
diff --git a/target/linux/generic-2.6/patches-2.6.33/211-mini_fo_2.6.25_dentry_open_war.patch b/target/linux/generic-2.6/patches-2.6.33/211-mini_fo_2.6.25_dentry_open_war.patch
deleted file mode 100644 (file)
index 48a1942..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -442,6 +442,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                          S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -535,6 +540,11 @@ int meta_write_r_entry(dentry_t *dentry,
-                          meta_dentry, S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -671,14 +681,16 @@ int meta_sync_d_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
-@@ -811,14 +823,16 @@ int meta_sync_r_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
diff --git a/target/linux/generic-2.6/patches-2.6.33/212-mini_fo_2.6.26_fixes.patch b/target/linux/generic-2.6/patches-2.6.33/212-mini_fo_2.6.26_fixes.patch
deleted file mode 100644 (file)
index 8bd9ba3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -84,6 +84,7 @@ mini_fo_write_inode(inode_t *inode, int 
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
- STATIC void
- mini_fo_put_inode(inode_t *inode)
- {
-@@ -99,6 +100,7 @@ mini_fo_put_inode(inode_t *inode)
-       if (atomic_read(&inode->i_count) == 1)
-               inode->i_nlink = 0;
- }
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) */
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-@@ -238,7 +240,7 @@ mini_fo_clear_inode(inode_t *inode)
-  * dies.
-  */
- STATIC void
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
- mini_fo_umount_begin(struct vfsmount *mnt, int flags)
- {
-       struct vfsmount *hidden_mnt;
-@@ -290,7 +292,9 @@ struct super_operations mini_fo_sops =
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
-       put_inode:              mini_fo_put_inode,
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) */
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       delete_inode:   mini_fo_delete_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
diff --git a/target/linux/generic-2.6/patches-2.6.33/213-mini_fo_2.6.27_fixes.patch b/target/linux/generic-2.6/patches-2.6.33/213-mini_fo_2.6.27_fixes.patch
deleted file mode 100644 (file)
index f92c18b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
---- a/fs/mini_fo/inode.c
-+++ b/fs/mini_fo/inode.c
-@@ -439,7 +439,7 @@ mini_fo_symlink(inode_t *dir, dentry_t *
-       int err=0;
-       dentry_t *hidden_sto_dentry;
-       dentry_t *hidden_sto_dir_dentry;
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-         umode_t mode;
- #endif
-@@ -466,7 +466,7 @@ mini_fo_symlink(inode_t *dir, dentry_t *
-       down(&hidden_sto_dir_dentry->d_inode->i_sem);
- #endif
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-       mode = S_IALLUGO;
-       err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-                         hidden_sto_dentry, symname, mode);
-@@ -1128,7 +1128,7 @@ void mini_fo_put_link(struct dentry *den
- #endif
- STATIC int
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
- mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
- #else
- mini_fo_permission(inode_t *inode, int mask)
-@@ -1150,8 +1150,9 @@ mini_fo_permission(inode_t *inode, int m
-        *      if (err)
-        *              goto out;
-        */
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-+      err = inode_permission(hidden_inode, mask);
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-       err = permission(hidden_inode, mask, nd);
- #else
-       err = permission(hidden_inode, mask);
diff --git a/target/linux/generic-2.6/patches-2.6.33/214-mini_fo_2.6.29.patch b/target/linux/generic-2.6/patches-2.6.33/214-mini_fo_2.6.29.patch
deleted file mode 100644 (file)
index 63d704b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -236,7 +236,7 @@ int mini_fo_cp_cont(dentry_t *tgt_dentry
-       mntget(src_mnt);
-       /* open file write only */
--      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1, current_cred());
-       if(!tgt_file || IS_ERR(tgt_file)) {
-               printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-               err = PTR_ERR(tgt_file);
-@@ -244,7 +244,7 @@ int mini_fo_cp_cont(dentry_t *tgt_dentry
-       }
-       /* open file read only */
--      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0, current_cred());
-       if(!src_file || IS_ERR(src_file)) {
-               printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-               err = PTR_ERR(src_file);
---- a/fs/mini_fo/file.c
-+++ b/fs/mini_fo/file.c
-@@ -437,7 +437,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-                       mntget(stopd(inode->i_sb)->hidden_mnt);
-                       hidden_file = dentry_open(hidden_dentry,
-                                                 stopd(inode->i_sb)->hidden_mnt,
--                                                hidden_flags);
-+                                                hidden_flags, file->f_cred);
-                       if (IS_ERR(hidden_file)) {
-                               err = PTR_ERR(hidden_file);
-                               dput(hidden_dentry);
-@@ -479,7 +479,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-                       mntget(stopd(inode->i_sb)->hidden_mnt);
-                       hidden_file = dentry_open(hidden_dentry,
-                                                 stopd(inode->i_sb)->hidden_mnt,
--                                                hidden_flags);
-+                                                hidden_flags, file->f_cred);
-                       if (IS_ERR(hidden_file)) {
-                               err = PTR_ERR(hidden_file);
-                               dput(hidden_dentry);
-@@ -512,7 +512,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-       mntget(stopd(inode->i_sb)->hidden_mnt2);
-       hidden_sto_file = dentry_open(hidden_sto_dentry,
-                                     stopd(inode->i_sb)->hidden_mnt2,
--                                    hidden_flags);
-+                                    hidden_flags, file->f_cred);
-       /* dentry_open dputs the dentry if it fails */
-       if (IS_ERR(hidden_sto_file)) {
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -56,7 +56,7 @@ int meta_build_lists(dentry_t *dentry)
-               /* open META-file for reading */
--              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0, current_cred());
-               if(!meta_file || IS_ERR(meta_file)) {
-                       printk(KERN_CRIT "mini_fo: meta_build_lists: \
-                                           ERROR opening META file.\n");
-@@ -448,7 +448,7 @@ int meta_write_d_entry(dentry_t *dentry,
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-                                   ERROR opening meta file.\n");
-@@ -546,7 +546,7 @@ int meta_write_r_entry(dentry_t *dentry,
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-                                   ERROR opening meta file.\n");
-@@ -686,7 +686,7 @@ int meta_sync_d_list(dentry_t *dentry, i
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
-@@ -828,7 +828,7 @@ int meta_sync_r_list(dentry_t *dentry, i
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
diff --git a/target/linux/generic-2.6/patches-2.6.33/215-mini_fo_2.6.30.patch b/target/linux/generic-2.6/patches-2.6.33/215-mini_fo_2.6.30.patch
deleted file mode 100644 (file)
index 2d20920..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -86,8 +86,10 @@ int get_neg_sto_dentry(dentry_t *dentry)
-       len = dentry->d_name.len;
-       name = dentry->d_name.name;
-+      mutex_lock(&dtohd2(dentry->d_parent)->d_inode->i_mutex);
-       dtohd2(dentry) =
-               lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+      mutex_unlock(&dtohd2(dentry->d_parent)->d_inode->i_mutex);
-  out:
-       return err;
-@@ -426,7 +428,9 @@ int build_sto_structure(dentry_t *dir, d
-               const unsigned char *name;
-               len = dtohd(dentry)->d_name.len;
-               name = dtohd(dentry)->d_name.name;
-+              mutex_lock(&dtohd2(dir)->d_inode->i_mutex);
-               hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              mutex_unlock(&dtohd2(dir)->d_inode->i_mutex);
-               dtohd2(dentry) = hidden_sto_dentry;
-       }
---- a/fs/mini_fo/inode.c
-+++ b/fs/mini_fo/inode.c
-@@ -113,17 +113,23 @@ mini_fo_lookup(inode_t *dir, dentry_t *d
-               hidden_dir_dentry = hidden_dentry->d_parent;
-               kfree(bpath);
-       }
--      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode) {
-+              mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-               hidden_dentry =
-                       lookup_one_len(name, hidden_dir_dentry, namelen);
--      else
-+              mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+      } else {
-               hidden_dentry = NULL;
-+      }
--      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode) {
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-               hidden_sto_dentry =
-                       lookup_one_len(name, hidden_sto_dir_dentry, namelen);
--      else
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+      } else {
-               hidden_sto_dentry =  NULL;
-+      }
-       /* catch error in lookup */
-       if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-@@ -553,9 +559,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-                       dput(meta_dentry);
-@@ -643,9 +651,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       /* is this necessary? dget(meta_dentry); */
-                       err = vfs_unlink(hidden_sto_dentry->d_inode,
-@@ -688,9 +698,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       /* is this necessary? dget(meta_dentry); */
-                       err = vfs_unlink(hidden_sto_dentry->d_inode,
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -43,9 +43,11 @@ int meta_build_lists(dentry_t *dentry)
-       /* might there be a META-file? */
-       if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            dtohd2(dentry),
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-               if(!meta_dentry->d_inode) {
-                       dput(meta_dentry);
-                       goto out_ok;
-@@ -426,8 +428,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry), strlen (META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-       /* We need to create a META-file */
-         if(!meta_dentry->d_inode) {
-@@ -527,9 +532,13 @@ int meta_write_r_entry(dentry_t *dentry,
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen (META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-@@ -641,9 +650,13 @@ int meta_sync_d_list(dentry_t *dentry, i
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen(META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-@@ -784,9 +797,13 @@ int meta_sync_r_list(dentry_t *dentry, i
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen(META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
diff --git a/target/linux/generic-2.6/patches-2.6.33/216-mini_fo_locking.patch b/target/linux/generic-2.6/patches-2.6.33/216-mini_fo_locking.patch
deleted file mode 100644 (file)
index 4f07592..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/fs/mini_fo/state.c
-+++ b/fs/mini_fo/state.c
-@@ -537,17 +537,17 @@ int nondir_mod_to_del(dentry_t *dentry)
-       dtohd(dentry) = NULL;
-       dtost(dentry) = DELETED;
--      /* add deleted file to META-file */
--      meta_add_d_entry(dentry->d_parent,
--                       dentry->d_name.name,
--                       dentry->d_name.len);
--
-       /* was: unlock_dir(hidden_sto_dir_dentry); */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-       mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
- #else
-       up(&hidden_sto_dir_dentry->d_inode->i_sem);
- #endif
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-       dput(hidden_sto_dir_dentry);
-  out:
diff --git a/target/linux/generic-2.6/patches-2.6.33/219-kobject_uevent.patch b/target/linux/generic-2.6/patches-2.6.33/219-kobject_uevent.patch
deleted file mode 100644 (file)
index 7e00b22..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/lib/kobject_uevent.c
-+++ b/lib/kobject_uevent.c
-@@ -29,7 +29,8 @@ u64 uevent_seqnum;
- char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
- static DEFINE_SPINLOCK(sequence_lock);
- #if defined(CONFIG_NET)
--static struct sock *uevent_sock;
-+struct sock *uevent_sock = NULL;
-+EXPORT_SYMBOL_GPL(uevent_sock);
- #endif
- /* the strings here must match the enum in include/linux/kobject.h */
-@@ -42,6 +43,18 @@ static const char *kobject_actions[] = {
-       [KOBJ_OFFLINE] =        "offline",
- };
-+u64 uevent_next_seqnum(void)
-+{
-+      u64 seq;
-+
-+      spin_lock(&sequence_lock);
-+      seq = ++uevent_seqnum;
-+      spin_unlock(&sequence_lock);
-+
-+      return seq;
-+}
-+EXPORT_SYMBOL_GPL(uevent_next_seqnum);
-+
- /**
-  * kobject_action_type - translate action string to numeric type
-  *
-@@ -201,9 +214,7 @@ int kobject_uevent_env(struct kobject *k
-               kobj->state_remove_uevent_sent = 1;
-       /* we will send an event, so request a new sequence number */
--      spin_lock(&sequence_lock);
--      seq = ++uevent_seqnum;
--      spin_unlock(&sequence_lock);
-+      seq = uevent_next_seqnum();
-       retval = add_uevent_var(env, "SEQNUM=%llu", (unsigned long long)seq);
-       if (retval)
-               goto exit;
diff --git a/target/linux/generic-2.6/patches-2.6.33/220-sound_kconfig.patch b/target/linux/generic-2.6/patches-2.6.33/220-sound_kconfig.patch
deleted file mode 100644 (file)
index fb3df25..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/sound/core/Kconfig
-+++ b/sound/core/Kconfig
-@@ -8,7 +8,7 @@ config SND_PCM
-       select GCD
- config SND_HWDEP
--      tristate
-+      tristate "Sound hardware support"
- config SND_RAWMIDI
-       tristate
diff --git a/target/linux/generic-2.6/patches-2.6.33/221-binfmt_elf_gcc4.1.patch b/target/linux/generic-2.6/patches-2.6.33/221-binfmt_elf_gcc4.1.patch
deleted file mode 100644 (file)
index aefbe18..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/fs/binfmt_elf.c
-+++ b/fs/binfmt_elf.c
-@@ -1165,7 +1165,7 @@ static unsigned long vma_dump_size(struc
-       if (FILTER(ELF_HEADERS) &&
-           vma->vm_pgoff == 0 && (vma->vm_flags & VM_READ)) {
-               u32 __user *header = (u32 __user *) vma->vm_start;
--              u32 word;
-+              u32 word = 0;
-               mm_segment_t fs = get_fs();
-               /*
-                * Doing it this way gets the constant folded by GCC.
diff --git a/target/linux/generic-2.6/patches-2.6.33/222-partial_eraseblock_write.patch b/target/linux/generic-2.6/patches-2.6.33/222-partial_eraseblock_write.patch
deleted file mode 100644 (file)
index 0c7672e..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -21,6 +21,8 @@
- #include <linux/root_dev.h>
- #include <linux/magic.h>
-+#define MTD_ERASE_PARTIAL     0x8000 /* partition only covers parts of an erase block */
-+
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -226,13 +228,60 @@ static int part_erase(struct mtd_info *m
-               return -EROFS;
-       if (instr->addr >= mtd->size)
-               return -EINVAL;
-+
-+      instr->partial_start = false;
-+      if (mtd->flags & MTD_ERASE_PARTIAL) {
-+              size_t readlen = 0;
-+              u64 mtd_ofs;
-+
-+              instr->erase_buf = kmalloc(part->master->erasesize, GFP_ATOMIC);
-+              if (!instr->erase_buf)
-+                      return -ENOMEM;
-+
-+              mtd_ofs = part->offset + instr->addr;
-+              instr->erase_buf_ofs = do_div(mtd_ofs, part->master->erasesize);
-+
-+              if (instr->erase_buf_ofs > 0) {
-+                      instr->addr -= instr->erase_buf_ofs;
-+                      ret = part->master->read(part->master,
-+                              instr->addr + part->offset,
-+                              part->master->erasesize,
-+                              &readlen, instr->erase_buf);
-+
-+                      instr->partial_start = true;
-+              } else {
-+                      mtd_ofs = part->offset + part->mtd.size;
-+                      instr->erase_buf_ofs = part->master->erasesize -
-+                              do_div(mtd_ofs, part->master->erasesize);
-+
-+                      if (instr->erase_buf_ofs > 0) {
-+                              instr->len += instr->erase_buf_ofs;
-+                              ret = part->master->read(part->master,
-+                                      part->offset + instr->addr +
-+                                      instr->len - part->master->erasesize,
-+                                      part->master->erasesize, &readlen,
-+                                      instr->erase_buf);
-+                      } else {
-+                              ret = 0;
-+                      }
-+              }
-+              if (ret < 0) {
-+                      kfree(instr->erase_buf);
-+                      return ret;
-+              }
-+
-+      }
-+
-       instr->addr += part->offset;
-       ret = part->master->erase(part->master, instr);
-       if (ret) {
-               if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
-                       instr->fail_addr -= part->offset;
-               instr->addr -= part->offset;
-+              if (mtd->flags & MTD_ERASE_PARTIAL)
-+                      kfree(instr->erase_buf);
-       }
-+
-       return ret;
- }
-@@ -240,7 +289,25 @@ void mtd_erase_callback(struct erase_inf
- {
-       if (instr->mtd->erase == part_erase) {
-               struct mtd_part *part = PART(instr->mtd);
-+              size_t wrlen = 0;
-+              if (instr->mtd->flags & MTD_ERASE_PARTIAL) {
-+                      if (instr->partial_start) {
-+                              part->master->write(part->master,
-+                                      instr->addr, instr->erase_buf_ofs,
-+                                      &wrlen, instr->erase_buf);
-+                              instr->addr += instr->erase_buf_ofs;
-+                      } else {
-+                              instr->len -= instr->erase_buf_ofs;
-+                              part->master->write(part->master,
-+                                      instr->addr + instr->len,
-+                                      instr->erase_buf_ofs, &wrlen,
-+                                      instr->erase_buf +
-+                                      part->master->erasesize -
-+                                      instr->erase_buf_ofs);
-+                      }
-+                      kfree(instr->erase_buf);
-+              }
-               if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
-                       instr->fail_addr -= part->offset;
-               instr->addr -= part->offset;
-@@ -473,18 +540,24 @@ static struct mtd_part *add_one_partitio
-       if ((slave->mtd.flags & MTD_WRITEABLE) &&
-           mtd_mod_by_eb(slave->offset, &slave->mtd)) {
-               /* Doesn't start on a boundary of major erase size */
--              /* FIXME: Let it be writable if it is on a boundary of
--               * _minor_ erase size though */
--              slave->mtd.flags &= ~MTD_WRITEABLE;
--              printk(KERN_WARNING"mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
--                      part->name);
-+              slave->mtd.flags |= MTD_ERASE_PARTIAL;
-+              if (((u32) slave->mtd.size) > master->erasesize)
-+                      slave->mtd.flags &= ~MTD_WRITEABLE;
-+              else
-+                      slave->mtd.erasesize = slave->mtd.size;
-       }
-       if ((slave->mtd.flags & MTD_WRITEABLE) &&
--          mtd_mod_by_eb(slave->mtd.size, &slave->mtd)) {
--              slave->mtd.flags &= ~MTD_WRITEABLE;
--              printk(KERN_WARNING"mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
--                      part->name);
--      }
-+          mtd_mod_by_eb(slave->offset + slave->mtd.size, &slave->mtd)) {
-+              slave->mtd.flags |= MTD_ERASE_PARTIAL;
-+
-+              if ((u32) slave->mtd.size > master->erasesize)
-+                      slave->mtd.flags &= ~MTD_WRITEABLE;
-+              else
-+                      slave->mtd.erasesize = slave->mtd.size;
-+      }
-+      if ((slave->mtd.flags & (MTD_ERASE_PARTIAL|MTD_WRITEABLE)) == MTD_ERASE_PARTIAL)
-+              printk(KERN_WARNING"mtd: partition \"%s\" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only\n",
-+                              part->name);
-       slave->mtd.ecclayout = master->ecclayout;
-       if (master->block_isbad) {
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -46,6 +46,10 @@ struct erase_info {
-       u_long priv;
-       u_char state;
-       struct erase_info *next;
-+
-+      u8 *erase_buf;
-+      u32 erase_buf_ofs;
-+      bool partial_start;
- };
- struct mtd_erase_region_info {
diff --git a/target/linux/generic-2.6/patches-2.6.33/240-packet_socket_type.patch b/target/linux/generic-2.6/patches-2.6.33/240-packet_socket_type.patch
deleted file mode 100644 (file)
index 0cf56c0..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-This patch allows the user to specify desired packet types (outgoing,
-broadcast, unicast, etc.) on packet sockets via setsockopt.
-This can reduce the load in situations where only a limited number
-of packet types are necessary
-
-Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-
---- a/include/linux/if_packet.h
-+++ b/include/linux/if_packet.h
-@@ -29,6 +29,8 @@ struct sockaddr_ll {
- /* These ones are invisible by user level */
- #define PACKET_LOOPBACK               5               /* MC/BRD frame looped back */
- #define PACKET_FASTROUTE      6               /* Fastrouted frame     */
-+#define PACKET_MASK_ANY               0xffffffff      /* mask for packet type bits */
-+
- /* Packet socket options */
-@@ -46,6 +48,7 @@ struct sockaddr_ll {
- #define PACKET_RESERVE                        12
- #define PACKET_TX_RING                        13
- #define PACKET_LOSS                   14
-+#define PACKET_RECV_TYPE              15
- struct tpacket_stats {
-       unsigned int    tp_packets;
---- a/net/packet/af_packet.c
-+++ b/net/packet/af_packet.c
-@@ -205,6 +205,7 @@ struct packet_sock {
-       unsigned int            tp_loss:1;
- #endif
-       struct packet_type      prot_hook ____cacheline_aligned_in_smp;
-+      __u8                    pkt_type:3;
- };
- struct packet_skb_cb {
-@@ -343,6 +344,7 @@ static int packet_rcv_spkt(struct sk_buf
- {
-       struct sock *sk;
-       struct sockaddr_pkt *spkt;
-+      struct packet_sock *po;
-       /*
-        *      When we registered the protocol we saved the socket in the data
-@@ -350,6 +352,7 @@ static int packet_rcv_spkt(struct sk_buf
-        */
-       sk = pt->af_packet_priv;
-+      po = pkt_sk(sk);
-       /*
-        *      Yank back the headers [hope the device set this
-@@ -362,7 +365,7 @@ static int packet_rcv_spkt(struct sk_buf
-        *      so that this procedure is noop.
-        */
--      if (skb->pkt_type == PACKET_LOOPBACK)
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-               goto out;
-       if (!net_eq(dev_net(dev), sock_net(sk)))
-@@ -538,12 +541,12 @@ static int packet_rcv(struct sk_buff *sk
-       int skb_len = skb->len;
-       unsigned int snaplen, res;
--      if (skb->pkt_type == PACKET_LOOPBACK)
--              goto drop;
--
-       sk = pt->af_packet_priv;
-       po = pkt_sk(sk);
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-+              goto drop;
-+
-       if (!net_eq(dev_net(dev), sock_net(sk)))
-               goto drop;
-@@ -659,12 +662,12 @@ static int tpacket_rcv(struct sk_buff *s
-       struct timeval tv;
-       struct timespec ts;
--      if (skb->pkt_type == PACKET_LOOPBACK)
--              goto drop;
--
-       sk = pt->af_packet_priv;
-       po = pkt_sk(sk);
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-+              goto drop;
-+
-       if (!net_eq(dev_net(dev), sock_net(sk)))
-               goto drop;
-@@ -1386,6 +1389,7 @@ static int packet_create(struct net *net
-       spin_lock_init(&po->bind_lock);
-       mutex_init(&po->pg_vec_lock);
-       po->prot_hook.func = packet_rcv;
-+      po->pkt_type = PACKET_MASK_ANY & ~(1 << PACKET_LOOPBACK);
-       if (sock->type == SOCK_PACKET)
-               po->prot_hook.func = packet_rcv_spkt;
-@@ -1731,6 +1735,16 @@ packet_setsockopt(struct socket *sock, i
-                       ret = packet_mc_drop(sk, &mreq);
-               return ret;
-       }
-+      case PACKET_RECV_TYPE:
-+      {
-+              unsigned int val;
-+              if (optlen != sizeof(val))
-+                      return -EINVAL;
-+              if (copy_from_user(&val, optval, sizeof(val)))
-+                      return -EFAULT;
-+              po->pkt_type = val & ~PACKET_LOOPBACK;
-+              return 0;
-+      }
- #ifdef CONFIG_PACKET_MMAP
-       case PACKET_RX_RING:
-@@ -1876,6 +1890,13 @@ static int packet_getsockopt(struct sock
-               data = &val;
-               break;
-+      case PACKET_RECV_TYPE:
-+              if (len > sizeof(unsigned int))
-+                      len = sizeof(unsigned int);
-+              val = po->pkt_type;
-+
-+              data = &val;
-+              break;
- #ifdef CONFIG_PACKET_MMAP
-       case PACKET_VERSION:
-               if (len > sizeof(int))
diff --git a/target/linux/generic-2.6/patches-2.6.33/250-pppoe_header_pad.patch b/target/linux/generic-2.6/patches-2.6.33/250-pppoe_header_pad.patch
deleted file mode 100644 (file)
index a2535db..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/drivers/net/pppoe.c
-+++ b/drivers/net/pppoe.c
-@@ -862,7 +862,7 @@ static int pppoe_sendmsg(struct kiocb *i
-               goto end;
--      skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32,
-+      skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32 + NET_SKB_PAD,
-                          0, GFP_KERNEL);
-       if (!skb) {
-               error = -ENOMEM;
-@@ -870,7 +870,7 @@ static int pppoe_sendmsg(struct kiocb *i
-       }
-       /* Reserve space for headers. */
--      skb_reserve(skb, dev->hard_header_len);
-+      skb_reserve(skb, dev->hard_header_len + NET_SKB_PAD);
-       skb_reset_network_header(skb);
-       skb->dev = dev;
diff --git a/target/linux/generic-2.6/patches-2.6.33/260-crypto_optional_tests.patch b/target/linux/generic-2.6/patches-2.6.33/260-crypto_optional_tests.patch
deleted file mode 100644 (file)
index 3b28502..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -96,6 +96,10 @@ config CRYPTO_MANAGER2
-       select CRYPTO_BLKCIPHER2
-       select CRYPTO_PCOMP
-+config CRYPTO_MANAGER_NO_TESTS
-+      bool "Disable internal testsuite to save space"
-+      depends on CRYPTO_MANAGER
-+
- config CRYPTO_GF128MUL
-       tristate "GF(2^128) multiplication functions (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
---- a/crypto/testmgr.c
-+++ b/crypto/testmgr.c
-@@ -47,6 +47,8 @@
- #define ENCRYPT 1
- #define DECRYPT 0
-+#ifndef CONFIG_CRYPTO_MANAGER_NO_TESTS
-+
- struct tcrypt_result {
-       struct completion completion;
-       int err;
-@@ -2359,8 +2361,11 @@ static int alg_find_test(const char *alg
-       return -1;
- }
-+#endif /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
-+
- int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
- {
-+#ifndef CONFIG_CRYPTO_MANAGER_NO_TESTS
-       int i;
-       int j;
-       int rc;
-@@ -2415,5 +2420,8 @@ notest:
-       return 0;
- non_fips_alg:
-       return -EINVAL;
-+#else /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
-+      return 0;
-+#endif /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
- }
- EXPORT_SYMBOL_GPL(alg_test);
---- a/crypto/testmgr.h
-+++ b/crypto/testmgr.h
-@@ -20,6 +20,8 @@
- #include <crypto/compress.h>
-+#ifndef CONFIG_CRYPTO_MANAGER_NO_TESTS
-+
- #define MAX_DIGEST_SIZE               64
- #define MAX_TAP                       8
-@@ -9552,4 +9554,6 @@ static struct hash_testvec crc32c_tv_tem
-       },
- };
-+#endif /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
-+
- #endif        /* _CRYPTO_TESTMGR_H */
diff --git a/target/linux/generic-2.6/patches-2.6.33/400-ledtrig_morse.patch b/target/linux/generic-2.6/patches-2.6.33/400-ledtrig_morse.patch
deleted file mode 100644 (file)
index 855b3de..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -337,4 +337,8 @@ config LEDS_TRIGGER_DEFAULT_ON
- comment "iptables trigger is under Netfilter config (LED target)"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_MORSE
-+      tristate "LED Morse Trigger"
-+      depends on LEDS_TRIGGERS
-+
- endif # NEW_LEDS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -44,3 +44,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += 
- 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_MORSE)      += ledtrig-morse.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/402-ledtrig_netdev.patch b/target/linux/generic-2.6/patches-2.6.33/402-ledtrig_netdev.patch
deleted file mode 100644 (file)
index d4ac25e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -341,4 +341,11 @@ config LEDS_TRIGGER_MORSE
-       tristate "LED Morse Trigger"
-       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
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -45,3 +45,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += 
- obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledtrig-gpio.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
- obj-$(CONFIG_LEDS_TRIGGER_MORSE)      += ledtrig-morse.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV)      += ledtrig-netdev.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/410-gpio_buttons.patch b/target/linux/generic-2.6/patches-2.6.33/410-gpio_buttons.patch
deleted file mode 100644 (file)
index b762dde..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/drivers/input/misc/Kconfig
-+++ b/drivers/input/misc/Kconfig
-@@ -319,4 +319,20 @@ config INPUT_PCAP
-         To compile this driver as a module, choose M here: the
-         module will be called pcap_keys.
-+config INPUT_GPIO_BUTTONS
-+      tristate "Polled GPIO buttons interface"
-+      depends on GENERIC_GPIO
-+      select INPUT_POLLDEV
-+      help
-+        This driver implements support for buttons connected
-+        to GPIO pins of various CPUs (and some other chips).
-+
-+        Say Y here if your device has buttons connected
-+        directly to such GPIO pins.  Your board-specific
-+        setup logic must also provide a platform device,
-+        with configuration data saying which GPIOs are used.
-+
-+        To compile this driver as a module, choose M here: the
-+        module will be called gpio-buttons.
-+
- endif
---- a/drivers/input/misc/Makefile
-+++ b/drivers/input/misc/Makefile
-@@ -30,4 +30,5 @@ obj-$(CONFIG_INPUT_WINBOND_CIR)              += winb
- obj-$(CONFIG_INPUT_WISTRON_BTNS)      += wistron_btns.o
- obj-$(CONFIG_INPUT_WM831X_ON)         += wm831x-on.o
- obj-$(CONFIG_INPUT_YEALINK)           += yealink.o
-+obj-$(CONFIG_INPUT_GPIO_BUTTONS)      += gpio_buttons.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/420-gpiodev.patch b/target/linux/generic-2.6/patches-2.6.33/420-gpiodev.patch
deleted file mode 100644 (file)
index ebc430f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -1016,6 +1016,14 @@ config CS5535_GPIO
-         If compiled as a module, it will be called cs5535_gpio.
-+config GPIO_DEVICE
-+      tristate "GPIO device support"
-+      depends on GENERIC_GPIO
-+      help
-+        Say Y to enable Linux GPIO device support.  This allows control of
-+        GPIO pins using a character device
-+
-+
- config RAW_DRIVER
-       tristate "RAW driver (/dev/raw/rawN)"
-       depends on BLOCK
---- a/drivers/char/Makefile
-+++ b/drivers/char/Makefile
-@@ -95,6 +95,7 @@ obj-$(CONFIG_SCx200_GPIO)    += scx200_gpio
- obj-$(CONFIG_PC8736x_GPIO)    += pc8736x_gpio.o
- obj-$(CONFIG_NSC_GPIO)                += nsc_gpio.o
- obj-$(CONFIG_CS5535_GPIO)     += cs5535_gpio.o
-+obj-$(CONFIG_GPIO_DEVICE)     += gpio_dev.o
- obj-$(CONFIG_GPIO_TB0219)     += tb0219.o
- obj-$(CONFIG_TELCLOCK)                += tlclk.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/430-scsi_header_fix.patch b/target/linux/generic-2.6/patches-2.6.33/430-scsi_header_fix.patch
deleted file mode 100644 (file)
index 59e4333..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/scsi/scsi.h
-+++ b/include/scsi/scsi.h
-@@ -149,10 +149,10 @@ struct scsi_cmnd;
- /* defined in T10 SCSI Primary Commands-2 (SPC2) */
- struct scsi_varlen_cdb_hdr {
--      u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
--      u8 control;
--      u8 misc[5];
--      u8 additional_cdb_length;         /* total cdb length - 8 */
-+      __u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
-+      __u8 control;
-+      __u8 misc[5];
-+      __u8 additional_cdb_length;         /* total cdb length - 8 */
-       __be16 service_action;
-       /* service specific data follows */
- };
diff --git a/target/linux/generic-2.6/patches-2.6.33/510-yaffs_support.patch b/target/linux/generic-2.6/patches-2.6.33/510-yaffs_support.patch
deleted file mode 100644 (file)
index e490452..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -44,6 +44,7 @@ source "fs/gfs2/Kconfig"
- source "fs/ocfs2/Kconfig"
- source "fs/btrfs/Kconfig"
- source "fs/nilfs2/Kconfig"
-+source "fs/yaffs2/Kconfig"
- endif # BLOCK
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -125,3 +125,4 @@ obj-$(CONFIG_OCFS2_FS)             += ocfs2/
- obj-$(CONFIG_BTRFS_FS)                += btrfs/
- obj-$(CONFIG_GFS2_FS)           += gfs2/
- obj-$(CONFIG_EXOFS_FS)          += exofs/
-+obj-$(CONFIG_YAFFS_FS)                += yaffs2/
diff --git a/target/linux/generic-2.6/patches-2.6.33/511-yaffs-cvs-2009-04-24.patch b/target/linux/generic-2.6/patches-2.6.33/511-yaffs-cvs-2009-04-24.patch
deleted file mode 100644 (file)
index 5c70e79..0000000
+++ /dev/null
@@ -1,12344 +0,0 @@
---- a/fs/yaffs2/devextras.h
-+++ b/fs/yaffs2/devextras.h
-@@ -14,194 +14,135 @@
-  */
- /*
-- * This file is just holds extra declarations used during development.
-- * Most of these are from kernel includes placed here so we can use them in
-- * applications.
-+ * This file is just holds extra declarations of macros that would normally
-+ * be providesd in the Linux kernel. These macros have been written from
-+ * scratch but are functionally equivalent to the Linux ones.
-  *
-  */
- #ifndef __EXTRAS_H__
- #define __EXTRAS_H__
--#if defined WIN32
--#define __inline__ __inline
--#define new newHack
--#endif
--
--#if !(defined __KERNEL__) || (defined WIN32)
--/* User space defines */
-+#if !(defined __KERNEL__)
-+/* Definition of types */
- typedef unsigned char __u8;
- typedef unsigned short __u16;
- typedef unsigned __u32;
-+#endif
-+
- /*
-- * Simple doubly linked list implementation.
-- *
-- * Some of the internal functions ("__xxx") are useful when
-- * manipulating whole lists rather than single entries, as
-- * sometimes we already know the next/prev entries and we can
-- * generate better code by using them directly rather than
-- * using the generic single-entry routines.
-+ * This is a simple doubly linked list implementation that matches the
-+ * way the Linux kernel doubly linked list implementation works.
-  */
--#define prefetch(x) 1
--
--struct list_head {
--      struct list_head *next, *prev;
-+struct ylist_head {
-+      struct ylist_head *next; /* next in chain */
-+      struct ylist_head *prev; /* previous in chain */
- };
--#define LIST_HEAD_INIT(name) { &(name), &(name) }
--#define LIST_HEAD(name) \
--      struct list_head name = LIST_HEAD_INIT(name)
-+/* Initialise a static list */
-+#define YLIST_HEAD(name) \
-+struct ylist_head name = { &(name), &(name)}
-+
--#define INIT_LIST_HEAD(ptr) do { \
--      (ptr)->next = (ptr); (ptr)->prev = (ptr); \
-+
-+/* Initialise a list head to an empty list */
-+#define YINIT_LIST_HEAD(p) \
-+do { \
-+      (p)->next = (p);\
-+      (p)->prev = (p); \
- } while (0)
--/*
-- * Insert a new entry between two known consecutive entries.
-- *
-- * This is only for internal list manipulation where we know
-- * the prev/next entries already!
-- */
--static __inline__ void __list_add(struct list_head *new,
--                                struct list_head *prev,
--                                struct list_head *next)
--{
--      next->prev = new;
--      new->next = next;
--      new->prev = prev;
--      prev->next = new;
--}
--/**
-- * list_add - add a new entry
-- * @new: new entry to be added
-- * @head: list head to add it after
-- *
-- * Insert a new entry after the specified head.
-- * This is good for implementing stacks.
-- */
--static __inline__ void list_add(struct list_head *new, struct list_head *head)
-+/* Add an element to a list */
-+static __inline__ void ylist_add(struct ylist_head *newEntry,
-+                              struct ylist_head *list)
- {
--      __list_add(new, head, head->next);
--}
-+      struct ylist_head *listNext = list->next;
-+
-+      list->next = newEntry;
-+      newEntry->prev = list;
-+      newEntry->next = listNext;
-+      listNext->prev = newEntry;
--/**
-- * list_add_tail - add a new entry
-- * @new: new entry to be added
-- * @head: list head to add it before
-- *
-- * Insert a new entry before the specified head.
-- * This is useful for implementing queues.
-- */
--static __inline__ void list_add_tail(struct list_head *new,
--                                   struct list_head *head)
--{
--      __list_add(new, head->prev, head);
- }
--/*
-- * Delete a list entry by making the prev/next entries
-- * point to each other.
-- *
-- * This is only for internal list manipulation where we know
-- * the prev/next entries already!
-- */
--static __inline__ void __list_del(struct list_head *prev,
--                                struct list_head *next)
-+static __inline__ void ylist_add_tail(struct ylist_head *newEntry,
-+                               struct ylist_head *list)
- {
--      next->prev = prev;
--      prev->next = next;
-+      struct ylist_head *listPrev = list->prev;
-+
-+      list->prev = newEntry;
-+      newEntry->next = list;
-+      newEntry->prev = listPrev;
-+      listPrev->next = newEntry;
-+
- }
--/**
-- * list_del - deletes entry from list.
-- * @entry: the element to delete from the list.
-- * Note: list_empty on entry does not return true after this, the entry is
-- * in an undefined state.
-- */
--static __inline__ void list_del(struct list_head *entry)
-+
-+/* Take an element out of its current list, with or without
-+ * reinitialising the links.of the entry*/
-+static __inline__ void ylist_del(struct ylist_head *entry)
- {
--      __list_del(entry->prev, entry->next);
-+      struct ylist_head *listNext = entry->next;
-+      struct ylist_head *listPrev = entry->prev;
-+
-+      listNext->prev = listPrev;
-+      listPrev->next = listNext;
-+
- }
--/**
-- * list_del_init - deletes entry from list and reinitialize it.
-- * @entry: the element to delete from the list.
-- */
--static __inline__ void list_del_init(struct list_head *entry)
-+static __inline__ void ylist_del_init(struct ylist_head *entry)
- {
--      __list_del(entry->prev, entry->next);
--      INIT_LIST_HEAD(entry);
-+      ylist_del(entry);
-+      entry->next = entry->prev = entry;
- }
--/**
-- * list_empty - tests whether a list is empty
-- * @head: the list to test.
-- */
--static __inline__ int list_empty(struct list_head *head)
-+
-+/* Test if the list is empty */
-+static __inline__ int ylist_empty(struct ylist_head *entry)
- {
--      return head->next == head;
-+      return (entry->next == entry);
- }
--/**
-- * list_splice - join two lists
-- * @list: the new list to add.
-- * @head: the place to add it in the first list.
-+
-+/* ylist_entry takes a pointer to a list entry and offsets it to that
-+ * we can find a pointer to the object it is embedded in.
-  */
--static __inline__ void list_splice(struct list_head *list,
--                                 struct list_head *head)
--{
--      struct list_head *first = list->next;
--      if (first != list) {
--              struct list_head *last = list->prev;
--              struct list_head *at = head->next;
--
--              first->prev = head;
--              head->next = first;
--
--              last->next = at;
--              at->prev = last;
--      }
--}
--/**
-- * list_entry - get the struct for this entry
-- * @ptr:      the &struct list_head pointer.
-- * @type:     the type of the struct this is embedded in.
-- * @member:   the name of the list_struct within the struct.
-- */
--#define list_entry(ptr, type, member) \
--      ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
--
--/**
-- * list_for_each      -       iterate over a list
-- * @pos:      the &struct list_head to use as a loop counter.
-- * @head:     the head for your list.
-- */
--#define list_for_each(pos, head) \
--      for (pos = (head)->next, prefetch(pos->next); pos != (head); \
--              pos = pos->next, prefetch(pos->next))
--
--/**
-- * list_for_each_safe -       iterate over a list safe against removal
-- *                              of list entry
-- * @pos:      the &struct list_head to use as a loop counter.
-- * @n:                another &struct list_head to use as temporary storage
-- * @head:     the head for your list.
-- */
--#define list_for_each_safe(pos, n, head) \
--      for (pos = (head)->next, n = pos->next; pos != (head); \
--              pos = n, n = pos->next)
-+#define ylist_entry(entry, type, member) \
-+      ((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))
--/*
-- * File types
-+
-+/* ylist_for_each and list_for_each_safe  iterate over lists.
-+ * ylist_for_each_safe uses temporary storage to make the list delete safe
-  */
-+
-+#define ylist_for_each(itervar, list) \
-+      for (itervar = (list)->next; itervar != (list); itervar = itervar->next)
-+
-+#define ylist_for_each_safe(itervar, saveVar, list) \
-+      for (itervar = (list)->next, saveVar = (list)->next->next; \
-+              itervar != (list); itervar = saveVar, saveVar = saveVar->next)
-+
-+
-+#if !(defined __KERNEL__)
-+
-+
-+#ifndef WIN32
-+#include <sys/stat.h>
-+#endif
-+
-+
-+#ifdef CONFIG_YAFFS_PROVIDE_DEFS
-+/* File types */
-+
-+
- #define DT_UNKNOWN    0
- #define DT_FIFO               1
- #define DT_CHR                2
-@@ -212,6 +153,7 @@ static __inline__ void list_splice(struc
- #define DT_SOCK               12
- #define DT_WHT                14
-+
- #ifndef WIN32
- #include <sys/stat.h>
- #endif
-@@ -227,10 +169,6 @@ static __inline__ void list_splice(struc
- #define ATTR_ATIME    16
- #define ATTR_MTIME    32
- #define ATTR_CTIME    64
--#define ATTR_ATIME_SET        128
--#define ATTR_MTIME_SET        256
--#define ATTR_FORCE    512     /* Not a change, but a change it */
--#define ATTR_ATTR_FLAG        1024
- struct iattr {
-       unsigned int ia_valid;
-@@ -244,21 +182,15 @@ struct iattr {
-       unsigned int ia_attr_flags;
- };
--#define KERN_DEBUG
-+#endif
- #else
--#ifndef WIN32
- #include <linux/types.h>
--#include <linux/list.h>
- #include <linux/fs.h>
- #include <linux/stat.h>
--#endif
- #endif
--#if defined WIN32
--#undef new
--#endif
- #endif
---- a/fs/yaffs2/Kconfig
-+++ b/fs/yaffs2/Kconfig
-@@ -5,7 +5,7 @@
- config YAFFS_FS
-       tristate "YAFFS2 file system support"
-       default n
--      depends on MTD
-+      depends on MTD_BLOCK
-       select YAFFS_YAFFS1
-       select YAFFS_YAFFS2
-       help
-@@ -43,7 +43,8 @@ config YAFFS_9BYTE_TAGS
-         format that you need to continue to support.  New data written
-         also uses the older-style format.  Note: Use of this option
-         generally requires that MTD's oob layout be adjusted to use the
--        older-style format.  See notes on tags formats and MTD versions.
-+        older-style format.  See notes on tags formats and MTD versions
-+        in yaffs_mtdif1.c.
-         If unsure, say N.
-@@ -109,26 +110,6 @@ config YAFFS_DISABLE_LAZY_LOAD
-         If unsure, say N.
--config YAFFS_CHECKPOINT_RESERVED_BLOCKS
--      int "Reserved blocks for checkpointing"
--      depends on YAFFS_YAFFS2
--      default 10
--      help
--          Give the number of Blocks to reserve for checkpointing.
--        Checkpointing saves the state at unmount so that mounting is
--        much faster as a scan of all the flash to regenerate this state
--        is not needed.  These Blocks are reserved per partition, so if
--        you have very small partitions the default (10) may be a mess
--        for you.  You can set this value to 0, but that does not mean
--        checkpointing is disabled at all. There only won't be any
--        specially reserved blocks for checkpointing, so if there is
--        enough free space on the filesystem, it will be used for
--        checkpointing.
--
--        If unsure, leave at default (10), but don't wonder if there are
--        always 2MB used on your large page device partition (10 x 2k
--        pagesize). When using small partitions or when being very small
--        on space, you probably want to set this to zero.
- config YAFFS_DISABLE_WIDE_TNODES
-       bool "Turn off wide tnodes"
---- a/fs/yaffs2/Makefile
-+++ b/fs/yaffs2/Makefile
-@@ -5,7 +5,6 @@
- obj-$(CONFIG_YAFFS_FS) += yaffs.o
- yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o
--yaffs-y += yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
-+yaffs-y += yaffs_packedtags1.o yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
- yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o
--yaffs-y += yaffs_mtdif1.o yaffs_packedtags1.o
--yaffs-y += yaffs_mtdif.o yaffs_mtdif2.o
-+yaffs-y += yaffs_mtdif.o yaffs_mtdif1.o yaffs_mtdif2.o
---- a/fs/yaffs2/moduleconfig.h
-+++ b/fs/yaffs2/moduleconfig.h
-@@ -27,12 +27,12 @@
- /* Default: Not selected */
- /* Meaning: Yaffs does its own ECC, rather than using MTD ECC */
--//#define CONFIG_YAFFS_DOES_ECC
-+/* #define CONFIG_YAFFS_DOES_ECC */
- /* Default: Not selected */
- /* Meaning: ECC byte order is 'wrong'.  Only meaningful if */
- /*          CONFIG_YAFFS_DOES_ECC is set */
--//#define CONFIG_YAFFS_ECC_WRONG_ORDER
-+/* #define CONFIG_YAFFS_ECC_WRONG_ORDER */
- /* Default: Selected */
- /* Meaning: Disables testing whether chunks are erased before writing to them*/
-@@ -54,11 +54,11 @@ that you need to continue to support.  N
- older-style format.
- Note: Use of this option generally requires that MTD's oob layout be
- adjusted to use the older-style format.  See notes on tags formats and
--MTD versions.
-+MTD versions in yaffs_mtdif1.c.
- */
- /* Default: Not selected */
- /* Meaning: Use older-style on-NAND data format with pageStatus byte */
--#define CONFIG_YAFFS_9BYTE_TAGS
-+/* #define CONFIG_YAFFS_9BYTE_TAGS */
- #endif /* YAFFS_OUT_OF_TREE */
---- a/fs/yaffs2/yaffs_checkptrw.c
-+++ b/fs/yaffs2/yaffs_checkptrw.c
-@@ -12,48 +12,43 @@
-  */
- const char *yaffs_checkptrw_c_version =
--    "$Id: yaffs_checkptrw.c,v 1.14 2007-05-15 20:07:40 charles Exp $";
-+      "$Id: yaffs_checkptrw.c,v 1.18 2009-03-06 17:20:49 wookey Exp $";
- #include "yaffs_checkptrw.h"
--
-+#include "yaffs_getblockinfo.h"
- static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
- {
--
-       int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-       T(YAFFS_TRACE_CHECKPOINT,
-               (TSTR("checkpt blocks available = %d" TENDSTR),
-               blocksAvailable));
--
-       return (blocksAvailable <= 0) ? 0 : 1;
- }
- static int yaffs_CheckpointErase(yaffs_Device *dev)
- {
--
-       int i;
--
--      if(!dev->eraseBlockInNAND)
-+      if (!dev->eraseBlockInNAND)
-               return 0;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
--              dev->internalStartBlock,dev->internalEndBlock));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checking blocks %d to %d"TENDSTR),
-+              dev->internalStartBlock, dev->internalEndBlock));
--      for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--              if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
--                      if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
-+      for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+              if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("erasing checkpt block %d"TENDSTR), i));
-+                      if (dev->eraseBlockInNAND(dev, i - dev->blockOffset /* realign */)) {
-                               bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
-                               dev->nErasedBlocks++;
-                               dev->nFreeChunks += dev->nChunksPerBlock;
--                      }
--                      else {
--                              dev->markNANDBlockBad(dev,i);
-+                      } else {
-+                              dev->markNANDBlockBad(dev, i);
-                               bi->blockState = YAFFS_BLOCK_STATE_DEAD;
-                       }
-               }
-@@ -71,23 +66,23 @@ static void yaffs_CheckpointFindNextEras
-       int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-       T(YAFFS_TRACE_CHECKPOINT,
-               (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
--              dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
-+              dev->nErasedBlocks, dev->nReservedBlocks, blocksAvailable, dev->checkpointNextBlock));
--      if(dev->checkpointNextBlock >= 0 &&
--         dev->checkpointNextBlock <= dev->internalEndBlock &&
--         blocksAvailable > 0){
--
--              for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
--                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--                      if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
-+      if (dev->checkpointNextBlock >= 0 &&
-+                      dev->checkpointNextBlock <= dev->internalEndBlock &&
-+                      blocksAvailable > 0) {
-+
-+              for (i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++) {
-+                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+                      if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
-                               dev->checkpointNextBlock = i + 1;
-                               dev->checkpointCurrentBlock = i;
--                              T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
-+                              T(YAFFS_TRACE_CHECKPOINT, (TSTR("allocating checkpt block %d"TENDSTR), i));
-                               return;
-                       }
-               }
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("out of checkpt blocks"TENDSTR)));
-       dev->checkpointNextBlock = -1;
-       dev->checkpointCurrentBlock = -1;
-@@ -98,30 +93,31 @@ static void yaffs_CheckpointFindNextChec
-       int  i;
-       yaffs_ExtendedTags tags;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start:  blocks %d next %d" TENDSTR),
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("find next checkpt block: start:  blocks %d next %d" TENDSTR),
-               dev->blocksInCheckpoint, dev->checkpointNextBlock));
--      if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
--              for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
-+      if (dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
-+              for (i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++) {
-                       int chunk = i * dev->nChunksPerBlock;
-                       int realignedChunk = chunk - dev->chunkOffset;
--                      dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
--                              i, tags.objectId,tags.sequenceNumber,tags.eccResult));
-+                      dev->readChunkWithTagsFromNAND(dev, realignedChunk,
-+                                      NULL, &tags);
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
-+                              i, tags.objectId, tags.sequenceNumber, tags.eccResult));
--                      if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
-+                      if (tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA) {
-                               /* Right kind of block */
-                               dev->checkpointNextBlock = tags.objectId;
-                               dev->checkpointCurrentBlock = i;
-                               dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
-                               dev->blocksInCheckpoint++;
--                              T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
-+                              T(YAFFS_TRACE_CHECKPOINT, (TSTR("found checkpt block %d"TENDSTR), i));
-                               return;
-                       }
-               }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("found no more checkpt blocks"TENDSTR)));
-       dev->checkpointNextBlock = -1;
-       dev->checkpointCurrentBlock = -1;
-@@ -133,17 +129,17 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-       /* Got the functions we need? */
-       if (!dev->writeChunkWithTagsToNAND ||
--          !dev->readChunkWithTagsFromNAND ||
--          !dev->eraseBlockInNAND ||
--          !dev->markNANDBlockBad)
-+                      !dev->readChunkWithTagsFromNAND ||
-+                      !dev->eraseBlockInNAND ||
-+                      !dev->markNANDBlockBad)
-               return 0;
--      if(forWriting && !yaffs_CheckpointSpaceOk(dev))
-+      if (forWriting && !yaffs_CheckpointSpaceOk(dev))
-               return 0;
--      if(!dev->checkpointBuffer)
--              dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-+              dev->checkpointBuffer = YMALLOC_DMA(dev->totalBytesPerChunk);
-+      if (!dev->checkpointBuffer)
-               return 0;
-@@ -159,12 +155,10 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-       dev->checkpointNextBlock = dev->internalStartBlock;
-       /* Erase all the blocks in the checkpoint area */
--      if(forWriting){
--              memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-+      if (forWriting) {
-+              memset(dev->checkpointBuffer, 0, dev->nDataBytesPerChunk);
-               dev->checkpointByteOffset = 0;
-               return yaffs_CheckpointErase(dev);
--
--
-       } else {
-               int i;
-               /* Set to a value that will kick off a read */
-@@ -174,7 +168,7 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-               dev->blocksInCheckpoint = 0;
-               dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
-               dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
--              for(i = 0; i < dev->checkpointMaxBlocks; i++)
-+              for (i = 0; i < dev->checkpointMaxBlocks; i++)
-                       dev->checkpointBlockList[i] = -1;
-       }
-@@ -191,18 +185,17 @@ int yaffs_GetCheckpointSum(yaffs_Device 
- static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
- {
--
-       int chunk;
-       int realignedChunk;
-       yaffs_ExtendedTags tags;
--      if(dev->checkpointCurrentBlock < 0){
-+      if (dev->checkpointCurrentBlock < 0) {
-               yaffs_CheckpointFindNextErasedBlock(dev);
-               dev->checkpointCurrentChunk = 0;
-       }
--      if(dev->checkpointCurrentBlock < 0)
-+      if (dev->checkpointCurrentBlock < 0)
-               return 0;
-       tags.chunkDeleted = 0;
-@@ -210,10 +203,10 @@ static int yaffs_CheckpointFlushBuffer(y
-       tags.chunkId = dev->checkpointPageSequence + 1;
-       tags.sequenceNumber =  YAFFS_SEQUENCE_CHECKPOINT_DATA;
-       tags.byteCount = dev->nDataBytesPerChunk;
--      if(dev->checkpointCurrentChunk == 0){
-+      if (dev->checkpointCurrentChunk == 0) {
-               /* First chunk we write for the block? Set block state to
-                  checkpoint */
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointCurrentBlock);
-               bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
-               dev->blocksInCheckpoint++;
-       }
-@@ -221,28 +214,29 @@ static int yaffs_CheckpointFlushBuffer(y
-       chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
--              chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
-+              chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk, tags.objectId, tags.chunkId));
-       realignedChunk = chunk - dev->chunkOffset;
--      dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
-+      dev->writeChunkWithTagsToNAND(dev, realignedChunk,
-+                      dev->checkpointBuffer, &tags);
-       dev->checkpointByteOffset = 0;
-       dev->checkpointPageSequence++;
-       dev->checkpointCurrentChunk++;
--      if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
-+      if (dev->checkpointCurrentChunk >= dev->nChunksPerBlock) {
-               dev->checkpointCurrentChunk = 0;
-               dev->checkpointCurrentBlock = -1;
-       }
--      memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-+      memset(dev->checkpointBuffer, 0, dev->nDataBytesPerChunk);
-       return 1;
- }
--int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
-+int yaffs_CheckpointWrite(yaffs_Device *dev, const void *data, int nBytes)
- {
--      int i=0;
-+      int i = 0;
-       int ok = 1;
-@@ -250,17 +244,14 @@ int yaffs_CheckpointWrite(yaffs_Device *
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-               return 0;
--      if(!dev->checkpointOpenForWrite)
-+      if (!dev->checkpointOpenForWrite)
-               return -1;
--      while(i < nBytes && ok) {
--
--
--
--              dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
-+      while (i < nBytes && ok) {
-+              dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes;
-               dev->checkpointSum += *dataBytes;
-               dev->checkpointXor ^= *dataBytes;
-@@ -270,18 +261,17 @@ int yaffs_CheckpointWrite(yaffs_Device *
-               dev->checkpointByteCount++;
--              if(dev->checkpointByteOffset < 0 ||
-+              if (dev->checkpointByteOffset < 0 ||
-                  dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
-                       ok = yaffs_CheckpointFlushBuffer(dev);
--
-       }
--      return  i;
-+      return i;
- }
- int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
- {
--      int i=0;
-+      int i = 0;
-       int ok = 1;
-       yaffs_ExtendedTags tags;
-@@ -291,52 +281,54 @@ int yaffs_CheckpointRead(yaffs_Device *d
-       __u8 *dataBytes = (__u8 *)data;
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-               return 0;
--      if(dev->checkpointOpenForWrite)
-+      if (dev->checkpointOpenForWrite)
-               return -1;
--      while(i < nBytes && ok) {
-+      while (i < nBytes && ok) {
--              if(dev->checkpointByteOffset < 0 ||
--                 dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
-+              if (dev->checkpointByteOffset < 0 ||
-+                      dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
--                      if(dev->checkpointCurrentBlock < 0){
-+                      if (dev->checkpointCurrentBlock < 0) {
-                               yaffs_CheckpointFindNextCheckpointBlock(dev);
-                               dev->checkpointCurrentChunk = 0;
-                       }
--                      if(dev->checkpointCurrentBlock < 0)
-+                      if (dev->checkpointCurrentBlock < 0)
-                               ok = 0;
-                       else {
--
--                              chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
--                                        dev->checkpointCurrentChunk;
-+                              chunk = dev->checkpointCurrentBlock *
-+                                      dev->nChunksPerBlock +
-+                                      dev->checkpointCurrentChunk;
-                               realignedChunk = chunk - dev->chunkOffset;
--                              /* read in the next chunk */
--                              /* printf("read checkpoint page %d\n",dev->checkpointPage); */
--                              dev->readChunkWithTagsFromNAND(dev, realignedChunk,
--                                                             dev->checkpointBuffer,
--                                                            &tags);
--
--                              if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
--                                 tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
--                                 ok = 0;
-+                              /* read in the next chunk */
-+                              /* printf("read checkpoint page %d\n",dev->checkpointPage); */
-+                              dev->readChunkWithTagsFromNAND(dev,
-+                                              realignedChunk,
-+                                              dev->checkpointBuffer,
-+                                              &tags);
-+
-+                              if (tags.chunkId != (dev->checkpointPageSequence + 1) ||
-+                                      tags.eccResult > YAFFS_ECC_RESULT_FIXED ||
-+                                      tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
-+                                      ok = 0;
-                               dev->checkpointByteOffset = 0;
-                               dev->checkpointPageSequence++;
-                               dev->checkpointCurrentChunk++;
--                              if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
-+                              if (dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
-                                       dev->checkpointCurrentBlock = -1;
-                       }
-               }
--              if(ok){
-+              if (ok) {
-                       *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
-                       dev->checkpointSum += *dataBytes;
-                       dev->checkpointXor ^= *dataBytes;
-@@ -353,17 +345,17 @@ int yaffs_CheckpointRead(yaffs_Device *d
- int yaffs_CheckpointClose(yaffs_Device *dev)
- {
--      if(dev->checkpointOpenForWrite){
--              if(dev->checkpointByteOffset != 0)
-+      if (dev->checkpointOpenForWrite) {
-+              if (dev->checkpointByteOffset != 0)
-                       yaffs_CheckpointFlushBuffer(dev);
-       } else {
-               int i;
--              for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
--                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
--                      if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
-+              for (i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++) {
-+                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointBlockList[i]);
-+                      if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
-                               bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
-                       else {
--                              // Todo this looks odd...
-+                              /* Todo this looks odd... */
-                       }
-               }
-               YFREE(dev->checkpointBlockList);
-@@ -374,27 +366,25 @@ int yaffs_CheckpointClose(yaffs_Device *
-       dev->nErasedBlocks -= dev->blocksInCheckpoint;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint byte count %d" TENDSTR),
-                       dev->checkpointByteCount));
--      if(dev->checkpointBuffer){
-+      if (dev->checkpointBuffer) {
-               /* free the buffer */
-               YFREE(dev->checkpointBuffer);
-               dev->checkpointBuffer = NULL;
-               return 1;
--      }
--      else
-+      } else
-               return 0;
--
- }
- int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
- {
-       /* Erase the first checksum block */
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint invalidate"TENDSTR)));
--      if(!yaffs_CheckpointSpaceOk(dev))
-+      if (!yaffs_CheckpointSpaceOk(dev))
-               return 0;
-       return yaffs_CheckpointErase(dev);
---- a/fs/yaffs2/yaffs_checkptrw.h
-+++ b/fs/yaffs2/yaffs_checkptrw.h
-@@ -20,9 +20,9 @@
- int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting);
--int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes);
-+int yaffs_CheckpointWrite(yaffs_Device *dev, const void *data, int nBytes);
--int yaffs_CheckpointRead(yaffs_Device *dev,void *data, int nBytes);
-+int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes);
- int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum);
---- a/fs/yaffs2/yaffs_ecc.c
-+++ b/fs/yaffs2/yaffs_ecc.c
-@@ -29,7 +29,7 @@
-  */
- const char *yaffs_ecc_c_version =
--    "$Id: yaffs_ecc.c,v 1.9 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_ecc.c,v 1.11 2009-03-06 17:20:50 wookey Exp $";
- #include "yportenv.h"
-@@ -109,12 +109,10 @@ void yaffs_ECCCalculate(const unsigned c
-               b = column_parity_table[*data++];
-               col_parity ^= b;
--              if (b & 0x01)   // odd number of bits in the byte
--              {
-+              if (b & 0x01) {         /* odd number of bits in the byte */
-                       line_parity ^= i;
-                       line_parity_prime ^= ~i;
-               }
--
-       }
-       ecc[2] = (~col_parity) | 0x03;
-@@ -158,7 +156,7 @@ void yaffs_ECCCalculate(const unsigned c
-       ecc[0] = ~t;
- #ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
--      // Swap the bytes into the wrong order
-+      /* Swap the bytes into the wrong order */
-       t = ecc[0];
-       ecc[0] = ecc[1];
-       ecc[1] = t;
-@@ -189,7 +187,7 @@ int yaffs_ECCCorrect(unsigned char *data
-               unsigned bit;
- #ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
--              // swap the bytes to correct for the wrong order
-+              /* swap the bytes to correct for the wrong order */
-               unsigned char t;
-               t = d0;
-@@ -251,7 +249,7 @@ int yaffs_ECCCorrect(unsigned char *data
-  * ECCxxxOther does ECC calcs on arbitrary n bytes of data
-  */
- void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
--                           yaffs_ECCOther * eccOther)
-+                              yaffs_ECCOther *eccOther)
- {
-       unsigned int i;
-@@ -278,8 +276,8 @@ void yaffs_ECCCalculateOther(const unsig
- }
- int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
--                        yaffs_ECCOther * read_ecc,
--                        const yaffs_ECCOther * test_ecc)
-+                      yaffs_ECCOther *read_ecc,
-+                      const yaffs_ECCOther *test_ecc)
- {
-       unsigned char cDelta;   /* column parity delta */
-       unsigned lDelta;        /* line parity delta */
-@@ -294,8 +292,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-               return 0; /* no error */
-       if (lDelta == ~lDeltaPrime &&
--          (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
--      {
-+          (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15)) {
-               /* Single bit (recoverable) error in data */
-               bit = 0;
-@@ -307,7 +304,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-               if (cDelta & 0x02)
-                       bit |= 0x01;
--              if(lDelta >= nBytes)
-+              if (lDelta >= nBytes)
-                       return -1;
-               data[lDelta] ^= (1 << bit);
-@@ -316,7 +313,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-       }
-       if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
--           yaffs_CountBits(cDelta)) == 1) {
-+                      yaffs_CountBits(cDelta)) == 1) {
-               /* Reccoverable error in ecc */
-               *read_ecc = *test_ecc;
-@@ -326,6 +323,4 @@ int yaffs_ECCCorrectOther(unsigned char 
-       /* Unrecoverable error */
-       return -1;
--
- }
--
---- a/fs/yaffs2/yaffs_ecc.h
-+++ b/fs/yaffs2/yaffs_ecc.h
-@@ -13,15 +13,15 @@
-  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-  */
-- /*
--  * This code implements the ECC algorithm used in SmartMedia.
--  *
--  * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
--  * The two unused bit are set to 1.
--  * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
--  * blocks are used on a 512-byte NAND page.
--  *
--  */
-+/*
-+ * This code implements the ECC algorithm used in SmartMedia.
-+ *
-+ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
-+ * The two unused bit are set to 1.
-+ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
-+ * blocks are used on a 512-byte NAND page.
-+ *
-+ */
- #ifndef __YAFFS_ECC_H__
- #define __YAFFS_ECC_H__
-@@ -34,11 +34,11 @@ typedef struct {
- void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc);
- int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
--                   const unsigned char *test_ecc);
-+              const unsigned char *test_ecc);
- void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
--                           yaffs_ECCOther * ecc);
-+                      yaffs_ECCOther *ecc);
- int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
--                        yaffs_ECCOther * read_ecc,
--                        const yaffs_ECCOther * test_ecc);
-+                      yaffs_ECCOther *read_ecc,
-+                      const yaffs_ECCOther *test_ecc);
- #endif
---- a/fs/yaffs2/yaffs_fs.c
-+++ b/fs/yaffs2/yaffs_fs.c
-@@ -1,7 +1,7 @@
- /*
-  * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
-  *
-- * Copyright (C) 2002-2007 Aleph One Ltd.
-+ * Copyright (C) 2002-2009 Aleph One Ltd.
-  *   for Toby Churchill Ltd and Brightstar Engineering
-  *
-  * Created by Charles Manning <charles@aleph1.co.uk>
-@@ -32,18 +32,17 @@
-  */
- const char *yaffs_fs_c_version =
--    "$Id: yaffs_fs.c,v 1.63 2007-09-19 20:35:40 imcd Exp $";
-+    "$Id: yaffs_fs.c,v 1.79 2009-03-17 01:12:00 wookey Exp $";
- extern const char *yaffs_guts_c_version;
- #include <linux/version.h>
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
- #include <linux/config.h>
- #endif
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/slab.h>
- #include <linux/init.h>
--#include <linux/list.h>
- #include <linux/fs.h>
- #include <linux/proc_fs.h>
- #include <linux/smp_lock.h>
-@@ -53,10 +52,12 @@ extern const char *yaffs_guts_c_version;
- #include <linux/string.h>
- #include <linux/ctype.h>
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#include "asm/div64.h"
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #include <linux/statfs.h>     /* Added NCB 15-8-2003 */
--#include <asm/statfs.h>
-+#include <linux/statfs.h>
- #define UnlockPage(p) unlock_page(p)
- #define Page_Uptodate(page)   test_bit(PG_uptodate, &(page)->flags)
-@@ -69,22 +70,45 @@ extern const char *yaffs_guts_c_version;
- #define       BDEVNAME_SIZE           0
- #define       yaffs_devname(sb, buf)  kdevname(sb->s_dev)
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0))
- /* added NCB 26/5/2006 for 2.4.25-vrs2-tcl1 kernel */
- #define __user
- #endif
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26))
-+#define YPROC_ROOT  (&proc_root)
-+#else
-+#define YPROC_ROOT  NULL
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- #define WRITE_SIZE_STR "writesize"
--#define WRITE_SIZE(mtd) (mtd)->writesize
-+#define WRITE_SIZE(mtd) ((mtd)->writesize)
- #else
- #define WRITE_SIZE_STR "oobblock"
--#define WRITE_SIZE(mtd) (mtd)->oobblock
-+#define WRITE_SIZE(mtd) ((mtd)->oobblock)
- #endif
--#include <asm/uaccess.h>
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 27))
-+#define YAFFS_USE_WRITE_BEGIN_END 1
-+#else
-+#define YAFFS_USE_WRITE_BEGIN_END 0
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28))
-+static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
-+{
-+      uint64_t result = partition_size;
-+      do_div(result, block_size);
-+      return (uint32_t)result;
-+}
-+#else
-+#define YCALCBLOCKS(s, b) ((s)/(b))
-+#endif
-+
-+#include <linux/uaccess.h>
- #include "yportenv.h"
- #include "yaffs_guts.h"
-@@ -96,28 +120,44 @@ extern const char *yaffs_guts_c_version;
- unsigned int yaffs_traceMask = YAFFS_TRACE_BAD_BLOCKS;
- unsigned int yaffs_wr_attempts = YAFFS_WR_ATTEMPTS;
-+unsigned int yaffs_auto_checkpoint = 1;
- /* Module Parameters */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
--module_param(yaffs_traceMask,uint,0644);
--module_param(yaffs_wr_attempts,uint,0644);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-+module_param(yaffs_traceMask, uint, 0644);
-+module_param(yaffs_wr_attempts, uint, 0644);
-+module_param(yaffs_auto_checkpoint, uint, 0644);
-+#else
-+MODULE_PARM(yaffs_traceMask, "i");
-+MODULE_PARM(yaffs_wr_attempts, "i");
-+MODULE_PARM(yaffs_auto_checkpoint, "i");
-+#endif
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25))
-+/* use iget and read_inode */
-+#define Y_IGET(sb, inum) iget((sb), (inum))
-+static void yaffs_read_inode(struct inode *inode);
-+
- #else
--MODULE_PARM(yaffs_traceMask,"i");
--MODULE_PARM(yaffs_wr_attempts,"i");
-+/* Call local equivalent */
-+#define YAFFS_USE_OWN_IGET
-+#define Y_IGET(sb, inum) yaffs_iget((sb), (inum))
-+
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino);
- #endif
- /*#define T(x) printk x */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
--#define yaffs_InodeToObjectLV(iptr) (iptr)->i_private
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18))
-+#define yaffs_InodeToObjectLV(iptr) ((iptr)->i_private)
- #else
--#define yaffs_InodeToObjectLV(iptr) (iptr)->u.generic_ip
-+#define yaffs_InodeToObjectLV(iptr) ((iptr)->u.generic_ip)
- #endif
- #define yaffs_InodeToObject(iptr) ((yaffs_Object *)(yaffs_InodeToObjectLV(iptr)))
- #define yaffs_DentryToObject(dptr) yaffs_InodeToObject((dptr)->d_inode)
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #define yaffs_SuperToDevice(sb)       ((yaffs_Device *)sb->s_fs_info)
- #else
- #define yaffs_SuperToDevice(sb)       ((yaffs_Device *)sb->u.generic_sbp)
-@@ -126,47 +166,49 @@ MODULE_PARM(yaffs_wr_attempts,"i");
- static void yaffs_put_super(struct super_block *sb);
- static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
--                              loff_t * pos);
-+                              loff_t *pos);
-+static ssize_t yaffs_hold_space(struct file *f);
-+static void yaffs_release_space(struct file *f);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_file_flush(struct file *file, fl_owner_t id);
- #else
- static int yaffs_file_flush(struct file *file);
- #endif
- static int yaffs_sync_object(struct file *file, struct dentry *dentry,
--                           int datasync);
-+                              int datasync);
- static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
-                       struct nameidata *n);
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
--                                 struct nameidata *n);
-+                                      struct nameidata *n);
- #else
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode);
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry);
- #endif
- static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
--                    struct dentry *dentry);
-+                      struct dentry *dentry);
- static int yaffs_unlink(struct inode *dir, struct dentry *dentry);
- static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
--                       const char *symname);
-+                      const char *symname);
- static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     dev_t dev);
-+                      dev_t dev);
- #else
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     int dev);
-+                      int dev);
- #endif
- static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
-                       struct inode *new_dir, struct dentry *new_dentry);
- static int yaffs_setattr(struct dentry *dentry, struct iattr *attr);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_sync_fs(struct super_block *sb, int wait);
- static void yaffs_write_super(struct super_block *sb);
- #else
-@@ -174,33 +216,47 @@ static int yaffs_sync_fs(struct super_bl
- static int yaffs_write_super(struct super_block *sb);
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf);
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf);
- #else
- static int yaffs_statfs(struct super_block *sb, struct statfs *buf);
- #endif
--static void yaffs_read_inode(struct inode *inode);
-+#ifdef YAFFS_HAS_PUT_INODE
- static void yaffs_put_inode(struct inode *inode);
-+#endif
-+
- static void yaffs_delete_inode(struct inode *);
- static void yaffs_clear_inode(struct inode *);
- static int yaffs_readpage(struct file *file, struct page *page);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_writepage(struct page *page, struct writeback_control *wbc);
- #else
- static int yaffs_writepage(struct page *page);
- #endif
-+
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END != 0)
-+static int yaffs_write_begin(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned flags,
-+                              struct page **pagep, void **fsdata);
-+static int yaffs_write_end(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned copied,
-+                              struct page *pg, void *fsdadata);
-+#else
- static int yaffs_prepare_write(struct file *f, struct page *pg,
--                             unsigned offset, unsigned to);
-+                              unsigned offset, unsigned to);
- static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
--                            unsigned to);
-+                              unsigned to);
--static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
--                        int buflen);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
-+#endif
-+
-+static int yaffs_readlink(struct dentry *dentry, char __user *buffer,
-+                              int buflen);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
- static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
- #else
- static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
-@@ -209,12 +265,17 @@ static int yaffs_follow_link(struct dent
- static struct address_space_operations yaffs_file_address_operations = {
-       .readpage = yaffs_readpage,
-       .writepage = yaffs_writepage,
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+      .write_begin = yaffs_write_begin,
-+      .write_end = yaffs_write_end,
-+#else
-       .prepare_write = yaffs_prepare_write,
-       .commit_write = yaffs_commit_write,
-+#endif
- };
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22))
--static struct file_operations yaffs_file_operations = {
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
-+static const struct file_operations yaffs_file_operations = {
-       .read = do_sync_read,
-       .write = do_sync_write,
-       .aio_read = generic_file_aio_read,
-@@ -224,11 +285,12 @@ static struct file_operations yaffs_file
-       .fsync = yaffs_sync_object,
-       .splice_read = generic_file_splice_read,
-       .splice_write = generic_file_splice_write,
-+      .llseek = generic_file_llseek,
- };
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18))
--static struct file_operations yaffs_file_operations = {
-+static const struct file_operations yaffs_file_operations = {
-       .read = do_sync_read,
-       .write = do_sync_write,
-       .aio_read = generic_file_aio_read,
-@@ -241,29 +303,29 @@ static struct file_operations yaffs_file
- #else
--static struct file_operations yaffs_file_operations = {
-+static const struct file_operations yaffs_file_operations = {
-       .read = generic_file_read,
-       .write = generic_file_write,
-       .mmap = generic_file_mmap,
-       .flush = yaffs_file_flush,
-       .fsync = yaffs_sync_object,
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       .sendfile = generic_file_sendfile,
- #endif
- };
- #endif
--static struct inode_operations yaffs_file_inode_operations = {
-+static const struct inode_operations yaffs_file_inode_operations = {
-       .setattr = yaffs_setattr,
- };
--static struct inode_operations yaffs_symlink_inode_operations = {
-+static const struct inode_operations yaffs_symlink_inode_operations = {
-       .readlink = yaffs_readlink,
-       .follow_link = yaffs_follow_link,
-       .setattr = yaffs_setattr,
- };
--static struct inode_operations yaffs_dir_inode_operations = {
-+static const struct inode_operations yaffs_dir_inode_operations = {
-       .create = yaffs_create,
-       .lookup = yaffs_lookup,
-       .link = yaffs_link,
-@@ -276,16 +338,21 @@ static struct inode_operations yaffs_dir
-       .setattr = yaffs_setattr,
- };
--static struct file_operations yaffs_dir_operations = {
-+static const struct file_operations yaffs_dir_operations = {
-       .read = generic_read_dir,
-       .readdir = yaffs_readdir,
-       .fsync = yaffs_sync_object,
- };
--static struct super_operations yaffs_super_ops = {
-+static const struct super_operations yaffs_super_ops = {
-       .statfs = yaffs_statfs,
-+
-+#ifndef YAFFS_USE_OWN_IGET
-       .read_inode = yaffs_read_inode,
-+#endif
-+#ifdef YAFFS_HAS_PUT_INODE
-       .put_inode = yaffs_put_inode,
-+#endif
-       .put_super = yaffs_put_super,
-       .delete_inode = yaffs_delete_inode,
-       .clear_inode = yaffs_clear_inode,
-@@ -293,22 +360,21 @@ static struct super_operations yaffs_sup
-       .write_super = yaffs_write_super,
- };
--static void yaffs_GrossLock(yaffs_Device * dev)
-+static void yaffs_GrossLock(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locking\n"));
--
-+      T(YAFFS_TRACE_OS, ("yaffs locking %p\n", current));
-       down(&dev->grossLock);
-+      T(YAFFS_TRACE_OS, ("yaffs locked %p\n", current));
- }
--static void yaffs_GrossUnlock(yaffs_Device * dev)
-+static void yaffs_GrossUnlock(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs unlocking\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs unlocking %p\n", current));
-       up(&dev->grossLock);
--
- }
--static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
--                        int buflen)
-+static int yaffs_readlink(struct dentry *dentry, char __user *buffer,
-+                      int buflen)
- {
-       unsigned char *alias;
-       int ret;
-@@ -329,7 +395,7 @@ static int yaffs_readlink(struct dentry 
-       return ret;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
- static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
- #else
- static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
-@@ -345,32 +411,31 @@ static int yaffs_follow_link(struct dent
-       yaffs_GrossUnlock(dev);
--      if (!alias)
--        {
-+      if (!alias) {
-               ret = -ENOMEM;
-               goto out;
--        }
-+      }
-       ret = vfs_follow_link(nd, alias);
-       kfree(alias);
- out:
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
--      return ERR_PTR (ret);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
-+      return ERR_PTR(ret);
- #else
-       return ret;
- #endif
- }
- struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
--                            yaffs_Object * obj);
-+                              yaffs_Object *obj);
- /*
-  * Lookup is used to find objects in the fs
-  */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
--                                 struct nameidata *n)
-+                              struct nameidata *n)
- #else
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry)
- #endif
-@@ -383,12 +448,11 @@ static struct dentry *yaffs_lookup(struc
-       yaffs_GrossLock(dev);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_lookup for %d:%s\n",
--         yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
-+              ("yaffs_lookup for %d:%s\n",
-+              yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
--      obj =
--          yaffs_FindObjectByName(yaffs_InodeToObject(dir),
--                                 dentry->d_name.name);
-+      obj = yaffs_FindObjectByName(yaffs_InodeToObject(dir),
-+                                      dentry->d_name.name);
-       obj = yaffs_GetEquivalentObject(obj);   /* in case it was a hardlink */
-@@ -397,13 +461,13 @@ static struct dentry *yaffs_lookup(struc
-       if (obj) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_lookup found %d\n", obj->objectId));
-+                      ("yaffs_lookup found %d\n", obj->objectId));
-               inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
-               if (inode) {
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG "yaffs_loookup dentry \n"));
-+                              ("yaffs_loookup dentry \n"));
- /* #if 0 asserted by NCB for 2.5/6 compatability - falls through to
-  * d_add even if NULL inode */
- #if 0
-@@ -416,7 +480,7 @@ static struct dentry *yaffs_lookup(struc
-               }
-       } else {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_lookup not found\n"));
-+              T(YAFFS_TRACE_OS, ("yaffs_lookup not found\n"));
-       }
-@@ -425,20 +489,22 @@ static struct dentry *yaffs_lookup(struc
-       d_add(dentry, inode);
-       return NULL;
--      /*      return (ERR_PTR(-EIO)); */
--
- }
-+
-+#ifdef YAFFS_HAS_PUT_INODE
-+
- /* For now put inode is just for debugging
-  * Put inode is called when the inode **structure** is put.
-  */
- static void yaffs_put_inode(struct inode *inode)
- {
-       T(YAFFS_TRACE_OS,
--        ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count)));
-+              ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count)));
- }
-+#endif
- /* clear is called to tell the fs to release any per-inode data it holds */
- static void yaffs_clear_inode(struct inode *inode)
-@@ -449,9 +515,9 @@ static void yaffs_clear_inode(struct ino
-       obj = yaffs_InodeToObject(inode);
-       T(YAFFS_TRACE_OS,
--        ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count),
--         obj ? "object exists" : "null object"));
-+              ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count),
-+              obj ? "object exists" : "null object"));
-       if (obj) {
-               dev = obj->myDev;
-@@ -486,23 +552,23 @@ static void yaffs_delete_inode(struct in
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count),
--         obj ? "object exists" : "null object"));
-+              ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count),
-+              obj ? "object exists" : "null object"));
-       if (obj) {
-               dev = obj->myDev;
-               yaffs_GrossLock(dev);
--              yaffs_DeleteFile(obj);
-+              yaffs_DeleteObject(obj);
-               yaffs_GrossUnlock(dev);
-       }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
--        truncate_inode_pages (&inode->i_data, 0);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
-+      truncate_inode_pages(&inode->i_data, 0);
- #endif
-       clear_inode(inode);
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_file_flush(struct file *file, fl_owner_t id)
- #else
- static int yaffs_file_flush(struct file *file)
-@@ -513,8 +579,8 @@ static int yaffs_file_flush(struct file 
-       yaffs_Device *dev = obj->myDev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_file_flush object %d (%s)\n", obj->objectId,
--         obj->dirty ? "dirty" : "clean"));
-+              ("yaffs_file_flush object %d (%s)\n", obj->objectId,
-+              obj->dirty ? "dirty" : "clean"));
-       yaffs_GrossLock(dev);
-@@ -535,15 +601,15 @@ static int yaffs_readpage_nolock(struct 
-       yaffs_Device *dev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage at %08x, size %08x\n",
--                         (unsigned)(pg->index << PAGE_CACHE_SHIFT),
--                         (unsigned)PAGE_CACHE_SIZE));
-+      T(YAFFS_TRACE_OS, ("yaffs_readpage at %08x, size %08x\n",
-+                      (unsigned)(pg->index << PAGE_CACHE_SHIFT),
-+                      (unsigned)PAGE_CACHE_SIZE));
-       obj = yaffs_DentryToObject(f->f_dentry);
-       dev = obj->myDev;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       BUG_ON(!PageLocked(pg));
- #else
-       if (!PageLocked(pg))
-@@ -555,9 +621,9 @@ static int yaffs_readpage_nolock(struct 
-       yaffs_GrossLock(dev);
--      ret =
--          yaffs_ReadDataFromFile(obj, pg_buf, pg->index << PAGE_CACHE_SHIFT,
--                                 PAGE_CACHE_SIZE);
-+      ret = yaffs_ReadDataFromFile(obj, pg_buf,
-+                              pg->index << PAGE_CACHE_SHIFT,
-+                              PAGE_CACHE_SIZE);
-       yaffs_GrossUnlock(dev);
-@@ -575,7 +641,7 @@ static int yaffs_readpage_nolock(struct 
-       flush_dcache_page(pg);
-       kunmap(pg);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage done\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_readpage done\n"));
-       return ret;
- }
-@@ -593,7 +659,7 @@ static int yaffs_readpage(struct file *f
- /* writepage inspired by/stolen from smbfs */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_writepage(struct page *page, struct writeback_control *wbc)
- #else
- static int yaffs_writepage(struct page *page)
-@@ -616,12 +682,11 @@ static int yaffs_writepage(struct page *
-       if (offset > inode->i_size) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_writepage at %08x, inode size = %08x!!!\n",
--                 (unsigned)(page->index << PAGE_CACHE_SHIFT),
--                 (unsigned)inode->i_size));
-+                      ("yaffs_writepage at %08x, inode size = %08x!!!\n",
-+                      (unsigned)(page->index << PAGE_CACHE_SHIFT),
-+                      (unsigned)inode->i_size));
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "                -> don't care!!\n"));
-+                      ("                -> don't care!!\n"));
-               unlock_page(page);
-               return 0;
-       }
-@@ -629,11 +694,10 @@ static int yaffs_writepage(struct page *
-       end_index = inode->i_size >> PAGE_CACHE_SHIFT;
-       /* easy case */
--      if (page->index < end_index) {
-+      if (page->index < end_index)
-               nBytes = PAGE_CACHE_SIZE;
--      } else {
-+      else
-               nBytes = inode->i_size & (PAGE_CACHE_SIZE - 1);
--      }
-       get_page(page);
-@@ -643,19 +707,18 @@ static int yaffs_writepage(struct page *
-       yaffs_GrossLock(obj->myDev);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_writepage at %08x, size %08x\n",
--         (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
-+              ("yaffs_writepage at %08x, size %08x\n",
-+              (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "writepag0: obj = %05x, ino = %05x\n",
--         (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-+              ("writepag0: obj = %05x, ino = %05x\n",
-+              (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
--      nWritten =
--          yaffs_WriteDataToFile(obj, buffer, page->index << PAGE_CACHE_SHIFT,
--                                nBytes, 0);
-+      nWritten = yaffs_WriteDataToFile(obj, buffer,
-+                      page->index << PAGE_CACHE_SHIFT, nBytes, 0);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "writepag1: obj = %05x, ino = %05x\n",
--         (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-+              ("writepag1: obj = %05x, ino = %05x\n",
-+              (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-       yaffs_GrossUnlock(obj->myDev);
-@@ -667,100 +730,207 @@ static int yaffs_writepage(struct page *
-       return (nWritten == nBytes) ? 0 : -ENOSPC;
- }
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+static int yaffs_write_begin(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned flags,
-+                              struct page **pagep, void **fsdata)
-+{
-+      struct page *pg = NULL;
-+      pgoff_t index = pos >> PAGE_CACHE_SHIFT;
-+      uint32_t offset = pos & (PAGE_CACHE_SIZE - 1);
-+      uint32_t to = offset + len;
-+
-+      int ret = 0;
-+      int space_held = 0;
-+
-+      T(YAFFS_TRACE_OS, ("start yaffs_write_begin\n"));
-+      /* Get a page */
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28)
-+      pg = grab_cache_page_write_begin(mapping, index, flags);
-+#else
-+      pg = __grab_cache_page(mapping, index);
-+#endif
-+
-+      *pagep = pg;
-+      if (!pg) {
-+              ret =  -ENOMEM;
-+              goto out;
-+      }
-+      /* Get fs space */
-+      space_held = yaffs_hold_space(filp);
-+
-+      if (!space_held) {
-+              ret = -ENOSPC;
-+              goto out;
-+      }
-+
-+      /* Update page if required */
-+
-+      if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
-+              ret = yaffs_readpage_nolock(filp, pg);
-+
-+      if (ret)
-+              goto out;
-+
-+      /* Happy path return */
-+      T(YAFFS_TRACE_OS, ("end yaffs_write_begin - ok\n"));
-+
-+      return 0;
-+
-+out:
-+      T(YAFFS_TRACE_OS, ("end yaffs_write_begin fail returning %d\n", ret));
-+      if (space_held)
-+              yaffs_release_space(filp);
-+      if (pg) {
-+              unlock_page(pg);
-+              page_cache_release(pg);
-+      }
-+      return ret;
-+}
-+
-+#else
-+
- static int yaffs_prepare_write(struct file *f, struct page *pg,
--                             unsigned offset, unsigned to)
-+                              unsigned offset, unsigned to)
- {
-+      T(YAFFS_TRACE_OS, ("yaffs_prepair_write\n"));
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_prepair_write\n"));
-       if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
-               return yaffs_readpage_nolock(f, pg);
--
-       return 0;
-+}
-+#endif
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+static int yaffs_write_end(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned copied,
-+                              struct page *pg, void *fsdadata)
-+{
-+      int ret = 0;
-+      void *addr, *kva;
-+      uint32_t offset_into_page = pos & (PAGE_CACHE_SIZE - 1);
-+
-+      kva = kmap(pg);
-+      addr = kva + offset_into_page;
-+
-+      T(YAFFS_TRACE_OS,
-+              ("yaffs_write_end addr %x pos %x nBytes %d\n",
-+              (unsigned) addr,
-+              (int)pos, copied));
-+
-+      ret = yaffs_file_write(filp, addr, copied, &pos);
-+
-+      if (ret != copied) {
-+              T(YAFFS_TRACE_OS,
-+                      ("yaffs_write_end not same size ret %d  copied %d\n",
-+                      ret, copied));
-+              SetPageError(pg);
-+              ClearPageUptodate(pg);
-+      } else {
-+              SetPageUptodate(pg);
-+      }
-+
-+      kunmap(pg);
-+      yaffs_release_space(filp);
-+      unlock_page(pg);
-+      page_cache_release(pg);
-+      return ret;
- }
-+#else
- static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
--                            unsigned to)
-+                              unsigned to)
- {
-+      void *addr, *kva;
--      void *addr = page_address(pg) + offset;
-       loff_t pos = (((loff_t) pg->index) << PAGE_CACHE_SHIFT) + offset;
-       int nBytes = to - offset;
-       int nWritten;
-       unsigned spos = pos;
--      unsigned saddr = (unsigned)addr;
-+      unsigned saddr;
-+
-+      kva = kmap(pg);
-+      addr = kva + offset;
-+
-+      saddr = (unsigned) addr;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_commit_write addr %x pos %x nBytes %d\n", saddr,
--         spos, nBytes));
-+              ("yaffs_commit_write addr %x pos %x nBytes %d\n",
-+              saddr, spos, nBytes));
-       nWritten = yaffs_file_write(f, addr, nBytes, &pos);
-       if (nWritten != nBytes) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_commit_write not same size nWritten %d  nBytes %d\n",
--                 nWritten, nBytes));
-+                      ("yaffs_commit_write not same size nWritten %d  nBytes %d\n",
-+                      nWritten, nBytes));
-               SetPageError(pg);
-               ClearPageUptodate(pg);
-       } else {
-               SetPageUptodate(pg);
-       }
-+      kunmap(pg);
-+
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_commit_write returning %d\n",
--         nWritten == nBytes ? 0 : nWritten));
-+              ("yaffs_commit_write returning %d\n",
-+              nWritten == nBytes ? 0 : nWritten));
-       return nWritten == nBytes ? 0 : nWritten;
--
- }
-+#endif
-+
--static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object * obj)
-+static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj)
- {
-       if (inode && obj) {
-               /* Check mode against the variant type and attempt to repair if broken. */
--              __u32 mode = obj->yst_mode;
--              switch( obj->variantType ){
--              case YAFFS_OBJECT_TYPE_FILE :
--                      if( ! S_ISREG(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFREG;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_SYMLINK :
--                      if( ! S_ISLNK(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFLNK;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_DIRECTORY :
--                      if( ! S_ISDIR(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFDIR;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_UNKNOWN :
--              case YAFFS_OBJECT_TYPE_HARDLINK :
--              case YAFFS_OBJECT_TYPE_SPECIAL :
--              default:
--                      /* TODO? */
--                      break;
--              }
-+              __u32 mode = obj->yst_mode;
-+              switch (obj->variantType) {
-+              case YAFFS_OBJECT_TYPE_FILE:
-+                      if (!S_ISREG(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFREG;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_SYMLINK:
-+                      if (!S_ISLNK(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFLNK;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_DIRECTORY:
-+                      if (!S_ISDIR(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFDIR;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_UNKNOWN:
-+              case YAFFS_OBJECT_TYPE_HARDLINK:
-+              case YAFFS_OBJECT_TYPE_SPECIAL:
-+              default:
-+                      /* TODO? */
-+                      break;
-+              }
-+
-+              inode->i_flags |= S_NOATIME;
-               inode->i_ino = obj->objectId;
-               inode->i_mode = obj->yst_mode;
-               inode->i_uid = obj->yst_uid;
-               inode->i_gid = obj->yst_gid;
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
-               inode->i_blksize = inode->i_sb->s_blocksize;
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-               inode->i_rdev = old_decode_dev(obj->yst_rdev);
-               inode->i_atime.tv_sec = (time_t) (obj->yst_atime);
-@@ -781,26 +951,25 @@ static void yaffs_FillInodeFromObject(st
-               inode->i_nlink = yaffs_GetObjectLinkCount(obj);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
--                 inode->i_mode, inode->i_uid, inode->i_gid,
--                 (int)inode->i_size, atomic_read(&inode->i_count)));
-+                      ("yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
-+                      inode->i_mode, inode->i_uid, inode->i_gid,
-+                      (int)inode->i_size, atomic_read(&inode->i_count)));
-               switch (obj->yst_mode & S_IFMT) {
-               default:        /* fifo, device or socket */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-                       init_special_inode(inode, obj->yst_mode,
--                                         old_decode_dev(obj->yst_rdev));
-+                                      old_decode_dev(obj->yst_rdev));
- #else
-                       init_special_inode(inode, obj->yst_mode,
--                                         (dev_t) (obj->yst_rdev));
-+                                      (dev_t) (obj->yst_rdev));
- #endif
-                       break;
-               case S_IFREG:   /* file */
-                       inode->i_op = &yaffs_file_inode_operations;
-                       inode->i_fop = &yaffs_file_operations;
-                       inode->i_mapping->a_ops =
--                          &yaffs_file_address_operations;
-+                              &yaffs_file_address_operations;
-                       break;
-               case S_IFDIR:   /* directory */
-                       inode->i_op = &yaffs_dir_inode_operations;
-@@ -817,34 +986,36 @@ static void yaffs_FillInodeFromObject(st
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_FileInode invalid parameters\n"));
-+                      ("yaffs_FileInode invalid parameters\n"));
-       }
- }
- struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
--                            yaffs_Object * obj)
-+                              yaffs_Object *obj)
- {
-       struct inode *inode;
-       if (!sb) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_get_inode for NULL super_block!!\n"));
-+                      ("yaffs_get_inode for NULL super_block!!\n"));
-               return NULL;
-       }
-       if (!obj) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_get_inode for NULL object!!\n"));
-+                      ("yaffs_get_inode for NULL object!!\n"));
-               return NULL;
-       }
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_get_inode for object %d\n", obj->objectId));
-+              ("yaffs_get_inode for object %d\n", obj->objectId));
--      inode = iget(sb, obj->objectId);
-+      inode = Y_IGET(sb, obj->objectId);
-+      if (IS_ERR(inode))
-+              return NULL;
-       /* NB Side effect: iget calls back to yaffs_read_inode(). */
-       /* iget also increments the inode's i_count */
-@@ -854,7 +1025,7 @@ struct inode *yaffs_get_inode(struct sup
- }
- static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
--                              loff_t * pos)
-+                              loff_t *pos)
- {
-       yaffs_Object *obj;
-       int nWritten, ipos;
-@@ -869,28 +1040,26 @@ static ssize_t yaffs_file_write(struct f
-       inode = f->f_dentry->d_inode;
--      if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND) {
-+      if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND)
-               ipos = inode->i_size;
--      } else {
-+      else
-               ipos = *pos;
--      }
--      if (!obj) {
-+      if (!obj)
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_file_write: hey obj is null!\n"));
--      } else {
-+                      ("yaffs_file_write: hey obj is null!\n"));
-+      else
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_file_write about to write writing %d bytes"
--                 "to object %d at %d\n",
--                 n, obj->objectId, ipos));
--      }
-+                      ("yaffs_file_write about to write writing %zu bytes"
-+                      "to object %d at %d\n",
-+                      n, obj->objectId, ipos));
-       nWritten = yaffs_WriteDataToFile(obj, buf, ipos, n, 0);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_file_write writing %d bytes, %d written at %d\n",
--         n, nWritten, ipos));
-+              ("yaffs_file_write writing %zu bytes, %d written at %d\n",
-+              n, nWritten, ipos));
-+
-       if (nWritten > 0) {
-               ipos += nWritten;
-               *pos = ipos;
-@@ -899,10 +1068,9 @@ static ssize_t yaffs_file_write(struct f
-                       inode->i_blocks = (ipos + 511) >> 9;
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG
--                         "yaffs_file_write size updated to %d bytes, "
--                         "%d blocks\n",
--                         ipos, (int)(inode->i_blocks)));
-+                              ("yaffs_file_write size updated to %d bytes, "
-+                              "%d blocks\n",
-+                              ipos, (int)(inode->i_blocks)));
-               }
-       }
-@@ -910,13 +1078,54 @@ static ssize_t yaffs_file_write(struct f
-       return nWritten == 0 ? -ENOSPC : nWritten;
- }
-+/* Space holding and freeing is done to ensure we have space available for write_begin/end */
-+/* For now we just assume few parallel writes and check against a small number. */
-+/* Todo: need to do this with a counter to handle parallel reads better */
-+
-+static ssize_t yaffs_hold_space(struct file *f)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev;
-+
-+      int nFreeChunks;
-+
-+
-+      obj = yaffs_DentryToObject(f->f_dentry);
-+
-+      dev = obj->myDev;
-+
-+      yaffs_GrossLock(dev);
-+
-+      nFreeChunks = yaffs_GetNumberOfFreeChunks(dev);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      return (nFreeChunks > 20) ? 1 : 0;
-+}
-+
-+static void yaffs_release_space(struct file *f)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev;
-+
-+
-+      obj = yaffs_DentryToObject(f->f_dentry);
-+
-+      dev = obj->myDev;
-+
-+      yaffs_GrossLock(dev);
-+
-+
-+      yaffs_GrossUnlock(dev);
-+}
-+
- static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir)
- {
-       yaffs_Object *obj;
-       yaffs_Device *dev;
-       struct inode *inode = f->f_dentry->d_inode;
-       unsigned long offset, curoffs;
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *l;
-       char name[YAFFS_MAX_NAME_LENGTH + 1];
-@@ -932,24 +1141,20 @@ static int yaffs_readdir(struct file *f,
-       if (offset == 0) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_readdir: entry . ino %d \n",
--                 (int)inode->i_ino));
--              if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR)
--                  < 0) {
-+                      ("yaffs_readdir: entry . ino %d \n",
-+                      (int)inode->i_ino));
-+              if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR) < 0)
-                       goto out;
--              }
-               offset++;
-               f->f_pos++;
-       }
-       if (offset == 1) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_readdir: entry .. ino %d \n",
--                 (int)f->f_dentry->d_parent->d_inode->i_ino));
--              if (filldir
--                  (dirent, "..", 2, offset,
--                   f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
-+                      ("yaffs_readdir: entry .. ino %d \n",
-+                      (int)f->f_dentry->d_parent->d_inode->i_ino));
-+              if (filldir(dirent, "..", 2, offset,
-+                      f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
-                       goto out;
--              }
-               offset++;
-               f->f_pos++;
-       }
-@@ -965,35 +1170,32 @@ static int yaffs_readdir(struct file *f,
-               f->f_version = inode->i_version;
-       }
--      list_for_each(i, &obj->variant.directoryVariant.children) {
-+      ylist_for_each(i, &obj->variant.directoryVariant.children) {
-               curoffs++;
-               if (curoffs >= offset) {
--                      l = list_entry(i, yaffs_Object, siblings);
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-                       yaffs_GetObjectName(l, name,
-                                           YAFFS_MAX_NAME_LENGTH + 1);
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG "yaffs_readdir: %s inode %d\n", name,
-+                        ("yaffs_readdir: %s inode %d\n", name,
-                          yaffs_GetObjectInode(l)));
-                       if (filldir(dirent,
--                                  name,
--                                  strlen(name),
--                                  offset,
--                                  yaffs_GetObjectInode(l),
--                                  yaffs_GetObjectType(l))
--                          < 0) {
-+                                      name,
-+                                      strlen(name),
-+                                      offset,
-+                                      yaffs_GetObjectInode(l),
-+                                      yaffs_GetObjectType(l)) < 0)
-                               goto up_and_out;
--                      }
-                       offset++;
-                       f->f_pos++;
-               }
-       }
--      up_and_out:
--      out:
--
-+up_and_out:
-+out:
-       yaffs_GrossUnlock(dev);
-       return 0;
-@@ -1002,12 +1204,19 @@ static int yaffs_readdir(struct file *f,
- /*
-  * File creation. Allocate an inode, and we're done..
-  */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
-+#define YCRED(x) x
-+#else
-+#define YCRED(x) (x->cred)
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     dev_t rdev)
-+                      dev_t rdev)
- #else
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     int rdev)
-+                      int rdev)
- #endif
- {
-       struct inode *inode;
-@@ -1018,25 +1227,25 @@ static int yaffs_mknod(struct inode *dir
-       yaffs_Object *parent = yaffs_InodeToObject(dir);
-       int error = -ENOSPC;
--      uid_t uid = current->fsuid;
--      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
-+      uid_t uid = YCRED(current)->fsuid;
-+      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
--      if((dir->i_mode & S_ISGID) && S_ISDIR(mode))
-+      if ((dir->i_mode & S_ISGID) && S_ISDIR(mode))
-               mode |= S_ISGID;
-       if (parent) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: parent object %d type %d\n",
--                 parent->objectId, parent->variantType));
-+                      ("yaffs_mknod: parent object %d type %d\n",
-+                      parent->objectId, parent->variantType));
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: could not get parent object\n"));
-+                      ("yaffs_mknod: could not get parent object\n"));
-               return -EPERM;
-       }
-       T(YAFFS_TRACE_OS, ("yaffs_mknod: making oject for %s, "
--                         "mode %x dev %x\n",
--                         dentry->d_name.name, mode, rdev));
-+                      "mode %x dev %x\n",
-+                      dentry->d_name.name, mode, rdev));
-       dev = parent->myDev;
-@@ -1045,33 +1254,28 @@ static int yaffs_mknod(struct inode *dir
-       switch (mode & S_IFMT) {
-       default:
-               /* Special (socket, fifo, device...) */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG
--                                 "yaffs_mknod: making special\n"));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
--              obj =
--                  yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
--                                     gid, old_encode_dev(rdev));
--#else
--              obj =
--                  yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
--                                     gid, rdev);
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making special\n"));
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-+              obj = yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
-+                              gid, old_encode_dev(rdev));
-+#else
-+              obj = yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
-+                              gid, rdev);
- #endif
-               break;
-       case S_IFREG:           /* file          */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
--              obj =
--                  yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
--                                  gid);
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making file\n"));
-+              obj = yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
-+                              gid);
-               break;
-       case S_IFDIR:           /* directory */
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: making directory\n"));
--              obj =
--                  yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
--                                       uid, gid);
-+                      ("yaffs_mknod: making directory\n"));
-+              obj = yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
-+                                      uid, gid);
-               break;
-       case S_IFLNK:           /* symlink */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making symlink\n"));
-               obj = NULL;     /* Do we ever get here? */
-               break;
-       }
-@@ -1083,12 +1287,12 @@ static int yaffs_mknod(struct inode *dir
-               inode = yaffs_get_inode(dir->i_sb, mode, rdev, obj);
-               d_instantiate(dentry, inode);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod created object %d count = %d\n",
--                 obj->objectId, atomic_read(&inode->i_count)));
-+                      ("yaffs_mknod created object %d count = %d\n",
-+                      obj->objectId, atomic_read(&inode->i_count)));
-               error = 0;
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod failed making object\n"));
-+                      ("yaffs_mknod failed making object\n"));
-               error = -ENOMEM;
-       }
-@@ -1098,25 +1302,19 @@ static int yaffs_mknod(struct inode *dir
- static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
- {
-       int retVal;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mkdir\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_mkdir\n"));
-       retVal = yaffs_mknod(dir, dentry, mode | S_IFDIR, 0);
--#if 0
--      /* attempt to fix dir bug - didn't work */
--      if (!retVal) {
--              dget(dentry);
--      }
--#endif
-       return retVal;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
-                       struct nameidata *n)
- #else
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode)
- #endif
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_create\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_create\n"));
-       return yaffs_mknod(dir, dentry, mode | S_IFREG, 0);
- }
-@@ -1127,8 +1325,8 @@ static int yaffs_unlink(struct inode *di
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_unlink %d:%s\n", (int)(dir->i_ino),
--         dentry->d_name.name));
-+              ("yaffs_unlink %d:%s\n", (int)(dir->i_ino),
-+              dentry->d_name.name));
-       dev = yaffs_InodeToObject(dir)->myDev;
-@@ -1151,82 +1349,74 @@ static int yaffs_unlink(struct inode *di
-  * Create a link...
-  */
- static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
--                    struct dentry *dentry)
-+                      struct dentry *dentry)
- {
-       struct inode *inode = old_dentry->d_inode;
-       yaffs_Object *obj = NULL;
-       yaffs_Object *link = NULL;
-       yaffs_Device *dev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_link\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_link\n"));
-       obj = yaffs_InodeToObject(inode);
-       dev = obj->myDev;
-       yaffs_GrossLock(dev);
--      if (!S_ISDIR(inode->i_mode))    /* Don't link directories */
--      {
--              link =
--                  yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
--                             obj);
--      }
-+      if (!S_ISDIR(inode->i_mode))            /* Don't link directories */
-+              link = yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
-+                      obj);
-       if (link) {
-               old_dentry->d_inode->i_nlink = yaffs_GetObjectLinkCount(obj);
-               d_instantiate(dentry, old_dentry->d_inode);
-               atomic_inc(&old_dentry->d_inode->i_count);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_link link count %d i_count %d\n",
--                 old_dentry->d_inode->i_nlink,
--                 atomic_read(&old_dentry->d_inode->i_count)));
--
-+                      ("yaffs_link link count %d i_count %d\n",
-+                      old_dentry->d_inode->i_nlink,
-+                      atomic_read(&old_dentry->d_inode->i_count)));
-       }
-       yaffs_GrossUnlock(dev);
--      if (link) {
--
-+      if (link)
-               return 0;
--      }
-       return -EPERM;
- }
- static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
--                       const char *symname)
-+                              const char *symname)
- {
-       yaffs_Object *obj;
-       yaffs_Device *dev;
--      uid_t uid = current->fsuid;
--      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
-+      uid_t uid = YCRED(current)->fsuid;
-+      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_symlink\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_symlink\n"));
-       dev = yaffs_InodeToObject(dir)->myDev;
-       yaffs_GrossLock(dev);
-       obj = yaffs_MknodSymLink(yaffs_InodeToObject(dir), dentry->d_name.name,
--                               S_IFLNK | S_IRWXUGO, uid, gid, symname);
-+                              S_IFLNK | S_IRWXUGO, uid, gid, symname);
-       yaffs_GrossUnlock(dev);
-       if (obj) {
--
-               struct inode *inode;
-               inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
-               d_instantiate(dentry, inode);
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink created OK\n"));
-+              T(YAFFS_TRACE_OS, ("symlink created OK\n"));
-               return 0;
-       } else {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink not created\n"));
--
-+              T(YAFFS_TRACE_OS, ("symlink not created\n"));
-       }
-       return -ENOMEM;
- }
- static int yaffs_sync_object(struct file *file, struct dentry *dentry,
--                           int datasync)
-+                              int datasync)
- {
-       yaffs_Object *obj;
-@@ -1236,7 +1426,7 @@ static int yaffs_sync_object(struct file
-       dev = obj->myDev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_object\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_sync_object\n"));
-       yaffs_GrossLock(dev);
-       yaffs_FlushFile(obj, 1);
-       yaffs_GrossUnlock(dev);
-@@ -1255,41 +1445,36 @@ static int yaffs_rename(struct inode *ol
-       int retVal = YAFFS_FAIL;
-       yaffs_Object *target;
--        T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_rename\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_rename\n"));
-       dev = yaffs_InodeToObject(old_dir)->myDev;
-       yaffs_GrossLock(dev);
-       /* Check if the target is an existing directory that is not empty. */
--      target =
--          yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
--                                 new_dentry->d_name.name);
-+      target = yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
-+                              new_dentry->d_name.name);
--      if (target &&
--          target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
--          !list_empty(&target->variant.directoryVariant.children)) {
-+      if (target && target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-+              !ylist_empty(&target->variant.directoryVariant.children)) {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "target is non-empty dir\n"));
-+              T(YAFFS_TRACE_OS, ("target is non-empty dir\n"));
-               retVal = YAFFS_FAIL;
-       } else {
--
-               /* Now does unlinking internally using shadowing mechanism */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "calling yaffs_RenameObject\n"));
--
--              retVal =
--                  yaffs_RenameObject(yaffs_InodeToObject(old_dir),
--                                     old_dentry->d_name.name,
--                                     yaffs_InodeToObject(new_dir),
--                                     new_dentry->d_name.name);
-+              T(YAFFS_TRACE_OS, ("calling yaffs_RenameObject\n"));
-+              retVal = yaffs_RenameObject(yaffs_InodeToObject(old_dir),
-+                              old_dentry->d_name.name,
-+                              yaffs_InodeToObject(new_dir),
-+                              new_dentry->d_name.name);
-       }
-       yaffs_GrossUnlock(dev);
-       if (retVal == YAFFS_OK) {
--              if(target) {
-+              if (target) {
-                       new_dentry->d_inode->i_nlink--;
-                       mark_inode_dirty(new_dentry->d_inode);
-               }
-@@ -1298,7 +1483,6 @@ static int yaffs_rename(struct inode *ol
-       } else {
-               return -ENOTEMPTY;
-       }
--
- }
- static int yaffs_setattr(struct dentry *dentry, struct iattr *attr)
-@@ -1308,15 +1492,15 @@ static int yaffs_setattr(struct dentry *
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_setattr of object %d\n",
--         yaffs_InodeToObject(inode)->objectId));
--
--      if ((error = inode_change_ok(inode, attr)) == 0) {
-+              ("yaffs_setattr of object %d\n",
-+              yaffs_InodeToObject(inode)->objectId));
-+      error = inode_change_ok(inode, attr);
-+      if (error == 0) {
-               dev = yaffs_InodeToObject(inode)->myDev;
-               yaffs_GrossLock(dev);
-               if (yaffs_SetAttributes(yaffs_InodeToObject(inode), attr) ==
--                  YAFFS_OK) {
-+                              YAFFS_OK) {
-                       error = 0;
-               } else {
-                       error = -EPERM;
-@@ -1328,12 +1512,12 @@ static int yaffs_setattr(struct dentry *
-       return error;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf)
- {
-       yaffs_Device *dev = yaffs_DentryToObject(dentry)->myDev;
-       struct super_block *sb = dentry->d_sb;
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf)
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
-@@ -1343,32 +1527,53 @@ static int yaffs_statfs(struct super_blo
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
- #endif
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_statfs\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_statfs\n"));
-       yaffs_GrossLock(dev);
-       buf->f_type = YAFFS_MAGIC;
-       buf->f_bsize = sb->s_blocksize;
-       buf->f_namelen = 255;
--      if (sb->s_blocksize > dev->nDataBytesPerChunk) {
-+
-+      if (dev->nDataBytesPerChunk & (dev->nDataBytesPerChunk - 1)) {
-+              /* Do this if chunk size is not a power of 2 */
-+
-+              uint64_t bytesInDev;
-+              uint64_t bytesFree;
-+
-+              bytesInDev = ((uint64_t)((dev->endBlock - dev->startBlock + 1))) *
-+                      ((uint64_t)(dev->nChunksPerBlock * dev->nDataBytesPerChunk));
-+
-+              do_div(bytesInDev, sb->s_blocksize); /* bytesInDev becomes the number of blocks */
-+              buf->f_blocks = bytesInDev;
-+
-+              bytesFree  = ((uint64_t)(yaffs_GetNumberOfFreeChunks(dev))) *
-+                      ((uint64_t)(dev->nDataBytesPerChunk));
-+
-+              do_div(bytesFree, sb->s_blocksize);
-+
-+              buf->f_bfree = bytesFree;
-+
-+      } else if (sb->s_blocksize > dev->nDataBytesPerChunk) {
-               buf->f_blocks =
--                  (dev->endBlock - dev->startBlock +
--                   1) * dev->nChunksPerBlock / (sb->s_blocksize /
--                                                dev->nDataBytesPerChunk);
-+                      (dev->endBlock - dev->startBlock + 1) *
-+                      dev->nChunksPerBlock /
-+                      (sb->s_blocksize / dev->nDataBytesPerChunk);
-               buf->f_bfree =
--                  yaffs_GetNumberOfFreeChunks(dev) / (sb->s_blocksize /
--                                                      dev->nDataBytesPerChunk);
-+                      yaffs_GetNumberOfFreeChunks(dev) /
-+                      (sb->s_blocksize / dev->nDataBytesPerChunk);
-       } else {
--
-               buf->f_blocks =
--                  (dev->endBlock - dev->startBlock +
--                   1) * dev->nChunksPerBlock * (dev->nDataBytesPerChunk /
--                                                sb->s_blocksize);
-+                      (dev->endBlock - dev->startBlock + 1) *
-+                      dev->nChunksPerBlock *
-+                      (dev->nDataBytesPerChunk / sb->s_blocksize);
-+
-               buf->f_bfree =
--                  yaffs_GetNumberOfFreeChunks(dev) * (dev->nDataBytesPerChunk /
--                                                      sb->s_blocksize);
-+                      yaffs_GetNumberOfFreeChunks(dev) *
-+                      (dev->nDataBytesPerChunk / sb->s_blocksize);
-       }
-+
-       buf->f_files = 0;
-       buf->f_ffree = 0;
-       buf->f_bavail = buf->f_bfree;
-@@ -1378,18 +1583,19 @@ static int yaffs_statfs(struct super_blo
- }
--/**
- static int yaffs_do_sync_fs(struct super_block *sb)
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_do_sync_fs\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_do_sync_fs\n"));
--      if(sb->s_dirt) {
-+      if (sb->s_dirt) {
-               yaffs_GrossLock(dev);
--              if(dev)
-+              if (dev) {
-+                      yaffs_FlushEntireDeviceCache(dev);
-                       yaffs_CheckpointSave(dev);
-+              }
-               yaffs_GrossUnlock(dev);
-@@ -1397,35 +1603,73 @@ static int yaffs_do_sync_fs(struct super
-       }
-       return 0;
- }
--**/
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static void yaffs_write_super(struct super_block *sb)
- #else
- static int yaffs_write_super(struct super_block *sb)
- #endif
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_write_super\n"));
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
--      return 0; /* yaffs_do_sync_fs(sb);*/
-+      T(YAFFS_TRACE_OS, ("yaffs_write_super\n"));
-+      if (yaffs_auto_checkpoint >= 2)
-+              yaffs_do_sync_fs(sb);
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18))
-+      return 0;
- #endif
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_sync_fs(struct super_block *sb, int wait)
- #else
- static int yaffs_sync_fs(struct super_block *sb)
- #endif
- {
-+      T(YAFFS_TRACE_OS, ("yaffs_sync_fs\n"));
-+
-+      if (yaffs_auto_checkpoint >= 1)
-+              yaffs_do_sync_fs(sb);
-+
-+      return 0;
-+}
-+
-+#ifdef YAFFS_USE_OWN_IGET
-+
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+      yaffs_Object *obj;
-+      yaffs_Device *dev = yaffs_SuperToDevice(sb);
-+
-+      T(YAFFS_TRACE_OS,
-+              ("yaffs_iget for %lu\n", ino));
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_fs\n"));
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      /* NB This is called as a side effect of other functions, but
-+       * we had to release the lock to prevent deadlocks, so
-+       * need to lock again.
-+       */
--      return 0; /* yaffs_do_sync_fs(sb);*/
-+      yaffs_GrossLock(dev);
-+      obj = yaffs_FindObjectByNumber(dev, inode->i_ino);
-+
-+      yaffs_FillInodeFromObject(inode, obj);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      unlock_new_inode(inode);
-+      return inode;
- }
-+#else
- static void yaffs_read_inode(struct inode *inode)
- {
-@@ -1438,7 +1682,7 @@ static void yaffs_read_inode(struct inod
-       yaffs_Device *dev = yaffs_SuperToDevice(inode->i_sb);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_read_inode for %d\n", (int)inode->i_ino));
-+              ("yaffs_read_inode for %d\n", (int)inode->i_ino));
-       yaffs_GrossLock(dev);
-@@ -1449,18 +1693,20 @@ static void yaffs_read_inode(struct inod
-       yaffs_GrossUnlock(dev);
- }
--static LIST_HEAD(yaffs_dev_list);
-+#endif
-+
-+static YLIST_HEAD(yaffs_dev_list);
--#if 0 // not used
-+#if 0 /* not used */
- static int yaffs_remount_fs(struct super_block *sb, int *flags, char *data)
- {
-       yaffs_Device    *dev = yaffs_SuperToDevice(sb);
--      if( *flags & MS_RDONLY ) {
-+      if (*flags & MS_RDONLY) {
-               struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
-               T(YAFFS_TRACE_OS,
--                      (KERN_DEBUG "yaffs_remount_fs: %s: RO\n", dev->name ));
-+                      ("yaffs_remount_fs: %s: RO\n", dev->name));
-               yaffs_GrossLock(dev);
-@@ -1472,10 +1718,9 @@ static int yaffs_remount_fs(struct super
-                       mtd->sync(mtd);
-               yaffs_GrossUnlock(dev);
--      }
--      else {
-+      } else {
-               T(YAFFS_TRACE_OS,
--                      (KERN_DEBUG "yaffs_remount_fs: %s: RW\n", dev->name ));
-+                      ("yaffs_remount_fs: %s: RW\n", dev->name));
-       }
-       return 0;
-@@ -1486,7 +1731,7 @@ static void yaffs_put_super(struct super
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_put_super\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_put_super\n"));
-       yaffs_GrossLock(dev);
-@@ -1494,18 +1739,17 @@ static void yaffs_put_super(struct super
-       yaffs_CheckpointSave(dev);
--      if (dev->putSuperFunc) {
-+      if (dev->putSuperFunc)
-               dev->putSuperFunc(sb);
--      }
-       yaffs_Deinitialise(dev);
-       yaffs_GrossUnlock(dev);
-       /* we assume this is protected by lock_kernel() in mount/umount */
--      list_del(&dev->devList);
-+      ylist_del(&dev->devList);
--      if(dev->spareBuffer){
-+      if (dev->spareBuffer) {
-               YFREE(dev->spareBuffer);
-               dev->spareBuffer = NULL;
-       }
-@@ -1516,12 +1760,10 @@ static void yaffs_put_super(struct super
- static void yaffs_MTDPutSuper(struct super_block *sb)
- {
--
-       struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
--      if (mtd->sync) {
-+      if (mtd->sync)
-               mtd->sync(mtd);
--      }
-       put_mtd_device(mtd);
- }
-@@ -1531,9 +1773,9 @@ static void yaffs_MarkSuperBlockDirty(vo
- {
-       struct super_block *sb = (struct super_block *)vsb;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_MarkSuperBlockDirty() sb = %p\n",sb));
--//    if(sb)
--//            sb->s_dirt = 1;
-+      T(YAFFS_TRACE_OS, ("yaffs_MarkSuperBlockDirty() sb = %p\n", sb));
-+      if (sb)
-+              sb->s_dirt = 1;
- }
- typedef struct {
-@@ -1546,48 +1788,48 @@ typedef struct {
- #define MAX_OPT_LEN 20
- static int yaffs_parse_options(yaffs_options *options, const char *options_str)
- {
--      char cur_opt[MAX_OPT_LEN+1];
-+      char cur_opt[MAX_OPT_LEN + 1];
-       int p;
-       int error = 0;
-       /* Parse through the options which is a comma seperated list */
--      while(options_str && *options_str && !error){
--              memset(cur_opt,0,MAX_OPT_LEN+1);
-+      while (options_str && *options_str && !error) {
-+              memset(cur_opt, 0, MAX_OPT_LEN + 1);
-               p = 0;
--              while(*options_str && *options_str != ','){
--                      if(p < MAX_OPT_LEN){
-+              while (*options_str && *options_str != ',') {
-+                      if (p < MAX_OPT_LEN) {
-                               cur_opt[p] = *options_str;
-                               p++;
-                       }
-                       options_str++;
-               }
--              if(!strcmp(cur_opt,"inband-tags"))
-+              if (!strcmp(cur_opt, "inband-tags"))
-                       options->inband_tags = 1;
--              else if(!strcmp(cur_opt,"no-cache"))
-+              else if (!strcmp(cur_opt, "no-cache"))
-                       options->no_cache = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint-read"))
-+              else if (!strcmp(cur_opt, "no-checkpoint-read"))
-                       options->skip_checkpoint_read = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint-write"))
-+              else if (!strcmp(cur_opt, "no-checkpoint-write"))
-                       options->skip_checkpoint_write = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint")){
-+              else if (!strcmp(cur_opt, "no-checkpoint")) {
-                       options->skip_checkpoint_read = 1;
-                       options->skip_checkpoint_write = 1;
-               } else {
--                      printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",cur_opt);
-+                      printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",
-+                                      cur_opt);
-                       error = 1;
-               }
--
-       }
-       return error;
- }
- static struct super_block *yaffs_internal_read_super(int yaffsVersion,
--                                                   struct super_block *sb,
--                                                   void *data, int silent)
-+                                              struct super_block *sb,
-+                                              void *data, int silent)
- {
-       int nBlocks;
-       struct inode *inode = NULL;
-@@ -1602,6 +1844,7 @@ static struct super_block *yaffs_interna
-       sb->s_magic = YAFFS_MAGIC;
-       sb->s_op = &yaffs_super_ops;
-+      sb->s_flags |= MS_NOATIME;
-       if (!sb)
-               printk(KERN_INFO "yaffs: sb is NULL\n");
-@@ -1614,14 +1857,14 @@ static struct super_block *yaffs_interna
-                      sb->s_dev,
-                      yaffs_devname(sb, devname_buf));
--      if(!data_str)
-+      if (!data_str)
-               data_str = "";
--      printk(KERN_INFO "yaffs: passed flags \"%s\"\n",data_str);
-+      printk(KERN_INFO "yaffs: passed flags \"%s\"\n", data_str);
--      memset(&options,0,sizeof(options));
-+      memset(&options, 0, sizeof(options));
--      if(yaffs_parse_options(&options,data_str)){
-+      if (yaffs_parse_options(&options, data_str)) {
-               /* Option parsing failed */
-               return NULL;
-       }
-@@ -1645,9 +1888,9 @@ static struct super_block *yaffs_interna
-                              yaffs_devname(sb, devname_buf)));
-       /* Check it's an mtd device..... */
--      if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR) {
-+      if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR)
-               return NULL;    /* This isn't an mtd device */
--      }
-+
-       /* Get the device */
-       mtd = get_mtd_device(NULL, MINOR(sb->s_dev));
-       if (!mtd) {
-@@ -1673,29 +1916,23 @@ static struct super_block *yaffs_interna
-       T(YAFFS_TRACE_OS, (" %s %d\n", WRITE_SIZE_STR, WRITE_SIZE(mtd)));
-       T(YAFFS_TRACE_OS, (" oobsize %d\n", mtd->oobsize));
-       T(YAFFS_TRACE_OS, (" erasesize %d\n", mtd->erasesize));
--      T(YAFFS_TRACE_OS, (" size %d\n", mtd->size));
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
-+      T(YAFFS_TRACE_OS, (" size %u\n", mtd->size));
-+#else
-+      T(YAFFS_TRACE_OS, (" size %lld\n", mtd->size));
-+#endif
- #ifdef CONFIG_YAFFS_AUTO_YAFFS2
--      if (yaffsVersion == 1 &&
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--          mtd->writesize >= 2048) {
--#else
--          mtd->oobblock >= 2048) {
--#endif
--          T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs2\n"));
--          yaffsVersion = 2;
-+      if (yaffsVersion == 1 && WRITE_SIZE(mtd) >= 2048) {
-+              T(YAFFS_TRACE_ALWAYS, ("yaffs: auto selecting yaffs2\n"));
-+              yaffsVersion = 2;
-       }
-       /* Added NCB 26/5/2006 for completeness */
--      if (yaffsVersion == 2 &&
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--          mtd->writesize == 512) {
--#else
--          mtd->oobblock == 512) {
--#endif
--          T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs1\n"));
--          yaffsVersion = 1;
-+      if (yaffsVersion == 2 && !options.inband_tags && WRITE_SIZE(mtd) == 512) {
-+              T(YAFFS_TRACE_ALWAYS, ("yaffs: auto selecting yaffs1\n"));
-+              yaffsVersion = 1;
-       }
- #endif
-@@ -1707,7 +1944,7 @@ static struct super_block *yaffs_interna
-                   !mtd->block_markbad ||
-                   !mtd->read ||
-                   !mtd->write ||
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-                   !mtd->read_oob || !mtd->write_oob) {
- #else
-                   !mtd->write_ecc ||
-@@ -1719,12 +1956,9 @@ static struct super_block *yaffs_interna
-                       return NULL;
-               }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--              if (mtd->writesize < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
--#else
--              if (mtd->oobblock < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
--#endif
--                  mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) {
-+              if ((WRITE_SIZE(mtd) < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
-+                  mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) &&
-+                  !options.inband_tags) {
-                       T(YAFFS_TRACE_ALWAYS,
-                         ("yaffs: MTD device does not have the "
-                          "right page sizes\n"));
-@@ -1735,7 +1969,7 @@ static struct super_block *yaffs_interna
-               if (!mtd->erase ||
-                   !mtd->read ||
-                   !mtd->write ||
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-                   !mtd->read_oob || !mtd->write_oob) {
- #else
-                   !mtd->write_ecc ||
-@@ -1761,7 +1995,7 @@ static struct super_block *yaffs_interna
-        * Set the yaffs_Device up for mtd
-        */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       sb->s_fs_info = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
- #else
-       sb->u.generic_sbp = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
-@@ -1780,13 +2014,15 @@ static struct super_block *yaffs_interna
-       /* Set up the memory size parameters.... */
--      nBlocks = mtd->size / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
-+      nBlocks = YCALCBLOCKS(mtd->size, (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK));
-+
-       dev->startBlock = 0;
-       dev->endBlock = nBlocks - 1;
-       dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
--      dev->nDataBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-+      dev->totalBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-       dev->nReservedBlocks = 5;
-       dev->nShortOpCaches = (options.no_cache) ? 0 : 10;
-+      dev->inbandTags = options.inband_tags;
-       /* ... and the functions. */
-       if (yaffsVersion == 2) {
-@@ -1798,20 +2034,19 @@ static struct super_block *yaffs_interna
-               dev->queryNANDBlock = nandmtd2_QueryNANDBlock;
-               dev->spareBuffer = YMALLOC(mtd->oobsize);
-               dev->isYaffs2 = 1;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--              dev->nDataBytesPerChunk = mtd->writesize;
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+              dev->totalBytesPerChunk = mtd->writesize;
-               dev->nChunksPerBlock = mtd->erasesize / mtd->writesize;
- #else
--              dev->nDataBytesPerChunk = mtd->oobblock;
-+              dev->totalBytesPerChunk = mtd->oobblock;
-               dev->nChunksPerBlock = mtd->erasesize / mtd->oobblock;
- #endif
--              nBlocks = mtd->size / mtd->erasesize;
-+              nBlocks = YCALCBLOCKS(mtd->size, mtd->erasesize);
--              dev->nCheckpointReservedBlocks = CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS;
-               dev->startBlock = 0;
-               dev->endBlock = nBlocks - 1;
-       } else {
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-               /* use the MTD interface in yaffs_mtdif1.c */
-               dev->writeChunkWithTagsToNAND =
-                       nandmtd1_WriteChunkWithTagsToNAND;
-@@ -1847,7 +2082,7 @@ static struct super_block *yaffs_interna
-       dev->skipCheckpointWrite = options.skip_checkpoint_write;
-       /* we assume this is protected by lock_kernel() in mount/umount */
--      list_add_tail(&dev->devList, &yaffs_dev_list);
-+      ylist_add_tail(&dev->devList, &yaffs_dev_list);
-       init_MUTEX(&dev->grossLock);
-@@ -1884,20 +2119,23 @@ static struct super_block *yaffs_interna
-               return NULL;
-       }
-       sb->s_root = root;
-+      sb->s_dirt = !dev->isCheckpointed;
-+      T(YAFFS_TRACE_ALWAYS,
-+        ("yaffs_read_super: isCheckpointed %d\n", dev->isCheckpointed));
-       T(YAFFS_TRACE_OS, ("yaffs_read_super: done\n"));
-       return sb;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_internal_read_super_mtd(struct super_block *sb, void *data,
-                                        int silent)
- {
-       return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_read_super(struct file_system_type *fs,
-                           int flags, const char *dev_name,
-                           void *data, struct vfsmount *mnt)
-@@ -1938,14 +2176,14 @@ static DECLARE_FSTYPE(yaffs_fs_type, "ya
- #ifdef CONFIG_YAFFS_YAFFS2
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data,
-                                         int silent)
- {
-       return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs2_read_super(struct file_system_type *fs,
-                       int flags, const char *dev_name, void *data,
-                       struct vfsmount *mnt)
-@@ -1990,12 +2228,12 @@ static char *yaffs_dump_dev(char *buf, y
- {
-       buf += sprintf(buf, "startBlock......... %d\n", dev->startBlock);
-       buf += sprintf(buf, "endBlock........... %d\n", dev->endBlock);
-+      buf += sprintf(buf, "totalBytesPerChunk. %d\n", dev->totalBytesPerChunk);
-       buf += sprintf(buf, "nDataBytesPerChunk. %d\n", dev->nDataBytesPerChunk);
-       buf += sprintf(buf, "chunkGroupBits..... %d\n", dev->chunkGroupBits);
-       buf += sprintf(buf, "chunkGroupSize..... %d\n", dev->chunkGroupSize);
-       buf += sprintf(buf, "nErasedBlocks...... %d\n", dev->nErasedBlocks);
-       buf += sprintf(buf, "nReservedBlocks.... %d\n", dev->nReservedBlocks);
--      buf += sprintf(buf, "nCheckptResBlocks.. %d\n", dev->nCheckpointReservedBlocks);
-       buf += sprintf(buf, "blocksInCheckpoint. %d\n", dev->blocksInCheckpoint);
-       buf += sprintf(buf, "nTnodesCreated..... %d\n", dev->nTnodesCreated);
-       buf += sprintf(buf, "nFreeTnodes........ %d\n", dev->nFreeTnodes);
-@@ -2006,10 +2244,8 @@ static char *yaffs_dump_dev(char *buf, y
-       buf += sprintf(buf, "nPageReads......... %d\n", dev->nPageReads);
-       buf += sprintf(buf, "nBlockErasures..... %d\n", dev->nBlockErasures);
-       buf += sprintf(buf, "nGCCopies.......... %d\n", dev->nGCCopies);
--      buf +=
--          sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
--      buf +=
--          sprintf(buf, "passiveGCs......... %d\n",
-+      buf += sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
-+      buf += sprintf(buf, "passiveGCs......... %d\n",
-                   dev->passiveGarbageCollections);
-       buf += sprintf(buf, "nRetriedWrites..... %d\n", dev->nRetriedWrites);
-       buf += sprintf(buf, "nShortOpCaches..... %d\n", dev->nShortOpCaches);
-@@ -2025,6 +2261,7 @@ static char *yaffs_dump_dev(char *buf, y
-           sprintf(buf, "nBackgroudDeletions %d\n", dev->nBackgroundDeletions);
-       buf += sprintf(buf, "useNANDECC......... %d\n", dev->useNANDECC);
-       buf += sprintf(buf, "isYaffs2........... %d\n", dev->isYaffs2);
-+      buf += sprintf(buf, "inbandTags......... %d\n", dev->inbandTags);
-       return buf;
- }
-@@ -2033,7 +2270,7 @@ static int yaffs_proc_read(char *page,
-                          char **start,
-                          off_t offset, int count, int *eof, void *data)
- {
--      struct list_head *item;
-+      struct ylist_head *item;
-       char *buf = page;
-       int step = offset;
-       int n = 0;
-@@ -2057,8 +2294,8 @@ static int yaffs_proc_read(char *page,
-       lock_kernel();
-       /* Locate and print the Nth entry.  Order N-squared but N is small. */
--      list_for_each(item, &yaffs_dev_list) {
--              yaffs_Device *dev = list_entry(item, yaffs_Device, devList);
-+      ylist_for_each(item, &yaffs_dev_list) {
-+              yaffs_Device *dev = ylist_entry(item, yaffs_Device, devList);
-               if (n < step) {
-                       n++;
-                       continue;
-@@ -2119,7 +2356,7 @@ static int yaffs_proc_write(struct file 
-       char *end;
-       char *mask_name;
-       const char *x;
--      char substring[MAX_MASK_NAME_LENGTH+1];
-+      char substring[MAX_MASK_NAME_LENGTH + 1];
-       int i;
-       int done = 0;
-       int add, len = 0;
-@@ -2129,9 +2366,8 @@ static int yaffs_proc_write(struct file 
-       while (!done && (pos < count)) {
-               done = 1;
--              while ((pos < count) && isspace(buf[pos])) {
-+              while ((pos < count) && isspace(buf[pos]))
-                       pos++;
--              }
-               switch (buf[pos]) {
-               case '+':
-@@ -2148,20 +2384,21 @@ static int yaffs_proc_write(struct file 
-               mask_name = NULL;
-               mask_bitfield = simple_strtoul(buf + pos, &end, 0);
-+
-               if (end > buf + pos) {
-                       mask_name = "numeral";
-                       len = end - (buf + pos);
-                       pos += len;
-                       done = 0;
-               } else {
--                      for(x = buf + pos, i = 0;
--                          (*x == '_' || (*x >='a' && *x <= 'z')) &&
--                          i <MAX_MASK_NAME_LENGTH; x++, i++, pos++)
--                          substring[i] = *x;
-+                      for (x = buf + pos, i = 0;
-+                          (*x == '_' || (*x >= 'a' && *x <= 'z')) &&
-+                          i < MAX_MASK_NAME_LENGTH; x++, i++, pos++)
-+                              substring[i] = *x;
-                       substring[i] = '\0';
-                       for (i = 0; mask_flags[i].mask_name != NULL; i++) {
--                              if(strcmp(substring,mask_flags[i].mask_name) == 0){
-+                              if (strcmp(substring, mask_flags[i].mask_name) == 0) {
-                                       mask_name = mask_flags[i].mask_name;
-                                       mask_bitfield = mask_flags[i].mask_bitfield;
-                                       done = 0;
-@@ -2172,7 +2409,7 @@ static int yaffs_proc_write(struct file 
-               if (mask_name != NULL) {
-                       done = 0;
--                      switch(add) {
-+                      switch (add) {
-                       case '-':
-                               rg &= ~mask_bitfield;
-                               break;
-@@ -2191,13 +2428,13 @@ static int yaffs_proc_write(struct file 
-       yaffs_traceMask = rg | YAFFS_TRACE_ALWAYS;
--      printk("new trace = 0x%08X\n",yaffs_traceMask);
-+      printk(KERN_DEBUG "new trace = 0x%08X\n", yaffs_traceMask);
-       if (rg & YAFFS_TRACE_ALWAYS) {
-               for (i = 0; mask_flags[i].mask_name != NULL; i++) {
-                       char flag;
-                       flag = ((rg & mask_flags[i].mask_bitfield) == mask_flags[i].mask_bitfield) ? '+' : '-';
--                      printk("%c%s\n", flag, mask_flags[i].mask_name);
-+                      printk(KERN_DEBUG "%c%s\n", flag, mask_flags[i].mask_name);
-               }
-       }
-@@ -2211,12 +2448,8 @@ struct file_system_to_install {
- };
- static struct file_system_to_install fs_to_install[] = {
--//#ifdef CONFIG_YAFFS_YAFFS1
-       {&yaffs_fs_type, 0},
--//#endif
--//#ifdef CONFIG_YAFFS_YAFFS2
-       {&yaffs2_fs_type, 0},
--//#endif
-       {NULL, 0}
- };
-@@ -2231,15 +2464,14 @@ static int __init init_yaffs_fs(void)
-       /* Install the proc_fs entry */
-       my_proc_entry = create_proc_entry("yaffs",
-                                              S_IRUGO | S_IFREG,
--                                             &proc_root);
-+                                             YPROC_ROOT);
-       if (my_proc_entry) {
-               my_proc_entry->write_proc = yaffs_proc_write;
-               my_proc_entry->read_proc = yaffs_proc_read;
-               my_proc_entry->data = NULL;
--      } else {
-+      } else
-               return -ENOMEM;
--      }
-       /* Now add the file system entries */
-@@ -2247,9 +2479,8 @@ static int __init init_yaffs_fs(void)
-       while (fsinst->fst && !error) {
-               error = register_filesystem(fsinst->fst);
--              if (!error) {
-+              if (!error)
-                       fsinst->installed = 1;
--              }
-               fsinst++;
-       }
-@@ -2277,7 +2508,7 @@ static void __exit exit_yaffs_fs(void)
-       T(YAFFS_TRACE_ALWAYS, ("yaffs " __DATE__ " " __TIME__
-                              " removing. \n"));
--      remove_proc_entry("yaffs", &proc_root);
-+      remove_proc_entry("yaffs", YPROC_ROOT);
-       fsinst = fs_to_install;
-@@ -2288,7 +2519,6 @@ static void __exit exit_yaffs_fs(void)
-               }
-               fsinst++;
-       }
--
- }
- module_init(init_yaffs_fs)
---- /dev/null
-+++ b/fs/yaffs2/yaffs_getblockinfo.h
-@@ -0,0 +1,34 @@
-+/*
-+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
-+ *
-+ * Copyright (C) 2002-2007 Aleph One Ltd.
-+ *   for Toby Churchill Ltd and Brightstar Engineering
-+ *
-+ * Created by Charles Manning <charles@aleph1.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 2.1 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-+ */
-+
-+#ifndef __YAFFS_GETBLOCKINFO_H__
-+#define __YAFFS_GETBLOCKINFO_H__
-+
-+#include "yaffs_guts.h"
-+
-+/* Function to manipulate block info */
-+static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
-+{
-+      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
-+              T(YAFFS_TRACE_ERROR,
-+                (TSTR
-+                 ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
-+                 blk));
-+              YBUG();
-+      }
-+      return &dev->blockInfo[blk - dev->internalStartBlock];
-+}
-+
-+#endif
---- a/fs/yaffs2/yaffs_guts.c
-+++ b/fs/yaffs2/yaffs_guts.c
-@@ -12,16 +12,17 @@
-  */
- const char *yaffs_guts_c_version =
--    "$Id: yaffs_guts.c,v 1.49 2007-05-15 20:07:40 charles Exp $";
-+    "$Id: yaffs_guts.c,v 1.82 2009-03-09 04:24:17 charles Exp $";
- #include "yportenv.h"
- #include "yaffsinterface.h"
- #include "yaffs_guts.h"
- #include "yaffs_tagsvalidity.h"
-+#include "yaffs_getblockinfo.h"
- #include "yaffs_tagscompat.h"
--#ifndef  CONFIG_YAFFS_USE_OWN_SORT
-+#ifndef CONFIG_YAFFS_USE_OWN_SORT
- #include "yaffs_qsort.h"
- #endif
- #include "yaffs_nand.h"
-@@ -32,116 +33,116 @@ const char *yaffs_guts_c_version =
- #include "yaffs_packedtags2.h"
--#ifdef CONFIG_YAFFS_WINCE
--void yfsd_LockYAFFS(BOOL fsLockOnly);
--void yfsd_UnlockYAFFS(BOOL fsLockOnly);
--#endif
--
- #define YAFFS_PASSIVE_GC_CHUNKS 2
- #include "yaffs_ecc.h"
- /* Robustification (if it ever comes about...) */
--static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_ExtendedTags * tags);
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_ExtendedTags * tags);
-+static void yaffs_RetireBlock(yaffs_Device *dev, int blockInNAND);
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND,
-+              int erasedOk);
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags);
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                              const yaffs_ExtendedTags *tags);
- /* Other local prototypes */
--static int yaffs_UnlinkObject( yaffs_Object *obj);
-+static int yaffs_UnlinkObject(yaffs_Object *obj);
- static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
- static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
--static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
--                                           const __u8 * buffer,
--                                           yaffs_ExtendedTags * tags,
--                                           int useReserve);
--static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
--                                int chunkInNAND, int inScan);
--
--static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
--                                         yaffs_ObjectType type);
--static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
--                                     yaffs_Object * obj);
--static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
--                                  int force, int isShrink, int shadows);
--static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
-+static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device *dev,
-+                                      const __u8 *buffer,
-+                                      yaffs_ExtendedTags *tags,
-+                                      int useReserve);
-+static int yaffs_PutChunkIntoFile(yaffs_Object *in, int chunkInInode,
-+                              int chunkInNAND, int inScan);
-+
-+static yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
-+                                      yaffs_ObjectType type);
-+static void yaffs_AddObjectToDirectory(yaffs_Object *directory,
-+                              yaffs_Object *obj);
-+static int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name,
-+                              int force, int isShrink, int shadows);
-+static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj);
- static int yaffs_CheckStructures(void);
--static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
--                            int chunkOffset, int *limit);
--static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
--
--static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
--
--static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
--static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
--                                  int lineNo);
-+static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level,
-+                      int chunkOffset, int *limit);
-+static int yaffs_DoGenericObjectDeletion(yaffs_Object *in);
-+
-+static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device *dev, int blockNo);
--static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND);
--static int yaffs_UnlinkWorker(yaffs_Object * obj);
--static void yaffs_DestroyObject(yaffs_Object * obj);
-+static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
-+                              int chunkInNAND);
--static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
--                         int chunkInObject);
-+static int yaffs_UnlinkWorker(yaffs_Object *obj);
--loff_t yaffs_GetFileSize(yaffs_Object * obj);
-+static int yaffs_TagsMatch(const yaffs_ExtendedTags *tags, int objectId,
-+                      int chunkInObject);
--static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
-+static int yaffs_AllocateChunk(yaffs_Device *dev, int useReserve,
-+                              yaffs_BlockInfo **blockUsedPtr);
--static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
-+static void yaffs_VerifyFreeChunks(yaffs_Device *dev);
- static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in);
-+static void yaffs_VerifyDirectory(yaffs_Object *directory);
- #ifdef YAFFS_PARANOID
--static int yaffs_CheckFileSanity(yaffs_Object * in);
-+static int yaffs_CheckFileSanity(yaffs_Object *in);
- #else
- #define yaffs_CheckFileSanity(in)
- #endif
--static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
--static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
-+static void yaffs_InvalidateWholeChunkCache(yaffs_Object *in);
-+static void yaffs_InvalidateChunkCache(yaffs_Object *object, int chunkId);
- static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
--static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
--                               yaffs_ExtendedTags * tags);
-+static int yaffs_FindChunkInFile(yaffs_Object *in, int chunkInInode,
-+                              yaffs_ExtendedTags *tags);
--static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos);
--static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
--                                        yaffs_FileStructure * fStruct,
--                                        __u32 chunkId);
-+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn,
-+              unsigned pos);
-+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId);
- /* Function to calculate chunk and offset */
--static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
-+static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, int *chunkOut,
-+              __u32 *offsetOut)
- {
--      if(dev->chunkShift){
--              /* Easy-peasy power of 2 case */
--              *chunk  = (__u32)(addr >> dev->chunkShift);
--              *offset = (__u32)(addr & dev->chunkMask);
--      }
--      else if(dev->crumbsPerChunk)
--      {
--              /* Case where we're using "crumbs" */
--              *offset = (__u32)(addr & dev->crumbMask);
--              addr >>= dev->crumbShift;
--              *chunk = ((__u32)addr)/dev->crumbsPerChunk;
--              *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
-+      int chunk;
-+      __u32 offset;
-+
-+      chunk  = (__u32)(addr >> dev->chunkShift);
-+
-+      if (dev->chunkDiv == 1) {
-+              /* easy power of 2 case */
-+              offset = (__u32)(addr & dev->chunkMask);
-+      } else {
-+              /* Non power-of-2 case */
-+
-+              loff_t chunkBase;
-+
-+              chunk /= dev->chunkDiv;
-+
-+              chunkBase = ((loff_t)chunk) * dev->nDataBytesPerChunk;
-+              offset = (__u32)(addr - chunkBase);
-       }
--      else
--              YBUG();
-+
-+      *chunkOut = chunk;
-+      *offsetOut = offset;
- }
--/* Function to return the number of shifts for a power of 2 greater than or equal
-- * to the given number
-+/* Function to return the number of shifts for a power of 2 greater than or
-+ * equal to the given number
-  * Note we don't try to cater for all possible numbers and this does not have to
-  * be hellishly efficient.
-  */
-@@ -153,13 +154,14 @@ static __u32 ShiftsGE(__u32 x)
-       nShifts = extraBits = 0;
--      while(x>1){
--              if(x & 1) extraBits++;
--              x>>=1;
-+      while (x > 1) {
-+              if (x & 1)
-+                      extraBits++;
-+              x >>= 1;
-               nShifts++;
-       }
--      if(extraBits)
-+      if (extraBits)
-               nShifts++;
-       return nShifts;
-@@ -168,16 +170,17 @@ static __u32 ShiftsGE(__u32 x)
- /* Function to return the number of shifts to get a 1 in bit 0
-  */
--static __u32 ShiftDiv(__u32 x)
-+static __u32 Shifts(__u32 x)
- {
-       int nShifts;
-       nShifts =  0;
--      if(!x) return 0;
-+      if (!x)
-+              return 0;
--      while( !(x&1)){
--              x>>=1;
-+      while (!(x&1)) {
-+              x >>= 1;
-               nShifts++;
-       }
-@@ -195,21 +198,25 @@ static int yaffs_InitialiseTempBuffers(y
-       int i;
-       __u8 *buf = (__u8 *)1;
--      memset(dev->tempBuffer,0,sizeof(dev->tempBuffer));
-+      memset(dev->tempBuffer, 0, sizeof(dev->tempBuffer));
-       for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
-               dev->tempBuffer[i].line = 0;    /* not in use */
-               dev->tempBuffer[i].buffer = buf =
--                  YMALLOC_DMA(dev->nDataBytesPerChunk);
-+                  YMALLOC_DMA(dev->totalBytesPerChunk);
-       }
-       return buf ? YAFFS_OK : YAFFS_FAIL;
--
- }
--static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
-+__u8 *yaffs_GetTempBuffer(yaffs_Device *dev, int lineNo)
- {
-       int i, j;
-+
-+      dev->tempInUse++;
-+      if (dev->tempInUse > dev->maxTemp)
-+              dev->maxTemp = dev->tempInUse;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].line == 0) {
-                       dev->tempBuffer[i].line = lineNo;
-@@ -227,9 +234,9 @@ static __u8 *yaffs_GetTempBuffer(yaffs_D
-       T(YAFFS_TRACE_BUFFERS,
-         (TSTR("Out of temp buffers at line %d, other held by lines:"),
-          lineNo));
--      for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-+      for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
-               T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
--      }
-+
-       T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
-       /*
-@@ -242,10 +249,13 @@ static __u8 *yaffs_GetTempBuffer(yaffs_D
- }
--static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
-+void yaffs_ReleaseTempBuffer(yaffs_Device *dev, __u8 *buffer,
-                                   int lineNo)
- {
-       int i;
-+
-+      dev->tempInUse--;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].buffer == buffer) {
-                       dev->tempBuffer[i].line = 0;
-@@ -267,27 +277,26 @@ static void yaffs_ReleaseTempBuffer(yaff
- /*
-  * Determine if we have a managed buffer.
-  */
--int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
-+int yaffs_IsManagedTempBuffer(yaffs_Device *dev, const __u8 *buffer)
- {
-       int i;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].buffer == buffer)
-                       return 1;
-+      }
-+      for (i = 0; i < dev->nShortOpCaches; i++) {
-+              if (dev->srCache[i].data == buffer)
-+                      return 1;
-       }
--    for (i = 0; i < dev->nShortOpCaches; i++) {
--        if( dev->srCache[i].data == buffer )
--            return 1;
--
--    }
--
--    if (buffer == dev->checkpointBuffer)
--      return 1;
--
--    T(YAFFS_TRACE_ALWAYS,
--        (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
--    return 0;
-+      if (buffer == dev->checkpointBuffer)
-+              return 1;
-+
-+      T(YAFFS_TRACE_ALWAYS,
-+              (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
-+      return 0;
- }
-@@ -296,62 +305,63 @@ int yaffs_IsManagedTempBuffer(yaffs_Devi
-  * Chunk bitmap manipulations
-  */
--static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
-+static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device *dev, int blk)
- {
-       if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
--                 blk));
-+                      (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
-+                      blk));
-               YBUG();
-       }
-       return dev->chunkBits +
--          (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
-+              (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
- }
- static Y_INLINE void yaffs_VerifyChunkBitId(yaffs_Device *dev, int blk, int chunk)
- {
--      if(blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
--         chunk < 0 || chunk >= dev->nChunksPerBlock) {
--         T(YAFFS_TRACE_ERROR,
--          (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),blk,chunk));
--          YBUG();
-+      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
-+                      chunk < 0 || chunk >= dev->nChunksPerBlock) {
-+              T(YAFFS_TRACE_ERROR,
-+              (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),
-+                      blk, chunk));
-+              YBUG();
-       }
- }
--static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
-+static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       memset(blkBits, 0, dev->chunkBitmapStride);
- }
--static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       blkBits[chunk / 8] &= ~(1 << (chunk & 7));
- }
--static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE void yaffs_SetChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       blkBits[chunk / 8] |= (1 << (chunk & 7));
- }
--static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
- }
--static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
-+static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       int i;
-@@ -363,17 +373,17 @@ static Y_INLINE int yaffs_StillSomeChunk
-       return 0;
- }
--static int yaffs_CountChunkBits(yaffs_Device * dev, int blk)
-+static int yaffs_CountChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       int i;
-       int n = 0;
-       for (i = 0; i < dev->chunkBitmapStride; i++) {
-               __u8 x = *blkBits;
--              while(x){
--                      if(x & 1)
-+              while (x) {
-+                      if (x & 1)
-                               n++;
--                      x >>=1;
-+                      x >>= 1;
-               }
-               blkBits++;
-@@ -400,7 +410,7 @@ static int yaffs_SkipNANDVerification(ya
-       return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_NAND));
- }
--static const char * blockStateName[] = {
-+static const char *blockStateName[] = {
- "Unknown",
- "Needs scanning",
- "Scanning",
-@@ -413,64 +423,65 @@ static const char * blockStateName[] = {
- "Dead"
- };
--static void yaffs_VerifyBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-+static void yaffs_VerifyBlock(yaffs_Device *dev, yaffs_BlockInfo *bi, int n)
- {
-       int actuallyUsed;
-       int inUse;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Report illegal runtime states */
--      if(bi->blockState <0 || bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has undefined state %d"TENDSTR),n,bi->blockState));
-+      if (bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has undefined state %d"TENDSTR), n, bi->blockState));
--      switch(bi->blockState){
--       case YAFFS_BLOCK_STATE_UNKNOWN:
--       case YAFFS_BLOCK_STATE_SCANNING:
--       case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has bad run-state %s"TENDSTR),
--              n,blockStateName[bi->blockState]));
-+      switch (bi->blockState) {
-+      case YAFFS_BLOCK_STATE_UNKNOWN:
-+      case YAFFS_BLOCK_STATE_SCANNING:
-+      case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has bad run-state %s"TENDSTR),
-+              n, blockStateName[bi->blockState]));
-       }
-       /* Check pages in use and soft deletions are legal */
-       actuallyUsed = bi->pagesInUse - bi->softDeletions;
--      if(bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
-+      if (bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
-          bi->softDeletions < 0 || bi->softDeletions > dev->nChunksPerBlock ||
-          actuallyUsed < 0 || actuallyUsed > dev->nChunksPerBlock)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
--              n,bi->pagesInUse,bi->softDeletions));
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
-+              n, bi->pagesInUse, bi->softDeletions));
-       /* Check chunk bitmap legal */
--      inUse = yaffs_CountChunkBits(dev,n);
--      if(inUse != bi->pagesInUse)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
--                      n,bi->pagesInUse,inUse));
-+      inUse = yaffs_CountChunkBits(dev, n);
-+      if (inUse != bi->pagesInUse)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
-+                      n, bi->pagesInUse, inUse));
-       /* Check that the sequence number is valid.
-        * Ten million is legal, but is very unlikely
-        */
--      if(dev->isYaffs2 &&
-+      if (dev->isYaffs2 &&
-          (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
--         (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000 ))
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has suspect sequence number of %d"TENDSTR),
--              n,bi->sequenceNumber));
--
-+         (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000))
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has suspect sequence number of %d"TENDSTR),
-+              n, bi->sequenceNumber));
- }
--static void yaffs_VerifyCollectedBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-+static void yaffs_VerifyCollectedBlock(yaffs_Device *dev, yaffs_BlockInfo *bi,
-+              int n)
- {
--      yaffs_VerifyBlock(dev,bi,n);
-+      yaffs_VerifyBlock(dev, bi, n);
-       /* After collection the block should be in the erased state */
--      /* TODO: This will need to change if we do partial gc */
-+      /* This will need to change if we do partial gc */
--      if(bi->blockState != YAFFS_BLOCK_STATE_EMPTY){
--              T(YAFFS_TRACE_ERROR,(TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
--                      n,bi->blockState));
-+      if (bi->blockState != YAFFS_BLOCK_STATE_COLLECTING &&
-+                      bi->blockState != YAFFS_BLOCK_STATE_EMPTY) {
-+              T(YAFFS_TRACE_ERROR, (TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
-+                      n, bi->blockState));
-       }
- }
-@@ -480,52 +491,49 @@ static void yaffs_VerifyBlocks(yaffs_Dev
-       int nBlocksPerState[YAFFS_NUMBER_OF_BLOCK_STATES];
-       int nIllegalBlockStates = 0;
--
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
--      memset(nBlocksPerState,0,sizeof(nBlocksPerState));
--
-+      memset(nBlocksPerState, 0, sizeof(nBlocksPerState));
--      for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++){
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--              yaffs_VerifyBlock(dev,bi,i);
-+      for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+              yaffs_VerifyBlock(dev, bi, i);
--              if(bi->blockState >=0 && bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
-+              if (bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
-                       nBlocksPerState[bi->blockState]++;
-               else
-                       nIllegalBlockStates++;
--
-       }
--      T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
--      T(YAFFS_TRACE_VERIFY,(TSTR("Block summary"TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR(""TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR("Block summary"TENDSTR)));
--      T(YAFFS_TRACE_VERIFY,(TSTR("%d blocks have illegal states"TENDSTR),nIllegalBlockStates));
--      if(nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Too many allocating blocks"TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR("%d blocks have illegal states"TENDSTR), nIllegalBlockStates));
-+      if (nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Too many allocating blocks"TENDSTR)));
--      for(i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
-+      for (i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
-               T(YAFFS_TRACE_VERIFY,
-                 (TSTR("%s %d blocks"TENDSTR),
--                blockStateName[i],nBlocksPerState[i]));
-+                blockStateName[i], nBlocksPerState[i]));
--      if(dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
-+      if (dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Checkpoint block count wrong dev %d count %d"TENDSTR),
-                dev->blocksInCheckpoint, nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT]));
--      if(dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
-+      if (dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Erased block count wrong dev %d count %d"TENDSTR),
-                dev->nErasedBlocks, nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY]));
--      if(nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
-+      if (nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Too many collecting blocks %d (max is 1)"TENDSTR),
-                nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING]));
--      T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR(""TENDSTR)));
- }
-@@ -535,26 +543,26 @@ static void yaffs_VerifyBlocks(yaffs_Dev
-  */
- static void yaffs_VerifyObjectHeader(yaffs_Object *obj, yaffs_ObjectHeader *oh, yaffs_ExtendedTags *tags, int parentCheck)
- {
--      if(yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
--      if(!(tags && obj && oh)){
--              T(YAFFS_TRACE_VERIFY,
--                              (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
--                              (__u32)tags,(__u32)obj,(__u32)oh));
-+      if (!(tags && obj && oh)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                              (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
-+                              (__u32)tags, (__u32)obj, (__u32)oh));
-               return;
-       }
--      if(oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
--         oh->type > YAFFS_OBJECT_TYPE_MAX)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
--               tags->objectId, oh->type));
--
--      if(tags->objectId != obj->objectId)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
--               tags->objectId, obj->objectId));
-+      if (oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
-+                      oh->type > YAFFS_OBJECT_TYPE_MAX)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
-+                      tags->objectId, oh->type));
-+
-+      if (tags->objectId != obj->objectId)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
-+                      tags->objectId, obj->objectId));
-       /*
-@@ -563,46 +571,43 @@ static void yaffs_VerifyObjectHeader(yaf
-        * Tests do not apply to the root object.
-        */
--      if(parentCheck && tags->objectId > 1 && !obj->parent)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
--               tags->objectId, oh->parentObjectId));
--
--
--      if(parentCheck && obj->parent &&
--         oh->parentObjectId != obj->parent->objectId &&
--         (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
--          obj->parent->objectId != YAFFS_OBJECTID_DELETED))
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
--               tags->objectId, oh->parentObjectId, obj->parent->objectId));
-+      if (parentCheck && tags->objectId > 1 && !obj->parent)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
-+                      tags->objectId, oh->parentObjectId));
-+      if (parentCheck && obj->parent &&
-+                      oh->parentObjectId != obj->parent->objectId &&
-+                      (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
-+                      obj->parent->objectId != YAFFS_OBJECTID_DELETED))
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
-+                      tags->objectId, oh->parentObjectId, obj->parent->objectId));
--      if(tags->objectId > 1 && oh->name[0] == 0) /* Null name */
-+      if (tags->objectId > 1 && oh->name[0] == 0) /* Null name */
-               T(YAFFS_TRACE_VERIFY,
--              (TSTR("Obj %d header name is NULL"TENDSTR),
--               obj->objectId));
-+                      (TSTR("Obj %d header name is NULL"TENDSTR),
-+                      obj->objectId));
--      if(tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
-+      if (tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
-               T(YAFFS_TRACE_VERIFY,
--              (TSTR("Obj %d header name is 0xFF"TENDSTR),
--               obj->objectId));
-+                      (TSTR("Obj %d header name is 0xFF"TENDSTR),
-+                      obj->objectId));
- }
--static int yaffs_VerifyTnodeWorker(yaffs_Object * obj, yaffs_Tnode * tn,
--                                      __u32 level, int chunkOffset)
-+static int yaffs_VerifyTnodeWorker(yaffs_Object *obj, yaffs_Tnode *tn,
-+                                      __u32 level, int chunkOffset)
- {
-       int i;
-       yaffs_Device *dev = obj->myDev;
-       int ok = 1;
--      int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-       if (tn) {
-               if (level > 0) {
--                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
-+                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
-                               if (tn->internal[i]) {
-                                       ok = yaffs_VerifyTnodeWorker(obj,
-                                                       tn->internal[i],
-@@ -611,20 +616,19 @@ static int yaffs_VerifyTnodeWorker(yaffs
-                               }
-                       }
-               } else if (level == 0) {
--                      int i;
-                       yaffs_ExtendedTags tags;
-                       __u32 objectId = obj->objectId;
-                       chunkOffset <<=  YAFFS_TNODES_LEVEL0_BITS;
--                      for(i = 0; i < YAFFS_NTNODES_LEVEL0; i++){
--                              __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                      for (i = 0; i < YAFFS_NTNODES_LEVEL0; i++) {
-+                              __u32 theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
--                              if(theChunk > 0){
-+                              if (theChunk > 0) {
-                                       /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),tags.objectId,tags.chunkId,theChunk)); */
--                                      yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
--                                      if(tags.objectId != objectId || tags.chunkId != chunkOffset){
--                                              T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-+                                      yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, &tags);
-+                                      if (tags.objectId != objectId || tags.chunkId != chunkOffset) {
-+                                              T(~0, (TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-                                                       objectId, chunkOffset, theChunk,
-                                                       tags.objectId, tags.chunkId));
-                                       }
-@@ -646,13 +650,15 @@ static void yaffs_VerifyFile(yaffs_Objec
-       __u32 lastChunk;
-       __u32 x;
-       __u32 i;
--      int ok;
-       yaffs_Device *dev;
-       yaffs_ExtendedTags tags;
-       yaffs_Tnode *tn;
-       __u32 objectId;
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (!obj)
-+              return;
-+
-+      if (yaffs_SkipVerification(obj->myDev))
-               return;
-       dev = obj->myDev;
-@@ -662,17 +668,17 @@ static void yaffs_VerifyFile(yaffs_Objec
-       lastChunk =  obj->variant.fileVariant.fileSize / dev->nDataBytesPerChunk + 1;
-       x = lastChunk >> YAFFS_TNODES_LEVEL0_BITS;
-       requiredTallness = 0;
--      while (x> 0) {
-+      while (x > 0) {
-               x >>= YAFFS_TNODES_INTERNAL_BITS;
-               requiredTallness++;
-       }
-       actualTallness = obj->variant.fileVariant.topLevel;
--      if(requiredTallness > actualTallness )
-+      if (requiredTallness > actualTallness)
-               T(YAFFS_TRACE_VERIFY,
-               (TSTR("Obj %d had tnode tallness %d, needs to be %d"TENDSTR),
--               obj->objectId,actualTallness, requiredTallness));
-+               obj->objectId, actualTallness, requiredTallness));
-       /* Check that the chunks in the tnode tree are all correct.
-@@ -680,39 +686,31 @@ static void yaffs_VerifyFile(yaffs_Objec
-        * checking the tags for every chunk match.
-        */
--      if(yaffs_SkipNANDVerification(dev))
-+      if (yaffs_SkipNANDVerification(dev))
-               return;
--      for(i = 1; i <= lastChunk; i++){
--              tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant,i);
-+      for (i = 1; i <= lastChunk; i++) {
-+              tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant, i);
-               if (tn) {
--                      __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
--                      if(theChunk > 0){
-+                      __u32 theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-+                      if (theChunk > 0) {
-                               /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),objectId,i,theChunk)); */
--                              yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
--                              if(tags.objectId != objectId || tags.chunkId != i){
--                                      T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-+                              yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, &tags);
-+                              if (tags.objectId != objectId || tags.chunkId != i) {
-+                                      T(~0, (TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-                                               objectId, i, theChunk,
-                                               tags.objectId, tags.chunkId));
-                               }
-                       }
-               }
--
-       }
--
- }
--static void yaffs_VerifyDirectory(yaffs_Object *obj)
--{
--      if(obj && yaffs_SkipVerification(obj->myDev))
--              return;
--
--}
- static void yaffs_VerifyHardLink(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
-       /* Verify sane equivalent object */
-@@ -720,7 +718,7 @@ static void yaffs_VerifyHardLink(yaffs_O
- static void yaffs_VerifySymlink(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
-       /* Verify symlink string */
-@@ -728,7 +726,7 @@ static void yaffs_VerifySymlink(yaffs_Ob
- static void yaffs_VerifySpecial(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
- }
-@@ -740,14 +738,19 @@ static void yaffs_VerifyObject(yaffs_Obj
-       __u32 chunkMax;
-       __u32 chunkIdOk;
--      __u32 chunkIsLive;
-+      __u32 chunkInRange;
-+      __u32 chunkShouldNotBeDeleted;
-+      __u32 chunkValid;
-+
-+      if (!obj)
-+              return;
--      if(!obj)
-+      if (obj->beingCreated)
-               return;
-       dev = obj->myDev;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Check sane object header chunk */
-@@ -755,50 +758,54 @@ static void yaffs_VerifyObject(yaffs_Obj
-       chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
-       chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
--      chunkIdOk = (obj->chunkId >= chunkMin && obj->chunkId <= chunkMax);
--      chunkIsLive = chunkIdOk &&
-+      chunkInRange = (((unsigned)(obj->hdrChunk)) >= chunkMin && ((unsigned)(obj->hdrChunk)) <= chunkMax);
-+      chunkIdOk = chunkInRange || obj->hdrChunk == 0;
-+      chunkValid = chunkInRange &&
-                       yaffs_CheckChunkBit(dev,
--                                          obj->chunkId / dev->nChunksPerBlock,
--                                          obj->chunkId % dev->nChunksPerBlock);
--      if(!obj->fake &&
--          (!chunkIdOk || !chunkIsLive)) {
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
--         obj->objectId,obj->chunkId,
--         chunkIdOk ? "" : ",out of range",
--         chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
-+                                      obj->hdrChunk / dev->nChunksPerBlock,
-+                                      obj->hdrChunk % dev->nChunksPerBlock);
-+      chunkShouldNotBeDeleted = chunkInRange && !chunkValid;
-+
-+      if (!obj->fake &&
-+                      (!chunkIdOk || chunkShouldNotBeDeleted)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
-+                      obj->objectId, obj->hdrChunk,
-+                      chunkIdOk ? "" : ",out of range",
-+                      chunkShouldNotBeDeleted ? ",marked as deleted" : ""));
-       }
--      if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
-+      if (chunkValid && !yaffs_SkipNANDVerification(dev)) {
-               yaffs_ExtendedTags tags;
-               yaffs_ObjectHeader *oh;
--              __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
-+              __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-               oh = (yaffs_ObjectHeader *)buffer;
--              yaffs_ReadChunkWithTagsFromNAND(dev, obj->chunkId,buffer, &tags);
-+              yaffs_ReadChunkWithTagsFromNAND(dev, obj->hdrChunk, buffer,
-+                              &tags);
--              yaffs_VerifyObjectHeader(obj,oh,&tags,1);
-+              yaffs_VerifyObjectHeader(obj, oh, &tags, 1);
--              yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
-+              yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-       }
-       /* Verify it has a parent */
--      if(obj && !obj->fake &&
--         (!obj->parent || obj->parent->myDev != dev)){
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
--         obj->objectId,obj->parent));
-+      if (obj && !obj->fake &&
-+                      (!obj->parent || obj->parent->myDev != dev)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
-+                      obj->objectId, obj->parent));
-       }
-       /* Verify parent is a directory */
--      if(obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY){
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
--         obj->objectId,obj->parent->variantType));
-+      if (obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
-+                      obj->objectId, obj->parent->variantType));
-       }
--      switch(obj->variantType){
-+      switch (obj->variantType) {
-       case YAFFS_OBJECT_TYPE_FILE:
-               yaffs_VerifyFile(obj);
-               break;
-@@ -818,33 +825,30 @@ static void yaffs_VerifyObject(yaffs_Obj
-       default:
-               T(YAFFS_TRACE_VERIFY,
-               (TSTR("Obj %d has illegaltype %d"TENDSTR),
--              obj->objectId,obj->variantType));
-+              obj->objectId, obj->variantType));
-               break;
-       }
--
--
- }
- static void yaffs_VerifyObjects(yaffs_Device *dev)
- {
-       yaffs_Object *obj;
-       int i;
--      struct list_head *lh;
-+      struct ylist_head *lh;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Iterate through the objects in each hash entry */
--       for(i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++){
--              list_for_each(lh, &dev->objectBucket[i].list) {
-+      for (i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++) {
-+              ylist_for_each(lh, &dev->objectBucket[i].list) {
-                       if (lh) {
--                              obj = list_entry(lh, yaffs_Object, hashLink);
-+                              obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               yaffs_VerifyObject(obj);
-                       }
-               }
--       }
--
-+      }
- }
-@@ -855,19 +859,20 @@ static void yaffs_VerifyObjects(yaffs_De
- static Y_INLINE int yaffs_HashFunction(int n)
- {
-       n = abs(n);
--      return (n % YAFFS_NOBJECT_BUCKETS);
-+      return n % YAFFS_NOBJECT_BUCKETS;
- }
- /*
-- * Access functions to useful fake objects
-+ * Access functions to useful fake objects.
-+ * Note that root might have a presence in NAND if permissions are set.
-  */
--yaffs_Object *yaffs_Root(yaffs_Device * dev)
-+yaffs_Object *yaffs_Root(yaffs_Device *dev)
- {
-       return dev->rootDir;
- }
--yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
-+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev)
- {
-       return dev->lostNFoundDir;
- }
-@@ -877,7 +882,7 @@ yaffs_Object *yaffs_LostNFound(yaffs_Dev
-  *  Erased NAND checking functions
-  */
--int yaffs_CheckFF(__u8 * buffer, int nBytes)
-+int yaffs_CheckFF(__u8 *buffer, int nBytes)
- {
-       /* Horrible, slow implementation */
-       while (nBytes--) {
-@@ -889,9 +894,8 @@ int yaffs_CheckFF(__u8 * buffer, int nBy
- }
- static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND)
-+                              int chunkInNAND)
- {
--
-       int retval = YAFFS_OK;
-       __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
-       yaffs_ExtendedTags tags;
-@@ -899,10 +903,9 @@ static int yaffs_CheckChunkErased(struct
-       result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
--      if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
-+      if (tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
-               retval = YAFFS_FAIL;
--
-       if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
-               T(YAFFS_TRACE_NANDACCESS,
-                 (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
-@@ -915,11 +918,10 @@ static int yaffs_CheckChunkErased(struct
- }
--
- static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
--                                           const __u8 * data,
--                                           yaffs_ExtendedTags * tags,
--                                           int useReserve)
-+                                      const __u8 *data,
-+                                      yaffs_ExtendedTags *tags,
-+                                      int useReserve)
- {
-       int attempts = 0;
-       int writeOk = 0;
-@@ -972,7 +974,7 @@ static int yaffs_WriteNewChunkWithTagsTo
-                       erasedOk = yaffs_CheckChunkErased(dev, chunk);
-                       if (erasedOk != YAFFS_OK) {
-                               T(YAFFS_TRACE_ERROR,
--                              (TSTR ("**>> yaffs chunk %d was not erased"
-+                              (TSTR("**>> yaffs chunk %d was not erased"
-                               TENDSTR), chunk));
-                               /* try another chunk */
-@@ -992,7 +994,11 @@ static int yaffs_WriteNewChunkWithTagsTo
-               /* Copy the data into the robustification buffer */
-               yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
--      } while (writeOk != YAFFS_OK && attempts < yaffs_wr_attempts);
-+      } while (writeOk != YAFFS_OK &&
-+              (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
-+
-+      if (!writeOk)
-+              chunk = -1;
-       if (attempts > 1) {
-               T(YAFFS_TRACE_ERROR,
-@@ -1009,13 +1015,35 @@ static int yaffs_WriteNewChunkWithTagsTo
-  * Block retiring for handling a broken block.
-  */
--static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
-+static void yaffs_RetireBlock(yaffs_Device *dev, int blockInNAND)
- {
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
-       yaffs_InvalidateCheckpoint(dev);
--      yaffs_MarkBlockBad(dev, blockInNAND);
-+      if (yaffs_MarkBlockBad(dev, blockInNAND) != YAFFS_OK) {
-+              if (yaffs_EraseBlockInNAND(dev, blockInNAND) != YAFFS_OK) {
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR(
-+                              "yaffs: Failed to mark bad and erase block %d"
-+                              TENDSTR), blockInNAND));
-+              } else {
-+                      yaffs_ExtendedTags tags;
-+                      int chunkId = blockInNAND * dev->nChunksPerBlock;
-+
-+                      __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-+
-+                      memset(buffer, 0xff, dev->nDataBytesPerChunk);
-+                      yaffs_InitialiseTags(&tags);
-+                      tags.sequenceNumber = YAFFS_SEQUENCE_BAD_BLOCK;
-+                      if (dev->writeChunkWithTagsToNAND(dev, chunkId -
-+                              dev->chunkOffset, buffer, &tags) != YAFFS_OK)
-+                              T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Failed to "
-+                                      TCONT("write bad block marker to block %d")
-+                                      TENDSTR), blockInNAND));
-+
-+                      yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-+              }
-+      }
-       bi->blockState = YAFFS_BLOCK_STATE_DEAD;
-       bi->gcPrioritise = 0;
-@@ -1029,49 +1057,45 @@ static void yaffs_RetireBlock(yaffs_Devi
-  *
-  */
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_ExtendedTags * tags)
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags)
- {
- }
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_ExtendedTags * tags)
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                              const yaffs_ExtendedTags *tags)
- {
- }
- void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
- {
--      if(!bi->gcPrioritise){
-+      if (!bi->gcPrioritise) {
-               bi->gcPrioritise = 1;
-               dev->hasPendingPrioritisedGCs = 1;
--              bi->chunkErrorStrikes ++;
-+              bi->chunkErrorStrikes++;
--              if(bi->chunkErrorStrikes > 3){
-+              if (bi->chunkErrorStrikes > 3) {
-                       bi->needsRetiring = 1; /* Too many stikes, so retire this */
-                       T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
-               }
--
-       }
- }
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND,
-+              int erasedOk)
- {
--
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
--      yaffs_HandleChunkError(dev,bi);
-+      yaffs_HandleChunkError(dev, bi);
--
--      if(erasedOk ) {
-+      if (erasedOk) {
-               /* Was an actual write failure, so mark the block for retirement  */
-               bi->needsRetiring = 1;
-               T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
-                 (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
--
--
-       }
-       /* Delete the chunk */
-@@ -1081,12 +1105,12 @@ static void yaffs_HandleWriteChunkError(
- /*---------------- Name handling functions ------------*/
--static __u16 yaffs_CalcNameSum(const YCHAR * name)
-+static __u16 yaffs_CalcNameSum(const YCHAR *name)
- {
-       __u16 sum = 0;
-       __u16 i = 1;
--      YUCHAR *bname = (YUCHAR *) name;
-+      const YUCHAR *bname = (const YUCHAR *) name;
-       if (bname) {
-               while ((*bname) && (i < (YAFFS_MAX_NAME_LENGTH/2))) {
-@@ -1102,14 +1126,14 @@ static __u16 yaffs_CalcNameSum(const YCH
-       return sum;
- }
--static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
-+static void yaffs_SetObjectName(yaffs_Object *obj, const YCHAR *name)
- {
- #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
--      if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
-+      memset(obj->shortName, 0, sizeof(YCHAR) * (YAFFS_SHORT_NAME_LENGTH+1));
-+      if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH)
-               yaffs_strcpy(obj->shortName, name);
--      } else {
-+      else
-               obj->shortName[0] = _Y('\0');
--      }
- #endif
-       obj->sum = yaffs_CalcNameSum(name);
- }
-@@ -1126,7 +1150,7 @@ static void yaffs_SetObjectName(yaffs_Ob
-  * Don't use this function directly
-  */
--static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
-+static int yaffs_CreateTnodes(yaffs_Device *dev, int nTnodes)
- {
-       int i;
-       int tnodeSize;
-@@ -1143,6 +1167,9 @@ static int yaffs_CreateTnodes(yaffs_Devi
-        * Must be a multiple of 32-bits  */
-       tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-       /* make these things */
-       newTnodes = YMALLOC(nTnodes * tnodeSize);
-@@ -1150,7 +1177,7 @@ static int yaffs_CreateTnodes(yaffs_Devi
-       if (!newTnodes) {
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
-+                      (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
-               return YAFFS_FAIL;
-       }
-@@ -1170,7 +1197,7 @@ static int yaffs_CreateTnodes(yaffs_Devi
-       dev->freeTnodes = newTnodes;
- #else
-       /* New hookup for wide tnodes */
--      for(i = 0; i < nTnodes -1; i++) {
-+      for (i = 0; i < nTnodes - 1; i++) {
-               curr = (yaffs_Tnode *) &mem[i * tnodeSize];
-               next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
-               curr->internal[0] = next;
-@@ -1197,7 +1224,6 @@ static int yaffs_CreateTnodes(yaffs_Devi
-                 (TSTR
-                  ("yaffs: Could not add tnodes to management list" TENDSTR)));
-                  return YAFFS_FAIL;
--
-       } else {
-               tnl->tnodes = newTnodes;
-               tnl->next = dev->allocatedTnodeList;
-@@ -1211,14 +1237,13 @@ static int yaffs_CreateTnodes(yaffs_Devi
- /* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
--static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
-+static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device *dev)
- {
-       yaffs_Tnode *tn = NULL;
-       /* If there are none left make more */
--      if (!dev->freeTnodes) {
-+      if (!dev->freeTnodes)
-               yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
--      }
-       if (dev->freeTnodes) {
-               tn = dev->freeTnodes;
-@@ -1233,21 +1258,27 @@ static yaffs_Tnode *yaffs_GetTnodeRaw(ya
-               dev->nFreeTnodes--;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
-+
-       return tn;
- }
--static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
-+static yaffs_Tnode *yaffs_GetTnode(yaffs_Device *dev)
- {
-       yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
--      if(tn)
--              memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-+      if (tn)
-+              memset(tn, 0, tnodeSize);
-       return tn;
- }
- /* FreeTnode frees up a tnode and puts it back on the free list */
--static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
-+static void yaffs_FreeTnode(yaffs_Device *dev, yaffs_Tnode *tn)
- {
-       if (tn) {
- #ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
-@@ -1262,9 +1293,10 @@ static void yaffs_FreeTnode(yaffs_Device
-               dev->freeTnodes = tn;
-               dev->nFreeTnodes++;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
- }
--static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
-+static void yaffs_DeinitialiseTnodes(yaffs_Device *dev)
- {
-       /* Free the list of allocated tnodes */
-       yaffs_TnodeList *tmp;
-@@ -1282,71 +1314,72 @@ static void yaffs_DeinitialiseTnodes(yaf
-       dev->nFreeTnodes = 0;
- }
--static void yaffs_InitialiseTnodes(yaffs_Device * dev)
-+static void yaffs_InitialiseTnodes(yaffs_Device *dev)
- {
-       dev->allocatedTnodeList = NULL;
-       dev->freeTnodes = NULL;
-       dev->nFreeTnodes = 0;
-       dev->nTnodesCreated = 0;
--
- }
--void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
-+void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos,
-+              unsigned val)
- {
--  __u32 *map = (__u32 *)tn;
--  __u32 bitInMap;
--  __u32 bitInWord;
--  __u32 wordInMap;
--  __u32 mask;
-+      __u32 *map = (__u32 *)tn;
-+      __u32 bitInMap;
-+      __u32 bitInWord;
-+      __u32 wordInMap;
-+      __u32 mask;
--  pos &= YAFFS_TNODES_LEVEL0_MASK;
--  val >>= dev->chunkGroupBits;
-+      pos &= YAFFS_TNODES_LEVEL0_MASK;
-+      val >>= dev->chunkGroupBits;
--  bitInMap = pos * dev->tnodeWidth;
--  wordInMap = bitInMap /32;
--  bitInWord = bitInMap & (32 -1);
-+      bitInMap = pos * dev->tnodeWidth;
-+      wordInMap = bitInMap / 32;
-+      bitInWord = bitInMap & (32 - 1);
--  mask = dev->tnodeMask << bitInWord;
-+      mask = dev->tnodeMask << bitInWord;
--  map[wordInMap] &= ~mask;
--  map[wordInMap] |= (mask & (val << bitInWord));
-+      map[wordInMap] &= ~mask;
-+      map[wordInMap] |= (mask & (val << bitInWord));
--  if(dev->tnodeWidth > (32-bitInWord)) {
--    bitInWord = (32 - bitInWord);
--    wordInMap++;;
--    mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
--    map[wordInMap] &= ~mask;
--    map[wordInMap] |= (mask & (val >> bitInWord));
--  }
-+      if (dev->tnodeWidth > (32 - bitInWord)) {
-+              bitInWord = (32 - bitInWord);
-+              wordInMap++;;
-+              mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
-+              map[wordInMap] &= ~mask;
-+              map[wordInMap] |= (mask & (val >> bitInWord));
-+      }
- }
--static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
-+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn,
-+              unsigned pos)
- {
--  __u32 *map = (__u32 *)tn;
--  __u32 bitInMap;
--  __u32 bitInWord;
--  __u32 wordInMap;
--  __u32 val;
-+      __u32 *map = (__u32 *)tn;
-+      __u32 bitInMap;
-+      __u32 bitInWord;
-+      __u32 wordInMap;
-+      __u32 val;
--  pos &= YAFFS_TNODES_LEVEL0_MASK;
-+      pos &= YAFFS_TNODES_LEVEL0_MASK;
--  bitInMap = pos * dev->tnodeWidth;
--  wordInMap = bitInMap /32;
--  bitInWord = bitInMap & (32 -1);
-+      bitInMap = pos * dev->tnodeWidth;
-+      wordInMap = bitInMap / 32;
-+      bitInWord = bitInMap & (32 - 1);
--  val = map[wordInMap] >> bitInWord;
-+      val = map[wordInMap] >> bitInWord;
--  if(dev->tnodeWidth > (32-bitInWord)) {
--    bitInWord = (32 - bitInWord);
--    wordInMap++;;
--    val |= (map[wordInMap] << bitInWord);
--  }
-+      if      (dev->tnodeWidth > (32 - bitInWord)) {
-+              bitInWord = (32 - bitInWord);
-+              wordInMap++;;
-+              val |= (map[wordInMap] << bitInWord);
-+      }
--  val &= dev->tnodeMask;
--  val <<= dev->chunkGroupBits;
-+      val &= dev->tnodeMask;
-+      val <<= dev->chunkGroupBits;
--  return val;
-+      return val;
- }
- /* ------------------- End of individual tnode manipulation -----------------*/
-@@ -1357,24 +1390,21 @@ static __u32 yaffs_GetChunkGroupBase(yaf
-  */
- /* FindLevel0Tnode finds the level 0 tnode, if one exists. */
--static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
--                                        yaffs_FileStructure * fStruct,
--                                        __u32 chunkId)
-+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId)
- {
--
-       yaffs_Tnode *tn = fStruct->top;
-       __u32 i;
-       int requiredTallness;
-       int level = fStruct->topLevel;
-       /* Check sane level and chunk Id */
--      if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
-+      if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL)
-               return NULL;
--      }
--      if (chunkId > YAFFS_MAX_CHUNK_ID) {
-+      if (chunkId > YAFFS_MAX_CHUNK_ID)
-               return NULL;
--      }
-       /* First check we're tall enough (ie enough topLevel) */
-@@ -1385,22 +1415,17 @@ static yaffs_Tnode *yaffs_FindLevel0Tnod
-               requiredTallness++;
-       }
--      if (requiredTallness > fStruct->topLevel) {
--              /* Not tall enough, so we can't find it, return NULL. */
--              return NULL;
--      }
-+      if (requiredTallness > fStruct->topLevel)
-+              return NULL; /* Not tall enough, so we can't find it */
-       /* Traverse down to level 0 */
-       while (level > 0 && tn) {
--              tn = tn->
--                  internal[(chunkId >>
--                             ( YAFFS_TNODES_LEVEL0_BITS +
--                               (level - 1) *
--                               YAFFS_TNODES_INTERNAL_BITS)
--                            ) &
--                           YAFFS_TNODES_INTERNAL_MASK];
-+              tn = tn->internal[(chunkId >>
-+                      (YAFFS_TNODES_LEVEL0_BITS +
-+                              (level - 1) *
-+                              YAFFS_TNODES_INTERNAL_BITS)) &
-+                      YAFFS_TNODES_INTERNAL_MASK];
-               level--;
--
-       }
-       return tn;
-@@ -1417,12 +1442,11 @@ static yaffs_Tnode *yaffs_FindLevel0Tnod
-  *  be plugged into the ttree.
-  */
--static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
--                                             yaffs_FileStructure * fStruct,
--                                             __u32 chunkId,
--                                             yaffs_Tnode *passedTn)
-+static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId,
-+                                      yaffs_Tnode *passedTn)
- {
--
-       int requiredTallness;
-       int i;
-       int l;
-@@ -1432,13 +1456,11 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       /* Check sane level and page Id */
--      if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
-+      if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL)
-               return NULL;
--      }
--      if (chunkId > YAFFS_MAX_CHUNK_ID) {
-+      if (chunkId > YAFFS_MAX_CHUNK_ID)
-               return NULL;
--      }
-       /* First check we're tall enough (ie enough topLevel) */
-@@ -1451,7 +1473,7 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       if (requiredTallness > fStruct->topLevel) {
--              /* Not tall enough,gotta make the tree taller */
-+              /* Not tall enough, gotta make the tree taller */
-               for (i = fStruct->topLevel; i < requiredTallness; i++) {
-                       tn = yaffs_GetTnode(dev);
-@@ -1473,27 +1495,27 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       l = fStruct->topLevel;
-       tn = fStruct->top;
--      if(l > 0) {
-+      if (l > 0) {
-               while (l > 0 && tn) {
-                       x = (chunkId >>
--                           ( YAFFS_TNODES_LEVEL0_BITS +
-+                           (YAFFS_TNODES_LEVEL0_BITS +
-                             (l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
-                           YAFFS_TNODES_INTERNAL_MASK;
--                      if((l>1) && !tn->internal[x]){
-+                      if ((l > 1) && !tn->internal[x]) {
-                               /* Add missing non-level-zero tnode */
-                               tn->internal[x] = yaffs_GetTnode(dev);
--                      } else if(l == 1) {
-+                      } else if (l == 1) {
-                               /* Looking from level 1 at level 0 */
--                              if (passedTn) {
-+                              if (passedTn) {
-                                       /* If we already have one, then release it.*/
--                                      if(tn->internal[x])
--                                              yaffs_FreeTnode(dev,tn->internal[x]);
-+                                      if (tn->internal[x])
-+                                              yaffs_FreeTnode(dev, tn->internal[x]);
-                                       tn->internal[x] = passedTn;
--                              } else if(!tn->internal[x]) {
-+                              } else if (!tn->internal[x]) {
-                                       /* Don't have one, none passed in */
-                                       tn->internal[x] = yaffs_GetTnode(dev);
-                               }
-@@ -1504,31 +1526,29 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-               }
-       } else {
-               /* top is level 0 */
--              if(passedTn) {
--                      memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
--                      yaffs_FreeTnode(dev,passedTn);
-+              if (passedTn) {
-+                      memcpy(tn, passedTn, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+                      yaffs_FreeTnode(dev, passedTn);
-               }
-       }
-       return tn;
- }
--static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
--                                yaffs_ExtendedTags * tags, int objectId,
--                                int chunkInInode)
-+static int yaffs_FindChunkInGroup(yaffs_Device *dev, int theChunk,
-+                              yaffs_ExtendedTags *tags, int objectId,
-+                              int chunkInInode)
- {
-       int j;
-       for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
--              if (yaffs_CheckChunkBit
--                  (dev, theChunk / dev->nChunksPerBlock,
--                   theChunk % dev->nChunksPerBlock)) {
-+              if (yaffs_CheckChunkBit(dev, theChunk / dev->nChunksPerBlock,
-+                              theChunk % dev->nChunksPerBlock)) {
-                       yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
-                                                       tags);
-                       if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
-                               /* found it; */
-                               return theChunk;
--
-                       }
-               }
-               theChunk++;
-@@ -1543,7 +1563,7 @@ static int yaffs_FindChunkInGroup(yaffs_
-  * Returns 0 if it stopped early due to hitting the limit and the delete is incomplete.
-  */
--static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
-+static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level,
-                             int chunkOffset, int *limit)
- {
-       int i;
-@@ -1557,7 +1577,6 @@ static int yaffs_DeleteWorker(yaffs_Obje
-       if (tn) {
-               if (level > 0) {
--
-                       for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
-                            i--) {
-                               if (tn->internal[i]) {
-@@ -1565,17 +1584,17 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               allDone = 0;
-                                       } else {
-                                               allDone =
--                                                  yaffs_DeleteWorker(in,
--                                                                     tn->
--                                                                     internal
--                                                                     [i],
--                                                                     level -
--                                                                     1,
--                                                                     (chunkOffset
-+                                                      yaffs_DeleteWorker(in,
-+                                                              tn->
-+                                                              internal
-+                                                              [i],
-+                                                              level -
-+                                                              1,
-+                                                              (chunkOffset
-                                                                       <<
-                                                                       YAFFS_TNODES_INTERNAL_BITS)
--                                                                     + i,
--                                                                     limit);
-+                                                              + i,
-+                                                              limit);
-                                       }
-                                       if (allDone) {
-                                               yaffs_FreeTnode(dev,
-@@ -1584,27 +1603,25 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               tn->internal[i] = NULL;
-                                       }
-                               }
--
-                       }
-                       return (allDone) ? 1 : 0;
-               } else if (level == 0) {
-                       int hitLimit = 0;
-                       for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0 && !hitLimit;
--                           i--) {
--                              theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                                      i--) {
-+                              theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-                               if (theChunk) {
--                                      chunkInInode =
--                                          (chunkOffset <<
--                                           YAFFS_TNODES_LEVEL0_BITS) + i;
-+                                      chunkInInode = (chunkOffset <<
-+                                              YAFFS_TNODES_LEVEL0_BITS) + i;
-                                       foundChunk =
--                                          yaffs_FindChunkInGroup(dev,
--                                                                 theChunk,
--                                                                 &tags,
--                                                                 in->objectId,
--                                                                 chunkInInode);
-+                                              yaffs_FindChunkInGroup(dev,
-+                                                              theChunk,
-+                                                              &tags,
-+                                                              in->objectId,
-+                                                              chunkInInode);
-                                       if (foundChunk > 0) {
-                                               yaffs_DeleteChunk(dev,
-@@ -1613,14 +1630,13 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               in->nDataChunks--;
-                                               if (limit) {
-                                                       *limit = *limit - 1;
--                                                      if (*limit <= 0) {
-+                                                      if (*limit <= 0)
-                                                               hitLimit = 1;
--                                                      }
-                                               }
-                                       }
--                                      yaffs_PutLevel0Tnode(dev,tn,i,0);
-+                                      yaffs_PutLevel0Tnode(dev, tn, i, 0);
-                               }
-                       }
-@@ -1634,9 +1650,8 @@ static int yaffs_DeleteWorker(yaffs_Obje
- }
--static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
-+static void yaffs_SoftDeleteChunk(yaffs_Device *dev, int chunk)
- {
--
-       yaffs_BlockInfo *theBlock;
-       T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
-@@ -1654,7 +1669,7 @@ static void yaffs_SoftDeleteChunk(yaffs_
-  * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
-  */
--static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
-+static int yaffs_SoftDeleteWorker(yaffs_Object *in, yaffs_Tnode *tn,
-                                 __u32 level, int chunkOffset)
- {
-       int i;
-@@ -1691,14 +1706,14 @@ static int yaffs_SoftDeleteWorker(yaffs_
-               } else if (level == 0) {
-                       for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
--                              theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                              theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-                               if (theChunk) {
-                                       /* Note this does not find the real chunk, only the chunk group.
-                                        * We make an assumption that a chunk group is not larger than
-                                        * a block.
-                                        */
-                                       yaffs_SoftDeleteChunk(dev, theChunk);
--                                      yaffs_PutLevel0Tnode(dev,tn,i,0);
-+                                      yaffs_PutLevel0Tnode(dev, tn, i, 0);
-                               }
-                       }
-@@ -1712,7 +1727,7 @@ static int yaffs_SoftDeleteWorker(yaffs_
- }
--static void yaffs_SoftDeleteFile(yaffs_Object * obj)
-+static void yaffs_SoftDeleteFile(yaffs_Object *obj)
- {
-       if (obj->deleted &&
-           obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
-@@ -1746,8 +1761,8 @@ static void yaffs_SoftDeleteFile(yaffs_O
-  * by a special case.
-  */
--static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
--                                    __u32 level, int del0)
-+static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device *dev, yaffs_Tnode *tn,
-+                              __u32 level, int del0)
- {
-       int i;
-       int hasData;
-@@ -1763,9 +1778,8 @@ static yaffs_Tnode *yaffs_PruneWorker(ya
-                                                     (i == 0) ? del0 : 1);
-                       }
--                      if (tn->internal[i]) {
-+                      if (tn->internal[i])
-                               hasData++;
--                      }
-               }
-               if (hasData == 0 && del0) {
-@@ -1781,8 +1795,8 @@ static yaffs_Tnode *yaffs_PruneWorker(ya
- }
--static int yaffs_PruneFileStructure(yaffs_Device * dev,
--                                  yaffs_FileStructure * fStruct)
-+static int yaffs_PruneFileStructure(yaffs_Device *dev,
-+                              yaffs_FileStructure *fStruct)
- {
-       int i;
-       int hasData;
-@@ -1805,9 +1819,8 @@ static int yaffs_PruneFileStructure(yaff
-                       hasData = 0;
-                       for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
--                              if (tn->internal[i]) {
-+                              if (tn->internal[i])
-                                       hasData++;
--                              }
-                       }
-                       if (!hasData) {
-@@ -1828,7 +1841,7 @@ static int yaffs_PruneFileStructure(yaff
- /* yaffs_CreateFreeObjects creates a bunch more objects and
-  * adds them to the object free list.
-  */
--static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
-+static int yaffs_CreateFreeObjects(yaffs_Device *dev, int nObjects)
- {
-       int i;
-       yaffs_Object *newObjects;
-@@ -1842,9 +1855,9 @@ static int yaffs_CreateFreeObjects(yaffs
-       list = YMALLOC(sizeof(yaffs_ObjectList));
-       if (!newObjects || !list) {
--              if(newObjects)
-+              if (newObjects)
-                       YFREE(newObjects);
--              if(list)
-+              if (list)
-                       YFREE(list);
-               T(YAFFS_TRACE_ALLOCATE,
-                 (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
-@@ -1854,7 +1867,7 @@ static int yaffs_CreateFreeObjects(yaffs
-       /* Hook them into the free list */
-       for (i = 0; i < nObjects - 1; i++) {
-               newObjects[i].siblings.next =
--                  (struct list_head *)(&newObjects[i + 1]);
-+                              (struct ylist_head *)(&newObjects[i + 1]);
-       }
-       newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
-@@ -1873,85 +1886,109 @@ static int yaffs_CreateFreeObjects(yaffs
- /* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
--static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
-+static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device *dev)
- {
-       yaffs_Object *tn = NULL;
-+#ifdef VALGRIND_TEST
-+      tn = YMALLOC(sizeof(yaffs_Object));
-+#else
-       /* If there are none left make more */
--      if (!dev->freeObjects) {
-+      if (!dev->freeObjects)
-               yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
--      }
-       if (dev->freeObjects) {
-               tn = dev->freeObjects;
-               dev->freeObjects =
--                  (yaffs_Object *) (dev->freeObjects->siblings.next);
-+                      (yaffs_Object *) (dev->freeObjects->siblings.next);
-               dev->nFreeObjects--;
--
-+      }
-+#endif
-+      if (tn) {
-               /* Now sweeten it up... */
-               memset(tn, 0, sizeof(yaffs_Object));
-+              tn->beingCreated = 1;
-+
-               tn->myDev = dev;
--              tn->chunkId = -1;
-+              tn->hdrChunk = 0;
-               tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
--              INIT_LIST_HEAD(&(tn->hardLinks));
--              INIT_LIST_HEAD(&(tn->hashLink));
--              INIT_LIST_HEAD(&tn->siblings);
-+              YINIT_LIST_HEAD(&(tn->hardLinks));
-+              YINIT_LIST_HEAD(&(tn->hashLink));
-+              YINIT_LIST_HEAD(&tn->siblings);
-+
-+
-+              /* Now make the directory sane */
-+              if (dev->rootDir) {
-+                      tn->parent = dev->rootDir;
-+                      ylist_add(&(tn->siblings), &dev->rootDir->variant.directoryVariant.children);
-+              }
-               /* Add it to the lost and found directory.
-                * NB Can't put root or lostNFound in lostNFound so
-                * check if lostNFound exists first
-                */
--              if (dev->lostNFoundDir) {
-+              if (dev->lostNFoundDir)
-                       yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
--              }
-+
-+              tn->beingCreated = 0;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
-+
-       return tn;
- }
--static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
-+static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device *dev, int number,
-                                              __u32 mode)
- {
-       yaffs_Object *obj =
-           yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
-       if (obj) {
--              obj->fake = 1;          /* it is fake so it has no NAND presence... */
-+              obj->fake = 1;          /* it is fake so it might have no NAND presence... */
-               obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
-               obj->unlinkAllowed = 0; /* ... or unlink it */
-               obj->deleted = 0;
-               obj->unlinked = 0;
-               obj->yst_mode = mode;
-               obj->myDev = dev;
--              obj->chunkId = 0;       /* Not a valid chunk. */
-+              obj->hdrChunk = 0;      /* Not a valid chunk. */
-       }
-       return obj;
- }
--static void yaffs_UnhashObject(yaffs_Object * tn)
-+static void yaffs_UnhashObject(yaffs_Object *tn)
- {
-       int bucket;
-       yaffs_Device *dev = tn->myDev;
-       /* If it is still linked into the bucket list, free from the list */
--      if (!list_empty(&tn->hashLink)) {
--              list_del_init(&tn->hashLink);
-+      if (!ylist_empty(&tn->hashLink)) {
-+              ylist_del_init(&tn->hashLink);
-               bucket = yaffs_HashFunction(tn->objectId);
-               dev->objectBucket[bucket].count--;
-       }
--
- }
- /*  FreeObject frees up a Object and puts it back on the free list */
--static void yaffs_FreeObject(yaffs_Object * tn)
-+static void yaffs_FreeObject(yaffs_Object *tn)
- {
--
-       yaffs_Device *dev = tn->myDev;
--#ifdef  __KERNEL__
-+#ifdef __KERNEL__
-+      T(YAFFS_TRACE_OS, (TSTR("FreeObject %p inode %p"TENDSTR), tn, tn->myInode));
-+#endif
-+
-+      if (tn->parent)
-+              YBUG();
-+      if (!ylist_empty(&tn->siblings))
-+              YBUG();
-+
-+
-+#ifdef __KERNEL__
-       if (tn->myInode) {
-               /* We're still hooked up to a cached inode.
-                * Don't delete now, but mark for later deletion
-@@ -1963,24 +2000,28 @@ static void yaffs_FreeObject(yaffs_Objec
-       yaffs_UnhashObject(tn);
-+#ifdef VALGRIND_TEST
-+      YFREE(tn);
-+#else
-       /* Link into the free list. */
--      tn->siblings.next = (struct list_head *)(dev->freeObjects);
-+      tn->siblings.next = (struct ylist_head *)(dev->freeObjects);
-       dev->freeObjects = tn;
-       dev->nFreeObjects++;
-+#endif
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
- }
- #ifdef __KERNEL__
--void yaffs_HandleDeferedFree(yaffs_Object * obj)
-+void yaffs_HandleDeferedFree(yaffs_Object *obj)
- {
--      if (obj->deferedFree) {
-+      if (obj->deferedFree)
-               yaffs_FreeObject(obj);
--      }
- }
- #endif
--static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
-+static void yaffs_DeinitialiseObjects(yaffs_Device *dev)
- {
-       /* Free the list of allocated Objects */
-@@ -1998,7 +2039,7 @@ static void yaffs_DeinitialiseObjects(ya
-       dev->nFreeObjects = 0;
- }
--static void yaffs_InitialiseObjects(yaffs_Device * dev)
-+static void yaffs_InitialiseObjects(yaffs_Device *dev)
- {
-       int i;
-@@ -2007,15 +2048,14 @@ static void yaffs_InitialiseObjects(yaff
-       dev->nFreeObjects = 0;
-       for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
--              INIT_LIST_HEAD(&dev->objectBucket[i].list);
-+              YINIT_LIST_HEAD(&dev->objectBucket[i].list);
-               dev->objectBucket[i].count = 0;
-       }
--
- }
--static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
-+static int yaffs_FindNiceObjectBucket(yaffs_Device *dev)
- {
--      static int x = 0;
-+      static int x;
-       int i;
-       int l = 999;
-       int lowest = 999999;
-@@ -2049,7 +2089,7 @@ static int yaffs_FindNiceObjectBucket(ya
-       return l;
- }
--static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
-+static int yaffs_CreateNewObjectNumber(yaffs_Device *dev)
- {
-       int bucket = yaffs_FindNiceObjectBucket(dev);
-@@ -2058,7 +2098,7 @@ static int yaffs_CreateNewObjectNumber(y
-        */
-       int found = 0;
--      struct list_head *i;
-+      struct ylist_head *i;
-       __u32 n = (__u32) bucket;
-@@ -2068,41 +2108,38 @@ static int yaffs_CreateNewObjectNumber(y
-               found = 1;
-               n += YAFFS_NOBJECT_BUCKETS;
-               if (1 || dev->objectBucket[bucket].count > 0) {
--                      list_for_each(i, &dev->objectBucket[bucket].list) {
-+                      ylist_for_each(i, &dev->objectBucket[bucket].list) {
-                               /* If there is already one in the list */
--                              if (i
--                                  && list_entry(i, yaffs_Object,
--                                                hashLink)->objectId == n) {
-+                              if (i && ylist_entry(i, yaffs_Object,
-+                                              hashLink)->objectId == n) {
-                                       found = 0;
-                               }
-                       }
-               }
-       }
--
-       return n;
- }
--static void yaffs_HashObject(yaffs_Object * in)
-+static void yaffs_HashObject(yaffs_Object *in)
- {
-       int bucket = yaffs_HashFunction(in->objectId);
-       yaffs_Device *dev = in->myDev;
--      list_add(&in->hashLink, &dev->objectBucket[bucket].list);
-+      ylist_add(&in->hashLink, &dev->objectBucket[bucket].list);
-       dev->objectBucket[bucket].count++;
--
- }
--yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
-+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev, __u32 number)
- {
-       int bucket = yaffs_HashFunction(number);
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *in;
--      list_for_each(i, &dev->objectBucket[bucket].list) {
-+      ylist_for_each(i, &dev->objectBucket[bucket].list) {
-               /* Look if it is in the list */
-               if (i) {
--                      in = list_entry(i, yaffs_Object, hashLink);
-+                      in = ylist_entry(i, yaffs_Object, hashLink);
-                       if (in->objectId == number) {
- #ifdef __KERNEL__
-                               /* Don't tell the VFS about this one if it is defered free */
-@@ -2118,31 +2155,27 @@ yaffs_Object *yaffs_FindObjectByNumber(y
-       return NULL;
- }
--yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
-+yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
-                                   yaffs_ObjectType type)
- {
--
-       yaffs_Object *theObject;
--      yaffs_Tnode *tn;
-+      yaffs_Tnode *tn = NULL;
--      if (number < 0) {
-+      if (number < 0)
-               number = yaffs_CreateNewObjectNumber(dev);
--      }
-       theObject = yaffs_AllocateEmptyObject(dev);
--      if(!theObject)
-+      if (!theObject)
-               return NULL;
--      if(type == YAFFS_OBJECT_TYPE_FILE){
-+      if (type == YAFFS_OBJECT_TYPE_FILE) {
-               tn = yaffs_GetTnode(dev);
--              if(!tn){
-+              if (!tn) {
-                       yaffs_FreeObject(theObject);
-                       return NULL;
-               }
-       }
--
--
-       if (theObject) {
-               theObject->fake = 0;
-               theObject->renameAllowed = 1;
-@@ -2171,8 +2204,8 @@ yaffs_Object *yaffs_CreateNewObject(yaff
-                       theObject->variant.fileVariant.top = tn;
-                       break;
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
--                      INIT_LIST_HEAD(&theObject->variant.directoryVariant.
--                                     children);
-+                      YINIT_LIST_HEAD(&theObject->variant.directoryVariant.
-+                                      children);
-                       break;
-               case YAFFS_OBJECT_TYPE_SYMLINK:
-               case YAFFS_OBJECT_TYPE_HARDLINK:
-@@ -2188,32 +2221,30 @@ yaffs_Object *yaffs_CreateNewObject(yaff
-       return theObject;
- }
--static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
-+static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device *dev,
-                                                     int number,
-                                                     yaffs_ObjectType type)
- {
-       yaffs_Object *theObject = NULL;
--      if (number > 0) {
-+      if (number > 0)
-               theObject = yaffs_FindObjectByNumber(dev, number);
--      }
--      if (!theObject) {
-+      if (!theObject)
-               theObject = yaffs_CreateNewObject(dev, number, type);
--      }
-       return theObject;
- }
--static YCHAR *yaffs_CloneString(const YCHAR * str)
-+static YCHAR *yaffs_CloneString(const YCHAR *str)
- {
-       YCHAR *newStr = NULL;
-       if (str && *str) {
-               newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
--              if(newStr)
-+              if (newStr)
-                       yaffs_strcpy(newStr, str);
-       }
-@@ -2229,29 +2260,31 @@ static YCHAR *yaffs_CloneString(const YC
-  */
- static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
--                                     yaffs_Object * parent,
--                                     const YCHAR * name,
-+                                     yaffs_Object *parent,
-+                                     const YCHAR *name,
-                                      __u32 mode,
-                                      __u32 uid,
-                                      __u32 gid,
--                                     yaffs_Object * equivalentObject,
--                                     const YCHAR * aliasString, __u32 rdev)
-+                                     yaffs_Object *equivalentObject,
-+                                     const YCHAR *aliasString, __u32 rdev)
- {
-       yaffs_Object *in;
--      YCHAR *str;
-+      YCHAR *str = NULL;
-       yaffs_Device *dev = parent->myDev;
-       /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
--      if (yaffs_FindObjectByName(parent, name)) {
-+      if (yaffs_FindObjectByName(parent, name))
-               return NULL;
--      }
-       in = yaffs_CreateNewObject(dev, -1, type);
--      if(type == YAFFS_OBJECT_TYPE_SYMLINK){
-+      if (!in)
-+              return YAFFS_FAIL;
-+
-+      if (type == YAFFS_OBJECT_TYPE_SYMLINK) {
-               str = yaffs_CloneString(aliasString);
--              if(!str){
-+              if (!str) {
-                       yaffs_FreeObject(in);
-                       return NULL;
-               }
-@@ -2260,7 +2293,7 @@ static yaffs_Object *yaffs_MknodObject(y
-       if (in) {
--              in->chunkId = -1;
-+              in->hdrChunk = 0;
-               in->valid = 1;
-               in->variantType = type;
-@@ -2293,10 +2326,10 @@ static yaffs_Object *yaffs_MknodObject(y
-                       break;
-               case YAFFS_OBJECT_TYPE_HARDLINK:
-                       in->variant.hardLinkVariant.equivalentObject =
--                          equivalentObject;
-+                              equivalentObject;
-                       in->variant.hardLinkVariant.equivalentObjectId =
--                          equivalentObject->objectId;
--                      list_add(&in->hardLinks, &equivalentObject->hardLinks);
-+                              equivalentObject->objectId;
-+                      ylist_add(&in->hardLinks, &equivalentObject->hardLinks);
-                       break;
-               case YAFFS_OBJECT_TYPE_FILE:
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -2308,7 +2341,7 @@ static yaffs_Object *yaffs_MknodObject(y
-               if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
-                       /* Could not create the object header, fail the creation */
--                      yaffs_DestroyObject(in);
-+                      yaffs_DeleteObject(in);
-                       in = NULL;
-               }
-@@ -2317,38 +2350,38 @@ static yaffs_Object *yaffs_MknodObject(y
-       return in;
- }
--yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
--                            __u32 mode, __u32 uid, __u32 gid)
-+yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name,
-+                      __u32 mode, __u32 uid, __u32 gid)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
--                               uid, gid, NULL, NULL, 0);
-+                              uid, gid, NULL, NULL, 0);
- }
--yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
--                                 __u32 mode, __u32 uid, __u32 gid)
-+yaffs_Object *yaffs_MknodDirectory(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
-                                mode, uid, gid, NULL, NULL, 0);
- }
--yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
--                               __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
-+yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
-                                uid, gid, NULL, NULL, rdev);
- }
--yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
--                               __u32 mode, __u32 uid, __u32 gid,
--                               const YCHAR * alias)
-+yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid,
-+                              const YCHAR *alias)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
--                               uid, gid, NULL, alias, 0);
-+                              uid, gid, NULL, alias, 0);
- }
- /* yaffs_Link returns the object id of the equivalent object.*/
--yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
--                       yaffs_Object * equivalentObject)
-+yaffs_Object *yaffs_Link(yaffs_Object *parent, const YCHAR *name,
-+                      yaffs_Object *equivalentObject)
- {
-       /* Get the real object in case we were fed a hard link as an equivalent object */
-       equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
-@@ -2363,33 +2396,31 @@ yaffs_Object *yaffs_Link(yaffs_Object * 
- }
--static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
--                                const YCHAR * newName, int force, int shadows)
-+static int yaffs_ChangeObjectName(yaffs_Object *obj, yaffs_Object *newDir,
-+                              const YCHAR *newName, int force, int shadows)
- {
-       int unlinkOp;
-       int deleteOp;
-       yaffs_Object *existingTarget;
--      if (newDir == NULL) {
-+      if (newDir == NULL)
-               newDir = obj->parent;   /* use the old directory */
--      }
-       if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
--                 ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
-+                 ("tragedy: yaffs_ChangeObjectName: newDir is not a directory"
-                   TENDSTR)));
-               YBUG();
-       }
-       /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
--      if (obj->myDev->isYaffs2) {
-+      if (obj->myDev->isYaffs2)
-               unlinkOp = (newDir == obj->myDev->unlinkedDir);
--      } else {
-+      else
-               unlinkOp = (newDir == obj->myDev->unlinkedDir
-                           && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
--      }
-       deleteOp = (newDir == obj->myDev->deletedDir);
-@@ -2415,40 +2446,40 @@ static int yaffs_ChangeObjectName(yaffs_
-                       obj->unlinked = 1;
-               /* If it is a deletion then we mark it as a shrink for gc purposes. */
--              if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
-+              if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows) >= 0)
-                       return YAFFS_OK;
-       }
-       return YAFFS_FAIL;
- }
--int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
--                     yaffs_Object * newDir, const YCHAR * newName)
-+int yaffs_RenameObject(yaffs_Object *oldDir, const YCHAR *oldName,
-+              yaffs_Object *newDir, const YCHAR *newName)
- {
--      yaffs_Object *obj;
--      yaffs_Object *existingTarget;
-+      yaffs_Object *obj = NULL;
-+      yaffs_Object *existingTarget = NULL;
-       int force = 0;
-+
-+      if (!oldDir || oldDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-+              YBUG();
-+      if (!newDir || newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-+              YBUG();
-+
- #ifdef CONFIG_YAFFS_CASE_INSENSITIVE
-       /* Special case for case insemsitive systems (eg. WinCE).
-        * While look-up is case insensitive, the name isn't.
-        * Therefore we might want to change x.txt to X.txt
-       */
--      if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
-+      if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0)
-               force = 1;
--      }
- #endif
-+      else if (yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
-+              /* ENAMETOOLONG */
-+              return YAFFS_FAIL;
-+
-       obj = yaffs_FindObjectByName(oldDir, oldName);
--      /* Check new name to long. */
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
--          yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
--        /* ENAMETOOLONG */
--        return YAFFS_FAIL;
--      else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
--               yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
--        /* ENAMETOOLONG */
--        return YAFFS_FAIL;
-       if (obj && obj->renameAllowed) {
-@@ -2456,8 +2487,8 @@ int yaffs_RenameObject(yaffs_Object * ol
-               existingTarget = yaffs_FindObjectByName(newDir, newName);
-               if (existingTarget &&
--                  existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
--                  !list_empty(&existingTarget->variant.directoryVariant.children)) {
-+                      existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-+                      !ylist_empty(&existingTarget->variant.directoryVariant.children)) {
-                       /* There is a target that is a non-empty directory, so we fail */
-                       return YAFFS_FAIL;      /* EEXIST or ENOTEMPTY */
-               } else if (existingTarget && existingTarget != obj) {
-@@ -2465,7 +2496,7 @@ int yaffs_RenameObject(yaffs_Object * ol
-                        * but only if it isn't the same object
-                        */
-                       yaffs_ChangeObjectName(obj, newDir, newName, force,
--                                             existingTarget->objectId);
-+                                              existingTarget->objectId);
-                       yaffs_UnlinkObject(existingTarget);
-               }
-@@ -2476,7 +2507,7 @@ int yaffs_RenameObject(yaffs_Object * ol
- /*------------------------- Block Management and Page Allocation ----------------*/
--static int yaffs_InitialiseBlocks(yaffs_Device * dev)
-+static int yaffs_InitialiseBlocks(yaffs_Device *dev)
- {
-       int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-@@ -2487,23 +2518,20 @@ static int yaffs_InitialiseBlocks(yaffs_
-       /* If the first allocation strategy fails, thry the alternate one */
-       dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
--      if(!dev->blockInfo){
-+      if (!dev->blockInfo) {
-               dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
-               dev->blockInfoAlt = 1;
--      }
--      else
-+      } else
-               dev->blockInfoAlt = 0;
--      if(dev->blockInfo){
--
-+      if (dev->blockInfo) {
-               /* Set up dynamic blockinfo stuff. */
-               dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
-               dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
--              if(!dev->chunkBits){
-+              if (!dev->chunkBits) {
-                       dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
-                       dev->chunkBitsAlt = 1;
--              }
--              else
-+              } else
-                       dev->chunkBitsAlt = 0;
-       }
-@@ -2514,30 +2542,29 @@ static int yaffs_InitialiseBlocks(yaffs_
-       }
-       return YAFFS_FAIL;
--
- }
--static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
-+static void yaffs_DeinitialiseBlocks(yaffs_Device *dev)
- {
--      if(dev->blockInfoAlt && dev->blockInfo)
-+      if (dev->blockInfoAlt && dev->blockInfo)
-               YFREE_ALT(dev->blockInfo);
--      else if(dev->blockInfo)
-+      else if (dev->blockInfo)
-               YFREE(dev->blockInfo);
-       dev->blockInfoAlt = 0;
-       dev->blockInfo = NULL;
--      if(dev->chunkBitsAlt && dev->chunkBits)
-+      if (dev->chunkBitsAlt && dev->chunkBits)
-               YFREE_ALT(dev->chunkBits);
--      else if(dev->chunkBits)
-+      else if (dev->chunkBits)
-               YFREE(dev->chunkBits);
-       dev->chunkBitsAlt = 0;
-       dev->chunkBits = NULL;
- }
--static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
--                                          yaffs_BlockInfo * bi)
-+static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device *dev,
-+                                      yaffs_BlockInfo *bi)
- {
-       int i;
-       __u32 seq;
-@@ -2556,7 +2583,7 @@ static int yaffs_BlockNotDisqualifiedFro
-               seq = dev->sequenceNumber;
-               for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
--                   i++) {
-+                              i++) {
-                       b = yaffs_GetBlockInfo(dev, i);
-                       if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
-                           (b->pagesInUse - b->softDeletions) <
-@@ -2571,38 +2598,36 @@ static int yaffs_BlockNotDisqualifiedFro
-        * discarded pages.
-        */
-       return (bi->sequenceNumber <= dev->oldestDirtySequence);
--
- }
- /* FindDiretiestBlock is used to select the dirtiest block (or close enough)
-  * for garbage collection.
-  */
--static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
--                                             int aggressive)
-+static int yaffs_FindBlockForGarbageCollection(yaffs_Device *dev,
-+                                      int aggressive)
- {
--
-       int b = dev->currentDirtyChecker;
-       int i;
-       int iterations;
-       int dirtiest = -1;
-       int pagesInUse = 0;
--      int prioritised=0;
-+      int prioritised = 0;
-       yaffs_BlockInfo *bi;
-       int pendingPrioritisedExist = 0;
-       /* First let's see if we need to grab a prioritised block */
--      if(dev->hasPendingPrioritisedGCs){
--              for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
-+      if (dev->hasPendingPrioritisedGCs) {
-+              for (i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++) {
-                       bi = yaffs_GetBlockInfo(dev, i);
--                      //yaffs_VerifyBlock(dev,bi,i);
-+                      /* yaffs_VerifyBlock(dev,bi,i); */
--                      if(bi->gcPrioritise) {
-+                      if (bi->gcPrioritise) {
-                               pendingPrioritisedExist = 1;
--                              if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
--                                 yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
-+                              if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
-+                                 yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-                                       pagesInUse = (bi->pagesInUse - bi->softDeletions);
-                                       dirtiest = i;
-                                       prioritised = 1;
-@@ -2611,7 +2636,7 @@ static int yaffs_FindBlockForGarbageColl
-                       }
-               }
--              if(!pendingPrioritisedExist) /* None found, so we can clear this */
-+              if (!pendingPrioritisedExist) /* None found, so we can clear this */
-                       dev->hasPendingPrioritisedGCs = 0;
-       }
-@@ -2623,31 +2648,28 @@ static int yaffs_FindBlockForGarbageColl
-       dev->nonAggressiveSkip--;
--      if (!aggressive && (dev->nonAggressiveSkip > 0)) {
-+      if (!aggressive && (dev->nonAggressiveSkip > 0))
-               return -1;
--      }
--      if(!prioritised)
-+      if (!prioritised)
-               pagesInUse =
--                      (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
-+                      (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
--      if (aggressive) {
-+      if (aggressive)
-               iterations =
-                   dev->internalEndBlock - dev->internalStartBlock + 1;
--      } else {
-+      else {
-               iterations =
-                   dev->internalEndBlock - dev->internalStartBlock + 1;
-               iterations = iterations / 16;
--              if (iterations > 200) {
-+              if (iterations > 200)
-                       iterations = 200;
--              }
-       }
-       for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
-               b++;
--              if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
-+              if (b < dev->internalStartBlock || b > dev->internalEndBlock)
-                       b = dev->internalStartBlock;
--              }
-               if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
-                       T(YAFFS_TRACE_ERROR,
-@@ -2657,17 +2679,9 @@ static int yaffs_FindBlockForGarbageColl
-               bi = yaffs_GetBlockInfo(dev, b);
--#if 0
--              if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
--                      dirtiest = b;
--                      pagesInUse = 0;
--              }
--              else
--#endif
--
-               if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
--                     (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
--                      yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-+                      (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
-+                              yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-                       dirtiest = b;
-                       pagesInUse = (bi->pagesInUse - bi->softDeletions);
-               }
-@@ -2678,19 +2692,18 @@ static int yaffs_FindBlockForGarbageColl
-       if (dirtiest > 0) {
-               T(YAFFS_TRACE_GC,
-                 (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
--                 dev->nChunksPerBlock - pagesInUse,prioritised));
-+                 dev->nChunksPerBlock - pagesInUse, prioritised));
-       }
-       dev->oldestDirtySequence = 0;
--      if (dirtiest > 0) {
-+      if (dirtiest > 0)
-               dev->nonAggressiveSkip = 4;
--      }
-       return dirtiest;
- }
--static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
-+static void yaffs_BlockBecameDirty(yaffs_Device *dev, int blockNo)
- {
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
-@@ -2752,7 +2765,7 @@ static void yaffs_BlockBecameDirty(yaffs
-       }
- }
--static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
-+static int yaffs_FindBlockForAllocation(yaffs_Device *dev)
- {
-       int i;
-@@ -2763,7 +2776,7 @@ static int yaffs_FindBlockForAllocation(
-                * Can't get space to gc
-                */
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
-+                (TSTR("yaffs tragedy: no more erased blocks" TENDSTR)));
-               return -1;
-       }
-@@ -2794,31 +2807,74 @@ static int yaffs_FindBlockForAllocation(
-       T(YAFFS_TRACE_ALWAYS,
-         (TSTR
--         ("yaffs tragedy: no more eraased blocks, but there should have been %d"
-+         ("yaffs tragedy: no more erased blocks, but there should have been %d"
-           TENDSTR), dev->nErasedBlocks));
-       return -1;
- }
--// Check if there's space to allocate...
--// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
--static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
-+
-+static int yaffs_CalcCheckpointBlocksRequired(yaffs_Device *dev)
-+{
-+      if (!dev->nCheckpointBlocksRequired &&
-+         dev->isYaffs2) {
-+              /* Not a valid value so recalculate */
-+              int nBytes = 0;
-+              int nBlocks;
-+              int devBlocks = (dev->endBlock - dev->startBlock + 1);
-+              int tnodeSize;
-+
-+              tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+
-+              if (tnodeSize < sizeof(yaffs_Tnode))
-+                      tnodeSize = sizeof(yaffs_Tnode);
-+
-+              nBytes += sizeof(yaffs_CheckpointValidity);
-+              nBytes += sizeof(yaffs_CheckpointDevice);
-+              nBytes += devBlocks * sizeof(yaffs_BlockInfo);
-+              nBytes += devBlocks * dev->chunkBitmapStride;
-+              nBytes += (sizeof(yaffs_CheckpointObject) + sizeof(__u32)) * (dev->nObjectsCreated - dev->nFreeObjects);
-+              nBytes += (tnodeSize + sizeof(__u32)) * (dev->nTnodesCreated - dev->nFreeTnodes);
-+              nBytes += sizeof(yaffs_CheckpointValidity);
-+              nBytes += sizeof(__u32); /* checksum*/
-+
-+              /* Round up and add 2 blocks to allow for some bad blocks, so add 3 */
-+
-+              nBlocks = (nBytes/(dev->nDataBytesPerChunk * dev->nChunksPerBlock)) + 3;
-+
-+              dev->nCheckpointBlocksRequired = nBlocks;
-+      }
-+
-+      return dev->nCheckpointBlocksRequired;
-+}
-+
-+/*
-+ * Check if there's space to allocate...
-+ * Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
-+ */
-+static int yaffs_CheckSpaceForAllocation(yaffs_Device *dev)
- {
-       int reservedChunks;
-       int reservedBlocks = dev->nReservedBlocks;
-       int checkpointBlocks;
--      checkpointBlocks =  dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
--      if(checkpointBlocks < 0)
-+      if (dev->isYaffs2) {
-+              checkpointBlocks =  yaffs_CalcCheckpointBlocksRequired(dev) -
-+                                  dev->blocksInCheckpoint;
-+              if (checkpointBlocks < 0)
-+                      checkpointBlocks = 0;
-+      } else {
-               checkpointBlocks = 0;
-+      }
-       reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
-       return (dev->nFreeChunks > reservedChunks);
- }
--static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
-+static int yaffs_AllocateChunk(yaffs_Device *dev, int useReserve,
-+              yaffs_BlockInfo **blockUsedPtr)
- {
-       int retVal;
-       yaffs_BlockInfo *bi;
-@@ -2835,7 +2891,7 @@ static int yaffs_AllocateChunk(yaffs_Dev
-       }
-       if (dev->nErasedBlocks < dev->nReservedBlocks
--          && dev->allocationPage == 0) {
-+                      && dev->allocationPage == 0) {
-               T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
-       }
-@@ -2844,10 +2900,10 @@ static int yaffs_AllocateChunk(yaffs_Dev
-               bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
-               retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
--                  dev->allocationPage;
-+                      dev->allocationPage;
-               bi->pagesInUse++;
-               yaffs_SetChunkBit(dev, dev->allocationBlock,
--                                dev->allocationPage);
-+                              dev->allocationPage);
-               dev->allocationPage++;
-@@ -2859,43 +2915,43 @@ static int yaffs_AllocateChunk(yaffs_Dev
-                       dev->allocationBlock = -1;
-               }
--              if(blockUsedPtr)
-+              if (blockUsedPtr)
-                       *blockUsedPtr = bi;
-               return retVal;
-       }
-       T(YAFFS_TRACE_ERROR,
--        (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-+                      (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-       return -1;
- }
--static int yaffs_GetErasedChunks(yaffs_Device * dev)
-+static int yaffs_GetErasedChunks(yaffs_Device *dev)
- {
-       int n;
-       n = dev->nErasedBlocks * dev->nChunksPerBlock;
--      if (dev->allocationBlock > 0) {
-+      if (dev->allocationBlock > 0)
-               n += (dev->nChunksPerBlock - dev->allocationPage);
--      }
-       return n;
- }
--static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
-+static int yaffs_GarbageCollectBlock(yaffs_Device *dev, int block,
-+              int wholeBlock)
- {
-       int oldChunk;
-       int newChunk;
--      int chunkInBlock;
-       int markNAND;
-       int retVal = YAFFS_OK;
-       int cleanups = 0;
-       int i;
-       int isCheckpointBlock;
-       int matchingChunk;
-+      int maxCopies;
-       int chunksBefore = yaffs_GetErasedChunks(dev);
-       int chunksAfter;
-@@ -2911,8 +2967,11 @@ static int yaffs_GarbageCollectBlock(yaf
-       bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
-       T(YAFFS_TRACE_TRACING,
--        (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
--         bi->pagesInUse, bi->hasShrinkHeader));
-+                      (TSTR("Collecting block %d, in use %d, shrink %d, wholeBlock %d" TENDSTR),
-+                       block,
-+                       bi->pagesInUse,
-+                       bi->hasShrinkHeader,
-+                       wholeBlock));
-       /*yaffs_VerifyFreeChunks(dev); */
-@@ -2926,26 +2985,33 @@ static int yaffs_GarbageCollectBlock(yaf
-       dev->isDoingGC = 1;
-       if (isCheckpointBlock ||
--          !yaffs_StillSomeChunkBits(dev, block)) {
-+                      !yaffs_StillSomeChunkBits(dev, block)) {
-               T(YAFFS_TRACE_TRACING,
--                (TSTR
--                 ("Collecting block %d that has no chunks in use" TENDSTR),
--                 block));
-+                              (TSTR
-+                               ("Collecting block %d that has no chunks in use" TENDSTR),
-+                               block));
-               yaffs_BlockBecameDirty(dev, block);
-       } else {
-               __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
--              yaffs_VerifyBlock(dev,bi,block);
-+              yaffs_VerifyBlock(dev, bi, block);
--              for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
--                   chunkInBlock < dev->nChunksPerBlock
--                   && yaffs_StillSomeChunkBits(dev, block);
--                   chunkInBlock++, oldChunk++) {
--                      if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
-+              maxCopies = (wholeBlock) ? dev->nChunksPerBlock : 10;
-+              oldChunk = block * dev->nChunksPerBlock + dev->gcChunk;
-+
-+              for (/* init already done */;
-+                   retVal == YAFFS_OK &&
-+                   dev->gcChunk < dev->nChunksPerBlock &&
-+                   (bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) &&
-+                   maxCopies > 0;
-+                   dev->gcChunk++, oldChunk++) {
-+                      if (yaffs_CheckChunkBit(dev, block, dev->gcChunk)) {
-                               /* This page is in use and might need to be copied off */
-+                              maxCopies--;
-+
-                               markNAND = 1;
-                               yaffs_InitialiseTags(&tags);
-@@ -2959,22 +3025,22 @@ static int yaffs_GarbageCollectBlock(yaf
-                               T(YAFFS_TRACE_GC_DETAIL,
-                                 (TSTR
--                                 ("Collecting page %d, %d %d %d " TENDSTR),
--                                 chunkInBlock, tags.objectId, tags.chunkId,
-+                                 ("Collecting chunk in block %d, %d %d %d " TENDSTR),
-+                                 dev->gcChunk, tags.objectId, tags.chunkId,
-                                  tags.byteCount));
--                              if(object && !yaffs_SkipVerification(dev)){
--                                      if(tags.chunkId == 0)
--                                              matchingChunk = object->chunkId;
--                                      else if(object->softDeleted)
-+                              if (object && !yaffs_SkipVerification(dev)) {
-+                                      if (tags.chunkId == 0)
-+                                              matchingChunk = object->hdrChunk;
-+                                      else if (object->softDeleted)
-                                               matchingChunk = oldChunk; /* Defeat the test */
-                                       else
--                                              matchingChunk = yaffs_FindChunkInFile(object,tags.chunkId,NULL);
-+                                              matchingChunk = yaffs_FindChunkInFile(object, tags.chunkId, NULL);
--                                      if(oldChunk != matchingChunk)
-+                                      if (oldChunk != matchingChunk)
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR("gc: page in gc mismatch: %d %d %d %d"TENDSTR),
--                                                oldChunk,matchingChunk,tags.objectId, tags.chunkId));
-+                                                oldChunk, matchingChunk, tags.objectId, tags.chunkId));
-                               }
-@@ -2986,9 +3052,11 @@ static int yaffs_GarbageCollectBlock(yaf
-                                           tags.objectId, tags.chunkId, tags.byteCount));
-                               }
--                              if (object && object->deleted
--                                  && tags.chunkId != 0) {
--                                      /* Data chunk in a deleted file, throw it away
-+                              if (object &&
-+                                  object->deleted &&
-+                                  object->softDeleted &&
-+                                  tags.chunkId != 0) {
-+                                      /* Data chunk in a soft deleted file, throw it away
-                                        * It's a soft deleted data chunk,
-                                        * No need to copy this, just forget about it and
-                                        * fix up the object.
-@@ -3003,13 +3071,12 @@ static int yaffs_GarbageCollectBlock(yaf
-                                               cleanups++;
-                                       }
-                                       markNAND = 0;
--                              } else if (0
--                                         /* Todo object && object->deleted && object->nDataChunks == 0 */
--                                         ) {
-+                              } else if (0) {
-+                                      /* Todo object && object->deleted && object->nDataChunks == 0 */
-                                       /* Deleted object header with no data chunks.
-                                        * Can be discarded and the file deleted.
-                                        */
--                                      object->chunkId = 0;
-+                                      object->hdrChunk = 0;
-                                       yaffs_FreeTnode(object->myDev,
-                                                       object->variant.
-                                                       fileVariant.top);
-@@ -3031,17 +3098,14 @@ static int yaffs_GarbageCollectBlock(yaf
-                                                * We need to nuke the shrinkheader flags first
-                                                * We no longer want the shrinkHeader flag since its work is done
-                                                * and if it is left in place it will mess up scanning.
--                                               * Also, clear out any shadowing stuff
-                                                */
-                                               yaffs_ObjectHeader *oh;
-                                               oh = (yaffs_ObjectHeader *)buffer;
-                                               oh->isShrink = 0;
--                                              oh->shadowsObject = -1;
--                                              tags.extraShadows = 0;
-                                               tags.extraIsShrinkHeader = 0;
--                                              yaffs_VerifyObjectHeader(object,oh,&tags,1);
-+                                              yaffs_VerifyObjectHeader(object, oh, &tags, 1);
-                                       }
-                                       newChunk =
-@@ -3055,7 +3119,7 @@ static int yaffs_GarbageCollectBlock(yaf
-                                               if (tags.chunkId == 0) {
-                                                       /* It's a header */
--                                                      object->chunkId =  newChunk;
-+                                                      object->hdrChunk =  newChunk;
-                                                       object->serial =   tags.serialNumber;
-                                               } else {
-                                                       /* It's a data chunk */
-@@ -3067,7 +3131,8 @@ static int yaffs_GarbageCollectBlock(yaf
-                                       }
-                               }
--                              yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-+                              if (retVal == YAFFS_OK)
-+                                      yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-                       }
-               }
-@@ -3098,18 +3163,25 @@ static int yaffs_GarbageCollectBlock(yaf
-       }
--      yaffs_VerifyCollectedBlock(dev,bi,block);
-+      yaffs_VerifyCollectedBlock(dev, bi, block);
--      if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
-+      chunksAfter = yaffs_GetErasedChunks(dev);
-+      if (chunksBefore >= chunksAfter) {
-               T(YAFFS_TRACE_GC,
-                 (TSTR
-                  ("gc did not increase free chunks before %d after %d"
-                   TENDSTR), chunksBefore, chunksAfter));
-       }
-+      /* If the gc completed then clear the current gcBlock so that we find another. */
-+      if (bi->blockState != YAFFS_BLOCK_STATE_COLLECTING) {
-+              dev->gcBlock = -1;
-+              dev->gcChunk = 0;
-+      }
-+
-       dev->isDoingGC = 0;
--      return YAFFS_OK;
-+      return retVal;
- }
- /* New garbage collector
-@@ -3121,7 +3193,7 @@ static int yaffs_GarbageCollectBlock(yaf
-  * The idea is to help clear out space in a more spread-out manner.
-  * Dunno if it really does anything useful.
-  */
--static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
-+static int yaffs_CheckGarbageCollection(yaffs_Device *dev)
- {
-       int block;
-       int aggressive;
-@@ -3142,8 +3214,8 @@ static int yaffs_CheckGarbageCollection(
-       do {
-               maxTries++;
--              checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
--              if(checkpointBlockAdjust < 0)
-+              checkpointBlockAdjust = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
-+              if (checkpointBlockAdjust < 0)
-                       checkpointBlockAdjust = 0;
-               if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust + 2)) {
-@@ -3154,20 +3226,24 @@ static int yaffs_CheckGarbageCollection(
-                       aggressive = 0;
-               }
--              block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-+              if (dev->gcBlock <= 0) {
-+                      dev->gcBlock = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-+                      dev->gcChunk = 0;
-+              }
-+
-+              block = dev->gcBlock;
-               if (block > 0) {
-                       dev->garbageCollections++;
--                      if (!aggressive) {
-+                      if (!aggressive)
-                               dev->passiveGarbageCollections++;
--                      }
-                       T(YAFFS_TRACE_GC,
-                         (TSTR
-                          ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
-                          dev->nErasedBlocks, aggressive));
--                      gcOk = yaffs_GarbageCollectBlock(dev, block);
-+                      gcOk = yaffs_GarbageCollectBlock(dev, block, aggressive);
-               }
-               if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
-@@ -3176,15 +3252,16 @@ static int yaffs_CheckGarbageCollection(
-                          ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
-                           TENDSTR), dev->nErasedBlocks, maxTries, block));
-               }
--      } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
--               && (maxTries < 2));
-+      } while ((dev->nErasedBlocks < dev->nReservedBlocks) &&
-+               (block > 0) &&
-+               (maxTries < 2));
-       return aggressive ? gcOk : YAFFS_OK;
- }
- /*-------------------------  TAGS --------------------------------*/
--static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
-+static int yaffs_TagsMatch(const yaffs_ExtendedTags *tags, int objectId,
-                          int chunkInObject)
- {
-       return (tags->chunkId == chunkInObject &&
-@@ -3195,8 +3272,8 @@ static int yaffs_TagsMatch(const yaffs_E
- /*-------------------- Data file manipulation -----------------*/
--static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
--                               yaffs_ExtendedTags * tags)
-+static int yaffs_FindChunkInFile(yaffs_Object *in, int chunkInInode,
-+                               yaffs_ExtendedTags *tags)
- {
-       /*Get the Tnode, then get the level 0 offset chunk offset */
-       yaffs_Tnode *tn;
-@@ -3214,7 +3291,7 @@ static int yaffs_FindChunkInFile(yaffs_O
-       tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
-       if (tn) {
--              theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+              theChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-               retVal =
-                   yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
-@@ -3223,8 +3300,8 @@ static int yaffs_FindChunkInFile(yaffs_O
-       return retVal;
- }
--static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
--                                        yaffs_ExtendedTags * tags)
-+static int yaffs_FindAndDeleteChunkInFile(yaffs_Object *in, int chunkInInode,
-+                                        yaffs_ExtendedTags *tags)
- {
-       /* Get the Tnode, then get the level 0 offset chunk offset */
-       yaffs_Tnode *tn;
-@@ -3243,29 +3320,23 @@ static int yaffs_FindAndDeleteChunkInFil
-       if (tn) {
--              theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+              theChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-               retVal =
-                   yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
-                                          chunkInInode);
-               /* Delete the entry in the filestructure (if found) */
--              if (retVal != -1) {
--                      yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
--              }
--      } else {
--              /*T(("No level 0 found for %d\n", chunkInInode)); */
-+              if (retVal != -1)
-+                      yaffs_PutLevel0Tnode(dev, tn, chunkInInode, 0);
-       }
--      if (retVal == -1) {
--              /* T(("Could not find %d to delete\n",chunkInInode)); */
--      }
-       return retVal;
- }
- #ifdef YAFFS_PARANOID
--static int yaffs_CheckFileSanity(yaffs_Object * in)
-+static int yaffs_CheckFileSanity(yaffs_Object *in)
- {
-       int chunk;
-       int nChunks;
-@@ -3278,10 +3349,8 @@ static int yaffs_CheckFileSanity(yaffs_O
-       int theChunk;
-       int chunkDeleted;
--      if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
--              /* T(("Object not a file\n")); */
-+      if (in->variantType != YAFFS_OBJECT_TYPE_FILE)
-               return YAFFS_FAIL;
--      }
-       objId = in->objectId;
-       fSize = in->variant.fileVariant.fileSize;
-@@ -3294,7 +3363,7 @@ static int yaffs_CheckFileSanity(yaffs_O
-               if (tn) {
--                      theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
-+                      theChunk = yaffs_GetChunkGroupBase(dev, tn, chunk);
-                       if (yaffs_CheckChunkBits
-                           (dev, theChunk / dev->nChunksPerBlock,
-@@ -3323,7 +3392,7 @@ static int yaffs_CheckFileSanity(yaffs_O
- #endif
--static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
-+static int yaffs_PutChunkIntoFile(yaffs_Object *in, int chunkInInode,
-                                 int chunkInNAND, int inScan)
- {
-       /* NB inScan is zero unless scanning.
-@@ -3358,11 +3427,10 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                                       &in->variant.fileVariant,
-                                       chunkInInode,
-                                       NULL);
--      if (!tn) {
-+      if (!tn)
-               return YAFFS_FAIL;
--      }
--      existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+      existingChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-       if (inScan != 0) {
-               /* If we're scanning then we need to test for duplicates
-@@ -3374,7 +3442,7 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
-                */
--              if (existingChunk != 0) {
-+              if (existingChunk > 0) {
-                       /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
-                        *    thus we have to do a FindChunkInFile to get the real chunk id.
-                        *
-@@ -3411,8 +3479,10 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                        * not be loaded during a scan
-                        */
--                      newSerial = newTags.serialNumber;
--                      existingSerial = existingTags.serialNumber;
-+                      if (inScan > 0) {
-+                              newSerial = newTags.serialNumber;
-+                              existingSerial = existingTags.serialNumber;
-+                      }
-                       if ((inScan > 0) &&
-                           (in->myDev->isYaffs2 ||
-@@ -3437,24 +3507,23 @@ static int yaffs_PutChunkIntoFile(yaffs_
-       }
--      if (existingChunk == 0) {
-+      if (existingChunk == 0)
-               in->nDataChunks++;
--      }
--      yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
-+      yaffs_PutLevel0Tnode(dev, tn, chunkInInode, chunkInNAND);
-       return YAFFS_OK;
- }
--static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
--                                       __u8 * buffer)
-+static int yaffs_ReadChunkDataFromObject(yaffs_Object *in, int chunkInInode,
-+                                      __u8 *buffer)
- {
-       int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
--      if (chunkInNAND >= 0) {
-+      if (chunkInNAND >= 0)
-               return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
--                                                     buffer,NULL);
--      } else {
-+                                              buffer, NULL);
-+      else {
-               T(YAFFS_TRACE_NANDACCESS,
-                 (TSTR("Chunk %d not found zero instead" TENDSTR),
-                  chunkInNAND));
-@@ -3465,7 +3534,7 @@ static int yaffs_ReadChunkDataFromObject
- }
--void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
-+void yaffs_DeleteChunk(yaffs_Device *dev, int chunkId, int markNAND, int lyn)
- {
-       int block;
-       int page;
-@@ -3475,16 +3544,15 @@ void yaffs_DeleteChunk(yaffs_Device * de
-       if (chunkId <= 0)
-               return;
--
-       dev->nDeletions++;
-       block = chunkId / dev->nChunksPerBlock;
-       page = chunkId % dev->nChunksPerBlock;
--      if(!yaffs_CheckChunkBit(dev,block,page))
-+      if (!yaffs_CheckChunkBit(dev, block, page))
-               T(YAFFS_TRACE_VERIFY,
--                      (TSTR("Deleting invalid chunk %d"TENDSTR),
--                       chunkId));
-+                      (TSTR("Deleting invalid chunk %d"TENDSTR),
-+                       chunkId));
-       bi = yaffs_GetBlockInfo(dev, block);
-@@ -3524,14 +3592,12 @@ void yaffs_DeleteChunk(yaffs_Device * de
-                       yaffs_BlockBecameDirty(dev, block);
-               }
--      } else {
--              /* T(("Bad news deleting chunk %d\n",chunkId)); */
-       }
- }
--static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
--                                      const __u8 * buffer, int nBytes,
-+static int yaffs_WriteChunkDataToObject(yaffs_Object *in, int chunkInInode,
-+                                      const __u8 *buffer, int nBytes,
-                                       int useReserve)
- {
-       /* Find old chunk Need to do this to get serial number
-@@ -3561,6 +3627,12 @@ static int yaffs_WriteChunkDataToObject(
-           (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
-       newTags.byteCount = nBytes;
-+      if (nBytes < 1 || nBytes > dev->totalBytesPerChunk) {
-+              T(YAFFS_TRACE_ERROR,
-+              (TSTR("Writing %d bytes to chunk!!!!!!!!!" TENDSTR), nBytes));
-+              YBUG();
-+      }
-+
-       newChunkId =
-           yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
-                                             useReserve);
-@@ -3568,11 +3640,9 @@ static int yaffs_WriteChunkDataToObject(
-       if (newChunkId >= 0) {
-               yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
--              if (prevChunkId >= 0) {
-+              if (prevChunkId >= 0)
-                       yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
--              }
--
-               yaffs_CheckFileSanity(in);
-       }
-       return newChunkId;
-@@ -3582,7 +3652,7 @@ static int yaffs_WriteChunkDataToObject(
- /* UpdateObjectHeader updates the header on NAND for an object.
-  * If name is not NULL, then that new name is used.
-  */
--int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
-+int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name, int force,
-                            int isShrink, int shadows)
- {
-@@ -3603,9 +3673,12 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-       yaffs_ObjectHeader *oh = NULL;
--      yaffs_strcpy(oldName,"silly old name");
-+      yaffs_strcpy(oldName, _Y("silly old name"));
--      if (!in->fake || force) {
-+
-+      if (!in->fake ||
-+              in == dev->rootDir || /* The rootDir should also be saved */
-+              force) {
-               yaffs_CheckGarbageCollection(dev);
-               yaffs_CheckObjectDetailsLoaded(in);
-@@ -3613,13 +3686,13 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
-               oh = (yaffs_ObjectHeader *) buffer;
--              prevChunkId = in->chunkId;
-+              prevChunkId = in->hdrChunk;
--              if (prevChunkId >= 0) {
-+              if (prevChunkId > 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
-                                                       buffer, &oldTags);
--                      yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
-+                      yaffs_VerifyObjectHeader(in, oh, &oldTags, 0);
-                       memcpy(oldName, oh->name, sizeof(oh->name));
-               }
-@@ -3628,7 +3701,7 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               oh->type = in->variantType;
-               oh->yst_mode = in->yst_mode;
--              oh->shadowsObject = shadows;
-+              oh->shadowsObject = oh->inbandShadowsObject = shadows;
- #ifdef CONFIG_YAFFS_WINCE
-               oh->win_atime[0] = in->win_atime[0];
-@@ -3645,20 +3718,18 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               oh->yst_ctime = in->yst_ctime;
-               oh->yst_rdev = in->yst_rdev;
- #endif
--              if (in->parent) {
-+              if (in->parent)
-                       oh->parentObjectId = in->parent->objectId;
--              } else {
-+              else
-                       oh->parentObjectId = 0;
--              }
-               if (name && *name) {
-                       memset(oh->name, 0, sizeof(oh->name));
-                       yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
--              } else if (prevChunkId>=0) {
-+              } else if (prevChunkId >= 0)
-                       memcpy(oh->name, oldName, sizeof(oh->name));
--              } else {
-+              else
-                       memset(oh->name, 0, sizeof(oh->name));
--              }
-               oh->isShrink = isShrink;
-@@ -3708,7 +3779,7 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
-               newTags.extraObjectType = in->variantType;
--              yaffs_VerifyObjectHeader(in,oh,&newTags,1);
-+              yaffs_VerifyObjectHeader(in, oh, &newTags, 1);
-               /* Create new chunk in NAND */
-               newChunkId =
-@@ -3717,20 +3788,20 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               if (newChunkId >= 0) {
--                      in->chunkId = newChunkId;
-+                      in->hdrChunk = newChunkId;
-                       if (prevChunkId >= 0) {
-                               yaffs_DeleteChunk(dev, prevChunkId, 1,
-                                                 __LINE__);
-                       }
--                      if(!yaffs_ObjectHasCachedWriteData(in))
-+                      if (!yaffs_ObjectHasCachedWriteData(in))
-                               in->dirty = 0;
-                       /* If this was a shrink, then mark the block that the chunk lives on */
-                       if (isShrink) {
-                               bi = yaffs_GetBlockInfo(in->myDev,
--                                                      newChunkId /in->myDev-> nChunksPerBlock);
-+                                      newChunkId / in->myDev->nChunksPerBlock);
-                               bi->hasShrinkHeader = 1;
-                       }
-@@ -3766,7 +3837,7 @@ static int yaffs_ObjectHasCachedWriteDat
-       yaffs_ChunkCache *cache;
-       int nCaches = obj->myDev->nShortOpCaches;
--      for(i = 0; i < nCaches; i++){
-+      for (i = 0; i < nCaches; i++) {
-               cache = &dev->srCache[i];
-               if (cache->object == obj &&
-                   cache->dirty)
-@@ -3777,7 +3848,7 @@ static int yaffs_ObjectHasCachedWriteDat
- }
--static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
-+static void yaffs_FlushFilesChunkCache(yaffs_Object *obj)
- {
-       yaffs_Device *dev = obj->myDev;
-       int lowest = -99;       /* Stop compiler whining. */
-@@ -3844,16 +3915,16 @@ void yaffs_FlushEntireDeviceCache(yaffs_
-        */
-       do {
-               obj = NULL;
--              for( i = 0; i < nCaches && !obj; i++) {
-+              for (i = 0; i < nCaches && !obj; i++) {
-                       if (dev->srCache[i].object &&
-                           dev->srCache[i].dirty)
-                               obj = dev->srCache[i].object;
-               }
--              if(obj)
-+              if (obj)
-                       yaffs_FlushFilesChunkCache(obj);
--      } while(obj);
-+      } while (obj);
- }
-@@ -3863,41 +3934,21 @@ void yaffs_FlushEntireDeviceCache(yaffs_
-  * Then look for the least recently used non-dirty one.
-  * Then look for the least recently used dirty one...., flush and look again.
-  */
--static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
-+static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device *dev)
- {
-       int i;
--      int usage;
--      int theOne;
-       if (dev->nShortOpCaches > 0) {
-               for (i = 0; i < dev->nShortOpCaches; i++) {
-                       if (!dev->srCache[i].object)
-                               return &dev->srCache[i];
-               }
-+      }
--              return NULL;
-+      return NULL;
-+}
--              theOne = -1;
--              usage = 0;      /* just to stop the compiler grizzling */
--
--              for (i = 0; i < dev->nShortOpCaches; i++) {
--                      if (!dev->srCache[i].dirty &&
--                          ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
--                           theOne < 0)) {
--                              usage = dev->srCache[i].lastUse;
--                              theOne = i;
--                      }
--              }
--
--
--              return theOne >= 0 ? &dev->srCache[theOne] : NULL;
--      } else {
--              return NULL;
--      }
--
--}
--
--static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
-+static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device *dev)
- {
-       yaffs_ChunkCache *cache;
-       yaffs_Object *theObj;
-@@ -3927,8 +3978,7 @@ static yaffs_ChunkCache *yaffs_GrabChunk
-                       for (i = 0; i < dev->nShortOpCaches; i++) {
-                               if (dev->srCache[i].object &&
-                                   !dev->srCache[i].locked &&
--                                  (dev->srCache[i].lastUse < usage || !cache))
--                              {
-+                                  (dev->srCache[i].lastUse < usage || !cache)) {
-                                       usage = dev->srCache[i].lastUse;
-                                       theObj = dev->srCache[i].object;
-                                       cache = &dev->srCache[i];
-@@ -3950,7 +4000,7 @@ static yaffs_ChunkCache *yaffs_GrabChunk
- }
- /* Find a cached chunk */
--static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
-+static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object *obj,
-                                             int chunkId)
- {
-       yaffs_Device *dev = obj->myDev;
-@@ -3969,7 +4019,7 @@ static yaffs_ChunkCache *yaffs_FindChunk
- }
- /* Mark the chunk for the least recently used algorithym */
--static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
-+static void yaffs_UseChunkCache(yaffs_Device *dev, yaffs_ChunkCache *cache,
-                               int isAWrite)
- {
-@@ -3977,9 +4027,9 @@ static void yaffs_UseChunkCache(yaffs_De
-               if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
-                       /* Reset the cache usages */
-                       int i;
--                      for (i = 1; i < dev->nShortOpCaches; i++) {
-+                      for (i = 1; i < dev->nShortOpCaches; i++)
-                               dev->srCache[i].lastUse = 0;
--                      }
-+
-                       dev->srLastUse = 0;
-               }
-@@ -3987,9 +4037,8 @@ static void yaffs_UseChunkCache(yaffs_De
-               cache->lastUse = dev->srLastUse;
--              if (isAWrite) {
-+              if (isAWrite)
-                       cache->dirty = 1;
--              }
-       }
- }
-@@ -3997,21 +4046,20 @@ static void yaffs_UseChunkCache(yaffs_De
-  * Do this when a whole page gets written,
-  * ie the short cache for this page is no longer valid.
-  */
--static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
-+static void yaffs_InvalidateChunkCache(yaffs_Object *object, int chunkId)
- {
-       if (object->myDev->nShortOpCaches > 0) {
-               yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
--              if (cache) {
-+              if (cache)
-                       cache->object = NULL;
--              }
-       }
- }
- /* Invalidate all the cache pages associated with this object
-  * Do this whenever ther file is deleted or resized.
-  */
--static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
-+static void yaffs_InvalidateWholeChunkCache(yaffs_Object *in)
- {
-       int i;
-       yaffs_Device *dev = in->myDev;
-@@ -4019,9 +4067,8 @@ static void yaffs_InvalidateWholeChunkCa
-       if (dev->nShortOpCaches > 0) {
-               /* Invalidate it. */
-               for (i = 0; i < dev->nShortOpCaches; i++) {
--                      if (dev->srCache[i].object == in) {
-+                      if (dev->srCache[i].object == in)
-                               dev->srCache[i].object = NULL;
--                      }
-               }
-       }
- }
-@@ -4029,18 +4076,18 @@ static void yaffs_InvalidateWholeChunkCa
- /*--------------------- Checkpointing --------------------*/
--static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
-+static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev, int head)
- {
-       yaffs_CheckpointValidity cp;
--      memset(&cp,0,sizeof(cp));
-+      memset(&cp, 0, sizeof(cp));
-       cp.structType = sizeof(cp);
-       cp.magic = YAFFS_MAGIC;
-       cp.version = YAFFS_CHECKPOINT_VERSION;
-       cp.head = (head) ? 1 : 0;
--      return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
-+      return (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp)) ?
-               1 : 0;
- }
-@@ -4049,9 +4096,9 @@ static int yaffs_ReadCheckpointValidityM
-       yaffs_CheckpointValidity cp;
-       int ok;
--      ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
--      if(ok)
-+      if (ok)
-               ok = (cp.structType == sizeof(cp)) &&
-                    (cp.magic == YAFFS_MAGIC) &&
-                    (cp.version == YAFFS_CHECKPOINT_VERSION) &&
-@@ -4100,21 +4147,21 @@ static int yaffs_WriteCheckpointDevice(y
-       int ok;
-       /* Write device runtime values*/
--      yaffs_DeviceToCheckpointDevice(&cp,dev);
-+      yaffs_DeviceToCheckpointDevice(&cp, dev);
-       cp.structType = sizeof(cp);
--      ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
-       /* Write block info */
--      if(ok) {
-+      if (ok) {
-               nBytes = nBlocks * sizeof(yaffs_BlockInfo);
--              ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
-+              ok = (yaffs_CheckpointWrite(dev, dev->blockInfo, nBytes) == nBytes);
-       }
-       /* Write chunk bits */
--      if(ok) {
-+      if (ok) {
-               nBytes = nBlocks * dev->chunkBitmapStride;
--              ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
-+              ok = (yaffs_CheckpointWrite(dev, dev->chunkBits, nBytes) == nBytes);
-       }
-       return   ok ? 1 : 0;
-@@ -4128,25 +4175,25 @@ static int yaffs_ReadCheckpointDevice(ya
-       int ok;
--      ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
--      if(!ok)
-+      ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
-+      if (!ok)
-               return 0;
--      if(cp.structType != sizeof(cp))
-+      if (cp.structType != sizeof(cp))
-               return 0;
--      yaffs_CheckpointDeviceToDevice(dev,&cp);
-+      yaffs_CheckpointDeviceToDevice(dev, &cp);
-       nBytes = nBlocks * sizeof(yaffs_BlockInfo);
--      ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
-+      ok = (yaffs_CheckpointRead(dev, dev->blockInfo, nBytes) == nBytes);
--      if(!ok)
-+      if (!ok)
-               return 0;
-       nBytes = nBlocks * dev->chunkBitmapStride;
--      ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
-+      ok = (yaffs_CheckpointRead(dev, dev->chunkBits, nBytes) == nBytes);
-       return ok ? 1 : 0;
- }
-@@ -4157,7 +4204,7 @@ static void yaffs_ObjectToCheckpointObje
-       cp->objectId = obj->objectId;
-       cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
--      cp->chunkId = obj->chunkId;
-+      cp->hdrChunk = obj->hdrChunk;
-       cp->variantType = obj->variantType;
-       cp->deleted = obj->deleted;
-       cp->softDeleted = obj->softDeleted;
-@@ -4168,20 +4215,28 @@ static void yaffs_ObjectToCheckpointObje
-       cp->serial = obj->serial;
-       cp->nDataChunks = obj->nDataChunks;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
--      else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-+      else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-               cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
- }
--static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
-+static int yaffs_CheckpointObjectToObject(yaffs_Object *obj, yaffs_CheckpointObject *cp)
- {
-       yaffs_Object *parent;
-+      if (obj->variantType != cp->variantType) {
-+              T(YAFFS_TRACE_ERROR, (TSTR("Checkpoint read object %d type %d "
-+                      TCONT("chunk %d does not match existing object type %d")
-+                      TENDSTR), cp->objectId, cp->variantType, cp->hdrChunk,
-+                      obj->variantType));
-+              return 0;
-+      }
-+
-       obj->objectId = cp->objectId;
--      if(cp->parentId)
-+      if (cp->parentId)
-               parent = yaffs_FindOrCreateObjectByNumber(
-                                       obj->myDev,
-                                       cp->parentId,
-@@ -4189,10 +4244,19 @@ static void yaffs_CheckpointObjectToObje
-       else
-               parent = NULL;
--      if(parent)
-+      if (parent) {
-+              if (parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR("Checkpoint read object %d parent %d type %d"
-+                              TCONT(" chunk %d Parent type, %d, not directory")
-+                              TENDSTR),
-+                              cp->objectId, cp->parentId, cp->variantType,
-+                              cp->hdrChunk, parent->variantType));
-+                      return 0;
-+              }
-               yaffs_AddObjectToDirectory(parent, obj);
-+      }
--      obj->chunkId = cp->chunkId;
-+      obj->hdrChunk = cp->hdrChunk;
-       obj->variantType = cp->variantType;
-       obj->deleted = cp->deleted;
-       obj->softDeleted = cp->softDeleted;
-@@ -4203,29 +4267,34 @@ static void yaffs_CheckpointObjectToObje
-       obj->serial = cp->serial;
-       obj->nDataChunks = cp->nDataChunks;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
--      else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-+      else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-               obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
--      if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
-+      if (obj->hdrChunk > 0)
-               obj->lazyLoaded = 1;
-+      return 1;
- }
--static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
--                                      __u32 level, int chunkOffset)
-+static int yaffs_CheckpointTnodeWorker(yaffs_Object *in, yaffs_Tnode *tn,
-+                                      __u32 level, int chunkOffset)
- {
-       int i;
-       yaffs_Device *dev = in->myDev;
-       int ok = 1;
--      int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-       if (tn) {
-               if (level > 0) {
--                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
-+                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
-                               if (tn->internal[i]) {
-                                       ok = yaffs_CheckpointTnodeWorker(in,
-                                                       tn->internal[i],
-@@ -4235,10 +4304,9 @@ static int yaffs_CheckpointTnodeWorker(y
-                       }
-               } else if (level == 0) {
-                       __u32 baseOffset = chunkOffset <<  YAFFS_TNODES_LEVEL0_BITS;
--                      /* printf("write tnode at %d\n",baseOffset); */
--                      ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
--                      if(ok)
--                              ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
-+                      ok = (yaffs_CheckpointWrite(dev, &baseOffset, sizeof(baseOffset)) == sizeof(baseOffset));
-+                      if (ok)
-+                              ok = (yaffs_CheckpointWrite(dev, tn, tnodeSize) == tnodeSize);
-               }
-       }
-@@ -4251,13 +4319,13 @@ static int yaffs_WriteCheckpointTnodes(y
-       __u32 endMarker = ~0;
-       int ok = 1;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-               ok = yaffs_CheckpointTnodeWorker(obj,
-                                           obj->variant.fileVariant.top,
-                                           obj->variant.fileVariant.topLevel,
-                                           0);
--              if(ok)
--                      ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
-+              if (ok)
-+                      ok = (yaffs_CheckpointWrite(obj->myDev, &endMarker, sizeof(endMarker)) ==
-                               sizeof(endMarker));
-       }
-@@ -4272,38 +4340,38 @@ static int yaffs_ReadCheckpointTnodes(ya
-       yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
-       yaffs_Tnode *tn;
-       int nread = 0;
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
--      ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
--      while(ok && (~baseChunk)){
-+      ok = (yaffs_CheckpointRead(dev, &baseChunk, sizeof(baseChunk)) == sizeof(baseChunk));
-+
-+      while (ok && (~baseChunk)) {
-               nread++;
-               /* Read level 0 tnode */
--              /* printf("read  tnode at %d\n",baseChunk); */
-               tn = yaffs_GetTnodeRaw(dev);
--              if(tn)
--                      ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
--                            (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+              if (tn)
-+                      ok = (yaffs_CheckpointRead(dev, tn, tnodeSize) == tnodeSize);
-               else
-                       ok = 0;
--              if(tn && ok){
-+              if (tn && ok)
-                       ok = yaffs_AddOrFindLevel0Tnode(dev,
--                                                      fileStructPtr,
--                                                      baseChunk,
--                                                      tn) ? 1 : 0;
-+                                                      fileStructPtr,
-+                                                      baseChunk,
-+                                                      tn) ? 1 : 0;
--              }
--
--              if(ok)
--                      ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-+              if (ok)
-+                      ok = (yaffs_CheckpointRead(dev, &baseChunk, sizeof(baseChunk)) == sizeof(baseChunk));
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(
-+      T(YAFFS_TRACE_CHECKPOINT, (
-               TSTR("Checkpoint read tnodes %d records, last %d. ok %d" TENDSTR),
--              nread,baseChunk,ok));
-+              nread, baseChunk, ok));
-       return ok ? 1 : 0;
- }
-@@ -4315,41 +4383,40 @@ static int yaffs_WriteCheckpointObjects(
-       yaffs_CheckpointObject cp;
-       int i;
-       int ok = 1;
--      struct list_head *lh;
-+      struct ylist_head *lh;
-       /* Iterate through the objects in each hash entry,
-        * dumping them to the checkpointing stream.
-        */
--       for(i = 0; ok &&  i <  YAFFS_NOBJECT_BUCKETS; i++){
--              list_for_each(lh, &dev->objectBucket[i].list) {
-+      for (i = 0; ok &&  i <  YAFFS_NOBJECT_BUCKETS; i++) {
-+              ylist_for_each(lh, &dev->objectBucket[i].list) {
-                       if (lh) {
--                              obj = list_entry(lh, yaffs_Object, hashLink);
-+                              obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               if (!obj->deferedFree) {
--                                      yaffs_ObjectToCheckpointObject(&cp,obj);
-+                                      yaffs_ObjectToCheckpointObject(&cp, obj);
-                                       cp.structType = sizeof(cp);
--                                      T(YAFFS_TRACE_CHECKPOINT,(
-+                                      T(YAFFS_TRACE_CHECKPOINT, (
-                                               TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
--                                              cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
-+                                              cp.objectId, cp.parentId, cp.variantType, cp.hdrChunk, (unsigned) obj));
--                                      ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+                                      ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
--                                      if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
-+                                      if (ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-                                               ok = yaffs_WriteCheckpointTnodes(obj);
--                                      }
-                               }
-                       }
-               }
--       }
-+      }
--       /* Dump end of list */
--      memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
-+      /* Dump end of list */
-+      memset(&cp, 0xFF, sizeof(yaffs_CheckpointObject));
-       cp.structType = sizeof(cp);
--      if(ok)
--              ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      if (ok)
-+              ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
-       return ok ? 1 : 0;
- }
-@@ -4362,38 +4429,39 @@ static int yaffs_ReadCheckpointObjects(y
-       int done = 0;
-       yaffs_Object *hardList = NULL;
--      while(ok && !done) {
--              ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
--              if(cp.structType != sizeof(cp)) {
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("struct size %d instead of %d ok %d"TENDSTR),
--                              cp.structType,sizeof(cp),ok));
-+      while (ok && !done) {
-+              ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
-+              if (cp.structType != sizeof(cp)) {
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("struct size %d instead of %d ok %d"TENDSTR),
-+                              cp.structType, sizeof(cp), ok));
-                       ok = 0;
-               }
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
--                      cp.objectId,cp.parentId,cp.variantType,cp.chunkId));
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
-+                      cp.objectId, cp.parentId, cp.variantType, cp.hdrChunk));
--              if(ok && cp.objectId == ~0)
-+              if (ok && cp.objectId == ~0)
-                       done = 1;
--              else if(ok){
--                      obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
--                      if(obj) {
--                              yaffs_CheckpointObjectToObject(obj,&cp);
--                              if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-+              else if (ok) {
-+                      obj = yaffs_FindOrCreateObjectByNumber(dev, cp.objectId, cp.variantType);
-+                      if (obj) {
-+                              ok = yaffs_CheckpointObjectToObject(obj, &cp);
-+                              if (!ok)
-+                                      break;
-+                              if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-                                       ok = yaffs_ReadCheckpointTnodes(obj);
--                              } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-+                              } else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-                                       obj->hardLinks.next =
--                                                  (struct list_head *)
--                                                  hardList;
-+                                              (struct ylist_head *) hardList;
-                                       hardList = obj;
-                               }
--
--                      }
-+                      } else
-+                              ok = 0;
-               }
-       }
--      if(ok)
--              yaffs_HardlinkFixup(dev,hardList);
-+      if (ok)
-+              yaffs_HardlinkFixup(dev, hardList);
-       return ok ? 1 : 0;
- }
-@@ -4403,11 +4471,11 @@ static int yaffs_WriteCheckpointSum(yaff
-       __u32 checkpointSum;
-       int ok;
--      yaffs_GetCheckpointSum(dev,&checkpointSum);
-+      yaffs_GetCheckpointSum(dev, &checkpointSum);
--      ok = (yaffs_CheckpointWrite(dev,&checkpointSum,sizeof(checkpointSum)) == sizeof(checkpointSum));
-+      ok = (yaffs_CheckpointWrite(dev, &checkpointSum, sizeof(checkpointSum)) == sizeof(checkpointSum));
--      if(!ok)
-+      if (!ok)
-               return 0;
-       return 1;
-@@ -4419,14 +4487,14 @@ static int yaffs_ReadCheckpointSum(yaffs
-       __u32 checkpointSum1;
-       int ok;
--      yaffs_GetCheckpointSum(dev,&checkpointSum0);
-+      yaffs_GetCheckpointSum(dev, &checkpointSum0);
--      ok = (yaffs_CheckpointRead(dev,&checkpointSum1,sizeof(checkpointSum1)) == sizeof(checkpointSum1));
-+      ok = (yaffs_CheckpointRead(dev, &checkpointSum1, sizeof(checkpointSum1)) == sizeof(checkpointSum1));
--      if(!ok)
-+      if (!ok)
-               return 0;
--      if(checkpointSum0 != checkpointSum1)
-+      if (checkpointSum0 != checkpointSum1)
-               return 0;
-       return 1;
-@@ -4435,46 +4503,43 @@ static int yaffs_ReadCheckpointSum(yaffs
- static int yaffs_WriteCheckpointData(yaffs_Device *dev)
- {
--
-       int ok = 1;
--      if(dev->skipCheckpointWrite || !dev->isYaffs2){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint write" TENDSTR)));
-+      if (dev->skipCheckpointWrite || !dev->isYaffs2) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("skipping checkpoint write" TENDSTR)));
-               ok = 0;
-       }
--      if(ok)
--              ok = yaffs_CheckpointOpen(dev,1);
-+      if (ok)
-+              ok = yaffs_CheckpointOpen(dev, 1);
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
--              ok = yaffs_WriteCheckpointValidityMarker(dev,1);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint validity" TENDSTR)));
-+              ok = yaffs_WriteCheckpointValidityMarker(dev, 1);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint device" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint device" TENDSTR)));
-               ok = yaffs_WriteCheckpointDevice(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint objects" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint objects" TENDSTR)));
-               ok = yaffs_WriteCheckpointObjects(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
--              ok = yaffs_WriteCheckpointValidityMarker(dev,0);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint validity" TENDSTR)));
-+              ok = yaffs_WriteCheckpointValidityMarker(dev, 0);
-       }
--      if(ok){
-+      if (ok)
-               ok = yaffs_WriteCheckpointSum(dev);
--      }
--
--      if(!yaffs_CheckpointClose(dev))
--               ok = 0;
-+      if (!yaffs_CheckpointClose(dev))
-+              ok = 0;
--      if(ok)
--              dev->isCheckpointed = 1;
--       else
--              dev->isCheckpointed = 0;
-+      if (ok)
-+              dev->isCheckpointed = 1;
-+      else
-+              dev->isCheckpointed = 0;
-       return dev->isCheckpointed;
- }
-@@ -4483,43 +4548,43 @@ static int yaffs_ReadCheckpointData(yaff
- {
-       int ok = 1;
--      if(dev->skipCheckpointRead || !dev->isYaffs2){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint read" TENDSTR)));
-+      if (dev->skipCheckpointRead || !dev->isYaffs2) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("skipping checkpoint read" TENDSTR)));
-               ok = 0;
-       }
--      if(ok)
--              ok = yaffs_CheckpointOpen(dev,0); /* open for read */
-+      if (ok)
-+              ok = yaffs_CheckpointOpen(dev, 0); /* open for read */
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
--              ok = yaffs_ReadCheckpointValidityMarker(dev,1);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint validity" TENDSTR)));
-+              ok = yaffs_ReadCheckpointValidityMarker(dev, 1);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint device" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint device" TENDSTR)));
-               ok = yaffs_ReadCheckpointDevice(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint objects" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint objects" TENDSTR)));
-               ok = yaffs_ReadCheckpointObjects(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
--              ok = yaffs_ReadCheckpointValidityMarker(dev,0);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint validity" TENDSTR)));
-+              ok = yaffs_ReadCheckpointValidityMarker(dev, 0);
-       }
--      if(ok){
-+      if (ok) {
-               ok = yaffs_ReadCheckpointSum(dev);
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint checksum %d" TENDSTR),ok));
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint checksum %d" TENDSTR), ok));
-       }
--      if(!yaffs_CheckpointClose(dev))
-+      if (!yaffs_CheckpointClose(dev))
-               ok = 0;
--      if(ok)
--              dev->isCheckpointed = 1;
--       else
--              dev->isCheckpointed = 0;
-+      if (ok)
-+              dev->isCheckpointed = 1;
-+      else
-+              dev->isCheckpointed = 0;
-       return ok ? 1 : 0;
-@@ -4527,11 +4592,11 @@ static int yaffs_ReadCheckpointData(yaff
- static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
- {
--      if(dev->isCheckpointed ||
--         dev->blocksInCheckpoint > 0){
-+      if (dev->isCheckpointed ||
-+                      dev->blocksInCheckpoint > 0) {
-               dev->isCheckpointed = 0;
-               yaffs_CheckpointInvalidateStream(dev);
--              if(dev->superBlock && dev->markSuperBlockDirty)
-+              if (dev->superBlock && dev->markSuperBlockDirty)
-                       dev->markSuperBlockDirty(dev->superBlock);
-       }
- }
-@@ -4540,18 +4605,18 @@ static void yaffs_InvalidateCheckpoint(y
- int yaffs_CheckpointSave(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("save entry: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       yaffs_VerifyObjects(dev);
-       yaffs_VerifyBlocks(dev);
-       yaffs_VerifyFreeChunks(dev);
--      if(!dev->isCheckpointed) {
-+      if (!dev->isCheckpointed) {
-               yaffs_InvalidateCheckpoint(dev);
-               yaffs_WriteCheckpointData(dev);
-       }
--      T(YAFFS_TRACE_ALWAYS,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_ALWAYS, (TSTR("save exit: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       return dev->isCheckpointed;
- }
-@@ -4559,17 +4624,17 @@ int yaffs_CheckpointSave(yaffs_Device *d
- int yaffs_CheckpointRestore(yaffs_Device *dev)
- {
-       int retval;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("restore entry: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       retval = yaffs_ReadCheckpointData(dev);
--      if(dev->isCheckpointed){
-+      if (dev->isCheckpointed) {
-               yaffs_VerifyObjects(dev);
-               yaffs_VerifyBlocks(dev);
-               yaffs_VerifyFreeChunks(dev);
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("restore exit: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       return retval;
- }
-@@ -4584,12 +4649,12 @@ int yaffs_CheckpointRestore(yaffs_Device
-  * Curve-balls: the first chunk might also be the last chunk.
-  */
--int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
--                         int nBytes)
-+int yaffs_ReadDataFromFile(yaffs_Object *in, __u8 *buffer, loff_t offset,
-+                      int nBytes)
- {
-       int chunk;
--      int start;
-+      __u32 start;
-       int nToCopy;
-       int n = nBytes;
-       int nDone = 0;
-@@ -4600,27 +4665,26 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-       dev = in->myDev;
-       while (n > 0) {
--              //chunk = offset / dev->nDataBytesPerChunk + 1;
--              //start = offset % dev->nDataBytesPerChunk;
--              yaffs_AddrToChunk(dev,offset,&chunk,&start);
-+              /* chunk = offset / dev->nDataBytesPerChunk + 1; */
-+              /* start = offset % dev->nDataBytesPerChunk; */
-+              yaffs_AddrToChunk(dev, offset, &chunk, &start);
-               chunk++;
-               /* OK now check for the curveball where the start and end are in
-                * the same chunk.
-                */
--              if ((start + n) < dev->nDataBytesPerChunk) {
-+              if ((start + n) < dev->nDataBytesPerChunk)
-                       nToCopy = n;
--              } else {
-+              else
-                       nToCopy = dev->nDataBytesPerChunk - start;
--              }
-               cache = yaffs_FindChunkCache(in, chunk);
-               /* If the chunk is already in the cache or it is less than a whole chunk
--               * then use the cache (if there is caching)
-+               * or we're using inband tags then use the cache (if there is caching)
-                * else bypass the cache.
-                */
--              if (cache || nToCopy != dev->nDataBytesPerChunk) {
-+              if (cache || nToCopy != dev->nDataBytesPerChunk || dev->inbandTags) {
-                       if (dev->nShortOpCaches > 0) {
-                               /* If we can't find the data in the cache, then load it up. */
-@@ -4641,14 +4705,9 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-                               cache->locked = 1;
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(buffer, &cache->data[start], nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-                               cache->locked = 0;
-                       } else {
-                               /* Read into the local buffer then copy..*/
-@@ -4657,41 +4716,19 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-                                   yaffs_GetTempBuffer(dev, __LINE__);
-                               yaffs_ReadChunkDataFromObject(in, chunk,
-                                                             localBuffer);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(buffer, &localBuffer[start], nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-+
-                               yaffs_ReleaseTempBuffer(dev, localBuffer,
-                                                       __LINE__);
-                       }
-               } else {
--#ifdef CONFIG_YAFFS_WINCE
--                      __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
--
--                      /* Under WinCE can't do direct transfer. Need to use a local buffer.
--                       * This is because we otherwise screw up WinCE's memory mapper
--                       */
--                      yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
--
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_UnlockYAFFS(TRUE);
--#endif
--                      memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_LockYAFFS(TRUE);
--                      yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
--#endif
--
--#else
-                       /* A full chunk. Read directly into the supplied buffer. */
-                       yaffs_ReadChunkDataFromObject(in, chunk, buffer);
--#endif
-+
-               }
-               n -= nToCopy;
-@@ -4704,28 +4741,37 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-       return nDone;
- }
--int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
--                        int nBytes, int writeThrough)
-+int yaffs_WriteDataToFile(yaffs_Object *in, const __u8 *buffer, loff_t offset,
-+                      int nBytes, int writeThrough)
- {
-       int chunk;
--      int start;
-+      __u32 start;
-       int nToCopy;
-       int n = nBytes;
-       int nDone = 0;
-       int nToWriteBack;
-       int startOfWrite = offset;
-       int chunkWritten = 0;
--      int nBytesRead;
-+      __u32 nBytesRead;
-+      __u32 chunkStart;
-       yaffs_Device *dev;
-       dev = in->myDev;
-       while (n > 0 && chunkWritten >= 0) {
--              //chunk = offset / dev->nDataBytesPerChunk + 1;
--              //start = offset % dev->nDataBytesPerChunk;
--              yaffs_AddrToChunk(dev,offset,&chunk,&start);
-+              /* chunk = offset / dev->nDataBytesPerChunk + 1; */
-+              /* start = offset % dev->nDataBytesPerChunk; */
-+              yaffs_AddrToChunk(dev, offset, &chunk, &start);
-+
-+              if (chunk * dev->nDataBytesPerChunk + start != offset ||
-+                              start >= dev->nDataBytesPerChunk) {
-+                      T(YAFFS_TRACE_ERROR, (
-+                         TSTR("AddrToChunk of offset %d gives chunk %d start %d"
-+                         TENDSTR),
-+                         (int)offset, chunk, start));
-+              }
-               chunk++;
-               /* OK now check for the curveball where the start and end are in
-@@ -4740,25 +4786,32 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                        * we need to write back as much as was there before.
-                        */
--                      nBytesRead =
--                          in->variant.fileVariant.fileSize -
--                          ((chunk - 1) * dev->nDataBytesPerChunk);
-+                      chunkStart = ((chunk - 1) * dev->nDataBytesPerChunk);
-+
-+                      if (chunkStart > in->variant.fileVariant.fileSize)
-+                              nBytesRead = 0; /* Past end of file */
-+                      else
-+                              nBytesRead = in->variant.fileVariant.fileSize - chunkStart;
--                      if (nBytesRead > dev->nDataBytesPerChunk) {
-+                      if (nBytesRead > dev->nDataBytesPerChunk)
-                               nBytesRead = dev->nDataBytesPerChunk;
--                      }
-                       nToWriteBack =
-                           (nBytesRead >
-                            (start + n)) ? nBytesRead : (start + n);
-+                      if (nToWriteBack < 0 || nToWriteBack > dev->nDataBytesPerChunk)
-+                              YBUG();
-+
-               } else {
-                       nToCopy = dev->nDataBytesPerChunk - start;
-                       nToWriteBack = dev->nDataBytesPerChunk;
-               }
--              if (nToCopy != dev->nDataBytesPerChunk) {
--                      /* An incomplete start or end chunk (or maybe both start and end chunk) */
-+              if (nToCopy != dev->nDataBytesPerChunk || dev->inbandTags) {
-+                      /* An incomplete start or end chunk (or maybe both start and end chunk),
-+                       * or we're using inband tags, so we want to use the cache buffers.
-+                       */
-                       if (dev->nShortOpCaches > 0) {
-                               yaffs_ChunkCache *cache;
-                               /* If we can't find the data in the cache, then load the cache */
-@@ -4775,10 +4828,9 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                                       yaffs_ReadChunkDataFromObject(in, chunk,
-                                                                     cache->
-                                                                     data);
--                              }
--                              else if(cache &&
--                                      !cache->dirty &&
--                                      !yaffs_CheckSpaceForAllocation(in->myDev)){
-+                              } else if (cache &&
-+                                      !cache->dirty &&
-+                                      !yaffs_CheckSpaceForAllocation(in->myDev)) {
-                                       /* Drop the cache if it was a read cache item and
-                                        * no space check has been made for it.
-                                        */
-@@ -4788,16 +4840,12 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                               if (cache) {
-                                       yaffs_UseChunkCache(dev, cache, 1);
-                                       cache->locked = 1;
--#ifdef CONFIG_YAFFS_WINCE
--                                      yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                                       memcpy(&cache->data[start], buffer,
-                                              nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                                      yfsd_LockYAFFS(TRUE);
--#endif
-+
-                                       cache->locked = 0;
-                                       cache->nBytes = nToWriteBack;
-@@ -4825,15 +4873,10 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                               yaffs_ReadChunkDataFromObject(in, chunk,
-                                                             localBuffer);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(&localBuffer[start], buffer, nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-                               chunkWritten =
-                                   yaffs_WriteChunkDataToObject(in, chunk,
-                                                                localBuffer,
-@@ -4846,31 +4889,15 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                       }
-               } else {
--
--#ifdef CONFIG_YAFFS_WINCE
--                      /* Under WinCE can't do direct transfer. Need to use a local buffer.
--                       * This is because we otherwise screw up WinCE's memory mapper
--                       */
--                      __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_UnlockYAFFS(TRUE);
--#endif
--                      memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_LockYAFFS(TRUE);
--#endif
--                      chunkWritten =
--                          yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
--                                                       dev->nDataBytesPerChunk,
--                                                       0);
--                      yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
--#else
-                       /* A full chunk. Write directly from the supplied buffer. */
-+
-+
-+
-                       chunkWritten =
-                           yaffs_WriteChunkDataToObject(in, chunk, buffer,
-                                                        dev->nDataBytesPerChunk,
-                                                        0);
--#endif
-+
-                       /* Since we've overwritten the cached data, we better invalidate it. */
-                       yaffs_InvalidateChunkCache(in, chunk);
-               }
-@@ -4886,9 +4913,8 @@ int yaffs_WriteDataToFile(yaffs_Object *
-       /* Update file object */
--      if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
-+      if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize)
-               in->variant.fileVariant.fileSize = (startOfWrite + nDone);
--      }
-       in->dirty = 1;
-@@ -4898,7 +4924,7 @@ int yaffs_WriteDataToFile(yaffs_Object *
- /* ---------------------- File resizing stuff ------------------ */
--static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
-+static void yaffs_PruneResizedChunks(yaffs_Object *in, int newSize)
- {
-       yaffs_Device *dev = in->myDev;
-@@ -4939,11 +4965,11 @@ static void yaffs_PruneResizedChunks(yaf
- }
--int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
-+int yaffs_ResizeFile(yaffs_Object *in, loff_t newSize)
- {
-       int oldFileSize = in->variant.fileVariant.fileSize;
--      int newSizeOfPartialChunk;
-+      __u32 newSizeOfPartialChunk;
-       int newFullChunks;
-       yaffs_Device *dev = in->myDev;
-@@ -4955,13 +4981,11 @@ int yaffs_ResizeFile(yaffs_Object * in, 
-       yaffs_CheckGarbageCollection(dev);
--      if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
--              return yaffs_GetFileSize(in);
--      }
-+      if (in->variantType != YAFFS_OBJECT_TYPE_FILE)
-+              return YAFFS_FAIL;
--      if (newSize == oldFileSize) {
--              return oldFileSize;
--      }
-+      if (newSize == oldFileSize)
-+              return YAFFS_OK;
-       if (newSize < oldFileSize) {
-@@ -4994,21 +5018,20 @@ int yaffs_ResizeFile(yaffs_Object * in, 
-       }
--
-       /* Write a new object header.
-        * show we've shrunk the file, if need be
-        * Do this only if the file is not in the deleted directories.
-        */
--      if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
--          in->parent->objectId != YAFFS_OBJECTID_DELETED) {
-+      if (in->parent &&
-+          in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
-+          in->parent->objectId != YAFFS_OBJECTID_DELETED)
-               yaffs_UpdateObjectHeader(in, NULL, 0,
-                                        (newSize < oldFileSize) ? 1 : 0, 0);
--      }
--      return newSize;
-+      return YAFFS_OK;
- }
--loff_t yaffs_GetFileSize(yaffs_Object * obj)
-+loff_t yaffs_GetFileSize(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-@@ -5024,7 +5047,7 @@ loff_t yaffs_GetFileSize(yaffs_Object * 
--int yaffs_FlushFile(yaffs_Object * in, int updateTime)
-+int yaffs_FlushFile(yaffs_Object *in, int updateTime)
- {
-       int retVal;
-       if (in->dirty) {
-@@ -5039,9 +5062,8 @@ int yaffs_FlushFile(yaffs_Object * in, i
- #endif
-               }
--              retVal =
--                  (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
--                   0) ? YAFFS_OK : YAFFS_FAIL;
-+              retVal = (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
-+                      0) ? YAFFS_OK : YAFFS_FAIL;
-       } else {
-               retVal = YAFFS_OK;
-       }
-@@ -5050,7 +5072,7 @@ int yaffs_FlushFile(yaffs_Object * in, i
- }
--static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
-+static int yaffs_DoGenericObjectDeletion(yaffs_Object *in)
- {
-       /* First off, invalidate the file's data in the cache, without flushing. */
-@@ -5058,13 +5080,13 @@ static int yaffs_DoGenericObjectDeletion
-       if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
-               /* Move to the unlinked directory so we have a record that it was deleted. */
--              yaffs_ChangeObjectName(in, in->myDev->deletedDir,"deleted", 0, 0);
-+              yaffs_ChangeObjectName(in, in->myDev->deletedDir, _Y("deleted"), 0, 0);
-       }
-       yaffs_RemoveObjectFromDirectory(in);
--      yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
--      in->chunkId = -1;
-+      yaffs_DeleteChunk(in->myDev, in->hdrChunk, 1, __LINE__);
-+      in->hdrChunk = 0;
-       yaffs_FreeObject(in);
-       return YAFFS_OK;
-@@ -5075,62 +5097,63 @@ static int yaffs_DoGenericObjectDeletion
-  * and the inode associated with the file.
-  * It does not delete the links associated with the file.
-  */
--static int yaffs_UnlinkFile(yaffs_Object * in)
-+static int yaffs_UnlinkFileIfNeeded(yaffs_Object *in)
- {
-       int retVal;
-       int immediateDeletion = 0;
--      if (1) {
- #ifdef __KERNEL__
--              if (!in->myInode) {
--                      immediateDeletion = 1;
--
--              }
-+      if (!in->myInode)
-+              immediateDeletion = 1;
- #else
--              if (in->inUse <= 0) {
--                      immediateDeletion = 1;
--
--              }
-+      if (in->inUse <= 0)
-+              immediateDeletion = 1;
- #endif
--              if (immediateDeletion) {
--                      retVal =
--                          yaffs_ChangeObjectName(in, in->myDev->deletedDir,
--                                                 "deleted", 0, 0);
--                      T(YAFFS_TRACE_TRACING,
--                        (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
--                         in->objectId));
--                      in->deleted = 1;
--                      in->myDev->nDeletedFiles++;
--                      if (0 && in->myDev->isYaffs2) {
--                              yaffs_ResizeFile(in, 0);
--                      }
--                      yaffs_SoftDeleteFile(in);
--              } else {
--                      retVal =
--                          yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
--                                                 "unlinked", 0, 0);
--              }
-+      if (immediateDeletion) {
-+              retVal =
-+                  yaffs_ChangeObjectName(in, in->myDev->deletedDir,
-+                                         _Y("deleted"), 0, 0);
-+              T(YAFFS_TRACE_TRACING,
-+                (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
-+                 in->objectId));
-+              in->deleted = 1;
-+              in->myDev->nDeletedFiles++;
-+              if (1 || in->myDev->isYaffs2)
-+                      yaffs_ResizeFile(in, 0);
-+              yaffs_SoftDeleteFile(in);
-+      } else {
-+              retVal =
-+                  yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
-+                                         _Y("unlinked"), 0, 0);
-       }
-+
-+
-       return retVal;
- }
--int yaffs_DeleteFile(yaffs_Object * in)
-+int yaffs_DeleteFile(yaffs_Object *in)
- {
-       int retVal = YAFFS_OK;
-+      int deleted = in->deleted;
-+
-+      yaffs_ResizeFile(in, 0);
-       if (in->nDataChunks > 0) {
--              /* Use soft deletion if there is data in the file */
--              if (!in->unlinked) {
--                      retVal = yaffs_UnlinkFile(in);
--              }
-+              /* Use soft deletion if there is data in the file.
-+               * That won't be the case if it has been resized to zero.
-+               */
-+              if (!in->unlinked)
-+                      retVal = yaffs_UnlinkFileIfNeeded(in);
-+
-               if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
-                       in->deleted = 1;
-+                      deleted = 1;
-                       in->myDev->nDeletedFiles++;
-                       yaffs_SoftDeleteFile(in);
-               }
--              return in->deleted ? YAFFS_OK : YAFFS_FAIL;
-+              return deleted ? YAFFS_OK : YAFFS_FAIL;
-       } else {
-               /* The file has no data chunks so we toss it immediately */
-               yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
-@@ -5141,62 +5164,75 @@ int yaffs_DeleteFile(yaffs_Object * in)
-       }
- }
--static int yaffs_DeleteDirectory(yaffs_Object * in)
-+static int yaffs_DeleteDirectory(yaffs_Object *in)
- {
-       /* First check that the directory is empty. */
--      if (list_empty(&in->variant.directoryVariant.children)) {
-+      if (ylist_empty(&in->variant.directoryVariant.children))
-               return yaffs_DoGenericObjectDeletion(in);
--      }
-       return YAFFS_FAIL;
- }
--static int yaffs_DeleteSymLink(yaffs_Object * in)
-+static int yaffs_DeleteSymLink(yaffs_Object *in)
- {
-       YFREE(in->variant.symLinkVariant.alias);
-       return yaffs_DoGenericObjectDeletion(in);
- }
--static int yaffs_DeleteHardLink(yaffs_Object * in)
-+static int yaffs_DeleteHardLink(yaffs_Object *in)
- {
-       /* remove this hardlink from the list assocaited with the equivalent
-        * object
-        */
--      list_del(&in->hardLinks);
-+      ylist_del_init(&in->hardLinks);
-       return yaffs_DoGenericObjectDeletion(in);
- }
--static void yaffs_DestroyObject(yaffs_Object * obj)
-+int yaffs_DeleteObject(yaffs_Object *obj)
- {
-+int retVal = -1;
-       switch (obj->variantType) {
-       case YAFFS_OBJECT_TYPE_FILE:
--              yaffs_DeleteFile(obj);
-+              retVal = yaffs_DeleteFile(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_DIRECTORY:
--              yaffs_DeleteDirectory(obj);
-+              return yaffs_DeleteDirectory(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_SYMLINK:
--              yaffs_DeleteSymLink(obj);
-+              retVal = yaffs_DeleteSymLink(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_HARDLINK:
--              yaffs_DeleteHardLink(obj);
-+              retVal = yaffs_DeleteHardLink(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_SPECIAL:
--              yaffs_DoGenericObjectDeletion(obj);
-+              retVal = yaffs_DoGenericObjectDeletion(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_UNKNOWN:
-+              retVal = 0;
-               break;          /* should not happen. */
-       }
-+
-+      return retVal;
- }
--static int yaffs_UnlinkWorker(yaffs_Object * obj)
-+static int yaffs_UnlinkWorker(yaffs_Object *obj)
- {
-+      int immediateDeletion = 0;
-+
-+#ifdef __KERNEL__
-+      if (!obj->myInode)
-+              immediateDeletion = 1;
-+#else
-+      if (obj->inUse <= 0)
-+              immediateDeletion = 1;
-+#endif
-+
-       if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-               return yaffs_DeleteHardLink(obj);
--      } else if (!list_empty(&obj->hardLinks)) {
-+      } else if (!ylist_empty(&obj->hardLinks)) {
-               /* Curve ball: We're unlinking an object that has a hardlink.
-                *
-                * This problem arises because we are not strictly following
-@@ -5215,24 +5251,24 @@ static int yaffs_UnlinkWorker(yaffs_Obje
-               int retVal;
-               YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
--              hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
-+              hl = ylist_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
--              list_del_init(&hl->hardLinks);
--              list_del_init(&hl->siblings);
-+              ylist_del_init(&hl->hardLinks);
-+              ylist_del_init(&hl->siblings);
-               yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
-               retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
--              if (retVal == YAFFS_OK) {
-+              if (retVal == YAFFS_OK)
-                       retVal = yaffs_DoGenericObjectDeletion(hl);
--              }
-+
-               return retVal;
--      } else {
-+      } else if (immediateDeletion) {
-               switch (obj->variantType) {
-               case YAFFS_OBJECT_TYPE_FILE:
--                      return yaffs_UnlinkFile(obj);
-+                      return yaffs_DeleteFile(obj);
-                       break;
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
-                       return yaffs_DeleteDirectory(obj);
-@@ -5248,21 +5284,22 @@ static int yaffs_UnlinkWorker(yaffs_Obje
-               default:
-                       return YAFFS_FAIL;
-               }
--      }
-+      } else
-+              return yaffs_ChangeObjectName(obj, obj->myDev->unlinkedDir,
-+                                         _Y("unlinked"), 0, 0);
- }
--static int yaffs_UnlinkObject( yaffs_Object *obj)
-+static int yaffs_UnlinkObject(yaffs_Object *obj)
- {
--      if (obj && obj->unlinkAllowed) {
-+      if (obj && obj->unlinkAllowed)
-               return yaffs_UnlinkWorker(obj);
--      }
-       return YAFFS_FAIL;
- }
--int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
-+int yaffs_Unlink(yaffs_Object *dir, const YCHAR *name)
- {
-       yaffs_Object *obj;
-@@ -5272,8 +5309,8 @@ int yaffs_Unlink(yaffs_Object * dir, con
- /*----------------------- Initialisation Scanning ---------------------- */
--static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
--                                     int backwardScanning)
-+static void yaffs_HandleShadowedObject(yaffs_Device *dev, int objId,
-+                              int backwardScanning)
- {
-       yaffs_Object *obj;
-@@ -5286,9 +5323,8 @@ static void yaffs_HandleShadowedObject(y
-               /* Handle YAFFS2 case (backward scanning)
-                * If the shadowed object exists then ignore.
-                */
--              if (yaffs_FindObjectByNumber(dev, objId)) {
-+              if (yaffs_FindObjectByNumber(dev, objId))
-                       return;
--              }
-       }
-       /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
-@@ -5297,6 +5333,8 @@ static void yaffs_HandleShadowedObject(y
-       obj =
-           yaffs_FindOrCreateObjectByNumber(dev, objId,
-                                            YAFFS_OBJECT_TYPE_FILE);
-+      if (!obj)
-+              return;
-       yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
-       obj->variant.fileVariant.shrinkSize = 0;
-       obj->valid = 1;         /* So that we don't read any other info for this file */
-@@ -5325,44 +5363,77 @@ static void yaffs_HardlinkFixup(yaffs_De
-               if (in) {
-                       /* Add the hardlink pointers */
-                       hl->variant.hardLinkVariant.equivalentObject = in;
--                      list_add(&hl->hardLinks, &in->hardLinks);
-+                      ylist_add(&hl->hardLinks, &in->hardLinks);
-               } else {
-                       /* Todo Need to report/handle this better.
-                        * Got a problem... hardlink to a non-existant object
-                        */
-                       hl->variant.hardLinkVariant.equivalentObject = NULL;
--                      INIT_LIST_HEAD(&hl->hardLinks);
-+                      YINIT_LIST_HEAD(&hl->hardLinks);
-               }
--
-       }
-+}
-+
-+
-+
-+
-+static int ybicmp(const void *a, const void *b)
-+{
-+      register int aseq = ((yaffs_BlockIndex *)a)->seq;
-+      register int bseq = ((yaffs_BlockIndex *)b)->seq;
-+      register int ablock = ((yaffs_BlockIndex *)a)->block;
-+      register int bblock = ((yaffs_BlockIndex *)b)->block;
-+      if (aseq == bseq)
-+              return ablock - bblock;
-+      else
-+              return aseq - bseq;
- }
-+struct yaffs_ShadowFixerStruct {
-+      int objectId;
-+      int shadowedId;
-+      struct yaffs_ShadowFixerStruct *next;
-+};
-+
-+static void yaffs_StripDeletedObjects(yaffs_Device *dev)
-+{
-+      /*
-+      *  Sort out state of unlinked and deleted objects after scanning.
-+      */
-+      struct ylist_head *i;
-+      struct ylist_head *n;
-+      yaffs_Object *l;
-+      /* Soft delete all the unlinked files */
-+      ylist_for_each_safe(i, n,
-+              &dev->unlinkedDir->variant.directoryVariant.children) {
-+              if (i) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      yaffs_DeleteObject(l);
-+              }
-+      }
--static int ybicmp(const void *a, const void *b){
--    register int aseq = ((yaffs_BlockIndex *)a)->seq;
--    register int bseq = ((yaffs_BlockIndex *)b)->seq;
--    register int ablock = ((yaffs_BlockIndex *)a)->block;
--    register int bblock = ((yaffs_BlockIndex *)b)->block;
--    if( aseq == bseq )
--        return ablock - bblock;
--    else
--        return aseq - bseq;
-+      ylist_for_each_safe(i, n,
-+              &dev->deletedDir->variant.directoryVariant.children) {
-+              if (i) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      yaffs_DeleteObject(l);
-+              }
-+      }
- }
--static int yaffs_Scan(yaffs_Device * dev)
-+static int yaffs_Scan(yaffs_Device *dev)
- {
-       yaffs_ExtendedTags tags;
-       int blk;
-       int blockIterator;
-       int startIterator;
-       int endIterator;
--      int nBlocksToScan = 0;
-       int result;
-       int chunk;
-@@ -5371,26 +5442,19 @@ static int yaffs_Scan(yaffs_Device * dev
-       yaffs_BlockState state;
-       yaffs_Object *hardList = NULL;
-       yaffs_BlockInfo *bi;
--      int sequenceNumber;
-+      __u32 sequenceNumber;
-       yaffs_ObjectHeader *oh;
-       yaffs_Object *in;
-       yaffs_Object *parent;
--      int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-       int alloc_failed = 0;
-+      struct yaffs_ShadowFixerStruct *shadowFixerList = NULL;
-+
-       __u8 *chunkData;
--      yaffs_BlockIndex *blockIndex = NULL;
--      if (dev->isYaffs2) {
--              T(YAFFS_TRACE_SCAN,
--                (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
--              return YAFFS_FAIL;
--      }
--
--      //TODO  Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
-       T(YAFFS_TRACE_SCAN,
-         (TSTR("yaffs_Scan starts  intstartblk %d intendblk %d..." TENDSTR),
-@@ -5400,12 +5464,6 @@ static int yaffs_Scan(yaffs_Device * dev
-       dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
--      if (dev->isYaffs2) {
--              blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
--              if(!blockIndex)
--                      return YAFFS_FAIL;
--      }
--
-       /* Scan all the blocks to determine their state */
-       for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
-               bi = yaffs_GetBlockInfo(dev, blk);
-@@ -5418,6 +5476,9 @@ static int yaffs_Scan(yaffs_Device * dev
-               bi->blockState = state;
-               bi->sequenceNumber = sequenceNumber;
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_BAD_BLOCK)
-+                      bi->blockState = state = YAFFS_BLOCK_STATE_DEAD;
-+
-               T(YAFFS_TRACE_SCAN_DEBUG,
-                 (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
-                  state, sequenceNumber));
-@@ -5430,70 +5491,21 @@ static int yaffs_Scan(yaffs_Device * dev
-                         (TSTR("Block empty " TENDSTR)));
-                       dev->nErasedBlocks++;
-                       dev->nFreeChunks += dev->nChunksPerBlock;
--              } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
--
--                      /* Determine the highest sequence number */
--                      if (dev->isYaffs2 &&
--                          sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
--                          sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
--
--                              blockIndex[nBlocksToScan].seq = sequenceNumber;
--                              blockIndex[nBlocksToScan].block = blk;
--
--                              nBlocksToScan++;
--
--                              if (sequenceNumber >= dev->sequenceNumber) {
--                                      dev->sequenceNumber = sequenceNumber;
--                              }
--                      } else if (dev->isYaffs2) {
--                              /* TODO: Nasty sequence number! */
--                              T(YAFFS_TRACE_SCAN,
--                                (TSTR
--                                 ("Block scanning block %d has bad sequence number %d"
--                                  TENDSTR), blk, sequenceNumber));
--
--                      }
-               }
-       }
--      /* Sort the blocks
--       * Dungy old bubble sort for now...
--       */
--      if (dev->isYaffs2) {
--              yaffs_BlockIndex temp;
--              int i;
--              int j;
--
--              for (i = 0; i < nBlocksToScan; i++)
--                      for (j = i + 1; j < nBlocksToScan; j++)
--                              if (blockIndex[i].seq > blockIndex[j].seq) {
--                                      temp = blockIndex[j];
--                                      blockIndex[j] = blockIndex[i];
--                                      blockIndex[i] = temp;
--                              }
--      }
--
--      /* Now scan the blocks looking at the data. */
--      if (dev->isYaffs2) {
--              startIterator = 0;
--              endIterator = nBlocksToScan - 1;
--              T(YAFFS_TRACE_SCAN_DEBUG,
--                (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
--      } else {
--              startIterator = dev->internalStartBlock;
--              endIterator = dev->internalEndBlock;
--      }
-+      startIterator = dev->internalStartBlock;
-+      endIterator = dev->internalEndBlock;
-       /* For each block.... */
-       for (blockIterator = startIterator; !alloc_failed && blockIterator <= endIterator;
-            blockIterator++) {
--              if (dev->isYaffs2) {
--                      /* get the block to scan in the correct order */
--                      blk = blockIndex[blockIterator].block;
--              } else {
--                      blk = blockIterator;
--              }
-+              YYIELD();
-+
-+              YYIELD();
-+
-+              blk = blockIterator;
-               bi = yaffs_GetBlockInfo(dev, blk);
-               state = bi->blockState;
-@@ -5511,7 +5523,7 @@ static int yaffs_Scan(yaffs_Device * dev
-                       /* Let's have a good look at this chunk... */
--                      if (!dev->isYaffs2 && tags.chunkDeleted) {
-+                      if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED || tags.chunkDeleted) {
-                               /* YAFFS1 only...
-                                * A deleted chunk
-                                */
-@@ -5540,18 +5552,6 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       dev->allocationBlockFinder = blk;
-                                       /* Set it to here to encourage the allocator to go forth from here. */
--                                      /* Yaffs2 sanity check:
--                                       * This should be the one with the highest sequence number
--                                       */
--                                      if (dev->isYaffs2
--                                          && (dev->sequenceNumber !=
--                                              bi->sequenceNumber)) {
--                                              T(YAFFS_TRACE_ALWAYS,
--                                                (TSTR
--                                                 ("yaffs: Allocation block %d was not highest sequence id:"
--                                                  " block seq = %d, dev seq = %d"
--                                                  TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
--                                      }
-                               }
-                               dev->nFreeChunks += (dev->nChunksPerBlock - c);
-@@ -5570,11 +5570,11 @@ static int yaffs_Scan(yaffs_Device * dev
-                                * the same chunkId).
-                                */
--                              if(!in)
-+                              if (!in)
-                                       alloc_failed = 1;
--                              if(in){
--                                      if(!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,1))
-+                              if (in) {
-+                                      if (!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk, 1))
-                                               alloc_failed = 1;
-                               }
-@@ -5617,7 +5617,7 @@ static int yaffs_Scan(yaffs_Device * dev
-                                        * deleted, and worse still it has changed type. Delete the old object.
-                                        */
--                                      yaffs_DestroyObject(in);
-+                                      yaffs_DeleteObject(in);
-                                       in = 0;
-                               }
-@@ -5627,14 +5627,20 @@ static int yaffs_Scan(yaffs_Device * dev
-                                                                     objectId,
-                                                                     oh->type);
--                              if(!in)
-+                              if (!in)
-                                       alloc_failed = 1;
-                               if (in && oh->shadowsObject > 0) {
--                                      yaffs_HandleShadowedObject(dev,
--                                                                 oh->
--                                                                 shadowsObject,
--                                                                 0);
-+
-+                                      struct yaffs_ShadowFixerStruct *fixer;
-+                                      fixer = YMALLOC(sizeof(struct yaffs_ShadowFixerStruct));
-+                                      if (fixer) {
-+                                              fixer->next = shadowFixerList;
-+                                              shadowFixerList = fixer;
-+                                              fixer->objectId = tags.objectId;
-+                                              fixer->shadowedId = oh->shadowsObject;
-+                                      }
-+
-                               }
-                               if (in && in->valid) {
-@@ -5643,12 +5649,10 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       unsigned existingSerial = in->serial;
-                                       unsigned newSerial = tags.serialNumber;
--                                      if (dev->isYaffs2 ||
--                                          ((existingSerial + 1) & 3) ==
--                                          newSerial) {
-+                                      if (((existingSerial + 1) & 3) == newSerial) {
-                                               /* Use new one - destroy the exisiting one */
-                                               yaffs_DeleteChunk(dev,
--                                                                in->chunkId,
-+                                                                in->hdrChunk,
-                                                                 1, __LINE__);
-                                               in->valid = 0;
-                                       } else {
-@@ -5681,7 +5685,8 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       in->yst_ctime = oh->yst_ctime;
-                                       in->yst_rdev = oh->yst_rdev;
- #endif
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-+                                      in->serial = tags.serialNumber;
-                               } else if (in && !in->valid) {
-                                       /* we need to load this info */
-@@ -5705,7 +5710,8 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       in->yst_ctime = oh->yst_ctime;
-                                       in->yst_rdev = oh->yst_rdev;
- #endif
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-+                                      in->serial = tags.serialNumber;
-                                       yaffs_SetObjectName(in, oh->name);
-                                       in->dirty = 0;
-@@ -5718,25 +5724,25 @@ static int yaffs_Scan(yaffs_Device * dev
-                                           yaffs_FindOrCreateObjectByNumber
-                                           (dev, oh->parentObjectId,
-                                            YAFFS_OBJECT_TYPE_DIRECTORY);
--                                      if (parent->variantType ==
-+                                      if (!parent)
-+                                              alloc_failed = 1;
-+                                      if (parent && parent->variantType ==
-                                           YAFFS_OBJECT_TYPE_UNKNOWN) {
-                                               /* Set up as a directory */
-                                               parent->variantType =
--                                                  YAFFS_OBJECT_TYPE_DIRECTORY;
--                                              INIT_LIST_HEAD(&parent->variant.
--                                                             directoryVariant.
--                                                             children);
--                                      } else if (parent->variantType !=
--                                                 YAFFS_OBJECT_TYPE_DIRECTORY)
--                                      {
-+                                                      YAFFS_OBJECT_TYPE_DIRECTORY;
-+                                              YINIT_LIST_HEAD(&parent->variant.
-+                                                              directoryVariant.
-+                                                              children);
-+                                      } else if (!parent || parent->variantType !=
-+                                                 YAFFS_OBJECT_TYPE_DIRECTORY) {
-                                               /* Hoosterman, another problem....
-                                                * We're trying to use a non-directory as a directory
-                                                */
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR
--                                                 ("yaffs tragedy: attempting to use non-directory as"
--                                                  " a directory in scan. Put in lost+found."
-+                                                 ("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
-                                                   TENDSTR)));
-                                               parent = dev->lostNFoundDir;
-                                       }
-@@ -5760,15 +5766,6 @@ static int yaffs_Scan(yaffs_Device * dev
-                                               /* Todo got a problem */
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_FILE:
--                                              if (dev->isYaffs2
--                                                  && oh->isShrink) {
--                                                      /* Prune back the shrunken chunks */
--                                                      yaffs_PruneResizedChunks
--                                                          (in, oh->fileSize);
--                                                      /* Mark the block as having a shrinkHeader */
--                                                      bi->hasShrinkHeader = 1;
--                                              }
--
-                                               if (dev->useHeaderFileSize)
-                                                       in->variant.fileVariant.
-@@ -5778,11 +5775,11 @@ static int yaffs_Scan(yaffs_Device * dev
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_HARDLINK:
-                                               in->variant.hardLinkVariant.
--                                                  equivalentObjectId =
--                                                  oh->equivalentObjectId;
-+                                                      equivalentObjectId =
-+                                                      oh->equivalentObjectId;
-                                               in->hardLinks.next =
--                                                  (struct list_head *)
--                                                  hardList;
-+                                                      (struct ylist_head *)
-+                                                      hardList;
-                                               hardList = in;
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -5794,15 +5791,17 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       case YAFFS_OBJECT_TYPE_SYMLINK:
-                                               in->variant.symLinkVariant.alias =
-                                                   yaffs_CloneString(oh->alias);
--                                              if(!in->variant.symLinkVariant.alias)
-+                                              if (!in->variant.symLinkVariant.alias)
-                                                       alloc_failed = 1;
-                                               break;
-                                       }
-+/*
-                                       if (parent == dev->deletedDir) {
-                                               yaffs_DestroyObject(in);
-                                               bi->hasShrinkHeader = 1;
-                                       }
-+*/
-                               }
-                       }
-               }
-@@ -5823,10 +5822,6 @@ static int yaffs_Scan(yaffs_Device * dev
-       }
--      if (blockIndex) {
--              YFREE(blockIndex);
--      }
--
-       /* Ok, we've done all the scanning.
-        * Fix up the hard link chains.
-@@ -5834,32 +5829,36 @@ static int yaffs_Scan(yaffs_Device * dev
-        * hardlinks.
-        */
--      yaffs_HardlinkFixup(dev,hardList);
-+      yaffs_HardlinkFixup(dev, hardList);
--      /* Handle the unlinked files. Since they were left in an unlinked state we should
--       * just delete them.
--       */
-+      /* Fix up any shadowed objects */
-       {
--              struct list_head *i;
--              struct list_head *n;
-+              struct yaffs_ShadowFixerStruct *fixer;
-+              yaffs_Object *obj;
--              yaffs_Object *l;
--              /* Soft delete all the unlinked files */
--              list_for_each_safe(i, n,
--                                 &dev->unlinkedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
--                      }
-+              while (shadowFixerList) {
-+                      fixer = shadowFixerList;
-+                      shadowFixerList = fixer->next;
-+                      /* Complete the rename transaction by deleting the shadowed object
-+                       * then setting the object header to unshadowed.
-+                       */
-+                      obj = yaffs_FindObjectByNumber(dev, fixer->shadowedId);
-+                      if (obj)
-+                              yaffs_DeleteObject(obj);
-+
-+                      obj = yaffs_FindObjectByNumber(dev, fixer->objectId);
-+
-+                      if (obj)
-+                              yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
-+
-+                      YFREE(fixer);
-               }
-       }
-       yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
--      if(alloc_failed){
-+      if (alloc_failed)
-               return YAFFS_FAIL;
--      }
-       T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
-@@ -5871,25 +5870,27 @@ static void yaffs_CheckObjectDetailsLoad
- {
-       __u8 *chunkData;
-       yaffs_ObjectHeader *oh;
--      yaffs_Device *dev = in->myDev;
-+      yaffs_Device *dev;
-       yaffs_ExtendedTags tags;
-       int result;
-       int alloc_failed = 0;
--      if(!in)
-+      if (!in)
-               return;
-+      dev = in->myDev;
-+
- #if 0
--      T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
-+      T(YAFFS_TRACE_SCAN, (TSTR("details for object %d %s loaded" TENDSTR),
-               in->objectId,
-               in->lazyLoaded ? "not yet" : "already"));
- #endif
--      if(in->lazyLoaded){
-+      if (in->lazyLoaded && in->hdrChunk > 0) {
-               in->lazyLoaded = 0;
-               chunkData = yaffs_GetTempBuffer(dev, __LINE__);
--              result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
-+              result = yaffs_ReadChunkWithTagsFromNAND(dev, in->hdrChunk, chunkData, &tags);
-               oh = (yaffs_ObjectHeader *) chunkData;
-               in->yst_mode = oh->yst_mode;
-@@ -5911,18 +5912,18 @@ static void yaffs_CheckObjectDetailsLoad
- #endif
-               yaffs_SetObjectName(in, oh->name);
--              if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
--                       in->variant.symLinkVariant.alias =
-+              if (in->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+                      in->variant.symLinkVariant.alias =
-                                                   yaffs_CloneString(oh->alias);
--                      if(!in->variant.symLinkVariant.alias)
-+                      if (!in->variant.symLinkVariant.alias)
-                               alloc_failed = 1; /* Not returned to caller */
-               }
--              yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
-+              yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-       }
- }
--static int yaffs_ScanBackwards(yaffs_Device * dev)
-+static int yaffs_ScanBackwards(yaffs_Device *dev)
- {
-       yaffs_ExtendedTags tags;
-       int blk;
-@@ -5938,7 +5939,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       yaffs_BlockState state;
-       yaffs_Object *hardList = NULL;
-       yaffs_BlockInfo *bi;
--      int sequenceNumber;
-+      __u32 sequenceNumber;
-       yaffs_ObjectHeader *oh;
-       yaffs_Object *in;
-       yaffs_Object *parent;
-@@ -5972,12 +5973,12 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
--      if(!blockIndex) {
-+      if (!blockIndex) {
-               blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
-               altBlockIndex = 1;
-       }
--      if(!blockIndex) {
-+      if (!blockIndex) {
-               T(YAFFS_TRACE_SCAN,
-                 (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
-               return YAFFS_FAIL;
-@@ -5999,15 +6000,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-               bi->blockState = state;
-               bi->sequenceNumber = sequenceNumber;
--              if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
-                       bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_BAD_BLOCK)
-+                      bi->blockState = state = YAFFS_BLOCK_STATE_DEAD;
-               T(YAFFS_TRACE_SCAN_DEBUG,
-                 (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
-                  state, sequenceNumber));
--              if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
-+              if (state == YAFFS_BLOCK_STATE_CHECKPOINT) {
-                       dev->blocksInCheckpoint++;
-               } else if (state == YAFFS_BLOCK_STATE_DEAD) {
-@@ -6021,8 +6024,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-               } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-                       /* Determine the highest sequence number */
--                      if (dev->isYaffs2 &&
--                          sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
-+                      if (sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
-                           sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-                               blockIndex[nBlocksToScan].seq = sequenceNumber;
-@@ -6030,10 +6032,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               nBlocksToScan++;
--                              if (sequenceNumber >= dev->sequenceNumber) {
-+                              if (sequenceNumber >= dev->sequenceNumber)
-                                       dev->sequenceNumber = sequenceNumber;
--                              }
--                      } else if (dev->isYaffs2) {
-+                      } else {
-                               /* TODO: Nasty sequence number! */
-                               T(YAFFS_TRACE_SCAN,
-                                 (TSTR
-@@ -6053,11 +6054,13 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       /* Sort the blocks */
- #ifndef CONFIG_YAFFS_USE_OWN_SORT
--      yaffs_qsort(blockIndex, nBlocksToScan,
--              sizeof(yaffs_BlockIndex), ybicmp);
-+      {
-+              /* Use qsort now. */
-+              yaffs_qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
-+      }
- #else
-       {
--              /* Dungy old bubble sort... */
-+              /* Dungy old bubble sort... */
-               yaffs_BlockIndex temp;
-               int i;
-@@ -6075,7 +6078,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       YYIELD();
--      T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-+      T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-       /* Now scan the blocks looking at the data. */
-       startIterator = 0;
-@@ -6085,10 +6088,10 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       /* For each block.... backwards */
-       for (blockIterator = endIterator; !alloc_failed && blockIterator >= startIterator;
--           blockIterator--) {
--              /* Cooperative multitasking! This loop can run for so
-+                      blockIterator--) {
-+              /* Cooperative multitasking! This loop can run for so
-                  long that watchdog timers expire. */
--              YYIELD();
-+              YYIELD();
-               /* get the block to scan in the correct order */
-               blk = blockIndex[blockIterator].block;
-@@ -6127,10 +6130,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                * this is the one being allocated from
-                                */
--                              if(foundChunksInBlock)
--                              {
-+                              if (foundChunksInBlock) {
-                                       /* This is a chunk that was skipped due to failing the erased check */
--
-                               } else if (c == 0) {
-                                       /* We're looking at the first chunk in the block so the block is unused */
-                                       state = YAFFS_BLOCK_STATE_EMPTY;
-@@ -6138,7 +6139,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               } else {
-                                       if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
-                                           state == YAFFS_BLOCK_STATE_ALLOCATING) {
--                                              if(dev->sequenceNumber == bi->sequenceNumber) {
-+                                              if (dev->sequenceNumber == bi->sequenceNumber) {
-                                                       /* this is the block being allocated from */
-                                                       T(YAFFS_TRACE_SCAN,
-@@ -6150,27 +6151,31 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                       dev->allocationBlock = blk;
-                                                       dev->allocationPage = c;
-                                                       dev->allocationBlockFinder = blk;
--                                              }
--                                              else {
-+                                              } else {
-                                                       /* This is a partially written block that is not
-                                                        * the current allocation block. This block must have
-                                                        * had a write failure, so set up for retirement.
-                                                        */
--                                                       bi->needsRetiring = 1;
-+                                                       /* bi->needsRetiring = 1; ??? TODO */
-                                                        bi->gcPrioritise = 1;
-                                                        T(YAFFS_TRACE_ALWAYS,
--                                                       (TSTR("Partially written block %d being set for retirement" TENDSTR),
-+                                                       (TSTR("Partially written block %d detected" TENDSTR),
-                                                        blk));
-                                               }
--
-                                       }
--
-                               }
-                               dev->nFreeChunks++;
-+                      } else if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED) {
-+                              T(YAFFS_TRACE_SCAN,
-+                                (TSTR(" Unfixed ECC in chunk(%d:%d), chunk ignored"TENDSTR),
-+                                blk, c));
-+
-+                                dev->nFreeChunks++;
-+
-                       } else if (tags.chunkId > 0) {
-                               /* chunkId > 0 so it is a data chunk... */
-                               unsigned int endpos;
-@@ -6187,7 +6192,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                                     tags.
-                                                                     objectId,
-                                                                     YAFFS_OBJECT_TYPE_FILE);
--                              if(!in){
-+                              if (!in) {
-                                       /* Out of memory */
-                                       alloc_failed = 1;
-                               }
-@@ -6197,8 +6202,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                   && chunkBase <
-                                   in->variant.fileVariant.shrinkSize) {
-                                       /* This has not been invalidated by a resize */
--                                      if(!yaffs_PutChunkIntoFile(in, tags.chunkId,
--                                                             chunk, -1)){
-+                                      if (!yaffs_PutChunkIntoFile(in, tags.chunkId,
-+                                                             chunk, -1)) {
-                                               alloc_failed = 1;
-                                       }
-@@ -6221,7 +6226,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                   scannedFileSize;
-                                       }
--                              } else if(in) {
-+                              } else if (in) {
-                                       /* This chunk has been invalidated by a resize, so delete */
-                                       yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
-@@ -6242,6 +6247,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       in = yaffs_FindOrCreateObjectByNumber
-                                           (dev, tags.objectId,
-                                            tags.extraObjectType);
-+                                      if (!in)
-+                                              alloc_failed = 1;
-                               }
-                               if (!in ||
-@@ -6251,8 +6258,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                   tags.extraShadows ||
-                                   (!in->valid &&
-                                   (tags.objectId == YAFFS_OBJECTID_ROOT ||
--                                   tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
--                                  ) {
-+                                   tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))) {
-                                       /* If we don't have  valid info then we need to read the chunk
-                                        * TODO In future we can probably defer reading the chunk and
-@@ -6266,8 +6272,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       oh = (yaffs_ObjectHeader *) chunkData;
--                                      if (!in)
-+                                      if (dev->inbandTags) {
-+                                              /* Fix up the header if they got corrupted by inband tags */
-+                                              oh->shadowsObject = oh->inbandShadowsObject;
-+                                              oh->isShrink = oh->inbandIsShrink;
-+                                      }
-+
-+                                      if (!in) {
-                                               in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
-+                                              if (!in)
-+                                                      alloc_failed = 1;
-+                                      }
-                               }
-@@ -6275,10 +6290,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       /* TODO Hoosterman we have a problem! */
-                                       T(YAFFS_TRACE_ERROR,
-                                         (TSTR
--                                         ("yaffs tragedy: Could not make object for object  %d  "
--                                          "at chunk %d during scan"
-+                                         ("yaffs tragedy: Could not make object for object  %d at chunk %d during scan"
-                                           TENDSTR), tags.objectId, chunk));
--
-+                                      continue;
-                               }
-                               if (in->valid) {
-@@ -6289,10 +6303,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
-                                            ((oh &&
--                                             oh-> type == YAFFS_OBJECT_TYPE_FILE)||
-+                                             oh->type == YAFFS_OBJECT_TYPE_FILE) ||
-                                             (tags.extraHeaderInfoAvailable  &&
--                                             tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
--                                          ) {
-+                                             tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))) {
-                                               __u32 thisSize =
-                                                   (oh) ? oh->fileSize : tags.
-                                                   extraFileLength;
-@@ -6300,7 +6313,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                   (oh) ? oh->
-                                                   parentObjectId : tags.
-                                                   extraParentObjectId;
--                                              unsigned isShrink =
-+
-+
-+                                              isShrink =
-                                                   (oh) ? oh->isShrink : tags.
-                                                   extraIsShrinkHeader;
-@@ -6323,9 +6338,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                           thisSize;
-                                               }
--                                              if (isShrink) {
-+                                              if (isShrink)
-                                                       bi->hasShrinkHeader = 1;
--                                              }
-                                       }
-                                       /* Use existing - destroy this one. */
-@@ -6333,6 +6347,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               }
-+                              if (!in->valid && in->variantType !=
-+                                  (oh ? oh->type : tags.extraObjectType))
-+                                      T(YAFFS_TRACE_ERROR, (
-+                                              TSTR("yaffs tragedy: Bad object type, "
-+                                          TCONT("%d != %d, for object %d at chunk ")
-+                                          TCONT("%d during scan")
-+                                              TENDSTR), oh ?
-+                                          oh->type : tags.extraObjectType,
-+                                          in->variantType, tags.objectId,
-+                                          chunk));
-+
-                               if (!in->valid &&
-                                   (tags.objectId == YAFFS_OBJECTID_ROOT ||
-                                    tags.objectId ==
-@@ -6340,7 +6365,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       /* We only load some info, don't fiddle with directory structure */
-                                       in->valid = 1;
--                                      if(oh) {
-+                                      if (oh) {
-                                               in->variantType = oh->type;
-                                               in->yst_mode = oh->yst_mode;
-@@ -6365,15 +6390,15 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               in->lazyLoaded = 1;
-                                       }
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-                               } else if (!in->valid) {
-                                       /* we need to load this info */
-                                       in->valid = 1;
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
--                                      if(oh) {
-+                                      if (oh) {
-                                               in->variantType = oh->type;
-                                               in->yst_mode = oh->yst_mode;
-@@ -6403,20 +6428,19 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               yaffs_SetObjectName(in, oh->name);
-                                               parent =
-                                                   yaffs_FindOrCreateObjectByNumber
--                                                      (dev, oh->parentObjectId,
--                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-+                                                      (dev, oh->parentObjectId,
-+                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-                                                fileSize = oh->fileSize;
--                                               isShrink = oh->isShrink;
-+                                               isShrink = oh->isShrink;
-                                                equivalentObjectId = oh->equivalentObjectId;
--                                      }
--                                      else {
-+                                      } else {
-                                               in->variantType = tags.extraObjectType;
-                                               parent =
-                                                   yaffs_FindOrCreateObjectByNumber
--                                                      (dev, tags.extraParentObjectId,
--                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-+                                                      (dev, tags.extraParentObjectId,
-+                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-                                                fileSize = tags.extraFileLength;
-                                                isShrink = tags.extraIsShrinkHeader;
-                                                equivalentObjectId = tags.extraEquivalentObjectId;
-@@ -6425,29 +6449,30 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       }
-                                       in->dirty = 0;
-+                                      if (!parent)
-+                                              alloc_failed = 1;
-+
-                                       /* directory stuff...
-                                        * hook up to parent
-                                        */
--                                      if (parent->variantType ==
-+                                      if (parent && parent->variantType ==
-                                           YAFFS_OBJECT_TYPE_UNKNOWN) {
-                                               /* Set up as a directory */
-                                               parent->variantType =
--                                                  YAFFS_OBJECT_TYPE_DIRECTORY;
--                                              INIT_LIST_HEAD(&parent->variant.
--                                                             directoryVariant.
--                                                             children);
--                                      } else if (parent->variantType !=
--                                                 YAFFS_OBJECT_TYPE_DIRECTORY)
--                                      {
-+                                                      YAFFS_OBJECT_TYPE_DIRECTORY;
-+                                              YINIT_LIST_HEAD(&parent->variant.
-+                                                      directoryVariant.
-+                                                      children);
-+                                      } else if (!parent || parent->variantType !=
-+                                                 YAFFS_OBJECT_TYPE_DIRECTORY) {
-                                               /* Hoosterman, another problem....
-                                                * We're trying to use a non-directory as a directory
-                                                */
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR
--                                                 ("yaffs tragedy: attempting to use non-directory as"
--                                                  " a directory in scan. Put in lost+found."
-+                                                 ("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
-                                                   TENDSTR)));
-                                               parent = dev->lostNFoundDir;
-                                       }
-@@ -6494,12 +6519,12 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_HARDLINK:
--                                              if(!itsUnlinked) {
--                                                in->variant.hardLinkVariant.equivalentObjectId =
--                                                  equivalentObjectId;
--                                                in->hardLinks.next =
--                                                  (struct list_head *) hardList;
--                                                hardList = in;
-+                                              if (!itsUnlinked) {
-+                                                      in->variant.hardLinkVariant.equivalentObjectId =
-+                                                              equivalentObjectId;
-+                                                      in->hardLinks.next =
-+                                                              (struct ylist_head *) hardList;
-+                                                      hardList = in;
-                                               }
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -6509,12 +6534,11 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               /* Do nothing */
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_SYMLINK:
--                                              if(oh){
--                                                 in->variant.symLinkVariant.alias =
--                                                  yaffs_CloneString(oh->
--                                                                    alias);
--                                                 if(!in->variant.symLinkVariant.alias)
--                                                      alloc_failed = 1;
-+                                              if (oh) {
-+                                                      in->variant.symLinkVariant.alias =
-+                                                              yaffs_CloneString(oh->alias);
-+                                                      if (!in->variant.symLinkVariant.alias)
-+                                                              alloc_failed = 1;
-                                               }
-                                               break;
-                                       }
-@@ -6551,75 +6575,129 @@ static int yaffs_ScanBackwards(yaffs_Dev
-        * We should now have scanned all the objects, now it's time to add these
-        * hardlinks.
-        */
--      yaffs_HardlinkFixup(dev,hardList);
-+      yaffs_HardlinkFixup(dev, hardList);
--      /*
--      *  Sort out state of unlinked and deleted objects.
--      */
--      {
--              struct list_head *i;
--              struct list_head *n;
-+      yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
--              yaffs_Object *l;
-+      if (alloc_failed)
-+              return YAFFS_FAIL;
--              /* Soft delete all the unlinked files */
--              list_for_each_safe(i, n,
--                                 &dev->unlinkedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
--                      }
--              }
-+      T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
--              /* Soft delete all the deletedDir files */
--              list_for_each_safe(i, n,
--                                 &dev->deletedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
-+      return YAFFS_OK;
-+}
--                      }
-+/*------------------------------  Directory Functions ----------------------------- */
-+
-+static void yaffs_VerifyObjectInDirectory(yaffs_Object *obj)
-+{
-+      struct ylist_head *lh;
-+      yaffs_Object *listObj;
-+
-+      int count = 0;
-+
-+      if (!obj) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("No object to verify" TENDSTR)));
-+              YBUG();
-+              return;
-+      }
-+
-+      if (yaffs_SkipVerification(obj->myDev))
-+              return;
-+
-+      if (!obj->parent) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Object does not have parent" TENDSTR)));
-+              YBUG();
-+              return;
-+      }
-+
-+      if (obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Parent is not directory" TENDSTR)));
-+              YBUG();
-+      }
-+
-+      /* Iterate through the objects in each hash entry */
-+
-+      ylist_for_each(lh, &obj->parent->variant.directoryVariant.children) {
-+              if (lh) {
-+                      listObj = ylist_entry(lh, yaffs_Object, siblings);
-+                      yaffs_VerifyObject(listObj);
-+                      if (obj == listObj)
-+                              count++;
-               }
-+       }
-+
-+      if (count != 1) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Object in directory %d times" TENDSTR), count));
-+              YBUG();
-       }
-+}
--      yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-+static void yaffs_VerifyDirectory(yaffs_Object *directory)
-+{
-+      struct ylist_head *lh;
-+      yaffs_Object *listObj;
--      if(alloc_failed){
--              return YAFFS_FAIL;
-+      if (!directory) {
-+              YBUG();
-+              return;
-       }
--      T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
-+      if (yaffs_SkipFullVerification(directory->myDev))
-+              return;
--      return YAFFS_OK;
-+      if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Directory has wrong type: %d" TENDSTR), directory->variantType));
-+              YBUG();
-+      }
-+
-+      /* Iterate through the objects in each hash entry */
-+
-+      ylist_for_each(lh, &directory->variant.directoryVariant.children) {
-+              if (lh) {
-+                      listObj = ylist_entry(lh, yaffs_Object, siblings);
-+                      if (listObj->parent != directory) {
-+                              T(YAFFS_TRACE_ALWAYS, (TSTR("Object in directory list has wrong parent %p" TENDSTR), listObj->parent));
-+                              YBUG();
-+                      }
-+                      yaffs_VerifyObjectInDirectory(listObj);
-+              }
-+      }
- }
--/*------------------------------  Directory Functions ----------------------------- */
--static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
-+static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj)
- {
-       yaffs_Device *dev = obj->myDev;
-+      yaffs_Object *parent;
-+
-+      yaffs_VerifyObjectInDirectory(obj);
-+      parent = obj->parent;
-+
-+      yaffs_VerifyDirectory(parent);
--      if(dev && dev->removeObjectCallback)
-+      if (dev && dev->removeObjectCallback)
-               dev->removeObjectCallback(obj);
--      list_del_init(&obj->siblings);
-+
-+      ylist_del_init(&obj->siblings);
-       obj->parent = NULL;
-+
-+      yaffs_VerifyDirectory(parent);
- }
--static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
--                                     yaffs_Object * obj)
-+static void yaffs_AddObjectToDirectory(yaffs_Object *directory,
-+                                      yaffs_Object *obj)
- {
--
-       if (!directory) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
-                  ("tragedy: Trying to add an object to a null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return;
-       }
-       if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6631,37 +6709,42 @@ static void yaffs_AddObjectToDirectory(y
-       if (obj->siblings.prev == NULL) {
-               /* Not initialised */
--              INIT_LIST_HEAD(&obj->siblings);
--
--      } else if (!list_empty(&obj->siblings)) {
--              /* If it is holed up somewhere else, un hook it */
--              yaffs_RemoveObjectFromDirectory(obj);
-+              YBUG();
-       }
-+
-+
-+      yaffs_VerifyDirectory(directory);
-+
-+      yaffs_RemoveObjectFromDirectory(obj);
-+
-+
-       /* Now add it */
--      list_add(&obj->siblings, &directory->variant.directoryVariant.children);
-+      ylist_add(&obj->siblings, &directory->variant.directoryVariant.children);
-       obj->parent = directory;
-       if (directory == obj->myDev->unlinkedDir
--          || directory == obj->myDev->deletedDir) {
-+                      || directory == obj->myDev->deletedDir) {
-               obj->unlinked = 1;
-               obj->myDev->nUnlinkedFiles++;
-               obj->renameAllowed = 0;
-       }
-+
-+      yaffs_VerifyDirectory(directory);
-+      yaffs_VerifyObjectInDirectory(obj);
- }
--yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
--                                   const YCHAR * name)
-+yaffs_Object *yaffs_FindObjectByName(yaffs_Object *directory,
-+                                   const YCHAR *name)
- {
-       int sum;
--      struct list_head *i;
-+      struct ylist_head *i;
-       YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
-       yaffs_Object *l;
--      if (!name) {
-+      if (!name)
-               return NULL;
--      }
-       if (!directory) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6669,6 +6752,7 @@ yaffs_Object *yaffs_FindObjectByName(yaf
-                  ("tragedy: yaffs_FindObjectByName: null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return NULL;
-       }
-       if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6679,28 +6763,27 @@ yaffs_Object *yaffs_FindObjectByName(yaf
-       sum = yaffs_CalcNameSum(name);
--      list_for_each(i, &directory->variant.directoryVariant.children) {
-+      ylist_for_each(i, &directory->variant.directoryVariant.children) {
-               if (i) {
--                      l = list_entry(i, yaffs_Object, siblings);
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+
-+                      if (l->parent != directory)
-+                              YBUG();
-                       yaffs_CheckObjectDetailsLoaded(l);
-                       /* Special case for lost-n-found */
-                       if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
--                              if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
-+                              if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0)
-                                       return l;
--                              }
--                      } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
--                      {
--                              /* LostnFound cunk called Objxxx
-+                      } else if (yaffs_SumCompare(l->sum, sum) || l->hdrChunk <= 0) {
-+                              /* LostnFound chunk called Objxxx
-                                * Do a real check
-                                */
-                               yaffs_GetObjectName(l, buffer,
-                                                   YAFFS_MAX_NAME_LENGTH);
--                              if (yaffs_strncmp(name, buffer,YAFFS_MAX_NAME_LENGTH) == 0) {
-+                              if (yaffs_strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
-                                       return l;
--                              }
--
-                       }
-               }
-       }
-@@ -6710,10 +6793,10 @@ yaffs_Object *yaffs_FindObjectByName(yaf
- #if 0
--int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
--                                 int (*fn) (yaffs_Object *))
-+int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,
-+                                      int (*fn) (yaffs_Object *))
- {
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *l;
-       if (!theDir) {
-@@ -6722,20 +6805,21 @@ int yaffs_ApplyToDirectoryChildren(yaffs
-                  ("tragedy: yaffs_FindObjectByName: null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return YAFFS_FAIL;
-       }
-       if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
-                  ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
-               YBUG();
-+              return YAFFS_FAIL;
-       }
--      list_for_each(i, &theDir->variant.directoryVariant.children) {
-+      ylist_for_each(i, &theDir->variant.directoryVariant.children) {
-               if (i) {
--                      l = list_entry(i, yaffs_Object, siblings);
--                      if (l && !fn(l)) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      if (l && !fn(l))
-                               return YAFFS_FAIL;
--                      }
-               }
-       }
-@@ -6748,7 +6832,7 @@ int yaffs_ApplyToDirectoryChildren(yaffs
-  * actual object.
-  */
--yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
-+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object *obj)
- {
-       if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-               /* We want the object id of the equivalent object, not this one */
-@@ -6756,10 +6840,9 @@ yaffs_Object *yaffs_GetEquivalentObject(
-               yaffs_CheckObjectDetailsLoaded(obj);
-       }
-       return obj;
--
- }
--int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
-+int yaffs_GetObjectName(yaffs_Object *obj, YCHAR *name, int buffSize)
- {
-       memset(name, 0, buffSize * sizeof(YCHAR));
-@@ -6767,18 +6850,26 @@ int yaffs_GetObjectName(yaffs_Object * o
-       if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
-               yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
--      } else if (obj->chunkId <= 0) {
-+      } else if (obj->hdrChunk <= 0) {
-               YCHAR locName[20];
-+              YCHAR numString[20];
-+              YCHAR *x = &numString[19];
-+              unsigned v = obj->objectId;
-+              numString[19] = 0;
-+              while (v > 0) {
-+                      x--;
-+                      *x = '0' + (v % 10);
-+                      v /= 10;
-+              }
-               /* make up a name */
--              yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
--                            obj->objectId);
-+              yaffs_strcpy(locName, YAFFS_LOSTNFOUND_PREFIX);
-+              yaffs_strcat(locName, x);
-               yaffs_strncpy(name, locName, buffSize - 1);
-       }
- #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
--      else if (obj->shortName[0]) {
-+      else if (obj->shortName[0])
-               yaffs_strcpy(name, obj->shortName);
--      }
- #endif
-       else {
-               int result;
-@@ -6788,9 +6879,9 @@ int yaffs_GetObjectName(yaffs_Object * o
-               memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
--              if (obj->chunkId >= 0) {
-+              if (obj->hdrChunk > 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
--                                                      obj->chunkId, buffer,
-+                                                      obj->hdrChunk, buffer,
-                                                       NULL);
-               }
-               yaffs_strncpy(name, oh->name, buffSize - 1);
-@@ -6801,46 +6892,43 @@ int yaffs_GetObjectName(yaffs_Object * o
-       return yaffs_strlen(name);
- }
--int yaffs_GetObjectFileLength(yaffs_Object * obj)
-+int yaffs_GetObjectFileLength(yaffs_Object *obj)
- {
--
-       /* Dereference any hard linking */
-       obj = yaffs_GetEquivalentObject(obj);
--      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               return obj->variant.fileVariant.fileSize;
--      }
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
-               return yaffs_strlen(obj->variant.symLinkVariant.alias);
--      } else {
-+      else {
-               /* Only a directory should drop through to here */
-               return obj->myDev->nDataBytesPerChunk;
-       }
- }
--int yaffs_GetObjectLinkCount(yaffs_Object * obj)
-+int yaffs_GetObjectLinkCount(yaffs_Object *obj)
- {
-       int count = 0;
--      struct list_head *i;
-+      struct ylist_head *i;
--      if (!obj->unlinked) {
--              count++;        /* the object itself */
--      }
--      list_for_each(i, &obj->hardLinks) {
--              count++;        /* add the hard links; */
--      }
--      return count;
-+      if (!obj->unlinked)
-+              count++;                /* the object itself */
-+
-+      ylist_for_each(i, &obj->hardLinks)
-+              count++;                /* add the hard links; */
-+      return count;
- }
--int yaffs_GetObjectInode(yaffs_Object * obj)
-+int yaffs_GetObjectInode(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-       return obj->objectId;
- }
--unsigned yaffs_GetObjectType(yaffs_Object * obj)
-+unsigned yaffs_GetObjectType(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-@@ -6872,19 +6960,18 @@ unsigned yaffs_GetObjectType(yaffs_Objec
-       }
- }
--YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
-+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
-               return yaffs_CloneString(obj->variant.symLinkVariant.alias);
--      } else {
-+      else
-               return yaffs_CloneString(_Y(""));
--      }
- }
- #ifndef CONFIG_YAFFS_WINCE
--int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
-+int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr)
- {
-       unsigned int valid = attr->ia_valid;
-@@ -6910,7 +6997,7 @@ int yaffs_SetAttributes(yaffs_Object * o
-       return YAFFS_OK;
- }
--int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
-+int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr)
- {
-       unsigned int valid = 0;
-@@ -6934,13 +7021,12 @@ int yaffs_GetAttributes(yaffs_Object * o
-       attr->ia_valid = valid;
-       return YAFFS_OK;
--
- }
- #endif
- #if 0
--int yaffs_DumpObject(yaffs_Object * obj)
-+int yaffs_DumpObject(yaffs_Object *obj)
- {
-       YCHAR name[257];
-@@ -6951,7 +7037,7 @@ int yaffs_DumpObject(yaffs_Object * obj)
-          ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
-           " chunk %d type %d size %d\n"
-           TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
--         obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
-+         obj->dirty, obj->valid, obj->serial, obj->sum, obj->hdrChunk,
-          yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
-       return YAFFS_OK;
-@@ -6960,7 +7046,7 @@ int yaffs_DumpObject(yaffs_Object * obj)
- /*---------------------------- Initialisation code -------------------------------------- */
--static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
-+static int yaffs_CheckDevFunctions(const yaffs_Device *dev)
- {
-       /* Common functions, gotta have */
-@@ -7011,7 +7097,7 @@ static int yaffs_CreateInitialDirectorie
-           yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
-                                     YAFFS_LOSTNFOUND_MODE | S_IFDIR);
--      if(dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir){
-+      if (dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir) {
-               yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
-               return YAFFS_OK;
-       }
-@@ -7019,7 +7105,7 @@ static int yaffs_CreateInitialDirectorie
-       return YAFFS_FAIL;
- }
--int yaffs_GutsInitialise(yaffs_Device * dev)
-+int yaffs_GutsInitialise(yaffs_Device *dev)
- {
-       int init_failed = 0;
-       unsigned x;
-@@ -7040,6 +7126,8 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->chunkOffset = 0;
-       dev->nFreeChunks = 0;
-+      dev->gcBlock = -1;
-+
-       if (dev->startBlock == 0) {
-               dev->internalStartBlock = dev->startBlock + 1;
-               dev->internalEndBlock = dev->endBlock + 1;
-@@ -7049,18 +7137,18 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       /* Check geometry parameters. */
--      if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
--          (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
-+      if ((!dev->inbandTags && dev->isYaffs2 && dev->totalBytesPerChunk < 1024) ||
-+          (!dev->isYaffs2 && dev->totalBytesPerChunk < 512) ||
-+          (dev->inbandTags && !dev->isYaffs2) ||
-            dev->nChunksPerBlock < 2 ||
-            dev->nReservedBlocks < 2 ||
-            dev->internalStartBlock <= 0 ||
-            dev->internalEndBlock <= 0 ||
--           dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2)      // otherwise it is too small
--          ) {
-+           dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2)) {   /* otherwise it is too small */
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
--                 ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
--                  TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
-+                 ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s, inbandTags %d "
-+                  TENDSTR), dev->totalBytesPerChunk, dev->isYaffs2 ? "2" : "", dev->inbandTags));
-               return YAFFS_FAIL;
-       }
-@@ -7070,6 +7158,12 @@ int yaffs_GutsInitialise(yaffs_Device * 
-               return YAFFS_FAIL;
-       }
-+      /* Sort out space for inband tags, if required */
-+      if (dev->inbandTags)
-+              dev->nDataBytesPerChunk = dev->totalBytesPerChunk - sizeof(yaffs_PackedTags2TagsPart);
-+      else
-+              dev->nDataBytesPerChunk = dev->totalBytesPerChunk;
-+
-       /* Got the right mix of functions? */
-       if (!yaffs_CheckDevFunctions(dev)) {
-               /* Function missing */
-@@ -7097,31 +7191,18 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->isMounted = 1;
--
--
-       /* OK now calculate a few things for the device */
-       /*
-        *  Calculate all the chunk size manipulation numbers:
-        */
--       /* Start off assuming it is a power of 2 */
--       dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
--       dev->chunkMask = (1<<dev->chunkShift) - 1;
--
--       if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
--              /* Yes it is a power of 2, disable crumbs */
--              dev->crumbMask = 0;
--              dev->crumbShift = 0;
--              dev->crumbsPerChunk = 0;
--       } else {
--              /* Not a power of 2, use crumbs instead */
--              dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
--              dev->crumbMask = (1<<dev->crumbShift)-1;
--              dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
--              dev->chunkShift = 0;
--              dev->chunkMask = 0;
--      }
--
-+      x = dev->nDataBytesPerChunk;
-+      /* We always use dev->chunkShift and dev->chunkDiv */
-+      dev->chunkShift = Shifts(x);
-+      x >>= dev->chunkShift;
-+      dev->chunkDiv = x;
-+      /* We only use chunk mask if chunkDiv is 1 */
-+      dev->chunkMask = (1<<dev->chunkShift) - 1;
-       /*
-        * Calculate chunkGroupBits.
-@@ -7133,16 +7214,15 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       bits = ShiftsGE(x);
-       /* Set up tnode width if wide tnodes are enabled. */
--      if(!dev->wideTnodesDisabled){
-+      if (!dev->wideTnodesDisabled) {
-               /* bits must be even so that we end up with 32-bit words */
--              if(bits & 1)
-+              if (bits & 1)
-                       bits++;
--              if(bits < 16)
-+              if (bits < 16)
-                       dev->tnodeWidth = 16;
-               else
-                       dev->tnodeWidth = bits;
--      }
--      else
-+      } else
-               dev->tnodeWidth = 16;
-       dev->tnodeMask = (1<<dev->tnodeWidth)-1;
-@@ -7193,7 +7273,7 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
-       /* Initialise temporary buffers and caches. */
--      if(!yaffs_InitialiseTempBuffers(dev))
-+      if (!yaffs_InitialiseTempBuffers(dev))
-               init_failed = 1;
-       dev->srCache = NULL;
-@@ -7203,25 +7283,26 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       if (!init_failed &&
-           dev->nShortOpCaches > 0) {
-               int i;
--              __u8 *buf;
-+              void *buf;
-               int srCacheBytes = dev->nShortOpCaches * sizeof(yaffs_ChunkCache);
--              if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
-+              if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES)
-                       dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
--              }
--              buf = dev->srCache =  YMALLOC(srCacheBytes);
-+              dev->srCache =  YMALLOC(srCacheBytes);
--              if(dev->srCache)
--                      memset(dev->srCache,0,srCacheBytes);
-+              buf = (__u8 *) dev->srCache;
-+
-+              if (dev->srCache)
-+                      memset(dev->srCache, 0, srCacheBytes);
-               for (i = 0; i < dev->nShortOpCaches && buf; i++) {
-                       dev->srCache[i].object = NULL;
-                       dev->srCache[i].lastUse = 0;
-                       dev->srCache[i].dirty = 0;
--                      dev->srCache[i].data = buf = YMALLOC_DMA(dev->nDataBytesPerChunk);
-+                      dev->srCache[i].data = buf = YMALLOC_DMA(dev->totalBytesPerChunk);
-               }
--              if(!buf)
-+              if (!buf)
-                       init_failed = 1;
-               dev->srLastUse = 0;
-@@ -7229,29 +7310,30 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->cacheHits = 0;
--      if(!init_failed){
-+      if (!init_failed) {
-               dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
--              if(!dev->gcCleanupList)
-+              if (!dev->gcCleanupList)
-                       init_failed = 1;
-       }
--      if (dev->isYaffs2) {
-+      if (dev->isYaffs2)
-               dev->useHeaderFileSize = 1;
--      }
--      if(!init_failed && !yaffs_InitialiseBlocks(dev))
-+
-+      if (!init_failed && !yaffs_InitialiseBlocks(dev))
-               init_failed = 1;
-       yaffs_InitialiseTnodes(dev);
-       yaffs_InitialiseObjects(dev);
--      if(!init_failed && !yaffs_CreateInitialDirectories(dev))
-+      if (!init_failed && !yaffs_CreateInitialDirectories(dev))
-               init_failed = 1;
--      if(!init_failed){
-+      if (!init_failed) {
-               /* Now scan the flash. */
-               if (dev->isYaffs2) {
--                      if(yaffs_CheckpointRestore(dev)) {
-+                      if (yaffs_CheckpointRestore(dev)) {
-+                              yaffs_CheckObjectDetailsLoaded(dev->rootDir);
-                               T(YAFFS_TRACE_ALWAYS,
-                                 (TSTR("yaffs: restored from checkpoint" TENDSTR)));
-                       } else {
-@@ -7273,24 +7355,25 @@ int yaffs_GutsInitialise(yaffs_Device * 
-                               dev->nBackgroundDeletions = 0;
-                               dev->oldestDirtySequence = 0;
--                              if(!init_failed && !yaffs_InitialiseBlocks(dev))
-+                              if (!init_failed && !yaffs_InitialiseBlocks(dev))
-                                       init_failed = 1;
-                               yaffs_InitialiseTnodes(dev);
-                               yaffs_InitialiseObjects(dev);
--                              if(!init_failed && !yaffs_CreateInitialDirectories(dev))
-+                              if (!init_failed && !yaffs_CreateInitialDirectories(dev))
-                                       init_failed = 1;
--                              if(!init_failed && !yaffs_ScanBackwards(dev))
-+                              if (!init_failed && !yaffs_ScanBackwards(dev))
-                                       init_failed = 1;
-                       }
--              }else
--                      if(!yaffs_Scan(dev))
-+              } else if (!yaffs_Scan(dev))
-                               init_failed = 1;
-+
-+              yaffs_StripDeletedObjects(dev);
-       }
--      if(init_failed){
-+      if (init_failed) {
-               /* Clean up the mess */
-               T(YAFFS_TRACE_TRACING,
-                 (TSTR("yaffs: yaffs_GutsInitialise() aborted.\n" TENDSTR)));
-@@ -7318,7 +7401,7 @@ int yaffs_GutsInitialise(yaffs_Device * 
- }
--void yaffs_Deinitialise(yaffs_Device * dev)
-+void yaffs_Deinitialise(yaffs_Device *dev)
- {
-       if (dev->isMounted) {
-               int i;
-@@ -7330,7 +7413,7 @@ void yaffs_Deinitialise(yaffs_Device * d
-                   dev->srCache) {
-                       for (i = 0; i < dev->nShortOpCaches; i++) {
--                              if(dev->srCache[i].data)
-+                              if (dev->srCache[i].data)
-                                       YFREE(dev->srCache[i].data);
-                               dev->srCache[i].data = NULL;
-                       }
-@@ -7341,16 +7424,17 @@ void yaffs_Deinitialise(yaffs_Device * d
-               YFREE(dev->gcCleanupList);
--              for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-+              for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
-                       YFREE(dev->tempBuffer[i].buffer);
--              }
-               dev->isMounted = 0;
--      }
-+              if (dev->deinitialiseNAND)
-+                      dev->deinitialiseNAND(dev);
-+      }
- }
--static int yaffs_CountFreeChunks(yaffs_Device * dev)
-+static int yaffs_CountFreeChunks(yaffs_Device *dev)
- {
-       int nFree;
-       int b;
-@@ -7358,7 +7442,7 @@ static int yaffs_CountFreeChunks(yaffs_D
-       yaffs_BlockInfo *blk;
-       for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
--           b++) {
-+                      b++) {
-               blk = yaffs_GetBlockInfo(dev, b);
-               switch (blk->blockState) {
-@@ -7373,19 +7457,19 @@ static int yaffs_CountFreeChunks(yaffs_D
-               default:
-                       break;
-               }
--
-       }
-       return nFree;
- }
--int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
-+int yaffs_GetNumberOfFreeChunks(yaffs_Device *dev)
- {
-       /* This is what we report to the outside world */
-       int nFree;
-       int nDirtyCacheChunks;
-       int blocksForCheckpoint;
-+      int i;
- #if 1
-       nFree = dev->nFreeChunks;
-@@ -7397,12 +7481,9 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
-       /* Now count the number of dirty chunks in the cache and subtract those */
--      {
--              int i;
--              for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
--                      if (dev->srCache[i].dirty)
--                              nDirtyCacheChunks++;
--              }
-+      for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
-+              if (dev->srCache[i].dirty)
-+                      nDirtyCacheChunks++;
-       }
-       nFree -= nDirtyCacheChunks;
-@@ -7410,8 +7491,8 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
-       nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
-       /* Now we figure out how much to reserve for the checkpoint and report that... */
--      blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
--      if(blocksForCheckpoint < 0)
-+      blocksForCheckpoint = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
-+      if (blocksForCheckpoint < 0)
-               blocksForCheckpoint = 0;
-       nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
-@@ -7425,12 +7506,12 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
- static int yaffs_freeVerificationFailures;
--static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
-+static void yaffs_VerifyFreeChunks(yaffs_Device *dev)
- {
-       int counted;
-       int difference;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       counted = yaffs_CountFreeChunks(dev);
-@@ -7447,23 +7528,25 @@ static void yaffs_VerifyFreeChunks(yaffs
- /*---------------------------------------- YAFFS test code ----------------------*/
--#define yaffs_CheckStruct(structure,syze, name) \
--           if(sizeof(structure) != syze) \
--             { \
--               T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
--               name,syze,sizeof(structure))); \
--               return YAFFS_FAIL; \
--              }
-+#define yaffs_CheckStruct(structure, syze, name) \
-+      do { \
-+              if (sizeof(structure) != syze) { \
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR("%s should be %d but is %d\n" TENDSTR),\
-+                              name, syze, sizeof(structure))); \
-+                      return YAFFS_FAIL; \
-+              } \
-+      } while (0)
- static int yaffs_CheckStructures(void)
- {
--/*      yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
--/*      yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
--/*      yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
-+/*      yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags"); */
-+/*      yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion"); */
-+/*      yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare"); */
- #ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
--      yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
-+      yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode");
- #endif
--          yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
--
--          return YAFFS_OK;
-+#ifndef CONFIG_YAFFS_WINCE
-+      yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader");
-+#endif
-+      return YAFFS_OK;
- }
---- a/fs/yaffs2/yaffs_guts.h
-+++ b/fs/yaffs2/yaffs_guts.h
-@@ -90,7 +90,7 @@
- #define YAFFS_MAX_SHORT_OP_CACHES     20
--#define YAFFS_N_TEMP_BUFFERS          4
-+#define YAFFS_N_TEMP_BUFFERS          6
- /* We limit the number attempts at sucessfully saving a chunk of data.
-  * Small-page devices have 32 pages per block; large-page devices have 64.
-@@ -108,6 +108,9 @@
- #define YAFFS_LOWEST_SEQUENCE_NUMBER  0x00001000
- #define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xEFFFFF00
-+/* Special sequence number for bad block that failed to be marked bad */
-+#define YAFFS_SEQUENCE_BAD_BLOCK      0xFFFF0000
-+
- /* ChunkCache is used for short read/write operations.*/
- typedef struct {
-       struct yaffs_ObjectStruct *object;
-@@ -134,11 +137,10 @@ typedef struct {
- typedef struct {
-       unsigned chunkId:20;
-       unsigned serialNumber:2;
--      unsigned byteCount:10;
-+      unsigned byteCountLSB:10;
-       unsigned objectId:18;
-       unsigned ecc:12;
--      unsigned unusedStuff:2;
--
-+      unsigned byteCountMSB:2;
- } yaffs_Tags;
- typedef union {
-@@ -277,13 +279,13 @@ typedef struct {
-       int softDeletions:10;   /* number of soft deleted pages */
-       int pagesInUse:10;      /* number of pages in use */
--      yaffs_BlockState blockState:4;  /* One of the above block states */
-+      unsigned blockState:4;  /* One of the above block states. NB use unsigned because enum is sometimes an int */
-       __u32 needsRetiring:1;  /* Data has failed on this block, need to get valid data off */
--                              /* and retire the block. */
--      __u32 skipErasedCheck: 1; /* If this is set we can skip the erased check on this block */
--      __u32 gcPrioritise: 1;  /* An ECC check or blank check has failed on this block.
-+                              /* and retire the block. */
-+      __u32 skipErasedCheck:1; /* If this is set we can skip the erased check on this block */
-+      __u32 gcPrioritise:1;   /* An ECC check or blank check has failed on this block.
-                                  It should be prioritised for GC */
--        __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
-+      __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
- #ifdef CONFIG_YAFFS_YAFFS2
-       __u32 hasShrinkHeader:1; /* This block has at least one shrink object header */
-@@ -300,11 +302,11 @@ typedef struct {
-       /* Apply to everything  */
-       int parentObjectId;
--      __u16 sum__NoLongerUsed;        /* checksum of name. No longer used */
-+      __u16 sum__NoLongerUsed;        /* checksum of name. No longer used */
-       YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
--      /* Thes following apply to directories, files, symlinks - not hard links */
--      __u32 yst_mode;         /* protection */
-+      /* The following apply to directories, files, symlinks - not hard links */
-+      __u32 yst_mode;         /* protection */
- #ifdef CONFIG_YAFFS_WINCE
-       __u32 notForWinCE[5];
-@@ -331,11 +333,14 @@ typedef struct {
-       __u32 win_ctime[2];
-       __u32 win_atime[2];
-       __u32 win_mtime[2];
--      __u32 roomToGrow[4];
- #else
--      __u32 roomToGrow[10];
-+      __u32 roomToGrow[6];
-+
- #endif
-+      __u32 inbandShadowsObject;
-+      __u32 inbandIsShrink;
-+      __u32 reservedSpace[2];
-       int shadowsObject;      /* This object header shadows the specified object if > 0 */
-       /* isShrink applies to object headers written when we shrink the file (ie resize) */
-@@ -381,7 +386,7 @@ typedef struct {
- } yaffs_FileStructure;
- typedef struct {
--      struct list_head children;      /* list of child links */
-+      struct ylist_head children;     /* list of child links */
- } yaffs_DirectoryStructure;
- typedef struct {
-@@ -418,23 +423,24 @@ struct yaffs_ObjectStruct {
-                                * still in the inode cache. Free of object is defered.
-                                * until the inode is released.
-                                */
-+      __u8 beingCreated:1;    /* This object is still being created so skip some checks. */
-       __u8 serial;            /* serial number of chunk in NAND. Cached here */
-       __u16 sum;              /* sum of the name to speed searching */
--      struct yaffs_DeviceStruct *myDev;       /* The device I'm on */
-+      struct yaffs_DeviceStruct *myDev;       /* The device I'm on */
--      struct list_head hashLink;      /* list of objects in this hash bucket */
-+      struct ylist_head hashLink;     /* list of objects in this hash bucket */
--      struct list_head hardLinks;     /* all the equivalent hard linked objects */
-+      struct ylist_head hardLinks;    /* all the equivalent hard linked objects */
-       /* directory structure stuff */
-       /* also used for linking up the free list */
-       struct yaffs_ObjectStruct *parent;
--      struct list_head siblings;
-+      struct ylist_head siblings;
-       /* Where's my object header in NAND? */
--      int chunkId;
-+      int hdrChunk;
-       int nDataChunks;        /* Number of data chunks attached to the file. */
-@@ -485,7 +491,7 @@ struct yaffs_ObjectList_struct {
- typedef struct yaffs_ObjectList_struct yaffs_ObjectList;
- typedef struct {
--      struct list_head list;
-+      struct ylist_head list;
-       int count;
- } yaffs_ObjectBucket;
-@@ -495,11 +501,10 @@ typedef struct {
-  */
- typedef struct {
--        int structType;
-+      int structType;
-       __u32 objectId;
-       __u32 parentId;
--      int chunkId;
--
-+      int hdrChunk;
-       yaffs_ObjectType variantType:3;
-       __u8 deleted:1;
-       __u8 softDeleted:1;
-@@ -511,8 +516,7 @@ typedef struct {
-       int nDataChunks;
-       __u32 fileSizeOrEquivalentObjectId;
--
--}yaffs_CheckpointObject;
-+} yaffs_CheckpointObject;
- /*--------------------- Temporary buffers ----------------
-  *
-@@ -528,13 +532,13 @@ typedef struct {
- /*----------------- Device ---------------------------------*/
- struct yaffs_DeviceStruct {
--      struct list_head devList;
-+      struct ylist_head devList;
-       const char *name;
-       /* Entry parameters set up way early. Yaffs sets up the rest.*/
-       int nDataBytesPerChunk; /* Should be a power of 2 >= 512 */
-       int nChunksPerBlock;    /* does not need to be a power of 2 */
--      int nBytesPerSpare;     /* spare area size */
-+      int spareBytesPerChunk; /* spare area size */
-       int startBlock;         /* Start block we're allowed to use */
-       int endBlock;           /* End block we're allowed to use */
-       int nReservedBlocks;    /* We want this tuneable so that we can reduce */
-@@ -544,9 +548,7 @@ struct yaffs_DeviceStruct {
-       /* Stuff used by the shared space checkpointing mechanism */
-       /* If this value is zero, then this mechanism is disabled */
--      int nCheckpointReservedBlocks; /* Blocks to reserve for checkpoint data */
--
--
-+/*    int nCheckpointReservedBlocks; */ /* Blocks to reserve for checkpoint data */
-       int nShortOpCaches;     /* If <= 0, then short op caching is disabled, else
-@@ -560,30 +562,31 @@ struct yaffs_DeviceStruct {
-       void *genericDevice;    /* Pointer to device context
-                                * On an mtd this holds the mtd pointer.
-                                */
--        void *superBlock;
-+      void *superBlock;
-       /* NAND access functions (Must be set before calling YAFFS)*/
--      int (*writeChunkToNAND) (struct yaffs_DeviceStruct * dev,
--                               int chunkInNAND, const __u8 * data,
--                               const yaffs_Spare * spare);
--      int (*readChunkFromNAND) (struct yaffs_DeviceStruct * dev,
--                                int chunkInNAND, __u8 * data,
--                                yaffs_Spare * spare);
--      int (*eraseBlockInNAND) (struct yaffs_DeviceStruct * dev,
--                               int blockInNAND);
--      int (*initialiseNAND) (struct yaffs_DeviceStruct * dev);
-+      int (*writeChunkToNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int chunkInNAND, const __u8 *data,
-+                                      const yaffs_Spare *spare);
-+      int (*readChunkFromNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int chunkInNAND, __u8 *data,
-+                                      yaffs_Spare *spare);
-+      int (*eraseBlockInNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int blockInNAND);
-+      int (*initialiseNAND) (struct yaffs_DeviceStruct *dev);
-+      int (*deinitialiseNAND) (struct yaffs_DeviceStruct *dev);
- #ifdef CONFIG_YAFFS_YAFFS2
--      int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct * dev,
--                                       int chunkInNAND, const __u8 * data,
--                                       const yaffs_ExtendedTags * tags);
--      int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct * dev,
--                                        int chunkInNAND, __u8 * data,
--                                        yaffs_ExtendedTags * tags);
--      int (*markNANDBlockBad) (struct yaffs_DeviceStruct * dev, int blockNo);
--      int (*queryNANDBlock) (struct yaffs_DeviceStruct * dev, int blockNo,
--                             yaffs_BlockState * state, int *sequenceNumber);
-+      int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct *dev,
-+                                       int chunkInNAND, const __u8 *data,
-+                                       const yaffs_ExtendedTags *tags);
-+      int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct *dev,
-+                                        int chunkInNAND, __u8 *data,
-+                                        yaffs_ExtendedTags *tags);
-+      int (*markNANDBlockBad) (struct yaffs_DeviceStruct *dev, int blockNo);
-+      int (*queryNANDBlock) (struct yaffs_DeviceStruct *dev, int blockNo,
-+                             yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
-       int isYaffs2;
-@@ -595,10 +598,12 @@ struct yaffs_DeviceStruct {
-       void (*removeObjectCallback)(struct yaffs_ObjectStruct *obj);
-       /* Callback to mark the superblock dirsty */
--      void (*markSuperBlockDirty)(void * superblock);
-+      void (*markSuperBlockDirty)(void *superblock);
-       int wideTnodesDisabled; /* Set to disable wide tnodes */
-+      YCHAR *pathDividers;    /* String of legal path dividers */
-+
-       /* End of stuff that must be set before initialisation. */
-@@ -615,16 +620,14 @@ struct yaffs_DeviceStruct {
-       __u32 tnodeWidth;
-       __u32 tnodeMask;
--      /* Stuff to support various file offses to chunk/offset translations */
--      /* "Crumbs" for nDataBytesPerChunk not being a power of 2 */
--      __u32 crumbMask;
--      __u32 crumbShift;
--      __u32 crumbsPerChunk;
--
--      /* Straight shifting for nDataBytesPerChunk being a power of 2 */
--      __u32 chunkShift;
--      __u32 chunkMask;
--
-+      /* Stuff for figuring out file offset to chunk conversions */
-+      __u32 chunkShift; /* Shift value */
-+      __u32 chunkDiv;   /* Divisor after shifting: 1 for power-of-2 sizes */
-+      __u32 chunkMask;  /* Mask to use for power-of-2 case */
-+
-+      /* Stuff to handle inband tags */
-+      int inbandTags;
-+      __u32 totalBytesPerChunk;
- #ifdef __KERNEL__
-@@ -633,7 +636,7 @@ struct yaffs_DeviceStruct {
-       __u8 *spareBuffer;      /* For mtdif2 use. Don't know the size of the buffer
-                                * at compile time so we have to allocate it.
-                                */
--      void (*putSuperFunc) (struct super_block * sb);
-+      void (*putSuperFunc) (struct super_block *sb);
- #endif
-       int isMounted;
-@@ -663,6 +666,8 @@ struct yaffs_DeviceStruct {
-       __u32 checkpointSum;
-       __u32 checkpointXor;
-+      int nCheckpointBlocksRequired; /* Number of blocks needed to store current checkpoint set */
-+
-       /* Block Info */
-       yaffs_BlockInfo *blockInfo;
-       __u8 *chunkBits;        /* bitmap of chunks in use */
-@@ -684,11 +689,15 @@ struct yaffs_DeviceStruct {
-       yaffs_TnodeList *allocatedTnodeList;
-       int isDoingGC;
-+      int gcBlock;
-+      int gcChunk;
-       int nObjectsCreated;
-       yaffs_Object *freeObjects;
-       int nFreeObjects;
-+      int nHardLinks;
-+
-       yaffs_ObjectList *allocatedObjectList;
-       yaffs_ObjectBucket objectBucket[YAFFS_NOBJECT_BUCKETS];
-@@ -745,8 +754,10 @@ struct yaffs_DeviceStruct {
-       int nBackgroundDeletions;       /* Count of background deletions. */
-+      /* Temporary buffer management */
-       yaffs_TempBuffer tempBuffer[YAFFS_N_TEMP_BUFFERS];
-       int maxTemp;
-+      int tempInUse;
-       int unmanagedTempAllocations;
-       int unmanagedTempDeallocations;
-@@ -758,9 +769,9 @@ struct yaffs_DeviceStruct {
- typedef struct yaffs_DeviceStruct yaffs_Device;
--/* The static layout of bllock usage etc is stored in the super block header */
-+/* The static layout of block usage etc is stored in the super block header */
- typedef struct {
--        int StructType;
-+      int StructType;
-       int version;
-       int checkpointStartBlock;
-       int checkpointEndBlock;
-@@ -773,7 +784,7 @@ typedef struct {
-  * must be preserved over unmount/mount cycles.
-  */
- typedef struct {
--        int structType;
-+      int structType;
-       int nErasedBlocks;
-       int allocationBlock;    /* Current block being allocated off */
-       __u32 allocationPage;
-@@ -791,57 +802,45 @@ typedef struct {
- typedef struct {
--    int structType;
--    __u32 magic;
--    __u32 version;
--    __u32 head;
-+      int structType;
-+      __u32 magic;
-+      __u32 version;
-+      __u32 head;
- } yaffs_CheckpointValidity;
--/* Function to manipulate block info */
--static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
--{
--      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
--              T(YAFFS_TRACE_ERROR,
--                (TSTR
--                 ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
--                 blk));
--              YBUG();
--      }
--      return &dev->blockInfo[blk - dev->internalStartBlock];
--}
- /*----------------------- YAFFS Functions -----------------------*/
--int yaffs_GutsInitialise(yaffs_Device * dev);
--void yaffs_Deinitialise(yaffs_Device * dev);
-+int yaffs_GutsInitialise(yaffs_Device *dev);
-+void yaffs_Deinitialise(yaffs_Device *dev);
--int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev);
-+int yaffs_GetNumberOfFreeChunks(yaffs_Device *dev);
--int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
--                     yaffs_Object * newDir, const YCHAR * newName);
-+int yaffs_RenameObject(yaffs_Object *oldDir, const YCHAR *oldName,
-+                     yaffs_Object *newDir, const YCHAR *newName);
--int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name);
--int yaffs_DeleteFile(yaffs_Object * obj);
-+int yaffs_Unlink(yaffs_Object *dir, const YCHAR *name);
-+int yaffs_DeleteObject(yaffs_Object *obj);
--int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize);
--int yaffs_GetObjectFileLength(yaffs_Object * obj);
--int yaffs_GetObjectInode(yaffs_Object * obj);
--unsigned yaffs_GetObjectType(yaffs_Object * obj);
--int yaffs_GetObjectLinkCount(yaffs_Object * obj);
-+int yaffs_GetObjectName(yaffs_Object *obj, YCHAR *name, int buffSize);
-+int yaffs_GetObjectFileLength(yaffs_Object *obj);
-+int yaffs_GetObjectInode(yaffs_Object *obj);
-+unsigned yaffs_GetObjectType(yaffs_Object *obj);
-+int yaffs_GetObjectLinkCount(yaffs_Object *obj);
--int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr);
--int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr);
-+int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr);
-+int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr);
- /* File operations */
--int yaffs_ReadDataFromFile(yaffs_Object * obj, __u8 * buffer, loff_t offset,
--                         int nBytes);
--int yaffs_WriteDataToFile(yaffs_Object * obj, const __u8 * buffer, loff_t offset,
--                        int nBytes, int writeThrough);
--int yaffs_ResizeFile(yaffs_Object * obj, loff_t newSize);
--
--yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
--                            __u32 mode, __u32 uid, __u32 gid);
--int yaffs_FlushFile(yaffs_Object * obj, int updateTime);
-+int yaffs_ReadDataFromFile(yaffs_Object *obj, __u8 *buffer, loff_t offset,
-+                              int nBytes);
-+int yaffs_WriteDataToFile(yaffs_Object *obj, const __u8 *buffer, loff_t offset,
-+                              int nBytes, int writeThrough);
-+int yaffs_ResizeFile(yaffs_Object *obj, loff_t newSize);
-+
-+yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid);
-+int yaffs_FlushFile(yaffs_Object *obj, int updateTime);
- /* Flushing and checkpointing */
- void yaffs_FlushEntireDeviceCache(yaffs_Device *dev);
-@@ -850,33 +849,33 @@ int yaffs_CheckpointSave(yaffs_Device *d
- int yaffs_CheckpointRestore(yaffs_Device *dev);
- /* Directory operations */
--yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
--                                 __u32 mode, __u32 uid, __u32 gid);
--yaffs_Object *yaffs_FindObjectByName(yaffs_Object * theDir, const YCHAR * name);
--int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
-+yaffs_Object *yaffs_MknodDirectory(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid);
-+yaffs_Object *yaffs_FindObjectByName(yaffs_Object *theDir, const YCHAR *name);
-+int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,
-                                  int (*fn) (yaffs_Object *));
--yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number);
-+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev, __u32 number);
- /* Link operations */
--yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
--                       yaffs_Object * equivalentObject);
-+yaffs_Object *yaffs_Link(yaffs_Object *parent, const YCHAR *name,
-+                       yaffs_Object *equivalentObject);
--yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj);
-+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object *obj);
- /* Symlink operations */
--yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
-+yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent, const YCHAR *name,
-                                __u32 mode, __u32 uid, __u32 gid,
--                               const YCHAR * alias);
--YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj);
-+                               const YCHAR *alias);
-+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object *obj);
- /* Special inodes (fifos, sockets and devices) */
--yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
-+yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent, const YCHAR *name,
-                                __u32 mode, __u32 uid, __u32 gid, __u32 rdev);
- /* Special directories */
--yaffs_Object *yaffs_Root(yaffs_Device * dev);
--yaffs_Object *yaffs_LostNFound(yaffs_Device * dev);
-+yaffs_Object *yaffs_Root(yaffs_Device *dev);
-+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev);
- #ifdef CONFIG_YAFFS_WINCE
- /* CONFIG_YAFFS_WINCE special stuff */
-@@ -885,18 +884,21 @@ void yfsd_WinFileTimeNow(__u32 target[2]
- #ifdef __KERNEL__
--void yaffs_HandleDeferedFree(yaffs_Object * obj);
-+void yaffs_HandleDeferedFree(yaffs_Object *obj);
- #endif
- /* Debug dump  */
--int yaffs_DumpObject(yaffs_Object * obj);
-+int yaffs_DumpObject(yaffs_Object *obj);
--void yaffs_GutsTest(yaffs_Device * dev);
-+void yaffs_GutsTest(yaffs_Device *dev);
- /* A few useful functions */
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
--void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn);
--int yaffs_CheckFF(__u8 * buffer, int nBytes);
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags);
-+void yaffs_DeleteChunk(yaffs_Device *dev, int chunkId, int markNAND, int lyn);
-+int yaffs_CheckFF(__u8 *buffer, int nBytes);
- void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi);
-+__u8 *yaffs_GetTempBuffer(yaffs_Device *dev, int lineNo);
-+void yaffs_ReleaseTempBuffer(yaffs_Device *dev, __u8 *buffer, int lineNo);
-+
- #endif
---- a/fs/yaffs2/yaffs_mtdif1.c
-+++ b/fs/yaffs2/yaffs_mtdif1.c
-@@ -26,7 +26,7 @@
- #include "yportenv.h"
- #include "yaffs_guts.h"
- #include "yaffs_packedtags1.h"
--#include "yaffs_tagscompat.h" // for yaffs_CalcTagsECC
-+#include "yaffs_tagscompat.h" /* for yaffs_CalcTagsECC */
- #include "linux/kernel.h"
- #include "linux/version.h"
-@@ -34,9 +34,9 @@
- #include "linux/mtd/mtd.h"
- /* Don't compile this module if we don't have MTD's mtd_oob_ops interface */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
--const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.3 2007/05/15 20:16:11 ian Exp $";
-+const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.10 2009-03-09 07:41:10 charles Exp $";
- #ifndef CONFIG_YAFFS_9BYTE_TAGS
- # define YTAG1_SIZE 8
-@@ -89,9 +89,9 @@ static struct nand_ecclayout nand_oob_16
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
- int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device *dev,
--      int chunkInNAND, const __u8 * data, const yaffs_ExtendedTags * etags)
-+      int chunkInNAND, const __u8 *data, const yaffs_ExtendedTags *etags)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkBytes = dev->nDataBytesPerChunk;
-       loff_t addr = ((loff_t)chunkInNAND) * chunkBytes;
-       struct mtd_oob_ops ops;
-@@ -146,7 +146,7 @@ int nandmtd1_WriteChunkWithTagsToNAND(ya
- /* Return with empty ExtendedTags but add eccResult.
-  */
--static int rettags(yaffs_ExtendedTags * etags, int eccResult, int retval)
-+static int rettags(yaffs_ExtendedTags *etags, int eccResult, int retval)
- {
-       if (etags) {
-               memset(etags, 0, sizeof(*etags));
-@@ -169,9 +169,9 @@ static int rettags(yaffs_ExtendedTags * 
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
- int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device *dev,
--      int chunkInNAND, __u8 * data, yaffs_ExtendedTags * etags)
-+      int chunkInNAND, __u8 *data, yaffs_ExtendedTags *etags)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkBytes = dev->nDataBytesPerChunk;
-       loff_t addr = ((loff_t)chunkInNAND) * chunkBytes;
-       int eccres = YAFFS_ECC_RESULT_NO_ERROR;
-@@ -189,7 +189,7 @@ int nandmtd1_ReadChunkWithTagsFromNAND(y
-       ops.datbuf = data;
-       ops.oobbuf = (__u8 *)&pt1;
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 20))
-       /* In MTD 2.6.18 to 2.6.19 nand_base.c:nand_do_read_oob() has a bug;
-        * help it out with ops.len = ops.ooblen when ops.datbuf == NULL.
-        */
-@@ -284,11 +284,11 @@ int nandmtd1_ReadChunkWithTagsFromNAND(y
-  */
- int nandmtd1_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int blocksize = dev->nChunksPerBlock * dev->nDataBytesPerChunk;
-       int retval;
--      yaffs_trace(YAFFS_TRACE_BAD_BLOCKS, "marking block %d bad", blockNo);
-+      yaffs_trace(YAFFS_TRACE_BAD_BLOCKS, "marking block %d bad\n", blockNo);
-       retval = mtd->block_markbad(mtd, (loff_t)blocksize * blockNo);
-       return (retval) ? YAFFS_FAIL : YAFFS_OK;
-@@ -298,7 +298,7 @@ int nandmtd1_MarkNANDBlockBad(struct yaf
-  *
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
--static int nandmtd1_TestPrerequists(struct mtd_info * mtd)
-+static int nandmtd1_TestPrerequists(struct mtd_info *mtd)
- {
-       /* 2.6.18 has mtd->ecclayout->oobavail */
-       /* 2.6.21 has mtd->ecclayout->oobavail and mtd->oobavail */
-@@ -323,10 +323,11 @@ static int nandmtd1_TestPrerequists(stru
-  * Always returns YAFFS_OK.
-  */
- int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--      yaffs_BlockState * pState, int *pSequenceNumber)
-+      yaffs_BlockState *pState, __u32 *pSequenceNumber)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkNo = blockNo * dev->nChunksPerBlock;
-+      loff_t addr = (loff_t)chunkNo * dev->nDataBytesPerChunk;
-       yaffs_ExtendedTags etags;
-       int state = YAFFS_BLOCK_STATE_DEAD;
-       int seqnum = 0;
-@@ -335,21 +336,22 @@ int nandmtd1_QueryNANDBlock(struct yaffs
-       /* We don't yet have a good place to test for MTD config prerequists.
-        * Do it here as we are called during the initial scan.
-        */
--      if (nandmtd1_TestPrerequists(mtd) != YAFFS_OK) {
-+      if (nandmtd1_TestPrerequists(mtd) != YAFFS_OK)
-               return YAFFS_FAIL;
--      }
-       retval = nandmtd1_ReadChunkWithTagsFromNAND(dev, chunkNo, NULL, &etags);
-+      etags.blockBad = (mtd->block_isbad)(mtd, addr);
-       if (etags.blockBad) {
-               yaffs_trace(YAFFS_TRACE_BAD_BLOCKS,
--                      "block %d is marked bad", blockNo);
-+                      "block %d is marked bad\n", blockNo);
-               state = YAFFS_BLOCK_STATE_DEAD;
--      }
--      else if (etags.chunkUsed) {
-+      } else if (etags.eccResult != YAFFS_ECC_RESULT_NO_ERROR) {
-+              /* bad tags, need to look more closely */
-+              state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
-+      } else if (etags.chunkUsed) {
-               state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
-               seqnum = etags.sequenceNumber;
--      }
--      else {
-+      } else {
-               state = YAFFS_BLOCK_STATE_EMPTY;
-       }
-@@ -360,4 +362,4 @@ int nandmtd1_QueryNANDBlock(struct yaffs
-       return YAFFS_OK;
- }
--#endif /*KERNEL_VERSION*/
-+#endif /*MTD_VERSION*/
---- a/fs/yaffs2/yaffs_mtdif1.h
-+++ b/fs/yaffs2/yaffs_mtdif1.h
-@@ -14,15 +14,15 @@
- #ifndef __YAFFS_MTDIF1_H__
- #define __YAFFS_MTDIF1_H__
--int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--      const __u8 * data, const yaffs_ExtendedTags * tags);
-+int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+      const __u8 *data, const yaffs_ExtendedTags *tags);
--int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--      __u8 * data, yaffs_ExtendedTags * tags);
-+int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+      __u8 *data, yaffs_ExtendedTags *tags);
- int nandmtd1_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--      yaffs_BlockState * state, int *sequenceNumber);
-+      yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
---- a/fs/yaffs2/yaffs_mtdif2.c
-+++ b/fs/yaffs2/yaffs_mtdif2.c
-@@ -14,7 +14,7 @@
- /* mtd interface for YAFFS2 */
- const char *yaffs_mtdif2_c_version =
--    "$Id: yaffs_mtdif2.c,v 1.17 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_mtdif2.c,v 1.23 2009-03-06 17:20:53 wookey Exp $";
- #include "yportenv.h"
-@@ -27,19 +27,23 @@ const char *yaffs_mtdif2_c_version =
- #include "yaffs_packedtags2.h"
--int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--                                    const __u8 * data,
--                                    const yaffs_ExtendedTags * tags)
-+/* NB For use with inband tags....
-+ * We assume that the data buffer is of size totalBytersPerChunk so that we can also
-+ * use it to load the tags.
-+ */
-+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+                                    const __u8 *data,
-+                                    const yaffs_ExtendedTags *tags)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #else
-       size_t dummy;
- #endif
-       int retval = 0;
--      loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+      loff_t addr;
-       yaffs_PackedTags2 pt;
-@@ -48,46 +52,40 @@ int nandmtd2_WriteChunkWithTagsToNAND(ya
-          ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
-           TENDSTR), chunkInNAND, data, tags));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--      if (tags)
--              yaffs_PackTags2(&pt, tags);
--      else
--              BUG(); /* both tags and data should always be present */
--      if (data) {
--              ops.mode = MTD_OOB_AUTO;
--              ops.ooblen = sizeof(pt);
--              ops.len = dev->nDataBytesPerChunk;
--              ops.ooboffs = 0;
--              ops.datbuf = (__u8 *)data;
--              ops.oobbuf = (void *)&pt;
--              retval = mtd->write_oob(mtd, addr, &ops);
-+      addr  = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;
-+
-+      /* For yaffs2 writing there must be both data and tags.
-+       * If we're using inband tags, then the tags are stuffed into
-+       * the end of the data buffer.
-+       */
-+      if (!data || !tags)
-+              BUG();
-+      else if (dev->inbandTags) {
-+              yaffs_PackedTags2TagsPart *pt2tp;
-+              pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->nDataBytesPerChunk);
-+              yaffs_PackTags2TagsPart(pt2tp, tags);
-       } else
--              BUG(); /* both tags and data should always be present */
--#else
--      if (tags) {
-               yaffs_PackTags2(&pt, tags);
--      }
--      if (data && tags) {
--              if (dev->useNANDECC)
--                      retval =
--                          mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                         &dummy, data, (__u8 *) & pt, NULL);
--              else
--                      retval =
--                          mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                         &dummy, data, (__u8 *) & pt, NULL);
--      } else {
--              if (data)
--                      retval =
--                          mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
--                                     data);
--              if (tags)
--                      retval =
--                          mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
--                                         (__u8 *) & pt);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+      ops.mode = MTD_OOB_AUTO;
-+      ops.ooblen = (dev->inbandTags) ? 0 : sizeof(pt);
-+      ops.len = dev->totalBytesPerChunk;
-+      ops.ooboffs = 0;
-+      ops.datbuf = (__u8 *)data;
-+      ops.oobbuf = (dev->inbandTags) ? NULL : (void *)&pt;
-+      retval = mtd->write_oob(mtd, addr, &ops);
-+#else
-+      if (!dev->inbandTags) {
-+              retval =
-+                  mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+                                 &dummy, data, (__u8 *) &pt, NULL);
-+      } else {
-+              retval =
-+                  mtd->write(mtd, addr, dev->totalBytesPerChunk, &dummy,
-+                             data);
-       }
- #endif
-@@ -97,17 +95,18 @@ int nandmtd2_WriteChunkWithTagsToNAND(ya
-               return YAFFS_FAIL;
- }
--int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                     __u8 * data, yaffs_ExtendedTags * tags)
-+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                     __u8 *data, yaffs_ExtendedTags *tags)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-+      int localData = 0;
--      loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+      loff_t addr = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;
-       yaffs_PackedTags2 pt;
-@@ -116,9 +115,20 @@ int nandmtd2_ReadChunkWithTagsFromNAND(y
-          ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
-           TENDSTR), chunkInNAND, data, tags));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--      if (data && !tags)
--              retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
-+      if (dev->inbandTags) {
-+
-+              if (!data) {
-+                      localData = 1;
-+                      data = yaffs_GetTempBuffer(dev, __LINE__);
-+              }
-+
-+
-+      }
-+
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+      if (dev->inbandTags || (data && !tags))
-+              retval = mtd->read(mtd, addr, dev->totalBytesPerChunk,
-                               &dummy, data);
-       else if (tags) {
-               ops.mode = MTD_OOB_AUTO;
-@@ -130,38 +140,42 @@ int nandmtd2_ReadChunkWithTagsFromNAND(y
-               retval = mtd->read_oob(mtd, addr, &ops);
-       }
- #else
--      if (data && tags) {
--              if (dev->useNANDECC) {
--                      retval =
--                          mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                        &dummy, data, dev->spareBuffer,
--                                        NULL);
--              } else {
--                      retval =
--                          mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+      if (!dev->inbandTags && data && tags) {
-+
-+              retval = mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-                                         &dummy, data, dev->spareBuffer,
-                                         NULL);
--              }
-       } else {
-               if (data)
-                       retval =
-                           mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
-                                     data);
--              if (tags)
-+              if (!dev->inbandTags && tags)
-                       retval =
-                           mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
-                                         dev->spareBuffer);
-       }
- #endif
--      memcpy(&pt, dev->spareBuffer, sizeof(pt));
--      if (tags)
--              yaffs_UnpackTags2(tags, &pt);
-+      if (dev->inbandTags) {
-+              if (tags) {
-+                      yaffs_PackedTags2TagsPart *pt2tp;
-+                      pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk];
-+                      yaffs_UnpackTags2TagsPart(tags, pt2tp);
-+              }
-+      } else {
-+              if (tags) {
-+                      memcpy(&pt, dev->spareBuffer, sizeof(pt));
-+                      yaffs_UnpackTags2(tags, &pt);
-+              }
-+      }
--      if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
--              tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-+      if (localData)
-+              yaffs_ReleaseTempBuffer(dev, data, __LINE__);
-+      if (tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
-+              tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-       if (retval == 0)
-               return YAFFS_OK;
-       else
-@@ -178,7 +192,7 @@ int nandmtd2_MarkNANDBlockBad(struct yaf
-       retval =
-           mtd->block_markbad(mtd,
-                              blockNo * dev->nChunksPerBlock *
--                             dev->nDataBytesPerChunk);
-+                             dev->totalBytesPerChunk);
-       if (retval == 0)
-               return YAFFS_OK;
-@@ -188,7 +202,7 @@ int nandmtd2_MarkNANDBlockBad(struct yaf
- }
- int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                          yaffs_BlockState * state, int *sequenceNumber)
-+                          yaffs_BlockState *state, __u32 *sequenceNumber)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-       int retval;
-@@ -198,7 +212,7 @@ int nandmtd2_QueryNANDBlock(struct yaffs
-       retval =
-           mtd->block_isbad(mtd,
-                            blockNo * dev->nChunksPerBlock *
--                           dev->nDataBytesPerChunk);
-+                           dev->totalBytesPerChunk);
-       if (retval) {
-               T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
---- a/fs/yaffs2/yaffs_mtdif2.h
-+++ b/fs/yaffs2/yaffs_mtdif2.h
-@@ -17,13 +17,13 @@
- #define __YAFFS_MTDIF2_H__
- #include "yaffs_guts.h"
--int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--                                    const __u8 * data,
--                                    const yaffs_ExtendedTags * tags);
--int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                     __u8 * data, yaffs_ExtendedTags * tags);
-+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags);
-+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                              __u8 *data, yaffs_ExtendedTags *tags);
- int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                          yaffs_BlockState * state, int *sequenceNumber);
-+                      yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
---- a/fs/yaffs2/yaffs_mtdif.c
-+++ b/fs/yaffs2/yaffs_mtdif.c
-@@ -12,7 +12,7 @@
-  */
- const char *yaffs_mtdif_c_version =
--    "$Id: yaffs_mtdif.c,v 1.19 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_mtdif.c,v 1.22 2009-03-06 17:20:51 wookey Exp $";
- #include "yportenv.h"
-@@ -24,7 +24,7 @@ const char *yaffs_mtdif_c_version =
- #include "linux/time.h"
- #include "linux/mtd/nand.h"
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 18))
- static struct nand_oobinfo yaffs_oobinfo = {
-       .useecc = 1,
-       .eccbytes = 6,
-@@ -36,7 +36,7 @@ static struct nand_oobinfo yaffs_noeccin
- };
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
- static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
- {
-       oob[0] = spare->tagByte0;
-@@ -45,8 +45,8 @@ static inline void translate_spare2oob(c
-       oob[3] = spare->tagByte3;
-       oob[4] = spare->tagByte4;
-       oob[5] = spare->tagByte5 & 0x3f;
--      oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
--      oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
-+      oob[5] |= spare->blockStatus == 'Y' ? 0 : 0x80;
-+      oob[5] |= spare->pageStatus == 0 ? 0 : 0x40;
-       oob[6] = spare->tagByte6;
-       oob[7] = spare->tagByte7;
- }
-@@ -71,18 +71,18 @@ static inline void translate_oob2spare(y
- }
- #endif
--int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
--                           const __u8 * data, const yaffs_Spare * spare)
-+int nandmtd_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,
-+                           const __u8 *data, const yaffs_Spare *spare)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       __u8 spareAsBytes[8]; /* OOB */
-       if (data && !spare)
-@@ -135,18 +135,18 @@ int nandmtd_WriteChunkToNAND(yaffs_Devic
-               return YAFFS_FAIL;
- }
--int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
--                            yaffs_Spare * spare)
-+int nandmtd_ReadChunkFromNAND(yaffs_Device *dev, int chunkInNAND, __u8 *data,
-+                            yaffs_Spare *spare)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       __u8 spareAsBytes[8]; /* OOB */
-       if (data && !spare)
-@@ -205,7 +205,7 @@ int nandmtd_ReadChunkFromNAND(yaffs_Devi
-               return YAFFS_FAIL;
- }
--int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
-+int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-       __u32 addr =
-@@ -234,7 +234,7 @@ int nandmtd_EraseBlockInNAND(yaffs_Devic
-               return YAFFS_FAIL;
- }
--int nandmtd_InitialiseNAND(yaffs_Device * dev)
-+int nandmtd_InitialiseNAND(yaffs_Device *dev)
- {
-       return YAFFS_OK;
- }
---- a/fs/yaffs2/yaffs_mtdif.h
-+++ b/fs/yaffs2/yaffs_mtdif.h
-@@ -18,10 +18,15 @@
- #include "yaffs_guts.h"
--int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
--                           const __u8 * data, const yaffs_Spare * spare);
--int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
--                            yaffs_Spare * spare);
--int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
--int nandmtd_InitialiseNAND(yaffs_Device * dev);
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 18))
-+extern struct nand_oobinfo yaffs_oobinfo;
-+extern struct nand_oobinfo yaffs_noeccinfo;
-+#endif
-+
-+int nandmtd_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,
-+                      const __u8 *data, const yaffs_Spare *spare);
-+int nandmtd_ReadChunkFromNAND(yaffs_Device *dev, int chunkInNAND, __u8 *data,
-+                      yaffs_Spare *spare);
-+int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-+int nandmtd_InitialiseNAND(yaffs_Device *dev);
- #endif
---- a/fs/yaffs2/yaffs_nand.c
-+++ b/fs/yaffs2/yaffs_nand.c
-@@ -12,16 +12,17 @@
-  */
- const char *yaffs_nand_c_version =
--    "$Id: yaffs_nand.c,v 1.7 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_nand.c,v 1.10 2009-03-06 17:20:54 wookey Exp $";
- #include "yaffs_nand.h"
- #include "yaffs_tagscompat.h"
- #include "yaffs_tagsvalidity.h"
-+#include "yaffs_getblockinfo.h"
--int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                         __u8 * buffer,
--                                         yaffs_ExtendedTags * tags)
-+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                         __u8 *buffer,
-+                                         yaffs_ExtendedTags *tags)
- {
-       int result;
-       yaffs_ExtendedTags localTags;
-@@ -29,7 +30,7 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff
-       int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
-       /* If there are no tags provided, use local tags to get prioritised gc working */
--      if(!tags)
-+      if (!tags)
-               tags = &localTags;
-       if (dev->readChunkWithTagsFromNAND)
-@@ -40,20 +41,20 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff
-                                                                       realignedChunkInNAND,
-                                                                       buffer,
-                                                                       tags);
--      if(tags &&
--         tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
-+      if (tags &&
-+         tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR) {
-               yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
--                yaffs_HandleChunkError(dev,bi);
-+              yaffs_HandleChunkError(dev, bi);
-       }
-       return result;
- }
--int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
-+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev,
-                                                  int chunkInNAND,
--                                                 const __u8 * buffer,
--                                                 yaffs_ExtendedTags * tags)
-+                                                 const __u8 *buffer,
-+                                                 yaffs_ExtendedTags *tags)
- {
-       chunkInNAND -= dev->chunkOffset;
-@@ -84,7 +85,7 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs
-                                                                      tags);
- }
--int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
-+int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo)
- {
-       blockNo -= dev->blockOffset;
-@@ -95,10 +96,10 @@ int yaffs_MarkBlockBad(yaffs_Device * de
-               return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
- }
--int yaffs_QueryInitialBlockState(yaffs_Device * dev,
-+int yaffs_QueryInitialBlockState(yaffs_Device *dev,
-                                                int blockNo,
--                                               yaffs_BlockState * state,
--                                               unsigned *sequenceNumber)
-+                                               yaffs_BlockState *state,
-+                                               __u32 *sequenceNumber)
- {
-       blockNo -= dev->blockOffset;
---- a/fs/yaffs2/yaffs_nandemul2k.h
-+++ b/fs/yaffs2/yaffs_nandemul2k.h
-@@ -21,14 +21,14 @@
- #include "yaffs_guts.h"
- int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
--                                      int chunkInNAND, const __u8 * data,
--                                      yaffs_ExtendedTags * tags);
-+                                      int chunkInNAND, const __u8 *data,
-+                                      const yaffs_ExtendedTags *tags);
- int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
--                                       int chunkInNAND, __u8 * data,
--                                       yaffs_ExtendedTags * tags);
-+                                       int chunkInNAND, __u8 *data,
-+                                       yaffs_ExtendedTags *tags);
- int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                            yaffs_BlockState * state, int *sequenceNumber);
-+                            yaffs_BlockState *state, __u32 *sequenceNumber);
- int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-                               int blockInNAND);
- int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
---- a/fs/yaffs2/yaffs_nand.h
-+++ b/fs/yaffs2/yaffs_nand.h
-@@ -19,21 +19,21 @@
--int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                         __u8 * buffer,
--                                         yaffs_ExtendedTags * tags);
--
--int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                 int chunkInNAND,
--                                                 const __u8 * buffer,
--                                                 yaffs_ExtendedTags * tags);
--
--int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo);
--
--int yaffs_QueryInitialBlockState(yaffs_Device * dev,
--                                               int blockNo,
--                                               yaffs_BlockState * state,
--                                               unsigned *sequenceNumber);
-+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                      __u8 *buffer,
-+                                      yaffs_ExtendedTags *tags);
-+
-+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *buffer,
-+                                              yaffs_ExtendedTags *tags);
-+
-+int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo);
-+
-+int yaffs_QueryInitialBlockState(yaffs_Device *dev,
-+                                              int blockNo,
-+                                              yaffs_BlockState *state,
-+                                              unsigned *sequenceNumber);
- int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-                                 int blockInNAND);
---- a/fs/yaffs2/yaffs_packedtags1.c
-+++ b/fs/yaffs2/yaffs_packedtags1.c
-@@ -14,7 +14,7 @@
- #include "yaffs_packedtags1.h"
- #include "yportenv.h"
--void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t)
-+void yaffs_PackTags1(yaffs_PackedTags1 *pt, const yaffs_ExtendedTags *t)
- {
-       pt->chunkId = t->chunkId;
-       pt->serialNumber = t->serialNumber;
-@@ -27,7 +27,7 @@ void yaffs_PackTags1(yaffs_PackedTags1 *
- }
--void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt)
-+void yaffs_UnpackTags1(yaffs_ExtendedTags *t, const yaffs_PackedTags1 *pt)
- {
-       static const __u8 allFF[] =
-           { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-@@ -35,9 +35,8 @@ void yaffs_UnpackTags1(yaffs_ExtendedTag
-       if (memcmp(allFF, pt, sizeof(yaffs_PackedTags1))) {
-               t->blockBad = 0;
--              if (pt->shouldBeFF != 0xFFFFFFFF) {
-+              if (pt->shouldBeFF != 0xFFFFFFFF)
-                       t->blockBad = 1;
--              }
-               t->chunkUsed = 1;
-               t->objectId = pt->objectId;
-               t->chunkId = pt->chunkId;
-@@ -47,6 +46,5 @@ void yaffs_UnpackTags1(yaffs_ExtendedTag
-               t->serialNumber = pt->serialNumber;
-       } else {
-               memset(t, 0, sizeof(yaffs_ExtendedTags));
--
-       }
- }
---- a/fs/yaffs2/yaffs_packedtags1.h
-+++ b/fs/yaffs2/yaffs_packedtags1.h
-@@ -32,6 +32,6 @@ typedef struct {
- } yaffs_PackedTags1;
--void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t);
--void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt);
-+void yaffs_PackTags1(yaffs_PackedTags1 *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags1(yaffs_ExtendedTags *t, const yaffs_PackedTags1 *pt);
- #endif
---- a/fs/yaffs2/yaffs_packedtags2.c
-+++ b/fs/yaffs2/yaffs_packedtags2.c
-@@ -37,60 +37,68 @@
- #define EXTRA_OBJECT_TYPE_SHIFT (28)
- #define EXTRA_OBJECT_TYPE_MASK  ((0x0F) << EXTRA_OBJECT_TYPE_SHIFT)
--static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt)
-+
-+static void yaffs_DumpPackedTags2TagsPart(const yaffs_PackedTags2TagsPart *ptt)
- {
-       T(YAFFS_TRACE_MTD,
-         (TSTR("packed tags obj %d chunk %d byte %d seq %d" TENDSTR),
--         pt->t.objectId, pt->t.chunkId, pt->t.byteCount,
--         pt->t.sequenceNumber));
-+         ptt->objectId, ptt->chunkId, ptt->byteCount,
-+         ptt->sequenceNumber));
-+}
-+static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 *pt)
-+{
-+      yaffs_DumpPackedTags2TagsPart(&pt->t);
- }
--static void yaffs_DumpTags2(const yaffs_ExtendedTags * t)
-+static void yaffs_DumpTags2(const yaffs_ExtendedTags *t)
- {
-       T(YAFFS_TRACE_MTD,
-         (TSTR
--         ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte "
--          "%d del %d ser %d seq %d"
-+         ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte %d del %d ser %d seq %d"
-           TENDSTR), t->eccResult, t->blockBad, t->chunkUsed, t->objectId,
-          t->chunkId, t->byteCount, t->chunkDeleted, t->serialNumber,
-          t->sequenceNumber));
- }
--void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t)
-+void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart *ptt,
-+              const yaffs_ExtendedTags *t)
- {
--      pt->t.chunkId = t->chunkId;
--      pt->t.sequenceNumber = t->sequenceNumber;
--      pt->t.byteCount = t->byteCount;
--      pt->t.objectId = t->objectId;
-+      ptt->chunkId = t->chunkId;
-+      ptt->sequenceNumber = t->sequenceNumber;
-+      ptt->byteCount = t->byteCount;
-+      ptt->objectId = t->objectId;
-       if (t->chunkId == 0 && t->extraHeaderInfoAvailable) {
-               /* Store the extra header info instead */
-               /* We save the parent object in the chunkId */
--              pt->t.chunkId = EXTRA_HEADER_INFO_FLAG
-+              ptt->chunkId = EXTRA_HEADER_INFO_FLAG
-                       | t->extraParentObjectId;
--              if (t->extraIsShrinkHeader) {
--                      pt->t.chunkId |= EXTRA_SHRINK_FLAG;
--              }
--              if (t->extraShadows) {
--                      pt->t.chunkId |= EXTRA_SHADOWS_FLAG;
--              }
-+              if (t->extraIsShrinkHeader)
-+                      ptt->chunkId |= EXTRA_SHRINK_FLAG;
-+              if (t->extraShadows)
-+                      ptt->chunkId |= EXTRA_SHADOWS_FLAG;
--              pt->t.objectId &= ~EXTRA_OBJECT_TYPE_MASK;
--              pt->t.objectId |=
-+              ptt->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
-+              ptt->objectId |=
-                   (t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT);
--              if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
--                      pt->t.byteCount = t->extraEquivalentObjectId;
--              } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) {
--                      pt->t.byteCount = t->extraFileLength;
--              } else {
--                      pt->t.byteCount = 0;
--              }
-+              if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
-+                      ptt->byteCount = t->extraEquivalentObjectId;
-+              else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE)
-+                      ptt->byteCount = t->extraFileLength;
-+              else
-+                      ptt->byteCount = 0;
-       }
--      yaffs_DumpPackedTags2(pt);
-+      yaffs_DumpPackedTags2TagsPart(ptt);
-       yaffs_DumpTags2(t);
-+}
-+
-+
-+void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t)
-+{
-+      yaffs_PackTags2TagsPart(&pt->t, t);
- #ifndef YAFFS_IGNORE_TAGS_ECC
-       {
-@@ -101,82 +109,98 @@ void yaffs_PackTags2(yaffs_PackedTags2 *
- #endif
- }
--void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt)
-+
-+void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags *t,
-+              yaffs_PackedTags2TagsPart *ptt)
- {
-       memset(t, 0, sizeof(yaffs_ExtendedTags));
-       yaffs_InitialiseTags(t);
--      if (pt->t.sequenceNumber != 0xFFFFFFFF) {
--              /* Page is in use */
--#ifdef YAFFS_IGNORE_TAGS_ECC
--              {
--                      t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
--              }
--#else
--              {
--                      yaffs_ECCOther ecc;
--                      int result;
--                      yaffs_ECCCalculateOther((unsigned char *)&pt->t,
--                                              sizeof
--                                              (yaffs_PackedTags2TagsPart),
--                                              &ecc);
--                      result =
--                          yaffs_ECCCorrectOther((unsigned char *)&pt->t,
--                                                sizeof
--                                                (yaffs_PackedTags2TagsPart),
--                                                &pt->ecc, &ecc);
--                      switch(result){
--                              case 0:
--                                      t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
--                                      break;
--                              case 1:
--                                      t->eccResult = YAFFS_ECC_RESULT_FIXED;
--                                      break;
--                              case -1:
--                                      t->eccResult = YAFFS_ECC_RESULT_UNFIXED;
--                                      break;
--                              default:
--                                      t->eccResult = YAFFS_ECC_RESULT_UNKNOWN;
--                      }
--              }
--#endif
-+      if (ptt->sequenceNumber != 0xFFFFFFFF) {
-               t->blockBad = 0;
-               t->chunkUsed = 1;
--              t->objectId = pt->t.objectId;
--              t->chunkId = pt->t.chunkId;
--              t->byteCount = pt->t.byteCount;
-+              t->objectId = ptt->objectId;
-+              t->chunkId = ptt->chunkId;
-+              t->byteCount = ptt->byteCount;
-               t->chunkDeleted = 0;
-               t->serialNumber = 0;
--              t->sequenceNumber = pt->t.sequenceNumber;
-+              t->sequenceNumber = ptt->sequenceNumber;
-               /* Do extra header info stuff */
--              if (pt->t.chunkId & EXTRA_HEADER_INFO_FLAG) {
-+              if (ptt->chunkId & EXTRA_HEADER_INFO_FLAG) {
-                       t->chunkId = 0;
-                       t->byteCount = 0;
-                       t->extraHeaderInfoAvailable = 1;
-                       t->extraParentObjectId =
--                          pt->t.chunkId & (~(ALL_EXTRA_FLAGS));
-+                          ptt->chunkId & (~(ALL_EXTRA_FLAGS));
-                       t->extraIsShrinkHeader =
--                          (pt->t.chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
-+                          (ptt->chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
-                       t->extraShadows =
--                          (pt->t.chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
-+                          (ptt->chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
-                       t->extraObjectType =
--                          pt->t.objectId >> EXTRA_OBJECT_TYPE_SHIFT;
-+                          ptt->objectId >> EXTRA_OBJECT_TYPE_SHIFT;
-                       t->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
--                      if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
--                              t->extraEquivalentObjectId = pt->t.byteCount;
--                      } else {
--                              t->extraFileLength = pt->t.byteCount;
-+                      if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
-+                              t->extraEquivalentObjectId = ptt->byteCount;
-+                      else
-+                              t->extraFileLength = ptt->byteCount;
-+              }
-+      }
-+
-+      yaffs_DumpPackedTags2TagsPart(ptt);
-+      yaffs_DumpTags2(t);
-+
-+}
-+
-+
-+void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt)
-+{
-+
-+      yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_NO_ERROR;
-+
-+      if (pt->t.sequenceNumber != 0xFFFFFFFF) {
-+              /* Page is in use */
-+#ifndef YAFFS_IGNORE_TAGS_ECC
-+              {
-+                      yaffs_ECCOther ecc;
-+                      int result;
-+                      yaffs_ECCCalculateOther((unsigned char *)&pt->t,
-+                                              sizeof
-+                                              (yaffs_PackedTags2TagsPart),
-+                                              &ecc);
-+                      result =
-+                          yaffs_ECCCorrectOther((unsigned char *)&pt->t,
-+                                                sizeof
-+                                                (yaffs_PackedTags2TagsPart),
-+                                                &pt->ecc, &ecc);
-+                      switch (result) {
-+                      case 0:
-+                              eccResult = YAFFS_ECC_RESULT_NO_ERROR;
-+                              break;
-+                      case 1:
-+                              eccResult = YAFFS_ECC_RESULT_FIXED;
-+                              break;
-+                      case -1:
-+                              eccResult = YAFFS_ECC_RESULT_UNFIXED;
-+                              break;
-+                      default:
-+                              eccResult = YAFFS_ECC_RESULT_UNKNOWN;
-                       }
-               }
-+#endif
-       }
-+      yaffs_UnpackTags2TagsPart(t, &pt->t);
-+
-+      t->eccResult = eccResult;
-+
-       yaffs_DumpPackedTags2(pt);
-       yaffs_DumpTags2(t);
- }
-+
---- a/fs/yaffs2/yaffs_packedtags2.h
-+++ b/fs/yaffs2/yaffs_packedtags2.h
-@@ -33,6 +33,11 @@ typedef struct {
-       yaffs_ECCOther ecc;
- } yaffs_PackedTags2;
--void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t);
--void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt);
-+/* Full packed tags with ECC, used for oob tags */
-+void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt);
-+
-+/* Only the tags part (no ECC for use with inband tags */
-+void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags *t, yaffs_PackedTags2TagsPart *pt);
- #endif
---- a/fs/yaffs2/yaffs_qsort.c
-+++ b/fs/yaffs2/yaffs_qsort.c
-@@ -28,12 +28,12 @@
-  */
- #include "yportenv.h"
--//#include <linux/string.h>
-+/* #include <linux/string.h> */
- /*
-  * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
-  */
--#define swapcode(TYPE, parmi, parmj, n) {             \
-+#define swapcode(TYPE, parmi, parmj, n) do {          \
-       long i = (n) / sizeof (TYPE);                   \
-       register TYPE *pi = (TYPE *) (parmi);           \
-       register TYPE *pj = (TYPE *) (parmj);           \
-@@ -41,28 +41,29 @@
-               register TYPE   t = *pi;                \
-               *pi++ = *pj;                            \
-               *pj++ = t;                              \
--        } while (--i > 0);                            \
--}
-+      } while (--i > 0);                              \
-+} while (0)
- #define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
--      es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
-+      es % sizeof(long) ? 2 : es == sizeof(long) ? 0 : 1;
- static __inline void
- swapfunc(char *a, char *b, int n, int swaptype)
- {
-       if (swaptype <= 1)
--              swapcode(long, a, b, n)
-+              swapcode(long, a, b, n);
-       else
--              swapcode(char, a, b, n)
-+              swapcode(char, a, b, n);
- }
--#define swap(a, b)                                    \
-+#define yswap(a, b) do {                                      \
-       if (swaptype == 0) {                            \
-               long t = *(long *)(a);                  \
-               *(long *)(a) = *(long *)(b);            \
-               *(long *)(b) = t;                       \
-       } else                                          \
--              swapfunc(a, b, es, swaptype)
-+              swapfunc(a, b, es, swaptype);           \
-+} while (0)
- #define vecswap(a, b, n)      if ((n) > 0) swapfunc(a, b, n, swaptype)
-@@ -70,12 +71,12 @@ static __inline char *
- med3(char *a, char *b, char *c, int (*cmp)(const void *, const void *))
- {
-       return cmp(a, b) < 0 ?
--             (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
--              :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
-+              (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a))
-+              : (cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c));
- }
- #ifndef min
--#define min(a,b) (((a) < (b)) ? (a) : (b))
-+#define min(a, b) (((a) < (b)) ? (a) : (b))
- #endif
- void
-@@ -92,7 +93,7 @@ loop:        SWAPINIT(a, es);
-               for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
-                            pl -= es)
--                              swap(pl, pl - es);
-+                              yswap(pl, pl - es);
-               return;
-       }
-       pm = (char *)a + (n / 2) * es;
-@@ -107,7 +108,7 @@ loop:      SWAPINIT(a, es);
-               }
-               pm = med3(pl, pm, pn, cmp);
-       }
--      swap(a, pm);
-+      yswap(a, pm);
-       pa = pb = (char *)a + es;
-       pc = pd = (char *)a + (n - 1) * es;
-@@ -115,7 +116,7 @@ loop:      SWAPINIT(a, es);
-               while (pb <= pc && (r = cmp(pb, a)) <= 0) {
-                       if (r == 0) {
-                               swap_cnt = 1;
--                              swap(pa, pb);
-+                              yswap(pa, pb);
-                               pa += es;
-                       }
-                       pb += es;
-@@ -123,14 +124,14 @@ loop:    SWAPINIT(a, es);
-               while (pb <= pc && (r = cmp(pc, a)) >= 0) {
-                       if (r == 0) {
-                               swap_cnt = 1;
--                              swap(pc, pd);
-+                              yswap(pc, pd);
-                               pd -= es;
-                       }
-                       pc -= es;
-               }
-               if (pb > pc)
-                       break;
--              swap(pb, pc);
-+              yswap(pb, pc);
-               swap_cnt = 1;
-               pb += es;
-               pc -= es;
-@@ -139,7 +140,7 @@ loop:      SWAPINIT(a, es);
-               for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
-                            pl -= es)
--                              swap(pl, pl - es);
-+                              yswap(pl, pl - es);
-               return;
-       }
-@@ -148,9 +149,11 @@ loop:     SWAPINIT(a, es);
-       vecswap(a, pb - r, r);
-       r = min((long)(pd - pc), (long)(pn - pd - es));
-       vecswap(pb, pn - r, r);
--      if ((r = pb - pa) > es)
-+      r = pb - pa;
-+      if (r > es)
-               yaffs_qsort(a, r / es, es, cmp);
--      if ((r = pd - pc) > es) {
-+      r = pd - pc;
-+      if (r > es) {
-               /* Iterate rather than recurse to save stack space */
-               a = pn - r;
-               n = r / es;
---- a/fs/yaffs2/yaffs_qsort.h
-+++ b/fs/yaffs2/yaffs_qsort.h
-@@ -17,7 +17,7 @@
- #ifndef __YAFFS_QSORT_H__
- #define __YAFFS_QSORT_H__
--extern void yaffs_qsort (void *const base, size_t total_elems, size_t size,
--                   int (*cmp)(const void *, const void *));
-+extern void yaffs_qsort(void *const base, size_t total_elems, size_t size,
-+                      int (*cmp)(const void *, const void *));
- #endif
---- a/fs/yaffs2/yaffs_tagscompat.c
-+++ b/fs/yaffs2/yaffs_tagscompat.c
-@@ -14,16 +14,17 @@
- #include "yaffs_guts.h"
- #include "yaffs_tagscompat.h"
- #include "yaffs_ecc.h"
-+#include "yaffs_getblockinfo.h"
--static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND);
-+static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND);
- #ifdef NOTYET
--static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND);
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_Spare * spare);
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_Spare * spare);
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND);
-+static void yaffs_CheckWrittenBlock(yaffs_Device *dev, int chunkInNAND);
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                                   const __u8 *data,
-+                                   const yaffs_Spare *spare);
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                                  const yaffs_Spare *spare);
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND);
- #endif
- static const char yaffs_countBitsTable[256] = {
-@@ -54,13 +55,13 @@ int yaffs_CountBits(__u8 x)
- /********** Tags ECC calculations  *********/
--void yaffs_CalcECC(const __u8 * data, yaffs_Spare * spare)
-+void yaffs_CalcECC(const __u8 *data, yaffs_Spare *spare)
- {
-       yaffs_ECCCalculate(data, spare->ecc1);
-       yaffs_ECCCalculate(&data[256], spare->ecc2);
- }
--void yaffs_CalcTagsECC(yaffs_Tags * tags)
-+void yaffs_CalcTagsECC(yaffs_Tags *tags)
- {
-       /* Calculate an ecc */
-@@ -74,9 +75,8 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags
-       for (i = 0; i < 8; i++) {
-               for (j = 1; j & 0xff; j <<= 1) {
-                       bit++;
--                      if (b[i] & j) {
-+                      if (b[i] & j)
-                               ecc ^= bit;
--                      }
-               }
-       }
-@@ -84,7 +84,7 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags
- }
--int yaffs_CheckECCOnTags(yaffs_Tags * tags)
-+int yaffs_CheckECCOnTags(yaffs_Tags *tags)
- {
-       unsigned ecc = tags->ecc;
-@@ -115,8 +115,8 @@ int yaffs_CheckECCOnTags(yaffs_Tags * ta
- /********** Tags **********/
--static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,
--                                  yaffs_Tags * tagsPtr)
-+static void yaffs_LoadTagsIntoSpare(yaffs_Spare *sparePtr,
-+                              yaffs_Tags *tagsPtr)
- {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-@@ -132,8 +132,8 @@ static void yaffs_LoadTagsIntoSpare(yaff
-       sparePtr->tagByte7 = tu->asBytes[7];
- }
--static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
--                                 yaffs_Tags * tagsPtr)
-+static void yaffs_GetTagsFromSpare(yaffs_Device *dev, yaffs_Spare *sparePtr,
-+                              yaffs_Tags *tagsPtr)
- {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-       int result;
-@@ -148,21 +148,20 @@ static void yaffs_GetTagsFromSpare(yaffs
-       tu->asBytes[7] = sparePtr->tagByte7;
-       result = yaffs_CheckECCOnTags(tagsPtr);
--      if (result > 0) {
-+      if (result > 0)
-               dev->tagsEccFixed++;
--      } else if (result < 0) {
-+      else if (result < 0)
-               dev->tagsEccUnfixed++;
--      }
- }
--static void yaffs_SpareInitialise(yaffs_Spare * spare)
-+static void yaffs_SpareInitialise(yaffs_Spare *spare)
- {
-       memset(spare, 0xFF, sizeof(yaffs_Spare));
- }
- static int yaffs_WriteChunkToNAND(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND, const __u8 * data,
--                                yaffs_Spare * spare)
-+                              int chunkInNAND, const __u8 *data,
-+                              yaffs_Spare *spare)
- {
-       if (chunkInNAND < dev->startBlock * dev->nChunksPerBlock) {
-               T(YAFFS_TRACE_ERROR,
-@@ -177,9 +176,9 @@ static int yaffs_WriteChunkToNAND(struct
- static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev,
-                                  int chunkInNAND,
--                                 __u8 * data,
--                                 yaffs_Spare * spare,
--                                 yaffs_ECCResult * eccResult,
-+                                 __u8 *data,
-+                                 yaffs_Spare *spare,
-+                                 yaffs_ECCResult *eccResult,
-                                  int doErrorCorrection)
- {
-       int retVal;
-@@ -252,9 +251,11 @@ static int yaffs_ReadChunkFromNAND(struc
-               /* Must allocate enough memory for spare+2*sizeof(int) */
-               /* for ecc results from device. */
-               struct yaffs_NANDSpare nspare;
--              retVal =
--                  dev->readChunkFromNAND(dev, chunkInNAND, data,
--                                         (yaffs_Spare *) & nspare);
-+
-+              memset(&nspare, 0, sizeof(nspare));
-+
-+              retVal = dev->readChunkFromNAND(dev, chunkInNAND, data,
-+                                      (yaffs_Spare *) &nspare);
-               memcpy(spare, &nspare, sizeof(yaffs_Spare));
-               if (data && doErrorCorrection) {
-                       if (nspare.eccres1 > 0) {
-@@ -302,8 +303,7 @@ static int yaffs_ReadChunkFromNAND(struc
- static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
-                                 int chunkInNAND)
- {
--
--      static int init = 0;
-+      static int init;
-       static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK];
-       static __u8 data[YAFFS_BYTES_PER_CHUNK];
-       /* Might as well always allocate the larger size for */
-@@ -331,12 +331,12 @@ static int yaffs_CheckChunkErased(struct
-  * Functions for robustisizing
-  */
--static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND)
- {
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-       /* Mark the block for retirement */
--      yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
-+      yaffs_GetBlockInfo(dev, blockInNAND + dev->blockOffset)->needsRetiring = 1;
-       T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
-         (TSTR("**>>Block %d marked for retirement" TENDSTR), blockInNAND));
-@@ -348,22 +348,22 @@ static void yaffs_HandleReadDataError(ya
- }
- #ifdef NOTYET
--static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_CheckWrittenBlock(yaffs_Device *dev, int chunkInNAND)
- {
- }
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_Spare * spare)
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                                   const __u8 *data,
-+                                   const yaffs_Spare *spare)
- {
- }
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_Spare * spare)
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                                  const yaffs_Spare *spare)
- {
- }
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND)
- {
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-@@ -373,8 +373,8 @@ static void yaffs_HandleWriteChunkError(
-       yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
- }
--static int yaffs_VerifyCompare(const __u8 * d0, const __u8 * d1,
--                             const yaffs_Spare * s0, const yaffs_Spare * s1)
-+static int yaffs_VerifyCompare(const __u8 *d0, const __u8 *d1,
-+                             const yaffs_Spare *s0, const yaffs_Spare *s1)
- {
-       if (memcmp(d0, d1, YAFFS_BYTES_PER_CHUNK) != 0 ||
-@@ -398,28 +398,35 @@ static int yaffs_VerifyCompare(const __u
- }
- #endif                                /* NOTYET */
--int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                  int chunkInNAND,
--                                                  const __u8 * data,
--                                                  const yaffs_ExtendedTags *
--                                                  eTags)
-+int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *data,
-+                                              const yaffs_ExtendedTags *eTags)
- {
-       yaffs_Spare spare;
-       yaffs_Tags tags;
-       yaffs_SpareInitialise(&spare);
--      if (eTags->chunkDeleted) {
-+      if (eTags->chunkDeleted)
-               spare.pageStatus = 0;
--      } else {
-+      else {
-               tags.objectId = eTags->objectId;
-               tags.chunkId = eTags->chunkId;
--              tags.byteCount = eTags->byteCount;
-+
-+              tags.byteCountLSB = eTags->byteCount & 0x3ff;
-+
-+              if (dev->nDataBytesPerChunk >= 1024)
-+                      tags.byteCountMSB = (eTags->byteCount >> 10) & 3;
-+              else
-+                      tags.byteCountMSB = 3;
-+
-+
-               tags.serialNumber = eTags->serialNumber;
--              if (!dev->useNANDECC && data) {
-+              if (!dev->useNANDECC && data)
-                       yaffs_CalcECC(data, &spare);
--              }
-+
-               yaffs_LoadTagsIntoSpare(&spare, &tags);
-       }
-@@ -427,15 +434,15 @@ int yaffs_TagsCompatabilityWriteChunkWit
-       return yaffs_WriteChunkToNAND(dev, chunkInNAND, data, &spare);
- }
--int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
-+int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device *dev,
-                                                    int chunkInNAND,
--                                                   __u8 * data,
--                                                   yaffs_ExtendedTags * eTags)
-+                                                   __u8 *data,
-+                                                   yaffs_ExtendedTags *eTags)
- {
-       yaffs_Spare spare;
-       yaffs_Tags tags;
--      yaffs_ECCResult eccResult;
-+      yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_UNKNOWN;
-       static yaffs_Spare spareFF;
-       static int init;
-@@ -466,7 +473,11 @@ int yaffs_TagsCompatabilityReadChunkWith
-                               eTags->objectId = tags.objectId;
-                               eTags->chunkId = tags.chunkId;
--                              eTags->byteCount = tags.byteCount;
-+                              eTags->byteCount = tags.byteCountLSB;
-+
-+                              if (dev->nDataBytesPerChunk >= 1024)
-+                                      eTags->byteCount |= (((unsigned) tags.byteCountMSB) << 10);
-+
-                               eTags->serialNumber = tags.serialNumber;
-                       }
-               }
-@@ -497,9 +508,9 @@ int yaffs_TagsCompatabilityMarkNANDBlock
- }
- int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
--                                        int blockNo, yaffs_BlockState *
--                                        state,
--                                        int *sequenceNumber)
-+                                        int blockNo,
-+                                        yaffs_BlockState *state,
-+                                        __u32 *sequenceNumber)
- {
-       yaffs_Spare spare0, spare1;
---- a/fs/yaffs2/yaffs_tagscompat.h
-+++ b/fs/yaffs2/yaffs_tagscompat.h
-@@ -17,24 +17,23 @@
- #define __YAFFS_TAGSCOMPAT_H__
- #include "yaffs_guts.h"
--int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                  int chunkInNAND,
--                                                  const __u8 * data,
--                                                  const yaffs_ExtendedTags *
--                                                  tags);
--int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
--                                                   int chunkInNAND,
--                                                   __u8 * data,
--                                                   yaffs_ExtendedTags *
--                                                   tags);
-+int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *data,
-+                                              const yaffs_ExtendedTags *tags);
-+int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              __u8 *data,
-+                                              yaffs_ExtendedTags *tags);
- int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
-                                           int blockNo);
- int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
--                                        int blockNo, yaffs_BlockState *
--                                        state, int *sequenceNumber);
-+                                        int blockNo,
-+                                        yaffs_BlockState *state,
-+                                        __u32 *sequenceNumber);
--void yaffs_CalcTagsECC(yaffs_Tags * tags);
--int yaffs_CheckECCOnTags(yaffs_Tags * tags);
-+void yaffs_CalcTagsECC(yaffs_Tags *tags);
-+int yaffs_CheckECCOnTags(yaffs_Tags *tags);
- int yaffs_CountBits(__u8 byte);
- #endif
---- a/fs/yaffs2/yaffs_tagsvalidity.c
-+++ b/fs/yaffs2/yaffs_tagsvalidity.c
-@@ -13,14 +13,14 @@
- #include "yaffs_tagsvalidity.h"
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags)
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags)
- {
-       memset(tags, 0, sizeof(yaffs_ExtendedTags));
-       tags->validMarker0 = 0xAAAAAAAA;
-       tags->validMarker1 = 0x55555555;
- }
--int yaffs_ValidateTags(yaffs_ExtendedTags * tags)
-+int yaffs_ValidateTags(yaffs_ExtendedTags *tags)
- {
-       return (tags->validMarker0 == 0xAAAAAAAA &&
-               tags->validMarker1 == 0x55555555);
---- a/fs/yaffs2/yaffs_tagsvalidity.h
-+++ b/fs/yaffs2/yaffs_tagsvalidity.h
-@@ -19,6 +19,6 @@
- #include "yaffs_guts.h"
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
--int yaffs_ValidateTags(yaffs_ExtendedTags * tags);
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags);
-+int yaffs_ValidateTags(yaffs_ExtendedTags *tags);
- #endif
---- a/fs/yaffs2/yportenv.h
-+++ b/fs/yaffs2/yportenv.h
-@@ -17,17 +17,28 @@
- #ifndef __YPORTENV_H__
- #define __YPORTENV_H__
-+/*
-+ * Define the MTD version in terms of Linux Kernel versions
-+ * This allows yaffs to be used independantly of the kernel
-+ * as well as with it.
-+ */
-+
-+#define MTD_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
-+
- #if defined CONFIG_YAFFS_WINCE
- #include "ywinceenv.h"
--#elif  defined __KERNEL__
-+#elif defined __KERNEL__
- #include "moduleconfig.h"
- /* Linux kernel */
-+
- #include <linux/version.h>
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#define MTD_VERSION_CODE LINUX_VERSION_CODE
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
- #include <linux/config.h>
- #endif
- #include <linux/kernel.h>
-@@ -40,12 +51,13 @@
- #define YCHAR char
- #define YUCHAR unsigned char
- #define _Y(x)     x
--#define yaffs_strcpy(a,b)    strcpy(a,b)
--#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
--#define yaffs_strncmp(a,b,c) strncmp(a,b,c)
--#define yaffs_strlen(s)            strlen(s)
--#define yaffs_sprintf      sprintf
--#define yaffs_toupper(a)     toupper(a)
-+#define yaffs_strcat(a, b)     strcat(a, b)
-+#define yaffs_strcpy(a, b)     strcpy(a, b)
-+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
-+#define yaffs_strncmp(a, b, c) strncmp(a, b, c)
-+#define yaffs_strlen(s)              strlen(s)
-+#define yaffs_sprintf        sprintf
-+#define yaffs_toupper(a)       toupper(a)
- #define Y_INLINE inline
-@@ -53,19 +65,19 @@
- #define YAFFS_LOSTNFOUND_PREFIX               "obj"
- /* #define YPRINTF(x) printk x */
--#define YMALLOC(x) kmalloc(x,GFP_KERNEL)
-+#define YMALLOC(x) kmalloc(x, GFP_NOFS)
- #define YFREE(x)   kfree(x)
- #define YMALLOC_ALT(x) vmalloc(x)
- #define YFREE_ALT(x)   vfree(x)
- #define YMALLOC_DMA(x) YMALLOC(x)
--// KR - added for use in scan so processes aren't blocked indefinitely.
-+/* KR - added for use in scan so processes aren't blocked indefinitely. */
- #define YYIELD() schedule()
- #define YAFFS_ROOT_MODE                       0666
- #define YAFFS_LOSTNFOUND_MODE         0666
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #define Y_CURRENT_TIME CURRENT_TIME.tv_sec
- #define Y_TIME_CONVERT(x) (x).tv_sec
- #else
-@@ -73,11 +85,12 @@
- #define Y_TIME_CONVERT(x) (x)
- #endif
--#define yaffs_SumCompare(x,y) ((x) == (y))
--#define yaffs_strcmp(a,b) strcmp(a,b)
-+#define yaffs_SumCompare(x, y) ((x) == (y))
-+#define yaffs_strcmp(a, b) strcmp(a, b)
- #define TENDSTR "\n"
- #define TSTR(x) KERN_WARNING x
-+#define TCONT(x) x
- #define TOUT(p) printk p
- #define yaffs_trace(mask, fmt, args...) \
-@@ -90,6 +103,8 @@
- #elif defined CONFIG_YAFFS_DIRECT
-+#define MTD_VERSION_CODE MTD_VERSION(2, 6, 22)
-+
- /* Direct interface */
- #include "ydirectenv.h"
-@@ -111,11 +126,12 @@
- #define YCHAR char
- #define YUCHAR unsigned char
- #define _Y(x)     x
--#define yaffs_strcpy(a,b)    strcpy(a,b)
--#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
--#define yaffs_strlen(s)            strlen(s)
--#define yaffs_sprintf      sprintf
--#define yaffs_toupper(a)     toupper(a)
-+#define yaffs_strcat(a, b)     strcat(a, b)
-+#define yaffs_strcpy(a, b)     strcpy(a, b)
-+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
-+#define yaffs_strlen(s)              strlen(s)
-+#define yaffs_sprintf        sprintf
-+#define yaffs_toupper(a)       toupper(a)
- #define Y_INLINE inline
-@@ -133,8 +149,8 @@
- #define YAFFS_ROOT_MODE                               0666
- #define YAFFS_LOSTNFOUND_MODE         0666
--#define yaffs_SumCompare(x,y) ((x) == (y))
--#define yaffs_strcmp(a,b) strcmp(a,b)
-+#define yaffs_SumCompare(x, y) ((x) == (y))
-+#define yaffs_strcmp(a, b) strcmp(a, b)
- #else
- /* Should have specified a configuration type */
-@@ -178,10 +194,10 @@ extern unsigned int yaffs_wr_attempts;
- #define YAFFS_TRACE_ALWAYS            0xF0000000
--#define T(mask,p) do{ if((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p);} while(0)
-+#define T(mask, p) do { if ((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p); } while (0)
--#ifndef CONFIG_YAFFS_WINCE
--#define YBUG() T(YAFFS_TRACE_BUG,(TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR),__LINE__))
-+#ifndef YBUG
-+#define YBUG() do {T(YAFFS_TRACE_BUG, (TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR), __LINE__)); } while (0)
- #endif
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.33/600-phy_extension.patch b/target/linux/generic-2.6/patches-2.6.33/600-phy_extension.patch
deleted file mode 100644 (file)
index 966a812..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
---- a/drivers/net/phy/phy.c
-+++ b/drivers/net/phy/phy.c
-@@ -299,6 +299,50 @@ int phy_ethtool_gset(struct phy_device *
- }
- EXPORT_SYMBOL(phy_ethtool_gset);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr)
-+{
-+      u32 cmd;
-+      int tmp;
-+      struct ethtool_cmd ecmd = { ETHTOOL_GSET };
-+      struct ethtool_value edata = { ETHTOOL_GLINK };
-+
-+      if (get_user(cmd, (u32 *) useraddr))
-+              return -EFAULT;
-+
-+      switch (cmd) {
-+      case ETHTOOL_GSET:
-+              phy_ethtool_gset(phydev, &ecmd);
-+              if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return 0;
-+
-+      case ETHTOOL_SSET:
-+              if (copy_from_user(&ecmd, useraddr, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return phy_ethtool_sset(phydev, &ecmd);
-+
-+      case ETHTOOL_NWAY_RST:
-+              /* if autoneg is off, it's an error */
-+              tmp = phy_read(phydev, MII_BMCR);
-+              if (tmp & BMCR_ANENABLE) {
-+                      tmp |= (BMCR_ANRESTART);
-+                      phy_write(phydev, MII_BMCR, tmp);
-+                      return 0;
-+              }
-+              return -EINVAL;
-+
-+      case ETHTOOL_GLINK:
-+              edata.data = (phy_read(phydev,
-+                              MII_BMSR) & BMSR_LSTATUS) ? 1 : 0;
-+              if (copy_to_user(useraddr, &edata, sizeof(edata)))
-+                      return -EFAULT;
-+              return 0;
-+      }
-+
-+      return -EOPNOTSUPP;
-+}
-+EXPORT_SYMBOL(phy_ethtool_ioctl);
-+
- /**
-  * phy_mii_ioctl - generic PHY MII ioctl interface
-  * @phydev: the phy_device struct
-@@ -352,7 +396,7 @@ int phy_mii_ioctl(struct phy_device *phy
-               }
-               phy_write(phydev, mii_data->reg_num, val);
--              
-+
-               if (mii_data->reg_num == MII_BMCR &&
-                   val & BMCR_RESET &&
-                   phydev->drv->config_init) {
-@@ -466,7 +510,7 @@ static void phy_force_reduction(struct p
-       int idx;
-       idx = phy_find_setting(phydev->speed, phydev->duplex);
--      
-+
-       idx++;
-       idx = phy_find_valid(idx, phydev->supported);
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -491,6 +491,7 @@ void phy_start_machine(struct phy_device
- void phy_stop_machine(struct phy_device *phydev);
- int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
- int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr);
- int phy_mii_ioctl(struct phy_device *phydev,
-               struct mii_ioctl_data *mii_data, int cmd);
- int phy_start_interrupts(struct phy_device *phydev);
diff --git a/target/linux/generic-2.6/patches-2.6.33/620-phy_adm6996.patch b/target/linux/generic-2.6/patches-2.6.33/620-phy_adm6996.patch
deleted file mode 100644 (file)
index b3e469a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -88,6 +88,11 @@ config LSI_ET1011C_PHY
-       ---help---
-         Supports the LSI ET1011C PHY.
-+config ADM6996_PHY
-+      tristate "Driver for ADM6996 switches"
-+      ---help---
-+        Currently supports the ADM6996F switch
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -13,6 +13,7 @@ obj-$(CONFIG_VITESSE_PHY)    += vitesse.o
- obj-$(CONFIG_BROADCOM_PHY)    += broadcom.o
- obj-$(CONFIG_BCM63XX_PHY)     += bcm63xx.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
-+obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/630-phy_packets.patch b/target/linux/generic-2.6/patches-2.6.33/630-phy_packets.patch
deleted file mode 100644 (file)
index 9c0f24a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/drivers/net/phy/phy_device.c
-+++ b/drivers/net/phy/phy_device.c
-@@ -146,6 +146,18 @@ int phy_scan_fixups(struct phy_device *p
- }
- EXPORT_SYMBOL(phy_scan_fixups);
-+static int generic_receive_skb(struct sk_buff *skb)
-+{
-+      skb->protocol = eth_type_trans(skb, skb->dev);
-+      return netif_receive_skb(skb);
-+}
-+
-+static int generic_rx(struct sk_buff *skb)
-+{
-+      skb->protocol = eth_type_trans(skb, skb->dev);
-+      return netif_rx(skb);
-+}
-+
- struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
- {
-       struct phy_device *dev;
-@@ -175,6 +187,8 @@ struct phy_device* phy_device_create(str
-       dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
-       dev->state = PHY_DOWN;
-+      dev->netif_receive_skb = &generic_receive_skb;
-+      dev->netif_rx = &generic_rx;
-       mutex_init(&dev->lock);
-       INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -325,6 +325,20 @@ struct phy_device {
-       void (*adjust_link)(struct net_device *dev);
-       void (*adjust_state)(struct net_device *dev);
-+
-+      /*
-+       * By default these point to the original functions
-+       * with the same name. adding them to the phy_device
-+       * allows the phy driver to override them for packet
-+       * mangling if the ethernet driver supports it
-+       * This is required to support some really horrible
-+       * switches such as the Marvell 88E6060
-+       */
-+      int (*netif_receive_skb)(struct sk_buff *skb);
-+      int (*netif_rx)(struct sk_buff *skb);
-+
-+      /* alignment offset for packets */
-+      int pkt_align;
- };
- #define to_phy_device(d) container_of(d, struct phy_device, dev)
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -844,6 +844,7 @@ struct net_device {
-       void                    *ax25_ptr;      /* AX.25 specific data */
-       struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
-                                                  assign before registering */
-+      void                    *phy_ptr; /* PHY device specific data */
- /*
-  * Cache line mostly used on receive path (including eth_type_trans())
diff --git a/target/linux/generic-2.6/patches-2.6.33/650-swconfig.patch b/target/linux/generic-2.6/patches-2.6.33/650-swconfig.patch
deleted file mode 100644 (file)
index 6825037..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -13,6 +13,12 @@ menuconfig PHYLIB
- if PHYLIB
-+config SWCONFIG
-+      tristate "Switch configuration API"
-+      ---help---
-+        Switch configuration API using netlink. This allows
-+        you to configure the VLAN features of certain switches.
-+
- comment "MII PHY device drivers"
- config MARVELL_PHY
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -3,6 +3,7 @@
- libphy-objs                   := phy.o phy_device.o mdio_bus.o
- obj-$(CONFIG_PHYLIB)          += libphy.o
-+obj-$(CONFIG_SWCONFIG)                += swconfig.o
- obj-$(CONFIG_MARVELL_PHY)     += marvell.o
- obj-$(CONFIG_DAVICOM_PHY)     += davicom.o
- obj-$(CONFIG_CICADA_PHY)      += cicada.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/651-swconfig-2.6.32-fix.patch b/target/linux/generic-2.6/patches-2.6.33/651-swconfig-2.6.32-fix.patch
deleted file mode 100644 (file)
index bc8f8fc..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/drivers/net/phy/swconfig.c
-+++ b/drivers/net/phy/swconfig.c
-@@ -335,7 +335,7 @@ swconfig_send_multipart(struct swconfig_
-                       if (cb->close(cb, arg) < 0)
-                               goto error;
-               }
--              err = genlmsg_unicast(cb->msg, info->snd_pid);
-+              err = genlmsg_reply(cb->msg, info);
-               cb->msg = NULL;
-               if (err < 0)
-                       goto error;
-@@ -419,7 +419,7 @@ swconfig_list_attrs(struct sk_buff *skb,
-       if (!cb.msg)
-               return 0;
--      return genlmsg_unicast(cb.msg, info->snd_pid);
-+      return genlmsg_reply(cb.msg, info);
- error:
-       if (cb.msg)
-@@ -728,7 +728,7 @@ swconfig_get_attr(struct sk_buff *skb, s
-               goto nla_put_failure;
-       swconfig_put_dev(dev);
--      return genlmsg_unicast(msg, info->snd_pid);
-+      return genlmsg_reply(msg, info);
- nla_put_failure:
-       if (msg)
diff --git a/target/linux/generic-2.6/patches-2.6.33/660-phy_mvswitch.patch b/target/linux/generic-2.6/patches-2.6.33/660-phy_mvswitch.patch
deleted file mode 100644 (file)
index 36551fd..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -99,6 +99,9 @@ config ADM6996_PHY
-       ---help---
-         Currently supports the ADM6996F switch
-+config MVSWITCH_PHY
-+      tristate "Driver for Marvell 88E6060 switches"
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -15,6 +15,7 @@ obj-$(CONFIG_BROADCOM_PHY)   += broadcom.o
- obj-$(CONFIG_BCM63XX_PHY)     += bcm63xx.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
- obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
-+obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/670-phy_ip175c.patch b/target/linux/generic-2.6/patches-2.6.33/670-phy_ip175c.patch
deleted file mode 100644 (file)
index 862868c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -102,6 +102,10 @@ config ADM6996_PHY
- config MVSWITCH_PHY
-       tristate "Driver for Marvell 88E6060 switches"
-+config IP175C_PHY
-+      tristate "Driver for IC+ IP175C/IP178C switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_BCM63XX_PHY)    += bcm63xx.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
- obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
- obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
-+obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/680-phy_ar8216.patch b/target/linux/generic-2.6/patches-2.6.33/680-phy_ar8216.patch
deleted file mode 100644 (file)
index 00372aa..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -106,6 +106,10 @@ config IP175C_PHY
-       tristate "Driver for IC+ IP175C/IP178C switches"
-       select SWCONFIG
-+config AR8216_PHY
-+      tristate "Driver for Atheros AR8216 switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_ADM6996_PHY)    += adm6996.o
- obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
- obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
-+obj-$(CONFIG_AR8216_PHY)      += ar8216.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/690-phy_rtl8306.patch b/target/linux/generic-2.6/patches-2.6.33/690-phy_rtl8306.patch
deleted file mode 100644 (file)
index a4793cb..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -110,6 +110,10 @@ config AR8216_PHY
-       tristate "Driver for Atheros AR8216 switches"
-       select SWCONFIG
-+config RTL8306_PHY
-+      tristate "Driver for Realtek RTL8306S switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_MVSWITCH_PHY)   += mvswitch.o
- obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_AR8216_PHY)      += ar8216.o
-+obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/691-phy_rtl8366.patch b/target/linux/generic-2.6/patches-2.6.33/691-phy_rtl8366.patch
deleted file mode 100644 (file)
index 0963bd8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -152,4 +152,29 @@ config MDIO_OCTEON
-         If in doubt, say Y.
-+config RTL8366_SMI
-+      tristate "Driver for the RTL8366 SMI interface"
-+      depends on GENERIC_GPIO
-+      ---help---
-+        This module implements the SMI interface protocol which is used
-+        by some RTL8366 ethernet switch devices via the generic GPIO API.
-+
-+if RTL8366_SMI
-+
-+config RTL8366S_PHY
-+      tristate "Driver for the Realtek RTL8366S switch"
-+      select SWCONFIG
-+
-+config RTL8366RB_PHY
-+      tristate "Driver for the Realtek RTL8366RB switch"
-+      select SWCONFIG
-+
-+config RTL8366S_PHY_DEBUG_FS
-+      bool "RTL8366 switch driver DEBUG_FS support"
-+      depends on RTL8366S_PHY || RTL8366RB_PHY
-+      depends on DEBUG_FS
-+      default n
-+
-+endif # RTL8366_SMI
-+
- endif # PHYLIB
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -20,6 +20,9 @@ obj-$(CONFIG_IP175C_PHY)     += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_AR8216_PHY)      += ar8216.o
- obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
-+obj-$(CONFIG_RTL8366_SMI)     += rtl8366_smi.o
-+obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
-+obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/700-rtc7301.patch b/target/linux/generic-2.6/patches-2.6.33/700-rtc7301.patch
deleted file mode 100644 (file)
index dae807f..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
---- a/drivers/rtc/Kconfig
-+++ b/drivers/rtc/Kconfig
-@@ -608,6 +608,15 @@ config RTC_DRV_NUC900
-         If you say yes here you get support for the RTC subsystem of the
-         NUC910/NUC920 used in embedded systems.
-+config RTC_DRV_RTC7301
-+      tristate "Epson RTC-7301 SF/DG"
-+      help
-+        If you say Y here you will get support for the
-+        Epson RTC-7301 SF/DG RTC chips.
-+
-+        This driver can also be built as a module. If so, the module
-+        will be called rtc-7301.
-+
- comment "on-CPU RTC drivers"
- config RTC_DRV_OMAP
---- a/drivers/rtc/Makefile
-+++ b/drivers/rtc/Makefile
-@@ -72,6 +72,7 @@ obj-$(CONFIG_RTC_DRV_RP5C01) += rtc-rp5c
- obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o
- obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o
- obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o
-+obj-$(CONFIG_RTC_DRV_RTC7301) += rtc-rtc7301.o
- obj-$(CONFIG_RTC_DRV_RX8025)  += rtc-rx8025.o
- obj-$(CONFIG_RTC_DRV_RX8581)  += rtc-rx8581.o
- obj-$(CONFIG_RTC_DRV_S35390A) += rtc-s35390a.o
---- /dev/null
-+++ b/drivers/rtc/rtc-rtc7301.c
-@@ -0,0 +1,219 @@
-+/*
-+ * Driver for Epson RTC-7301SF/DG
-+ *
-+ * Copyright (C) 2009 Jose Vasconcellos
-+ *
-+ * 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/rtc.h>
-+#include <linux/platform_device.h>
-+#include <linux/io.h>
-+#include <linux/delay.h>
-+#include <linux/bcd.h>
-+
-+#define RTC_NAME "rtc7301"
-+#define RTC_VERSION "0.1"
-+
-+/* Epson RTC-7301 register addresses */
-+#define RTC7301_SEC           0x00
-+#define RTC7301_SEC10         0x01
-+#define RTC7301_MIN           0x02
-+#define RTC7301_MIN10         0x03
-+#define RTC7301_HOUR          0x04
-+#define RTC7301_HOUR10                0x05
-+#define RTC7301_WEEKDAY               0x06
-+#define RTC7301_DAY           0x07
-+#define RTC7301_DAY10         0x08
-+#define RTC7301_MON           0x09
-+#define RTC7301_MON10         0x0A
-+#define RTC7301_YEAR          0x0B
-+#define RTC7301_YEAR10                0x0C
-+#define RTC7301_YEAR100               0x0D
-+#define RTC7301_YEAR1000      0x0E
-+#define RTC7301_CTRLREG               0x0F
-+
-+static uint8_t __iomem *rtc7301_base;
-+
-+#define read_reg(offset) (readb(rtc7301_base + offset) & 0xf)
-+#define write_reg(offset, data) writeb(data, rtc7301_base + (offset))
-+
-+#define rtc7301_isbusy() (read_reg(RTC7301_CTRLREG) & 1)
-+
-+static void rtc7301_init_settings(void)
-+{
-+      int i;
-+
-+      write_reg(RTC7301_CTRLREG, 2);
-+      write_reg(RTC7301_YEAR1000, 2);
-+      udelay(122);
-+
-+      /* bank 1 */
-+      write_reg(RTC7301_CTRLREG, 6);
-+      for (i=0; i<15; i++)
-+              write_reg(i, 0);
-+
-+      /* bank 2 */
-+      write_reg(RTC7301_CTRLREG, 14);
-+      for (i=0; i<15; i++)
-+              write_reg(i, 0);
-+      write_reg(RTC7301_CTRLREG, 0);
-+}
-+
-+static int rtc7301_get_datetime(struct device *dev, struct rtc_time *dt)
-+{
-+      int cnt;
-+      uint8_t buf[16];
-+
-+      cnt = 0;
-+      while (rtc7301_isbusy()) {
-+              udelay(244);
-+              if (cnt++ > 100) {
-+                      dev_err(dev, "%s: timeout error %x\n", __func__, rtc7301_base[RTC7301_CTRLREG]);
-+                      return -EIO;
-+              }
-+      }
-+
-+      for (cnt=0; cnt<16; cnt++)
-+              buf[cnt] = read_reg(cnt);
-+
-+      if (buf[RTC7301_SEC10] & 8) {
-+              dev_err(dev, "%s: RTC not set\n", __func__);
-+              return -EINVAL;
-+      }
-+
-+      memset(dt, 0, sizeof(*dt));
-+
-+      dt->tm_sec =  buf[RTC7301_SEC] + buf[RTC7301_SEC10]*10;
-+      dt->tm_min =  buf[RTC7301_MIN] + buf[RTC7301_MIN10]*10;
-+      dt->tm_hour = buf[RTC7301_HOUR] + buf[RTC7301_HOUR10]*10;
-+
-+      dt->tm_mday = buf[RTC7301_DAY] + buf[RTC7301_DAY10]*10;
-+      dt->tm_mon =  buf[RTC7301_MON] + buf[RTC7301_MON10]*10 - 1;
-+      dt->tm_year = buf[RTC7301_YEAR] + buf[RTC7301_YEAR10]*10 +
-+                    buf[RTC7301_YEAR100]*100 +
-+                    ((buf[RTC7301_YEAR1000] & 3)*1000) - 1900;
-+
-+      /* the rtc device may contain illegal values on power up
-+       * according to the data sheet. make sure they are valid.
-+       */
-+
-+      return rtc_valid_tm(dt);
-+}
-+
-+static int rtc7301_set_datetime(struct device *dev, struct rtc_time *dt)
-+{
-+      int data;
-+
-+      data = dt->tm_year + 1900;
-+      if (data >= 2100 || data < 1900)
-+              return -EINVAL;
-+
-+      write_reg(RTC7301_CTRLREG, 2);
-+              udelay(122);
-+
-+      data = bin2bcd(dt->tm_sec);
-+      write_reg(RTC7301_SEC, data);
-+      write_reg(RTC7301_SEC10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_min);
-+      write_reg(RTC7301_MIN, data );
-+      write_reg(RTC7301_MIN10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_hour);
-+      write_reg(RTC7301_HOUR, data);
-+      write_reg(RTC7301_HOUR10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_mday);
-+      write_reg(RTC7301_DAY, data);
-+      write_reg(RTC7301_DAY10, (data>> 4));
-+
-+      data = bin2bcd(dt->tm_mon + 1);
-+      write_reg(RTC7301_MON, data);
-+      write_reg(RTC7301_MON10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_year % 100);
-+      write_reg(RTC7301_YEAR, data);
-+      write_reg(RTC7301_YEAR10, (data >> 4));
-+      data = bin2bcd((1900 + dt->tm_year) / 100);
-+      write_reg(RTC7301_YEAR100, data);
-+
-+      data = bin2bcd(dt->tm_wday);
-+      write_reg(RTC7301_WEEKDAY, data);
-+
-+      write_reg(RTC7301_CTRLREG, 0);
-+
-+      return 0;
-+}
-+
-+static const struct rtc_class_ops rtc7301_rtc_ops = {
-+      .read_time      = rtc7301_get_datetime,
-+      .set_time       = rtc7301_set_datetime,
-+};
-+
-+static int __devinit rtc7301_probe(struct platform_device *pdev)
-+{
-+      struct rtc_device *rtc;
-+      struct resource *res;
-+
-+      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!res)
-+              return -ENOENT;
-+
-+      rtc7301_base = ioremap_nocache(res->start, 0x1000 /*res->end - res->start + 1*/);
-+      if (!rtc7301_base)
-+              return -EINVAL;
-+
-+      rtc = rtc_device_register(RTC_NAME, &pdev->dev,
-+                              &rtc7301_rtc_ops, THIS_MODULE);
-+      if (IS_ERR(rtc)) {
-+              iounmap(rtc7301_base);
-+              return PTR_ERR(rtc);
-+      }
-+
-+      platform_set_drvdata(pdev, rtc);
-+
-+      rtc7301_init_settings();
-+      return 0;
-+}
-+
-+static int __devexit rtc7301_remove(struct platform_device *pdev)
-+{
-+      struct rtc_device *rtc = platform_get_drvdata(pdev);
-+
-+      if (rtc)
-+              rtc_device_unregister(rtc);
-+      if (rtc7301_base)
-+              iounmap(rtc7301_base);
-+      return 0;
-+}
-+
-+static struct platform_driver rtc7301_driver = {
-+      .driver = {
-+              .name   = RTC_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe  = rtc7301_probe,
-+      .remove = __devexit_p(rtc7301_remove),
-+};
-+
-+static __init int rtc7301_init(void)
-+{
-+      return platform_driver_register(&rtc7301_driver);
-+}
-+module_init(rtc7301_init);
-+
-+static __exit void rtc7301_exit(void)
-+{
-+      platform_driver_unregister(&rtc7301_driver);
-+}
-+module_exit(rtc7301_exit);
-+
-+MODULE_DESCRIPTION("Epson 7301 RTC driver");
-+MODULE_AUTHOR("Jose Vasconcellos <jvasco@verizon.net>");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("platform:" RTC_NAME);
-+MODULE_VERSION(RTC_VERSION);
diff --git a/target/linux/generic-2.6/patches-2.6.33/750-glamo-headers.patch b/target/linux/generic-2.6/patches-2.6.33/750-glamo-headers.patch
deleted file mode 100644 (file)
index 419d98a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/include/linux/fb.h
-+++ b/include/linux/fb.h
-@@ -124,6 +124,7 @@ struct dentry;
- #define FB_ACCEL_TRIDENT_BLADE3D 52   /* Trident Blade3D              */
- #define FB_ACCEL_TRIDENT_BLADEXP 53   /* Trident BladeXP              */
- #define FB_ACCEL_CIRRUS_ALPINE   53   /* Cirrus Logic 543x/544x/5480  */
-+#define FB_ACCEL_GLAMO                50      /* SMedia Glamo                 */
- #define FB_ACCEL_NEOMAGIC_NM2070 90   /* NeoMagic NM2070              */
- #define FB_ACCEL_NEOMAGIC_NM2090 91   /* NeoMagic NM2090              */
- #define FB_ACCEL_NEOMAGIC_NM2093 92   /* NeoMagic NM2093              */
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -76,6 +76,8 @@ header-y += genetlink.h
- header-y += gen_stats.h
- header-y += gfs2_ondisk.h
- header-y += gigaset_dev.h
-+header-y += glamofb.h
-+header-y += glamo-engine.h
- header-y += hysdn_if.h
- header-y += i2o-dev.h
- header-y += i8k.h
diff --git a/target/linux/generic-2.6/patches-2.6.33/801-usb_serial_endpoint_size.patch b/target/linux/generic-2.6/patches-2.6.33/801-usb_serial_endpoint_size.patch
deleted file mode 100644 (file)
index e6d0645..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -61,6 +61,7 @@ static struct usb_driver usb_serial_driv
-    drivers depend on it.
- */
-+static ushort maxSize = 0;
- static int debug;
- /* initially all NULL */
- static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
-@@ -914,7 +915,7 @@ int usb_serial_probe(struct usb_interfac
-                       dev_err(&interface->dev, "No free urbs available\n");
-                       goto probe_error;
-               }
--              buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
-+              buffer_size = (endpoint->wMaxPacketSize > maxSize) ? endpoint->wMaxPacketSize : maxSize;
-               port->bulk_in_size = buffer_size;
-               port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
-               port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
-@@ -1356,3 +1357,5 @@ MODULE_LICENSE("GPL");
- module_param(debug, bool, S_IRUGO | S_IWUSR);
- MODULE_PARM_DESC(debug, "Debug enabled or not");
-+module_param(maxSize, ushort,0);
-+MODULE_PARM_DESC(maxSize,"User specified USB endpoint size");
diff --git a/target/linux/generic-2.6/patches-2.6.33/840-unable_to_open_console.patch b/target/linux/generic-2.6/patches-2.6.33/840-unable_to_open_console.patch
deleted file mode 100644 (file)
index 8d90396..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -807,7 +807,7 @@ static noinline int init_post(void)
-       numa_default_policy();
-       if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
--              printk(KERN_WARNING "Warning: unable to open an initial console.\n");
-+              printk(KERN_WARNING "Please be patient, while OpenWrt loads ...\n");
-       (void) sys_dup(0);
-       (void) sys_dup(0);
diff --git a/target/linux/generic-2.6/patches-2.6.33/902-darwin_scripts_include.patch b/target/linux/generic-2.6/patches-2.6.33/902-darwin_scripts_include.patch
deleted file mode 100644 (file)
index be31abe..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/scripts/genksyms/parse.c_shipped
-+++ b/scripts/genksyms/parse.c_shipped
-@@ -160,7 +160,9 @@
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/genksyms/parse.y
-+++ b/scripts/genksyms/parse.y
-@@ -24,7 +24,9 @@
- %{
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/kallsyms.c
-+++ b/scripts/kallsyms.c
-@@ -22,6 +22,35 @@
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
-+#ifdef __APPLE__
-+/* Darwin has no memmem implementation, this one is ripped of the uClibc-0.9.28 source */
-+void *memmem (const void *haystack, size_t haystack_len,
-+                          const void *needle,  size_t needle_len)
-+{
-+  const char *begin;
-+  const char *const last_possible
-+    = (const char *) haystack + haystack_len - needle_len;
-+
-+  if (needle_len == 0)
-+    /* The first occurrence of the empty string is deemed to occur at
-+       the beginning of the string.  */
-+    return (void *) haystack;
-+
-+  /* Sanity check, otherwise the loop might search through the whole
-+     memory.  */
-+  if (__builtin_expect (haystack_len < needle_len, 0))
-+    return NULL;
-+
-+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
-+    if (begin[0] == ((const char *) needle)[0] &&
-+        !memcmp ((const void *) &begin[1],
-+                 (const void *) ((const char *) needle + 1),
-+                 needle_len - 1))
-+      return (void *) begin;
-+
-+  return NULL;
-+}
-+#endif
- #ifndef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
---- a/scripts/kconfig/Makefile
-+++ b/scripts/kconfig/Makefile
-@@ -130,6 +130,9 @@ check-lxdialog  := $(srctree)/$(src)/lxd
- # we really need to do so. (Do not call gcc as part of make mrproper)
- HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
- HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-+ifeq ($(shell uname -s),Darwin)
-+HOST_LOADLIBES  += -lncurses
-+endif
- HOST_EXTRACFLAGS += -DLOCALE
---- a/scripts/mod/mk_elfconfig.c
-+++ b/scripts/mod/mk_elfconfig.c
-@@ -1,7 +1,11 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#ifndef __APPLE__
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- int
- main(int argc, char **argv)
---- a/scripts/mod/modpost.h
-+++ b/scripts/mod/modpost.h
-@@ -7,7 +7,11 @@
- #include <sys/mman.h>
- #include <fcntl.h>
- #include <unistd.h>
-+#if !(defined(__APPLE__) || defined(__CYGWIN__))
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- #include "elfconfig.h"
diff --git a/target/linux/generic-2.6/patches-2.6.33/903-hostap_txpower.patch b/target/linux/generic-2.6/patches-2.6.33/903-hostap_txpower.patch
deleted file mode 100644 (file)
index 7552ceb..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
---- a/drivers/net/wireless/hostap/hostap_ap.c
-+++ b/drivers/net/wireless/hostap/hostap_ap.c
-@@ -2335,13 +2335,13 @@ int prism2_ap_get_sta_qual(local_info_t 
-               addr[count].sa_family = ARPHRD_ETHER;
-               memcpy(addr[count].sa_data, sta->addr, ETH_ALEN);
-               if (sta->last_rx_silence == 0)
--                      qual[count].qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                        qual[count].qual = (sta->last_rx_signal - 156) == 0 ?
-+                                0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      qual[count].qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              qual[count].level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              qual[count].noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        qual[count].qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                qual[count].level = sta->last_rx_signal;
-+                qual[count].noise = sta->last_rx_silence;
-               qual[count].updated = sta->last_rx_updated;
-               sta->last_rx_updated = IW_QUAL_DBM;
-@@ -2407,13 +2407,13 @@ int prism2_ap_translate_scan(struct net_
-               memset(&iwe, 0, sizeof(iwe));
-               iwe.cmd = IWEVQUAL;
-               if (sta->last_rx_silence == 0)
--                      iwe.u.qual.qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                      iwe.u.qual.qual = (sta->last_rx_signal -156) == 0 ?
-+                              0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      iwe.u.qual.qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              iwe.u.qual.level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              iwe.u.qual.noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        iwe.u.qual.qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                iwe.u.qual.level = sta->last_rx_signal;
-+                iwe.u.qual.noise = sta->last_rx_silence;
-               iwe.u.qual.updated = sta->last_rx_updated;
-               iwe.len = IW_EV_QUAL_LEN;
-               current_ev = iwe_stream_add_event(info, current_ev, end_buf,
---- a/drivers/net/wireless/hostap/hostap_config.h
-+++ b/drivers/net/wireless/hostap/hostap_config.h
-@@ -45,4 +45,9 @@
-  */
- /* #define PRISM2_NO_STATION_MODES */
-+/* Enable TX power Setting functions
-+ * (min att = -128 , max att =  127)
-+ */
-+#define RAW_TXPOWER_SETTING
-+
- #endif /* HOSTAP_CONFIG_H */
---- a/drivers/net/wireless/hostap/hostap.h
-+++ b/drivers/net/wireless/hostap/hostap.h
-@@ -90,6 +90,7 @@ extern const struct iw_handler_def hosta
- extern const struct ethtool_ops prism2_ethtool_ops;
- int hostap_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
-+int hostap_restore_power(struct net_device *dev);
- #endif /* HOSTAP_H */
---- a/drivers/net/wireless/hostap/hostap_hw.c
-+++ b/drivers/net/wireless/hostap/hostap_hw.c
-@@ -932,6 +932,7 @@ static int hfa384x_set_rid(struct net_de
-                       prism2_hw_reset(dev);
-       }
-+      hostap_restore_power(dev);
-       return res;
- }
---- a/drivers/net/wireless/hostap/hostap_info.c
-+++ b/drivers/net/wireless/hostap/hostap_info.c
-@@ -432,6 +432,11 @@ static void handle_info_queue_linkstatus
-       }
-       /* Get BSSID if we have a valid AP address */
-+
-+      if ( val == HFA384X_LINKSTATUS_CONNECTED ||
-+           val == HFA384X_LINKSTATUS_DISCONNECTED )
-+                      hostap_restore_power(local->dev);
-+
-       if (connected) {
-               netif_carrier_on(local->dev);
-               netif_carrier_on(local->ddev);
---- a/drivers/net/wireless/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
-@@ -1476,23 +1476,20 @@ static int prism2_txpower_hfa386x_to_dBm
-               val = 255;
-       tmp = val;
--      tmp >>= 2;
--      return -12 - tmp;
-+      return tmp;
- }
- static u16 prism2_txpower_dBm_to_hfa386x(int val)
- {
-       signed char tmp;
--      if (val > 20)
--              return 128;
--      else if (val < -43)
-+      if (val > 127)
-               return 127;
-+      else if (val < -128)
-+              return 128;
-       tmp = val;
--      tmp = -12 - tmp;
--      tmp <<= 2;
-       return (unsigned char) tmp;
- }
-@@ -4056,3 +4053,35 @@ int hostap_ioctl(struct net_device *dev,
-       return ret;
- }
-+
-+/* BUG FIX: Restore power setting value when lost due to F/W bug */
-+
-+int hostap_restore_power(struct net_device *dev)
-+{
-+        struct hostap_interface *iface = netdev_priv(dev);
-+       local_info_t *local = iface->local;
-+
-+       u16 val;
-+       int ret = 0;
-+
-+       if (local->txpower_type == PRISM2_TXPOWER_OFF) {
-+                       val = 0xff; /* use all standby and sleep modes */
-+                       ret = local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                                              HFA386X_CR_A_D_TEST_MODES2,
-+                                              &val, NULL);
-+       }
-+
-+#ifdef RAW_TXPOWER_SETTING
-+       if (local->txpower_type == PRISM2_TXPOWER_FIXED) {
-+               val = HFA384X_TEST_CFG_BIT_ALC;
-+               local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-+                                (HFA384X_TEST_CFG_BITS << 8), 0, &val, NULL);
-+               val = prism2_txpower_dBm_to_hfa386x(local->txpower);
-+               ret = (local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                            HFA386X_CR_MANUAL_TX_POWER, &val, NULL));
-+       }
-+#endif /* RAW_TXPOWER_SETTING */
-+       return (ret ? -EOPNOTSUPP : 0);
-+}
-+
-+EXPORT_SYMBOL(hostap_restore_power);
diff --git a/target/linux/generic-2.6/patches-2.6.33/903-stddef_include.patch b/target/linux/generic-2.6/patches-2.6.33/903-stddef_include.patch
deleted file mode 100644 (file)
index 7fe248d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/linux/stddef.h
-+++ b/include/linux/stddef.h
-@@ -16,6 +16,7 @@ enum {
-       false   = 0,
-       true    = 1
- };
-+#endif /* __KERNEL__ */
- #undef offsetof
- #ifdef __compiler_offsetof
-@@ -23,6 +24,5 @@ enum {
- #else
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #endif
--#endif /* __KERNEL__ */
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.33/905-i386_build.patch b/target/linux/generic-2.6/patches-2.6.33/905-i386_build.patch
deleted file mode 100644 (file)
index c701fda..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/x86/boot/tools/build.c
-+++ b/arch/x86/boot/tools/build.c
-@@ -29,7 +29,6 @@
- #include <stdarg.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <sys/sysmacros.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/mman.h>
diff --git a/target/linux/generic-2.6/patches-2.6.33/920-01-hotpluggable-spi-gpio.patch b/target/linux/generic-2.6/patches-2.6.33/920-01-hotpluggable-spi-gpio.patch
deleted file mode 100644 (file)
index b10bc9a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Fix spi-gpio for hotplug.
-
---mb
-
-
-
---- a/drivers/spi/spi_gpio.c
-+++ b/drivers/spi/spi_gpio.c
-@@ -218,7 +218,7 @@ static void spi_gpio_cleanup(struct spi_
-       spi_bitbang_cleanup(spi);
- }
--static int __init spi_gpio_alloc(unsigned pin, const char *label, bool is_in)
-+static int __devinit spi_gpio_alloc(unsigned pin, const char *label, bool is_in)
- {
-       int value;
-@@ -232,7 +232,7 @@ static int __init spi_gpio_alloc(unsigne
-       return value;
- }
--static int __init
-+static int __devinit
- spi_gpio_request(struct spi_gpio_platform_data *pdata, const char *label)
- {
-       int value;
-@@ -261,7 +261,7 @@ done:
-       return value;
- }
--static int __init spi_gpio_probe(struct platform_device *pdev)
-+static int __devinit spi_gpio_probe(struct platform_device *pdev)
- {
-       int                             status;
-       struct spi_master               *master;
-@@ -317,7 +317,7 @@ gpio_free:
-       return status;
- }
--static int __exit spi_gpio_remove(struct platform_device *pdev)
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
- {
-       struct spi_gpio                 *spi_gpio;
-       struct spi_gpio_platform_data   *pdata;
-@@ -344,12 +344,13 @@ MODULE_ALIAS("platform:" DRIVER_NAME);
- static struct platform_driver spi_gpio_driver = {
-       .driver.name    = DRIVER_NAME,
-       .driver.owner   = THIS_MODULE,
--      .remove         = __exit_p(spi_gpio_remove),
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
- };
- static int __init spi_gpio_init(void)
- {
--      return platform_driver_probe(&spi_gpio_driver, spi_gpio_probe);
-+      return platform_driver_register(&spi_gpio_driver);
- }
- module_init(spi_gpio_init);
diff --git a/target/linux/generic-2.6/patches-2.6.33/920-04-spi-gpio-implement-spi-delay.patch b/target/linux/generic-2.6/patches-2.6.33/920-04-spi-gpio-implement-spi-delay.patch
deleted file mode 100644 (file)
index 1903288..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Implement the SPI-GPIO delay function for busses that need speed limitation.
-
---mb
-
-
-
---- a/drivers/spi/spi_gpio.c
-+++ b/drivers/spi/spi_gpio.c
-@@ -21,6 +21,7 @@
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/gpio.h>
-+#include <linux/delay.h>
- #include <linux/spi/spi.h>
- #include <linux/spi/spi_bitbang.h>
-@@ -69,6 +70,7 @@ struct spi_gpio {
-  *            #define SPI_MOSI_GPIO   120
-  *            #define SPI_SCK_GPIO    121
-  *            #define SPI_N_CHIPSEL   4
-+ *            #undef NEED_SPIDELAY
-  *            #include "spi_gpio.c"
-  */
-@@ -76,6 +78,7 @@ struct spi_gpio {
- #define DRIVER_NAME   "spi_gpio"
- #define GENERIC_BITBANG       /* vs tight inlines */
-+#define NEED_SPIDELAY 1
- /* all functions referencing these symbols must define pdata */
- #define SPI_MISO_GPIO ((pdata)->miso)
-@@ -120,12 +123,20 @@ static inline int getmiso(const struct s
- #undef pdata
- /*
-- * NOTE:  this clocks "as fast as we can".  It "should" be a function of the
-- * requested device clock.  Software overhead means we usually have trouble
-- * reaching even one Mbit/sec (except when we can inline bitops), so for now
-- * we'll just assume we never need additional per-bit slowdowns.
-+ * NOTE:  to clock "as fast as we can", set spi_device.max_speed_hz
-+ * and spi_transfer.speed_hz to 0.
-+ * Otherwise this is a function of the requested device clock.
-+ * Software overhead means we usually have trouble
-+ * reaching even one Mbit/sec (except when we can inline bitops). So on small
-+ * embedded devices with fast SPI slaves you usually don't need a delay.
-  */
--#define spidelay(nsecs)       do {} while (0)
-+static inline void spidelay(unsigned nsecs)
-+{
-+#ifdef NEED_SPIDELAY
-+      if (unlikely(nsecs))
-+              ndelay(nsecs);
-+#endif /* NEED_SPIDELAY */
-+}
- #define       EXPAND_BITBANG_TXRX
- #include <linux/spi/spi_bitbang.h>
diff --git a/target/linux/generic-2.6/patches-2.6.33/921-gpio_spi_driver.patch b/target/linux/generic-2.6/patches-2.6.33/921-gpio_spi_driver.patch
deleted file mode 100644 (file)
index c37bb22..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-THIS CODE IS DEPRECATED.
-
-Please use the new mainline SPI-GPIO driver, as of 2.6.29.
-
---mb
-
-
-
---- /dev/null
-+++ b/include/linux/spi/spi_gpio_old.h
-@@ -0,0 +1,73 @@
-+/*
-+ * spi_gpio interface to platform code
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * 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.
-+ */
-+#ifndef _LINUX_SPI_SPI_GPIO
-+#define _LINUX_SPI_SPI_GPIO
-+
-+#include <linux/types.h>
-+#include <linux/spi/spi.h>
-+
-+
-+/**
-+ * struct spi_gpio_platform_data - Data definitions for a SPI-GPIO device.
-+ *
-+ * This structure holds information about a GPIO-based SPI device.
-+ *
-+ * @pin_clk: The GPIO pin number of the CLOCK pin.
-+ *
-+ * @pin_miso: The GPIO pin number of the MISO pin.
-+ *
-+ * @pin_mosi: The GPIO pin number of the MOSI pin.
-+ *
-+ * @pin_cs: The GPIO pin number of the CHIPSELECT pin.
-+ *
-+ * @cs_activelow: If true, the chip is selected when the CS line is low.
-+ *
-+ * @no_spi_delay: If true, no delay is done in the lowlevel bitbanging.
-+ *                Note that doing no delay is not standards compliant,
-+ *                but it might be needed to speed up transfers on some
-+ *                slow embedded machines.
-+ *
-+ * @boardinfo_setup: This callback is called after the
-+ *                   SPI master device was registered, but before the
-+ *                   device is registered.
-+ * @boardinfo_setup_data: Data argument passed to boardinfo_setup().
-+ */
-+struct spi_gpio_platform_data {
-+      unsigned int pin_clk;
-+      unsigned int pin_miso;
-+      unsigned int pin_mosi;
-+      unsigned int pin_cs;
-+      bool cs_activelow;
-+      bool no_spi_delay;
-+      int (*boardinfo_setup)(struct spi_board_info *bi,
-+                             struct spi_master *master,
-+                             void *data);
-+      void *boardinfo_setup_data;
-+};
-+
-+/**
-+ * SPI_GPIO_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a spi-gpio device.
-+ */
-+#define SPI_GPIO_PLATDEV_NAME "spi-gpio"
-+
-+/**
-+ * spi_gpio_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int spi_gpio_next_id(void);
-+
-+#endif /* _LINUX_SPI_SPI_GPIO */
---- /dev/null
-+++ b/drivers/spi/spi_gpio_old.c
-@@ -0,0 +1,251 @@
-+/*
-+ * Bitbanging SPI bus driver using GPIO API
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * based on spi_s3c2410_gpio.c
-+ *   Copyright (c) 2006 Ben Dooks
-+ *   Copyright (c) 2006 Simtec Electronics
-+ * and on i2c-gpio.c
-+ *   Copyright (C) 2007 Atmel Corporation
-+ *
-+ * 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/init.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+#include <linux/workqueue.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/spi_bitbang.h>
-+#include <linux/spi/spi_gpio_old.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+struct spi_gpio {
-+      struct spi_bitbang bitbang;
-+      struct spi_gpio_platform_data *info;
-+      struct platform_device *pdev;
-+      struct spi_board_info bi;
-+};
-+
-+
-+static inline struct spi_gpio *spidev_to_sg(struct spi_device *dev)
-+{
-+      return dev->controller_data;
-+}
-+
-+static inline void setsck(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_clk, val ? 1 : 0);
-+}
-+
-+static inline void setmosi(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_mosi, val ? 1 : 0);
-+}
-+
-+static inline u32 getmiso(struct spi_device *dev)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      return gpio_get_value(sp->info->pin_miso) ? 1 : 0;
-+}
-+
-+static inline void do_spidelay(struct spi_device *dev, unsigned nsecs)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (!sp->info->no_spi_delay)
-+              ndelay(nsecs);
-+}
-+
-+#define spidelay(nsecs) do {                                  \
-+      /* Steal the spi_device pointer from our caller.        \
-+       * The bitbang-API should probably get fixed here... */ \
-+      do_spidelay(spi, nsecs);                                \
-+  } while (0)
-+
-+#define EXPAND_BITBANG_TXRX
-+#include <linux/spi/spi_bitbang.h>
-+
-+static u32 spi_gpio_txrx_mode0(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode1(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode2(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode3(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, bits);
-+}
-+
-+static void spi_gpio_chipselect(struct spi_device *dev, int on)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (sp->info->cs_activelow)
-+              on = !on;
-+      gpio_set_value(sp->info->pin_cs, on ? 1 : 0);
-+}
-+
-+static int spi_gpio_probe(struct platform_device *pdev)
-+{
-+      struct spi_master *master;
-+      struct spi_gpio_platform_data *pdata;
-+      struct spi_gpio *sp;
-+      struct spi_device *spidev;
-+      int err;
-+
-+      pdata = pdev->dev.platform_data;
-+      if (!pdata)
-+              return -ENXIO;
-+
-+      err = -ENOMEM;
-+      master = spi_alloc_master(&pdev->dev, sizeof(struct spi_gpio));
-+      if (!master)
-+              goto err_alloc_master;
-+
-+      sp = spi_master_get_devdata(master);
-+      platform_set_drvdata(pdev, sp);
-+      sp->info = pdata;
-+
-+      err = gpio_request(pdata->pin_clk, "spi_clock");
-+      if (err)
-+              goto err_request_clk;
-+      err = gpio_request(pdata->pin_mosi, "spi_mosi");
-+      if (err)
-+              goto err_request_mosi;
-+      err = gpio_request(pdata->pin_miso, "spi_miso");
-+      if (err)
-+              goto err_request_miso;
-+      err = gpio_request(pdata->pin_cs, "spi_cs");
-+      if (err)
-+              goto err_request_cs;
-+
-+      sp->bitbang.master = spi_master_get(master);
-+      sp->bitbang.master->bus_num = -1;
-+      sp->bitbang.master->num_chipselect = 1;
-+      sp->bitbang.chipselect = spi_gpio_chipselect;
-+      sp->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_mode0;
-+      sp->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_mode1;
-+      sp->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_mode2;
-+      sp->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_mode3;
-+
-+      gpio_direction_output(pdata->pin_clk, 0);
-+      gpio_direction_output(pdata->pin_mosi, 0);
-+      gpio_direction_output(pdata->pin_cs,
-+                            pdata->cs_activelow ? 1 : 0);
-+      gpio_direction_input(pdata->pin_miso);
-+
-+      err = spi_bitbang_start(&sp->bitbang);
-+      if (err)
-+              goto err_no_bitbang;
-+      err = pdata->boardinfo_setup(&sp->bi, master,
-+                                   pdata->boardinfo_setup_data);
-+      if (err)
-+              goto err_bi_setup;
-+      sp->bi.controller_data = sp;
-+      spidev = spi_new_device(master, &sp->bi);
-+      if (!spidev)
-+              goto err_new_dev;
-+
-+      return 0;
-+
-+err_new_dev:
-+err_bi_setup:
-+      spi_bitbang_stop(&sp->bitbang);
-+err_no_bitbang:
-+      spi_master_put(sp->bitbang.master);
-+      gpio_free(pdata->pin_cs);
-+err_request_cs:
-+      gpio_free(pdata->pin_miso);
-+err_request_miso:
-+      gpio_free(pdata->pin_mosi);
-+err_request_mosi:
-+      gpio_free(pdata->pin_clk);
-+err_request_clk:
-+      kfree(master);
-+
-+err_alloc_master:
-+      return err;
-+}
-+
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
-+{
-+      struct spi_gpio *sp;
-+      struct spi_gpio_platform_data *pdata;
-+
-+      pdata = pdev->dev.platform_data;
-+      sp = platform_get_drvdata(pdev);
-+
-+      gpio_free(pdata->pin_clk);
-+      gpio_free(pdata->pin_mosi);
-+      gpio_free(pdata->pin_miso);
-+      gpio_free(pdata->pin_cs);
-+      spi_bitbang_stop(&sp->bitbang);
-+      spi_master_put(sp->bitbang.master);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver spi_gpio_driver = {
-+      .driver         = {
-+              .name   = SPI_GPIO_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
-+};
-+
-+int spi_gpio_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(spi_gpio_next_id);
-+
-+static int __init spi_gpio_init(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&spi_gpio_driver);
-+      if (err)
-+              printk(KERN_ERR "spi-gpio: register failed: %d\n", err);
-+
-+      return err;
-+}
-+module_init(spi_gpio_init);
-+
-+static void __exit spi_gpio_exit(void)
-+{
-+      platform_driver_unregister(&spi_gpio_driver);
-+}
-+module_exit(spi_gpio_exit);
-+
-+MODULE_AUTHOR("Piot Skamruk <piotr.skamruk at gmail.com>");
-+MODULE_AUTHOR("Michael Buesch");
-+MODULE_DESCRIPTION("Platform independent GPIO bitbanging SPI driver");
-+MODULE_LICENSE("GPL v2");
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -116,6 +116,15 @@ config SPI_GPIO
-         GPIO operations, you should be able to leverage that for better
-         speed with a custom version of this driver; see the source code.
-+config SPI_GPIO_OLD
-+      tristate "Old GPIO API based bitbanging SPI controller (DEPRECATED)"
-+      depends on SPI_MASTER && GENERIC_GPIO
-+      select SPI_BITBANG
-+      help
-+        This code is deprecated. Please use the new mainline SPI-GPIO driver.
-+
-+        If unsure, say N.
-+
- config SPI_IMX
-       tristate "Freescale i.MX SPI controllers"
-       depends on ARCH_MXC
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_SPI_BUTTERFLY)          += spi_butt
- obj-$(CONFIG_SPI_DESIGNWARE)          += dw_spi.o
- obj-$(CONFIG_SPI_DW_PCI)              += dw_spi_pci.o
- obj-$(CONFIG_SPI_GPIO)                        += spi_gpio.o
-+obj-$(CONFIG_SPI_GPIO_OLD)            += spi_gpio_old.o
- obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
- obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
- obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/922-gpiommc.patch b/target/linux/generic-2.6/patches-2.6.33/922-gpiommc.patch
deleted file mode 100644 (file)
index cb39a70..0000000
+++ /dev/null
@@ -1,843 +0,0 @@
---- /dev/null
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -0,0 +1,608 @@
-+/*
-+ * Driver an MMC/SD card on a bitbanging GPIO SPI bus.
-+ * This module hooks up the mmc_spi and spi_gpio modules and also
-+ * provides a configfs interface.
-+ *
-+ * Copyright 2008 Michael Buesch <mb@bu3sch.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include <linux/mmc/gpiommc.h>
-+#include <linux/platform_device.h>
-+#include <linux/list.h>
-+#include <linux/mutex.h>
-+#include <linux/spi/spi_gpio_old.h>
-+#include <linux/configfs.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+#define PFX                           "gpio-mmc: "
-+
-+
-+struct gpiommc_device {
-+      struct platform_device *pdev;
-+      struct platform_device *spi_pdev;
-+      struct spi_board_info boardinfo;
-+};
-+
-+
-+MODULE_DESCRIPTION("GPIO based MMC driver");
-+MODULE_AUTHOR("Michael Buesch");
-+MODULE_LICENSE("GPL");
-+
-+
-+static int gpiommc_boardinfo_setup(struct spi_board_info *bi,
-+                                 struct spi_master *master,
-+                                 void *data)
-+{
-+      struct gpiommc_device *d = data;
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      /* Bind the SPI master to the MMC-SPI host driver. */
-+      strlcpy(bi->modalias, "mmc_spi", sizeof(bi->modalias));
-+
-+      bi->max_speed_hz = pdata->max_bus_speed;
-+      bi->bus_num = master->bus_num;
-+      bi->mode = pdata->mode;
-+
-+      return 0;
-+}
-+
-+static int gpiommc_probe(struct platform_device *pdev)
-+{
-+      struct gpiommc_platform_data *mmc_pdata = pdev->dev.platform_data;
-+      struct spi_gpio_platform_data spi_pdata;
-+      struct gpiommc_device *d;
-+      int err;
-+
-+      err = -ENXIO;
-+      if (!mmc_pdata)
-+              goto error;
-+
-+#ifdef CONFIG_MMC_SPI_MODULE
-+      err = request_module("mmc_spi");
-+      if (err) {
-+              printk(KERN_WARNING PFX
-+                     "Failed to request mmc_spi module.\n");
-+      }
-+#endif /* CONFIG_MMC_SPI_MODULE */
-+
-+      /* Allocate the GPIO-MMC device */
-+      err = -ENOMEM;
-+      d = kzalloc(sizeof(*d), GFP_KERNEL);
-+      if (!d)
-+              goto error;
-+      d->pdev = pdev;
-+
-+      /* Create the SPI-GPIO device */
-+      d->spi_pdev = platform_device_alloc(SPI_GPIO_PLATDEV_NAME,
-+                                          spi_gpio_next_id());
-+      if (!d->spi_pdev)
-+              goto err_free_d;
-+
-+      memset(&spi_pdata, 0, sizeof(spi_pdata));
-+      spi_pdata.pin_clk = mmc_pdata->pins.gpio_clk;
-+      spi_pdata.pin_miso = mmc_pdata->pins.gpio_do;
-+      spi_pdata.pin_mosi = mmc_pdata->pins.gpio_di;
-+      spi_pdata.pin_cs = mmc_pdata->pins.gpio_cs;
-+      spi_pdata.cs_activelow = mmc_pdata->pins.cs_activelow;
-+      spi_pdata.no_spi_delay = mmc_pdata->no_spi_delay;
-+      spi_pdata.boardinfo_setup = gpiommc_boardinfo_setup;
-+      spi_pdata.boardinfo_setup_data = d;
-+
-+      err = platform_device_add_data(d->spi_pdev, &spi_pdata,
-+                                     sizeof(spi_pdata));
-+      if (err)
-+              goto err_free_pdev;
-+      err = platform_device_add(d->spi_pdev);
-+      if (err)
-+              goto err_free_pdata;
-+      platform_set_drvdata(pdev, d);
-+
-+      printk(KERN_INFO PFX "MMC-Card \"%s\" "
-+             "attached to GPIO pins di=%u, do=%u, clk=%u, cs=%u\n",
-+             mmc_pdata->name, mmc_pdata->pins.gpio_di,
-+             mmc_pdata->pins.gpio_do,
-+             mmc_pdata->pins.gpio_clk,
-+             mmc_pdata->pins.gpio_cs);
-+
-+      return 0;
-+
-+err_free_pdata:
-+      kfree(d->spi_pdev->dev.platform_data);
-+      d->spi_pdev->dev.platform_data = NULL;
-+err_free_pdev:
-+      platform_device_put(d->spi_pdev);
-+err_free_d:
-+      kfree(d);
-+error:
-+      return err;
-+}
-+
-+static int gpiommc_remove(struct platform_device *pdev)
-+{
-+      struct gpiommc_device *d = platform_get_drvdata(pdev);
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      platform_device_unregister(d->spi_pdev);
-+      printk(KERN_INFO PFX "GPIO based MMC-Card \"%s\" removed\n",
-+             pdata->name);
-+      platform_device_put(d->spi_pdev);
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+
-+/* A device that was created through configfs */
-+struct gpiommc_configfs_device {
-+      struct config_item item;
-+      /* The platform device, after registration. */
-+      struct platform_device *pdev;
-+      /* The configuration */
-+      struct gpiommc_platform_data pdata;
-+};
-+
-+#define GPIO_INVALID  -1
-+
-+static inline bool gpiommc_is_registered(struct gpiommc_configfs_device *dev)
-+{
-+      return (dev->pdev != NULL);
-+}
-+
-+static inline struct gpiommc_configfs_device *ci_to_gpiommc(struct config_item *item)
-+{
-+      return item ? container_of(item, struct gpiommc_configfs_device, item) : NULL;
-+}
-+
-+static struct configfs_attribute gpiommc_attr_DI = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_in",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_DO = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_out",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CLK = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_clock",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS_activelow = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect_activelow",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spimode = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_mode",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spidelay = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_delay",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_max_bus_speed = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "max_bus_speed",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_register = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "register",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute *gpiommc_config_attrs[] = {
-+      &gpiommc_attr_DI,
-+      &gpiommc_attr_DO,
-+      &gpiommc_attr_CLK,
-+      &gpiommc_attr_CS,
-+      &gpiommc_attr_CS_activelow,
-+      &gpiommc_attr_spimode,
-+      &gpiommc_attr_spidelay,
-+      &gpiommc_attr_max_bus_speed,
-+      &gpiommc_attr_register,
-+      NULL,
-+};
-+
-+static ssize_t gpiommc_config_attr_show(struct config_item *item,
-+                                      struct configfs_attribute *attr,
-+                                      char *page)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      ssize_t count = 0;
-+      unsigned int gpio;
-+      int err = 0;
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              gpio = dev->pdata.pins.gpio_di;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              gpio = dev->pdata.pins.gpio_do;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              gpio = dev->pdata.pins.gpio_clk;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              gpio = dev->pdata.pins.gpio_cs;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.pins.cs_activelow);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.mode);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               !dev->pdata.no_spi_delay);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.max_bus_speed);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_register) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               gpiommc_is_registered(dev));
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static int gpiommc_do_register(struct gpiommc_configfs_device *dev,
-+                             const char *name)
-+{
-+      int err;
-+
-+      if (gpiommc_is_registered(dev))
-+              return 0;
-+
-+      if (!gpio_is_valid(dev->pdata.pins.gpio_di) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_do) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_clk) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_cs)) {
-+              printk(KERN_ERR PFX
-+                     "configfs: Invalid GPIO pin number(s)\n");
-+              return -EINVAL;
-+      }
-+
-+      strlcpy(dev->pdata.name, name,
-+              sizeof(dev->pdata.name));
-+
-+      dev->pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME,
-+                                        gpiommc_next_id());
-+      if (!dev->pdev)
-+              return -ENOMEM;
-+      err = platform_device_add_data(dev->pdev, &dev->pdata,
-+                                     sizeof(dev->pdata));
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+      err = platform_device_add(dev->pdev);
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+
-+      return 0;
-+}
-+
-+static void gpiommc_do_unregister(struct gpiommc_configfs_device *dev)
-+{
-+      if (!gpiommc_is_registered(dev))
-+              return;
-+
-+      platform_device_unregister(dev->pdev);
-+      dev->pdev = NULL;
-+}
-+
-+static ssize_t gpiommc_config_attr_store(struct config_item *item,
-+                                       struct configfs_attribute *attr,
-+                                       const char *page, size_t count)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      int err = -EINVAL;
-+      unsigned long data;
-+
-+      if (attr == &gpiommc_attr_register) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data == 1)
-+                      err = gpiommc_do_register(dev, item->ci_name);
-+              if (data == 0) {
-+                      gpiommc_do_unregister(dev);
-+                      err = 0;
-+              }
-+              goto out;
-+      }
-+
-+      if (gpiommc_is_registered(dev)) {
-+              /* The rest of the config parameters can only be set
-+               * as long as the device is not registered, yet. */
-+              err = -EBUSY;
-+              goto out;
-+      }
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_di = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_do = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_clk = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_cs = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.pins.cs_activelow = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              switch (data) {
-+              case 0:
-+                      dev->pdata.mode = SPI_MODE_0;
-+                      break;
-+              case 1:
-+                      dev->pdata.mode = SPI_MODE_1;
-+                      break;
-+              case 2:
-+                      dev->pdata.mode = SPI_MODE_2;
-+                      break;
-+              case 3:
-+                      dev->pdata.mode = SPI_MODE_3;
-+                      break;
-+              default:
-+                      goto out;
-+              }
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.no_spi_delay = !data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data > UINT_MAX)
-+                      goto out;
-+              dev->pdata.max_bus_speed = data;
-+              err = 0;
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static void gpiommc_config_item_release(struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      kfree(dev);
-+}
-+
-+static struct configfs_item_operations gpiommc_config_item_ops = {
-+      .release                = gpiommc_config_item_release,
-+      .show_attribute         = gpiommc_config_attr_show,
-+      .store_attribute        = gpiommc_config_attr_store,
-+};
-+
-+static struct config_item_type gpiommc_dev_ci_type = {
-+      .ct_item_ops    = &gpiommc_config_item_ops,
-+      .ct_attrs       = gpiommc_config_attrs,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct config_item *gpiommc_make_item(struct config_group *group,
-+                                           const char *name)
-+{
-+      struct gpiommc_configfs_device *dev;
-+
-+      if (strlen(name) > GPIOMMC_MAX_NAMELEN) {
-+              printk(KERN_ERR PFX "configfs: device name too long\n");
-+              return NULL;
-+      }
-+
-+      dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      config_item_init_type_name(&dev->item, name,
-+                                 &gpiommc_dev_ci_type);
-+
-+      /* Assign default configuration */
-+      dev->pdata.pins.gpio_di = GPIO_INVALID;
-+      dev->pdata.pins.gpio_do = GPIO_INVALID;
-+      dev->pdata.pins.gpio_clk = GPIO_INVALID;
-+      dev->pdata.pins.gpio_cs = GPIO_INVALID;
-+      dev->pdata.pins.cs_activelow = 1;
-+      dev->pdata.mode = SPI_MODE_0;
-+      dev->pdata.no_spi_delay = 0;
-+      dev->pdata.max_bus_speed = 5000000; /* 5 MHz */
-+
-+      return &(dev->item);
-+}
-+
-+static void gpiommc_drop_item(struct config_group *group,
-+                            struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      gpiommc_do_unregister(dev);
-+      kfree(dev);
-+}
-+
-+static struct configfs_group_operations gpiommc_ct_group_ops = {
-+      .make_item      = gpiommc_make_item,
-+      .drop_item      = gpiommc_drop_item,
-+};
-+
-+static struct config_item_type gpiommc_ci_type = {
-+      .ct_group_ops   = &gpiommc_ct_group_ops,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct configfs_subsystem gpiommc_subsys = {
-+      .su_group = {
-+              .cg_item = {
-+                      .ci_namebuf = GPIOMMC_PLATDEV_NAME,
-+                      .ci_type = &gpiommc_ci_type,
-+              },
-+      },
-+      .su_mutex = __MUTEX_INITIALIZER(gpiommc_subsys.su_mutex),
-+};
-+
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+static struct platform_driver gpiommc_plat_driver = {
-+      .probe  = gpiommc_probe,
-+      .remove = gpiommc_remove,
-+      .driver = {
-+              .name   = GPIOMMC_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+int gpiommc_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(gpiommc_next_id);
-+
-+static int __init gpiommc_modinit(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&gpiommc_plat_driver);
-+      if (err)
-+              return err;
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      config_group_init(&gpiommc_subsys.su_group);
-+      err = configfs_register_subsystem(&gpiommc_subsys);
-+      if (err) {
-+              platform_driver_unregister(&gpiommc_plat_driver);
-+              return err;
-+      }
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+      return 0;
-+}
-+module_init(gpiommc_modinit);
-+
-+static void __exit gpiommc_modexit(void)
-+{
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      configfs_unregister_subsystem(&gpiommc_subsys);
-+#endif
-+      platform_driver_unregister(&gpiommc_plat_driver);
-+}
-+module_exit(gpiommc_modexit);
---- a/drivers/mmc/host/Kconfig
-+++ b/drivers/mmc/host/Kconfig
-@@ -373,6 +373,31 @@ config MMC_TMIO
-         This provides support for the SD/MMC cell found in TC6393XB,
-         T7L66XB and also HTC ASIC3
-+config GPIOMMC
-+      tristate "MMC/SD over GPIO-based SPI"
-+      depends on MMC && MMC_SPI && SPI_GPIO_OLD
-+      help
-+        This driver hooks up the mmc_spi and spi_gpio modules so that
-+        MMC/SD cards can be used on a GPIO based bus by bitbanging
-+        the SPI protocol in software.
-+
-+        This driver provides a configfs interface to dynamically create
-+        and destroy GPIO-based MMC/SD card devices. It also provides
-+        a platform device interface API.
-+        See Documentation/gpiommc.txt for details.
-+
-+        The module will be called gpiommc.
-+
-+        If unsure, say N.
-+
-+config GPIOMMC_CONFIGFS
-+      bool
-+      depends on GPIOMMC && CONFIGFS_FS
-+      default y
-+      help
-+        This option automatically enables configfs support for gpiommc
-+        if configfs is available.
-+
- config MMC_CB710
-       tristate "ENE CB710 MMC/SD Interface support"
-       depends on PCI
---- a/drivers/mmc/host/Makefile
-+++ b/drivers/mmc/host/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_MMC_SDRICOH_CS) += sdricoh_
- obj-$(CONFIG_MMC_TMIO)                += tmio_mmc.o
- obj-$(CONFIG_MMC_CB710)       += cb710-mmc.o
- obj-$(CONFIG_MMC_VIA_SDMMC)   += via-sdmmc.o
-+obj-$(CONFIG_GPIOMMC)         += gpiommc.o
- obj-$(CONFIG_SDH_BFIN)                += bfin_sdh.o
- obj-$(CONFIG_MMC_SDHCI_OF)    += sdhci-of.o
---- /dev/null
-+++ b/include/linux/mmc/gpiommc.h
-@@ -0,0 +1,71 @@
-+/*
-+ * Device driver for MMC/SD cards driven over a GPIO bus.
-+ *
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * Licensed under the GNU/GPL version 2.
-+ */
-+#ifndef LINUX_GPIOMMC_H_
-+#define LINUX_GPIOMMC_H_
-+
-+#include <linux/types.h>
-+
-+
-+#define GPIOMMC_MAX_NAMELEN           15
-+#define GPIOMMC_MAX_NAMELEN_STR               __stringify(GPIOMMC_MAX_NAMELEN)
-+
-+/**
-+ * struct gpiommc_pins - Hardware pin assignments
-+ *
-+ * @gpio_di: The GPIO number of the DATA IN pin
-+ * @gpio_do: The GPIO number of the DATA OUT pin
-+ * @gpio_clk: The GPIO number of the CLOCK pin
-+ * @gpio_cs: The GPIO number of the CHIPSELECT pin
-+ * @cs_activelow: If true, the chip is considered selected if @gpio_cs is low.
-+ */
-+struct gpiommc_pins {
-+      unsigned int gpio_di;
-+      unsigned int gpio_do;
-+      unsigned int gpio_clk;
-+      unsigned int gpio_cs;
-+      bool cs_activelow;
-+};
-+
-+/**
-+ * struct gpiommc_platform_data - Platform data for a MMC-over-SPI-GPIO device.
-+ *
-+ * @name: The unique name string of the device.
-+ * @pins: The hardware pin assignments.
-+ * @mode: The hardware mode. This is either SPI_MODE_0,
-+ *        SPI_MODE_1, SPI_MODE_2 or SPI_MODE_3. See the SPI documentation.
-+ * @no_spi_delay: Do not use delays in the lowlevel SPI bitbanging code.
-+ *                This is not standards compliant, but may be required for some
-+ *                embedded machines to gain reasonable speed.
-+ * @max_bus_speed: The maximum speed of the SPI bus, in Hertz.
-+ */
-+struct gpiommc_platform_data {
-+      char name[GPIOMMC_MAX_NAMELEN + 1];
-+      struct gpiommc_pins pins;
-+      u8 mode;
-+      bool no_spi_delay;
-+      unsigned int max_bus_speed;
-+};
-+
-+/**
-+ * GPIOMMC_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a gpiommc device.
-+ */
-+#define GPIOMMC_PLATDEV_NAME  "gpiommc"
-+
-+/**
-+ * gpiommc_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int gpiommc_next_id(void);
-+
-+#endif /* LINUX_GPIOMMC_H_ */
---- /dev/null
-+++ b/Documentation/gpiommc.txt
-@@ -0,0 +1,97 @@
-+GPIOMMC - Driver for an MMC/SD card on a bitbanging GPIO SPI bus
-+================================================================
-+
-+The gpiommc module hooks up the mmc_spi and spi_gpio modules for running an
-+MMC or SD card on GPIO pins.
-+
-+Two interfaces for registering a new MMC/SD card device are provided:
-+A static platform-device based mechanism and a dynamic configfs based interface.
-+
-+
-+Registering devices via platform-device
-+=======================================
-+
-+The platform-device interface is used for registering MMC/SD devices that are
-+part of the hardware platform. This is most useful only for embedded machines
-+with MMC/SD devices statically connected to the platform GPIO bus.
-+
-+The data structures are declared in <linux/mmc/gpiommc.h>.
-+
-+To register a new device, define an instance of struct gpiommc_platform_data.
-+This structure holds any information about how the device is hooked up to the
-+GPIO pins and what hardware modes the device supports. See the docbook-style
-+documentation in the header file for more information on the struct fields.
-+
-+Then allocate a new instance of a platform device by doing:
-+
-+      pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME, gpiommc_next_id());
-+
-+This will allocate the platform device data structures and hook it up to the
-+gpiommc driver.
-+Then add the gpiommc_platform_data to the platform device.
-+
-+      err = platform_device_add_data(pdev, pdata, sizeof(struct gpiommc_platform_data));
-+
-+You may free the local instance of struct gpiommc_platform_data now. (So the
-+struct may be allocated on the stack, too).
-+Now simply register the platform device.
-+
-+      err = platform_device_add(pdev);
-+
-+Done. The gpiommc probe routine will be invoked now and you should see a kernel
-+log message for the added device.
-+
-+
-+Registering devices via configfs
-+================================
-+
-+MMC/SD cards connected via GPIO often are a pretty dynamic thing, as for example
-+selfmade hacks for soldering an MMC/SD card to standard GPIO pins on embedded
-+hardware are a common situation.
-+So we provide a dynamic interface to conveniently handle adding and removing
-+devices from userspace, without the need to recompile the kernel.
-+
-+The "gpiommc" subdirectory at the configfs mountpoint is used for handling
-+the dynamic configuration.
-+
-+To create a new device, it must first be allocated with mkdir.
-+The following command will allocate a device named "my_mmc":
-+      mkdir /config/gpiommc/my_mmc
-+
-+There are several configuration files available in the new
-+/config/gpiommc/my_mmc/ directory:
-+
-+gpio_data_in                  = The SPI data-IN GPIO pin number.
-+gpio_data_out                 = The SPI data-OUT GPIO pin number.
-+gpio_clock                    = The SPI Clock GPIO pin number.
-+gpio_chipselect                       = The SPI Chipselect GPIO pin number.
-+gpio_chipselect_activelow     = Boolean. If 0, Chipselect is active-HIGH.
-+                                If 1, Chipselect is active-LOW.
-+spi_mode                      = The SPI data mode. Can be 0-3.
-+spi_delay                     = Enable all delays in the lowlevel bitbanging.
-+max_bus_speed                 = The maximum SPI bus speed. In Hertz.
-+
-+register                      = Not a configuration parameter.
-+                                Used to register the configured card
-+                                with the kernel.
-+
-+The device must first get configured and then registered by writing "1" to
-+the "register" file.
-+The configuration parameters "gpio_data_in", "gpio_data_out", "gpio_clock"
-+and "gpio_chipselect" are essential and _must_ be configured before writing
-+"1" to the "register" file. The registration will fail, otherwise.
-+
-+The default values for the other parameters are:
-+gpio_chipselect_activelow     = 1             (CS active-LOW)
-+spi_mode                      = 0             (SPI_MODE_0)
-+spi_delay                     = 1             (enabled)
-+max_bus_speed                 = 5000000       (5 Mhz)
-+
-+Configuration values can not be changed after registration. To unregister
-+the device, write a "0" to the "register" file. The configuration can be
-+changed again after unregistering.
-+
-+To completely remove the device, simply rmdir the directory
-+(/config/gpiommc/my_mmc in this example).
-+There's no need to first unregister the device before removing it. That will
-+be done automatically.
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -2443,6 +2443,11 @@ T:      git git://git.kernel.org/pub/scm/linu
- S:    Maintained
- F:    drivers/media/video/gspca/
-+GPIOMMC DRIVER
-+P:    Michael Buesch
-+M:    mb@bu3sch.de
-+S:    Maintained
-+
- HARDWARE MONITORING
- L:    lm-sensors@lm-sensors.org
- W:    http://www.lm-sensors.org/
diff --git a/target/linux/generic-2.6/patches-2.6.33/923-gpiommc-configfs-locking.patch b/target/linux/generic-2.6/patches-2.6.33/923-gpiommc-configfs-locking.patch
deleted file mode 100644 (file)
index 2e4e820..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-The gpiommc configfs context structure needs locking, as configfs
-does not lock access between files.
-
---- a/drivers/mmc/host/gpiommc.c
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -143,6 +143,8 @@ struct gpiommc_configfs_device {
-       struct platform_device *pdev;
-       /* The configuration */
-       struct gpiommc_platform_data pdata;
-+      /* Mutex to protect this structure */
-+      struct mutex mutex;
- };
- #define GPIO_INVALID  -1
-@@ -233,6 +235,8 @@ static ssize_t gpiommc_config_attr_show(
-       unsigned int gpio;
-       int err = 0;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_DI) {
-               gpio = dev->pdata.pins.gpio_di;
-               if (gpio == GPIO_INVALID)
-@@ -293,6 +297,8 @@ static ssize_t gpiommc_config_attr_show(
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -352,6 +358,8 @@ static ssize_t gpiommc_config_attr_store
-       int err = -EINVAL;
-       unsigned long data;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_register) {
-               err = strict_strtoul(page, 10, &data);
-               if (err)
-@@ -477,6 +485,8 @@ static ssize_t gpiommc_config_attr_store
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -513,6 +523,7 @@ static struct config_item *gpiommc_make_
-       if (!dev)
-               return NULL;
-+      mutex_init(&dev->mutex);
-       config_item_init_type_name(&dev->item, name,
-                                  &gpiommc_dev_ci_type);
diff --git a/target/linux/generic-2.6/patches-2.6.33/924-cs5535_gpio.patch b/target/linux/generic-2.6/patches-2.6.33/924-cs5535_gpio.patch
deleted file mode 100644 (file)
index 4cb3031..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/drivers/char/cs5535_gpio.c
-+++ b/drivers/char/cs5535_gpio.c
-@@ -15,6 +15,7 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/cdev.h>
-+#include <linux/device.h>
- #include <linux/ioport.h>
- #include <linux/pci.h>
-@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[] 
- MODULE_DEVICE_TABLE(pci, divil_pci);
- static struct cdev cs5535_gpio_cdev;
-+static struct class *cs5535_gpio_class;
- /* reserve 32 entries even though some aren't usable */
- #define CS5535_GPIO_COUNT     32
-@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
-       { 0x30, 0x00, '1', '0' },       /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
-       { 0x20, 0x20, 'I', 'i' },       /* GPIOx_IN_EN */
-       { 0x04, 0x04, 'O', 'o' },       /* GPIOx_OUT_EN */
-+      { 0x10, 0x10, 'A', 'a' },       /* GPIOx_OUT_AUX1_SEL */
-+      { 0x14, 0x14, 'B', 'b' },       /* GPIOx_OUT_AUX2_SEL */
-       { 0x08, 0x08, 't', 'T' },       /* GPIOx_OUT_OD_EN */
-       { 0x18, 0x18, 'P', 'p' },       /* GPIOx_OUT_PU_EN */
-       { 0x1c, 0x1c, 'D', 'd' },       /* GPIOx_OUT_PD_EN */
-+      { 0x24, 0x24, 'N', 'n' },       /* GPIOx_IN_INV_EN */
-+      { 0x0c, 0x0c, 'X', 'x' },       /* GPIOx_OUT_INV_EN */
-+      { 0x00, 0x00, 'H', 'L' },       /* GPIOx_OUT_VAL */
- };
-@@ -176,7 +183,7 @@ static int __init cs5535_gpio_init(void)
- {
-       dev_t   dev_id;
-       u32     low, hi;
--      int     retval;
-+      int     retval, i;
-       if (pci_dev_present(divil_pci) == 0) {
-               printk(KERN_WARNING NAME ": DIVIL not found\n");
-@@ -231,23 +238,54 @@ static int __init cs5535_gpio_init(void)
-               major = MAJOR(dev_id);
-       }
--      if (retval) {
--              release_region(gpio_base, CS5535_GPIO_SIZE);
--              return -1;
--      }
-+      if (retval)
-+              goto error;
-       printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
-              gpio_base, mask, major);
-       cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
--      cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
-+      retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
-+      if (retval) {
-+              kobject_put(&cs5535_gpio_cdev.kobj);
-+              goto error_region;
-+      }
-+
-+      cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
-+      if (IS_ERR(cs5535_gpio_class)) {
-+              printk(KERN_ERR "Error creating cs5535_gpio class\n");
-+              cdev_del(&cs5535_gpio_cdev);
-+              retval = PTR_ERR(cs5535_gpio_class);
-+              goto error_region;
-+      }
-+
-+      for (i = 0; i < CS5535_GPIO_COUNT; i++) {
-+              if (mask & (1<<i)) {
-+                      device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
-+              }
-+      }
-       return 0;
-+
-+error_region:
-+      unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
-+error:
-+      release_region(gpio_base, CS5535_GPIO_SIZE);
-+      return retval;
- }
- static void __exit cs5535_gpio_cleanup(void)
- {
-       dev_t dev_id = MKDEV(major, 0);
-+      int i;
-+
-+      for (i = 0; i < CS5535_GPIO_COUNT; i++) {
-+              if (mask & (1<<i)) {
-+                      device_destroy(cs5535_gpio_class, MKDEV(major, i));
-+              }
-+      }
-+
-+      class_destroy(cs5535_gpio_class);
-       cdev_del(&cs5535_gpio_cdev);
-       unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
diff --git a/target/linux/generic-2.6/patches-2.6.33/925-modify-i2c-gpio-initcall-level.patch b/target/linux/generic-2.6/patches-2.6.33/925-modify-i2c-gpio-initcall-level.patch
deleted file mode 100644 (file)
index 1708e33..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/i2c/busses/i2c-gpio.c
-+++ b/drivers/i2c/busses/i2c-gpio.c
-@@ -210,7 +210,7 @@ static int __init i2c_gpio_init(void)
-       return ret;
- }
--module_init(i2c_gpio_init);
-+subsys_initcall(i2c_gpio_init);
- static void __exit i2c_gpio_exit(void)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.33/940-wireless_mesh_header.patch b/target/linux/generic-2.6/patches-2.6.33/940-wireless_mesh_header.patch
deleted file mode 100644 (file)
index a2b82d8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -137,7 +137,7 @@
-  */
- #if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
--# if defined(CONFIG_MAC80211_MESH)
-+# if 1 || defined(CONFIG_MAC80211_MESH)
- #  define LL_MAX_HEADER 128
- # else
- #  define LL_MAX_HEADER 96
diff --git a/target/linux/generic-2.6/patches-2.6.33/951-revert_gcc4_4_fixes.patch b/target/linux/generic-2.6/patches-2.6.33/951-revert_gcc4_4_fixes.patch
deleted file mode 100644 (file)
index d2c76a8..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
---- a/arch/powerpc/boot/crtsavres.S
-+++ /dev/null
-@@ -1,233 +0,0 @@
--/*
-- * Special support for eabi and SVR4
-- *
-- *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
-- *   Copyright 2008 Freescale Semiconductor, Inc.
-- *   Written By Michael Meissner
-- *
-- * Based on gcc/config/rs6000/crtsavres.asm from gcc
-- *
-- * 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, or (at your option) any
-- * later version.
-- *
-- * In addition to the permissions in the GNU General Public License, the
-- * Free Software Foundation gives you unlimited permission to link the
-- * compiled version of this file with other programs, and to distribute
-- * those programs without any restriction coming from the use of this
-- * file.  (The General Public License restrictions do apply in other
-- * respects; for example, they cover modification of the file, and
-- * distribution when not linked into another program.)
-- *
-- * This file 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; see the file COPYING.  If not, write to
-- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-- * Boston, MA 02110-1301, USA.
-- *
-- *    As a special exception, if you link this library with files
-- *    compiled with GCC to produce an executable, this does not cause
-- *    the resulting executable to be covered by the GNU General Public License.
-- *    This exception does not however invalidate any other reasons why
-- *    the executable file might be covered by the GNU General Public License.
-- */
--
--      .file   "crtsavres.S"
--      .section ".text"
--
--/* On PowerPC64 Linux, these functions are provided by the linker.  */
--#ifndef __powerpc64__
--
--#define _GLOBAL(name) \
--      .type name,@function; \
--      .globl name; \
--name:
--
--/* Routines for saving integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer save area.  */
--
--_GLOBAL(_savegpr_14)
--_GLOBAL(_save32gpr_14)
--      stw     14,-72(11)      /* save gp registers */
--_GLOBAL(_savegpr_15)
--_GLOBAL(_save32gpr_15)
--      stw     15,-68(11)
--_GLOBAL(_savegpr_16)
--_GLOBAL(_save32gpr_16)
--      stw     16,-64(11)
--_GLOBAL(_savegpr_17)
--_GLOBAL(_save32gpr_17)
--      stw     17,-60(11)
--_GLOBAL(_savegpr_18)
--_GLOBAL(_save32gpr_18)
--      stw     18,-56(11)
--_GLOBAL(_savegpr_19)
--_GLOBAL(_save32gpr_19)
--      stw     19,-52(11)
--_GLOBAL(_savegpr_20)
--_GLOBAL(_save32gpr_20)
--      stw     20,-48(11)
--_GLOBAL(_savegpr_21)
--_GLOBAL(_save32gpr_21)
--      stw     21,-44(11)
--_GLOBAL(_savegpr_22)
--_GLOBAL(_save32gpr_22)
--      stw     22,-40(11)
--_GLOBAL(_savegpr_23)
--_GLOBAL(_save32gpr_23)
--      stw     23,-36(11)
--_GLOBAL(_savegpr_24)
--_GLOBAL(_save32gpr_24)
--      stw     24,-32(11)
--_GLOBAL(_savegpr_25)
--_GLOBAL(_save32gpr_25)
--      stw     25,-28(11)
--_GLOBAL(_savegpr_26)
--_GLOBAL(_save32gpr_26)
--      stw     26,-24(11)
--_GLOBAL(_savegpr_27)
--_GLOBAL(_save32gpr_27)
--      stw     27,-20(11)
--_GLOBAL(_savegpr_28)
--_GLOBAL(_save32gpr_28)
--      stw     28,-16(11)
--_GLOBAL(_savegpr_29)
--_GLOBAL(_save32gpr_29)
--      stw     29,-12(11)
--_GLOBAL(_savegpr_30)
--_GLOBAL(_save32gpr_30)
--      stw     30,-8(11)
--_GLOBAL(_savegpr_31)
--_GLOBAL(_save32gpr_31)
--      stw     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14)
--_GLOBAL(_rest32gpr_14)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15)
--_GLOBAL(_rest32gpr_15)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16)
--_GLOBAL(_rest32gpr_16)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17)
--_GLOBAL(_rest32gpr_17)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18)
--_GLOBAL(_rest32gpr_18)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19)
--_GLOBAL(_rest32gpr_19)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20)
--_GLOBAL(_rest32gpr_20)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21)
--_GLOBAL(_rest32gpr_21)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22)
--_GLOBAL(_rest32gpr_22)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23)
--_GLOBAL(_rest32gpr_23)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24)
--_GLOBAL(_rest32gpr_24)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25)
--_GLOBAL(_rest32gpr_25)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26)
--_GLOBAL(_rest32gpr_26)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27)
--_GLOBAL(_rest32gpr_27)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28)
--_GLOBAL(_rest32gpr_28)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29)
--_GLOBAL(_rest32gpr_29)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30)
--_GLOBAL(_rest32gpr_30)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31)
--_GLOBAL(_rest32gpr_31)
--      lwz     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14_x)
--_GLOBAL(_rest32gpr_14_x)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15_x)
--_GLOBAL(_rest32gpr_15_x)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16_x)
--_GLOBAL(_rest32gpr_16_x)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17_x)
--_GLOBAL(_rest32gpr_17_x)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18_x)
--_GLOBAL(_rest32gpr_18_x)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19_x)
--_GLOBAL(_rest32gpr_19_x)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20_x)
--_GLOBAL(_rest32gpr_20_x)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21_x)
--_GLOBAL(_rest32gpr_21_x)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22_x)
--_GLOBAL(_rest32gpr_22_x)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23_x)
--_GLOBAL(_rest32gpr_23_x)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24_x)
--_GLOBAL(_rest32gpr_24_x)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25_x)
--_GLOBAL(_rest32gpr_25_x)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26_x)
--_GLOBAL(_rest32gpr_26_x)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27_x)
--_GLOBAL(_rest32gpr_27_x)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28_x)
--_GLOBAL(_rest32gpr_28_x)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29_x)
--_GLOBAL(_rest32gpr_29_x)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30_x)
--_GLOBAL(_rest32gpr_30_x)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31_x)
--_GLOBAL(_rest32gpr_31_x)
--      lwz     0,4(11)
--      lwz     31,-4(11)
--      mtlr    0
--      mr      1,11
--      blr
--#endif
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -60,7 +60,7 @@ libfdtheader := fdt.h libfdt.h libfdt_in
- $(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o): \
-       $(addprefix $(obj)/,$(libfdtheader))
--src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
-+src-wlib := string.S crt0.S stdio.c main.c \
-               $(libfdt) libfdt-wrapper.c \
-               ns16550.c serial.c simple_alloc.c div64.S util.S \
-               gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
---- a/arch/powerpc/kernel/prom_init_check.sh
-+++ b/arch/powerpc/kernel/prom_init_check.sh
-@@ -48,20 +48,6 @@ do
-               fi
-       done
--      # ignore register save/restore funcitons
--      if [ "${UNDEF:0:9}" = "_restgpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:11}" = "_rest32gpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:9}" = "_savegpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:11}" = "_save32gpr_" ]; then
--              OK=1
--      fi
--
-       if [ $OK -eq 0 ]; then
-               ERROR=1
-               echo "Error: External symbol '$UNDEF' referenced" \
---- a/arch/powerpc/lib/crtsavres.S
-+++ /dev/null
-@@ -1,229 +0,0 @@
--/*
-- * Special support for eabi and SVR4
-- *
-- *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
-- *   Copyright 2008 Freescale Semiconductor, Inc.
-- *   Written By Michael Meissner
-- *
-- * Based on gcc/config/rs6000/crtsavres.asm from gcc
-- *
-- * 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, or (at your option) any
-- * later version.
-- *
-- * In addition to the permissions in the GNU General Public License, the
-- * Free Software Foundation gives you unlimited permission to link the
-- * compiled version of this file with other programs, and to distribute
-- * those programs without any restriction coming from the use of this
-- * file.  (The General Public License restrictions do apply in other
-- * respects; for example, they cover modification of the file, and
-- * distribution when not linked into another program.)
-- *
-- * This file 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; see the file COPYING.  If not, write to
-- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-- * Boston, MA 02110-1301, USA.
-- *
-- *    As a special exception, if you link this library with files
-- *    compiled with GCC to produce an executable, this does not cause
-- *    the resulting executable to be covered by the GNU General Public License.
-- *    This exception does not however invalidate any other reasons why
-- *    the executable file might be covered by the GNU General Public License.
-- */
--
--#include <asm/ppc_asm.h>
--
--      .file   "crtsavres.S"
--      .section ".text"
--
--#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
--
--/* Routines for saving integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer save area.  */
--
--_GLOBAL(_savegpr_14)
--_GLOBAL(_save32gpr_14)
--      stw     14,-72(11)      /* save gp registers */
--_GLOBAL(_savegpr_15)
--_GLOBAL(_save32gpr_15)
--      stw     15,-68(11)
--_GLOBAL(_savegpr_16)
--_GLOBAL(_save32gpr_16)
--      stw     16,-64(11)
--_GLOBAL(_savegpr_17)
--_GLOBAL(_save32gpr_17)
--      stw     17,-60(11)
--_GLOBAL(_savegpr_18)
--_GLOBAL(_save32gpr_18)
--      stw     18,-56(11)
--_GLOBAL(_savegpr_19)
--_GLOBAL(_save32gpr_19)
--      stw     19,-52(11)
--_GLOBAL(_savegpr_20)
--_GLOBAL(_save32gpr_20)
--      stw     20,-48(11)
--_GLOBAL(_savegpr_21)
--_GLOBAL(_save32gpr_21)
--      stw     21,-44(11)
--_GLOBAL(_savegpr_22)
--_GLOBAL(_save32gpr_22)
--      stw     22,-40(11)
--_GLOBAL(_savegpr_23)
--_GLOBAL(_save32gpr_23)
--      stw     23,-36(11)
--_GLOBAL(_savegpr_24)
--_GLOBAL(_save32gpr_24)
--      stw     24,-32(11)
--_GLOBAL(_savegpr_25)
--_GLOBAL(_save32gpr_25)
--      stw     25,-28(11)
--_GLOBAL(_savegpr_26)
--_GLOBAL(_save32gpr_26)
--      stw     26,-24(11)
--_GLOBAL(_savegpr_27)
--_GLOBAL(_save32gpr_27)
--      stw     27,-20(11)
--_GLOBAL(_savegpr_28)
--_GLOBAL(_save32gpr_28)
--      stw     28,-16(11)
--_GLOBAL(_savegpr_29)
--_GLOBAL(_save32gpr_29)
--      stw     29,-12(11)
--_GLOBAL(_savegpr_30)
--_GLOBAL(_save32gpr_30)
--      stw     30,-8(11)
--_GLOBAL(_savegpr_31)
--_GLOBAL(_save32gpr_31)
--      stw     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14)
--_GLOBAL(_rest32gpr_14)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15)
--_GLOBAL(_rest32gpr_15)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16)
--_GLOBAL(_rest32gpr_16)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17)
--_GLOBAL(_rest32gpr_17)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18)
--_GLOBAL(_rest32gpr_18)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19)
--_GLOBAL(_rest32gpr_19)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20)
--_GLOBAL(_rest32gpr_20)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21)
--_GLOBAL(_rest32gpr_21)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22)
--_GLOBAL(_rest32gpr_22)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23)
--_GLOBAL(_rest32gpr_23)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24)
--_GLOBAL(_rest32gpr_24)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25)
--_GLOBAL(_rest32gpr_25)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26)
--_GLOBAL(_rest32gpr_26)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27)
--_GLOBAL(_rest32gpr_27)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28)
--_GLOBAL(_rest32gpr_28)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29)
--_GLOBAL(_rest32gpr_29)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30)
--_GLOBAL(_rest32gpr_30)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31)
--_GLOBAL(_rest32gpr_31)
--      lwz     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14_x)
--_GLOBAL(_rest32gpr_14_x)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15_x)
--_GLOBAL(_rest32gpr_15_x)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16_x)
--_GLOBAL(_rest32gpr_16_x)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17_x)
--_GLOBAL(_rest32gpr_17_x)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18_x)
--_GLOBAL(_rest32gpr_18_x)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19_x)
--_GLOBAL(_rest32gpr_19_x)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20_x)
--_GLOBAL(_rest32gpr_20_x)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21_x)
--_GLOBAL(_rest32gpr_21_x)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22_x)
--_GLOBAL(_rest32gpr_22_x)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23_x)
--_GLOBAL(_rest32gpr_23_x)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24_x)
--_GLOBAL(_rest32gpr_24_x)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25_x)
--_GLOBAL(_rest32gpr_25_x)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26_x)
--_GLOBAL(_rest32gpr_26_x)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27_x)
--_GLOBAL(_rest32gpr_27_x)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28_x)
--_GLOBAL(_rest32gpr_28_x)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29_x)
--_GLOBAL(_rest32gpr_29_x)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30_x)
--_GLOBAL(_rest32gpr_30_x)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31_x)
--_GLOBAL(_rest32gpr_31_x)
--      lwz     0,4(11)
--      lwz     31,-4(11)
--      mtlr    0
--      mr      1,11
--      blr
--#endif
---- a/arch/powerpc/lib/Makefile
-+++ b/arch/powerpc/lib/Makefile
-@@ -13,7 +13,7 @@ CFLAGS_REMOVE_feature-fixups.o = -pg
- obj-y                 := string.o alloc.o \
-                          checksum_$(CONFIG_WORD_SIZE).o
--obj-$(CONFIG_PPC32)   += div64.o copy_32.o crtsavres.o
-+obj-$(CONFIG_PPC32)   += div64.o copy_32.o
- obj-$(CONFIG_HAS_IOMEM)       += devres.o
- obj-$(CONFIG_PPC64)   += copypage_64.o copyuser_64.o \
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -92,8 +92,6 @@ endif
- else
-       KBUILD_CFLAGS += $(call cc-option,-mtune=power4)
- endif
--else
--LDFLAGS_MODULE        += arch/powerpc/lib/crtsavres.o
- endif
- ifeq ($(CONFIG_TUNE_CELL),y)
diff --git a/target/linux/generic-2.6/patches-2.6.33/970-ocf_kbuild_integration.patch b/target/linux/generic-2.6/patches-2.6.33/970-ocf_kbuild_integration.patch
deleted file mode 100644 (file)
index 0c40bdc..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -823,6 +823,8 @@ config CRYPTO_ANSI_CPRNG
-         ANSI X9.31 A.2.4. Not this option must be enabled if CRYPTO_FIPS 
-         is selected
-+source "crypto/ocf/Kconfig"
-+
- source "drivers/crypto/Kconfig"
- endif # if CRYPTO
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -86,6 +86,11 @@ obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
- obj-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o
- #
-+# OCF
-+#
-+obj-$(CONFIG_OCF_OCF) += ocf/
-+
-+#
- # generic algorithms and the async_tx api
- #
- obj-$(CONFIG_XOR_BLOCKS) += xor.o
diff --git a/target/linux/generic-2.6/patches-2.6.33/971-ocf_20080917.patch b/target/linux/generic-2.6/patches-2.6.33/971-ocf_20080917.patch
deleted file mode 100644 (file)
index 669be1a..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -129,6 +129,9 @@
-  *                                unsigned int value);
-  *    void add_interrupt_randomness(int irq);
-  *
-+ *      void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+ *      int random_input_wait(void);
-+ *
-  * add_input_randomness() uses the input layer interrupt timing, as well as
-  * the event type information from the hardware.
-  *
-@@ -140,6 +143,13 @@
-  * a better measure, since the timing of the disk interrupts are more
-  * unpredictable.
-  *
-+ * random_input_words() just provides a raw block of entropy to the input
-+ * pool, such as from a hardware entropy generator.
-+ *
-+ * random_input_wait() suspends the caller until such time as the
-+ * entropy pool falls below the write threshold, and returns a count of how
-+ * much entropy (in bits) is needed to sustain the pool.
-+ *
-  * All of these routines try to estimate how many bits of randomness a
-  * particular randomness source.  They do this by keeping track of the
-  * first and second order deltas of the event timings.
-@@ -714,6 +724,61 @@ void add_disk_randomness(struct gendisk 
- }
- #endif
-+/*
-+ * random_input_words - add bulk entropy to pool
-+ *
-+ * @buf: buffer to add
-+ * @wordcount: number of __u32 words to add
-+ * @ent_count: total amount of entropy (in bits) to credit
-+ *
-+ * this provides bulk input of entropy to the input pool
-+ *
-+ */
-+void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+{
-+      mix_pool_bytes(&input_pool, buf, wordcount*4);
-+
-+      credit_entropy_bits(&input_pool, ent_count);
-+
-+      DEBUG_ENT("crediting %d bits => %d\n",
-+                ent_count, input_pool.entropy_count);
-+      /*
-+       * Wake up waiting processes if we have enough
-+       * entropy.
-+       */
-+      if (input_pool.entropy_count >= random_read_wakeup_thresh)
-+              wake_up_interruptible(&random_read_wait);
-+}
-+EXPORT_SYMBOL(random_input_words);
-+
-+/*
-+ * random_input_wait - wait until random needs entropy
-+ *
-+ * this function sleeps until the /dev/random subsystem actually
-+ * needs more entropy, and then return the amount of entropy
-+ * that it would be nice to have added to the system.
-+ */
-+int random_input_wait(void)
-+{
-+      int count;
-+
-+      wait_event_interruptible(random_write_wait, 
-+                       input_pool.entropy_count < random_write_wakeup_thresh);
-+
-+      count = random_write_wakeup_thresh - input_pool.entropy_count;
-+
-+        /* likely we got woken up due to a signal */
-+      if (count <= 0) count = random_read_wakeup_thresh; 
-+
-+      DEBUG_ENT("requesting %d bits from input_wait()er %d<%d\n",
-+                count,
-+                input_pool.entropy_count, random_write_wakeup_thresh);
-+
-+      return count;
-+}
-+EXPORT_SYMBOL(random_input_wait);
-+
-+
- #define EXTRACT_SIZE 10
- /*********************************************************************
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -141,6 +141,7 @@ SYSCALL_DEFINE1(dup, unsigned int, filde
-       }
-       return ret;
- }
-+EXPORT_SYMBOL(sys_dup);
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
---- a/include/linux/miscdevice.h
-+++ b/include/linux/miscdevice.h
-@@ -12,6 +12,7 @@
- #define APOLLO_MOUSE_MINOR    7
- #define PC110PAD_MINOR                9
- /*#define ADB_MOUSE_MINOR     10      FIXME OBSOLETE */
-+#define CRYPTODEV_MINOR               70      /* /dev/crypto */
- #define WATCHDOG_MINOR                130     /* Watchdog timer     */
- #define TEMP_MINOR            131     /* Temperature Sensor */
- #define RTC_MINOR             135
---- a/include/linux/random.h
-+++ b/include/linux/random.h
-@@ -34,6 +34,30 @@
- /* Clear the entropy pool and associated counters.  (Superuser only.) */
- #define RNDCLEARPOOL  _IO( 'R', 0x06 )
-+#ifdef CONFIG_FIPS_RNG
-+
-+/* Size of seed value - equal to AES blocksize */
-+#define AES_BLOCK_SIZE_BYTES  16
-+#define SEED_SIZE_BYTES                       AES_BLOCK_SIZE_BYTES
-+/* Size of AES key */
-+#define KEY_SIZE_BYTES                16
-+
-+/* ioctl() structure used by FIPS 140-2 Tests */
-+struct rand_fips_test {
-+      unsigned char key[KEY_SIZE_BYTES];                      /* Input */
-+      unsigned char datetime[SEED_SIZE_BYTES];        /* Input */
-+      unsigned char seed[SEED_SIZE_BYTES];            /* Input */
-+      unsigned char result[SEED_SIZE_BYTES];          /* Output */
-+};
-+
-+/* FIPS 140-2 RNG Variable Seed Test. (Superuser only.) */
-+#define RNDFIPSVST    _IOWR('R', 0x10, struct rand_fips_test)
-+
-+/* FIPS 140-2 RNG Monte Carlo Test. (Superuser only.) */
-+#define RNDFIPSMCT    _IOWR('R', 0x11, struct rand_fips_test)
-+
-+#endif /* #ifdef CONFIG_FIPS_RNG */
-+
- struct rand_pool_info {
-       int     entropy_count;
-       int     buf_size;
-@@ -50,6 +74,10 @@ extern void add_input_randomness(unsigne
-                                unsigned int value);
- extern void add_interrupt_randomness(int irq);
-+extern void random_input_words(__u32 *buf, size_t wordcount, int ent_count);
-+extern int random_input_wait(void);
-+#define HAS_RANDOM_INPUT_WAIT 1
-+
- extern void get_random_bytes(void *buf, int nbytes);
- void generate_random_uuid(unsigned char uuid_out[16]);
diff --git a/target/linux/generic-2.6/patches-2.6.33/972-ocf_compile_fix.patch b/target/linux/generic-2.6/patches-2.6.33/972-ocf_compile_fix.patch
deleted file mode 100644 (file)
index a3fa226..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/crypto/ocf/cryptosoft.c
-+++ b/crypto/ocf/cryptosoft.c
-@@ -47,7 +47,7 @@
- #include <linux/mm.h>
- #include <linux/skbuff.h>
- #include <linux/random.h>
--#include <asm/scatterlist.h>
-+#include <linux/scatterlist.h>
- #include <cryptodev.h>
- #include <uio.h>
diff --git a/target/linux/generic-2.6/patches-2.6.33/973-ocf_2.6.27_fix.patch b/target/linux/generic-2.6/patches-2.6.33/973-ocf_2.6.27_fix.patch
deleted file mode 100644 (file)
index ecb9bef..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
---- a/crypto/ocf/random.c
-+++ b/crypto/ocf/random.c
-@@ -49,6 +49,7 @@
- #include <linux/unistd.h>
- #include <linux/poll.h>
- #include <linux/random.h>
-+#include <linux/kthread.h>
- #include <cryptodev.h>
- #ifdef CONFIG_OCF_FIPS
-@@ -81,7 +82,7 @@ struct random_op {
- static int random_proc(void *arg);
--static pid_t          randomproc = (pid_t) -1;
-+static struct task_struct *random_task;
- static spinlock_t     random_lock;
- /*
-@@ -141,13 +142,18 @@ crypto_rregister(
-       spin_lock_irqsave(&random_lock, flags);
-       list_add_tail(&rops->random_list, &random_ops);
-       if (!started) {
--              randomproc = kernel_thread(random_proc, NULL, CLONE_FS|CLONE_FILES);
--              if (randomproc < 0) {
--                      ret = randomproc;
-+              struct task_struct *t;
-+
-+              t = kthread_create(random_proc, NULL, "ocf-random");
-+              if (IS_ERR(t)) {
-+                      ret = PTR_ERR(t);
-                       printk("crypto: crypto_rregister cannot start random thread; "
-                                       "error %d", ret);
--              } else
-+              } else {
-+                      random_task = t;
-+                      wake_up_process(t);
-                       started = 1;
-+              }
-       }
-       spin_unlock_irqrestore(&random_lock, flags);
-@@ -172,7 +178,7 @@ crypto_runregister_all(u_int32_t driveri
-       spin_lock_irqsave(&random_lock, flags);
-       if (list_empty(&random_ops) && started)
--              kill_proc(randomproc, SIGKILL, 1);
-+              send_sig(SIGKILL, random_task, 1);
-       spin_unlock_irqrestore(&random_lock, flags);
-       return(0);
- }
-@@ -308,7 +314,7 @@ random_proc(void *arg)
- bad_alloc:
-       spin_lock_irq(&random_lock);
--      randomproc = (pid_t) -1;
-+      random_task = NULL;
-       started = 0;
-       spin_unlock_irq(&random_lock);
---- a/crypto/ocf/crypto.c
-+++ b/crypto/ocf/crypto.c
-@@ -74,6 +74,7 @@ __FBSDID("$FreeBSD: src/sys/opencrypto/c
- #include <linux/sched.h>
- #include <linux/spinlock.h>
- #include <linux/version.h>
-+#include <linux/kthread.h>
- #include <cryptodev.h>
- /*
-@@ -255,10 +256,10 @@ module_param(crypto_devallowsoft, int, 0
- MODULE_PARM_DESC(crypto_devallowsoft,
-          "Enable/disable use of software crypto support");
--static pid_t  cryptoproc = (pid_t) -1;
-+static struct task_struct *crypto_task;
- static struct completion cryptoproc_exited;
- static DECLARE_WAIT_QUEUE_HEAD(cryptoproc_wait);
--static pid_t  cryptoretproc = (pid_t) -1;
-+static struct task_struct *cryptoret_task;
- static struct completion cryptoretproc_exited;
- static DECLARE_WAIT_QUEUE_HEAD(cryptoretproc_wait);
-@@ -1401,7 +1402,7 @@ crypto_proc(void *arg)
-                       wait_event_interruptible(cryptoproc_wait,
-                                       !(list_empty(&crp_q) || crypto_all_qblocked) ||
-                                       !(list_empty(&crp_kq) || crypto_all_kqblocked) ||
--                                      cryptoproc == (pid_t) -1);
-+                                      crypto_task == NULL);
-                       crp_sleep = 0;
-                       if (signal_pending (current)) {
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-@@ -1414,7 +1415,7 @@ crypto_proc(void *arg)
-                       }
-                       CRYPTO_Q_LOCK();
-                       dprintk("%s - awake\n", __FUNCTION__);
--                      if (cryptoproc == (pid_t) -1)
-+                      if (crypto_task == NULL)
-                               break;
-                       cryptostats.cs_intrs++;
-               }
-@@ -1470,7 +1471,7 @@ crypto_ret_proc(void *arg)
-                       dprintk("%s - sleeping\n", __FUNCTION__);
-                       CRYPTO_RETQ_UNLOCK();
-                       wait_event_interruptible(cryptoretproc_wait,
--                                      cryptoretproc == (pid_t) -1 ||
-+                                      cryptoret_task == NULL ||
-                                       !list_empty(&crp_ret_q) ||
-                                       !list_empty(&crp_ret_kq));
-                       if (signal_pending (current)) {
-@@ -1484,7 +1485,7 @@ crypto_ret_proc(void *arg)
-                       }
-                       CRYPTO_RETQ_LOCK();
-                       dprintk("%s - awake\n", __FUNCTION__);
--                      if (cryptoretproc == (pid_t) -1) {
-+                      if (cryptoret_task == NULL) {
-                               dprintk("%s - EXITING!\n", __FUNCTION__);
-                               break;
-                       }
-@@ -1597,6 +1598,7 @@ DB_SHOW_COMMAND(kcrypto, db_show_kcrypto
- static int
- crypto_init(void)
- {
-+      struct task_struct *t;
-       int error;
-       dprintk("%s(0x%x)\n", __FUNCTION__, (int) crypto_init);
-@@ -1643,23 +1645,27 @@ crypto_init(void)
-       init_completion(&cryptoproc_exited);
-       init_completion(&cryptoretproc_exited);
--      cryptoproc = 0; /* to avoid race condition where proc runs first */
--      cryptoproc = kernel_thread(crypto_proc, NULL, CLONE_FS|CLONE_FILES);
--      if (cryptoproc < 0) {
--              error = cryptoproc;
-+      crypto_task = NULL; /* to avoid race condition where proc runs first */
-+      t = kthread_create(crypto_proc, NULL, "ocf-crypto");
-+      if (IS_ERR(t)) {
-+              error = PTR_ERR(t);
-               printk("crypto: crypto_init cannot start crypto thread; error %d",
-                       error);
-               goto bad;
-       }
-+      wake_up_process(t);
-+      crypto_task = t;
--      cryptoretproc = 0; /* to avoid race condition where proc runs first */
--      cryptoretproc = kernel_thread(crypto_ret_proc, NULL, CLONE_FS|CLONE_FILES);
--      if (cryptoretproc < 0) {
--              error = cryptoretproc;
-+      cryptoret_task = NULL; /* to avoid race condition where proc runs first */
-+      t = kthread_create(crypto_ret_proc, NULL, "ocf-cryptoret");
-+      if (IS_ERR(t)) {
-+              error = PTR_ERR(t);
-               printk("crypto: crypto_init cannot start cryptoret thread; error %d",
-                               error);
-               goto bad;
-       }
-+      wake_up_process(t);
-+      cryptoret_task = t;
-       return 0;
- bad:
-@@ -1671,7 +1677,7 @@ bad:
- static void
- crypto_exit(void)
- {
--      pid_t p;
-+      struct task_struct *t;
-       unsigned long d_flags;
-       dprintk("%s()\n", __FUNCTION__);
-@@ -1681,18 +1687,18 @@ crypto_exit(void)
-        */
-       CRYPTO_DRIVER_LOCK();
--      p = cryptoproc;
--      cryptoproc = (pid_t) -1;
--      kill_proc(p, SIGTERM, 1);
-+      t = crypto_task;
-+      crypto_task = NULL;
-+      send_sig(SIGTERM, t, 1);
-       wake_up_interruptible(&cryptoproc_wait);
-       CRYPTO_DRIVER_UNLOCK();
-       wait_for_completion(&cryptoproc_exited);
-       CRYPTO_DRIVER_LOCK();
--      p = cryptoretproc;
--      cryptoretproc = (pid_t) -1;
--      kill_proc(p, SIGTERM, 1);
-+      t = cryptoret_task;
-+      cryptoret_task = NULL;
-+      send_sig(SIGTERM, t, 1);
-       wake_up_interruptible(&cryptoretproc_wait);
-       CRYPTO_DRIVER_UNLOCK();
diff --git a/target/linux/generic-2.6/patches-2.6.33/974-ssb_b43_default_on.patch b/target/linux/generic-2.6/patches-2.6.33/974-ssb_b43_default_on.patch
deleted file mode 100644 (file)
index 98dde2a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/ssb/Kconfig
-+++ b/drivers/ssb/Kconfig
-@@ -49,7 +49,7 @@ config SSB_PCIHOST
- config SSB_B43_PCI_BRIDGE
-       bool
-       depends on SSB_PCIHOST
--      default n
-+      default y
- config SSB_PCMCIAHOST_POSSIBLE
-       bool
diff --git a/target/linux/generic-2.6/patches-2.6.33/977-textsearch_kconfig_hacks.patch b/target/linux/generic-2.6/patches-2.6.33/977-textsearch_kconfig_hacks.patch
deleted file mode 100644 (file)
index 94d6b91..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -152,16 +152,16 @@ config REED_SOLOMON_DEC16
- # Textsearch support is select'ed if needed
- #
- config TEXTSEARCH
--      boolean
-+      boolean "Textsearch support"
- config TEXTSEARCH_KMP
--      tristate
-+      tristate "Textsearch KMP"
- config TEXTSEARCH_BM
--      tristate
-+      tristate "Textsearch BM"
- config TEXTSEARCH_FSM
--      tristate
-+      tristate "Textsearch FSM"
- config HAS_IOMEM
-       boolean
diff --git a/target/linux/generic-2.6/patches-2.6.33/978-lib80211_kconfig_hacks.patch b/target/linux/generic-2.6/patches-2.6.33/978-lib80211_kconfig_hacks.patch
deleted file mode 100644 (file)
index 05bb838..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/net/wireless/Kconfig
-+++ b/net/wireless/Kconfig
-@@ -141,13 +141,13 @@ config LIB80211
-         you want this built into your kernel.
- config LIB80211_CRYPT_WEP
--      tristate
-+      tristate "LIB80211_CRYPT_WEP"
- config LIB80211_CRYPT_CCMP
--      tristate
-+      tristate "LIB80211_CRYPT_CCMP"
- config LIB80211_CRYPT_TKIP
--      tristate
-+      tristate "LIB80211_CRYPT_TKIP"
- config LIB80211_DEBUG
-       bool "lib80211 debugging messages"
diff --git a/target/linux/generic-2.6/patches-2.6.33/979-crypto_add_kconfig_prompts.patch b/target/linux/generic-2.6/patches-2.6.33/979-crypto_add_kconfig_prompts.patch
deleted file mode 100644 (file)
index b40b2ce..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -32,7 +32,7 @@ config CRYPTO_FIPS
-         option is selected
- config CRYPTO_ALGAPI
--      tristate
-+      tristate "ALGAPI"
-       select CRYPTO_ALGAPI2
-       help
-         This option provides the API for cryptographic algorithms.
-@@ -41,7 +41,7 @@ config CRYPTO_ALGAPI2
-       tristate
- config CRYPTO_AEAD
--      tristate
-+      tristate "AEAD"
-       select CRYPTO_AEAD2
-       select CRYPTO_ALGAPI
-@@ -50,7 +50,7 @@ config CRYPTO_AEAD2
-       select CRYPTO_ALGAPI2
- config CRYPTO_BLKCIPHER
--      tristate
-+      tristate "BLKCIPHER"
-       select CRYPTO_BLKCIPHER2
-       select CRYPTO_ALGAPI
-@@ -61,7 +61,7 @@ config CRYPTO_BLKCIPHER2
-       select CRYPTO_WORKQUEUE
- config CRYPTO_HASH
--      tristate
-+      tristate "HASH"
-       select CRYPTO_HASH2
-       select CRYPTO_ALGAPI
-@@ -70,7 +70,7 @@ config CRYPTO_HASH2
-       select CRYPTO_ALGAPI2
- config CRYPTO_RNG
--      tristate
-+      tristate "RNG"
-       select CRYPTO_RNG2
-       select CRYPTO_ALGAPI
diff --git a/target/linux/generic-2.6/patches-2.6.33/980-vm_exports.patch b/target/linux/generic-2.6/patches-2.6.33/980-vm_exports.patch
deleted file mode 100644 (file)
index 39b2215..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
---- a/mm/shmem.c
-+++ b/mm/shmem.c
-@@ -29,6 +29,7 @@
- #include <linux/mm.h>
- #include <linux/module.h>
- #include <linux/swap.h>
-+#include <linux/ima.h>
- static struct vfsmount *shm_mnt;
-@@ -2620,6 +2621,16 @@ int shmem_lock(struct file *file, int lo
- /* common code */
-+void shmem_set_file(struct vm_area_struct *vma, struct file *file)
-+{
-+      ima_counts_get(file);
-+      if (vma->vm_file)
-+              fput(vma->vm_file);
-+      vma->vm_file = file;
-+      vma->vm_ops = &shmem_vm_ops;
-+}
-+EXPORT_SYMBOL_GPL(shmem_set_file);
-+
- /**
-  * shmem_file_setup - get an unlinked file living in tmpfs
-  * @name: name for dentry (to be seen in /proc/<pid>/maps
-@@ -2697,9 +2708,6 @@ int shmem_zero_setup(struct vm_area_stru
-       if (IS_ERR(file))
-               return PTR_ERR(file);
--      if (vma->vm_file)
--              fput(vma->vm_file);
--      vma->vm_file = file;
--      vma->vm_ops = &shmem_vm_ops;
-+      shmem_set_file(vma, file);
-       return 0;
- }
---- a/fs/file.c
-+++ b/fs/file.c
-@@ -271,6 +271,7 @@ int expand_files(struct files_struct *fi
-       /* All good, so we try */
-       return expand_fdtable(files, nr);
- }
-+EXPORT_SYMBOL_GPL(expand_files);
- static int count_open_files(struct fdtable *fdt)
- {
---- a/kernel/exit.c
-+++ b/kernel/exit.c
-@@ -508,6 +508,7 @@ struct files_struct *get_files_struct(st
-       return files;
- }
-+EXPORT_SYMBOL_GPL(get_files_struct);
- void put_files_struct(struct files_struct *files)
- {
-@@ -527,6 +528,7 @@ void put_files_struct(struct files_struc
-               free_fdtable(fdt);
-       }
- }
-+EXPORT_SYMBOL_GPL(put_files_struct);
- void reset_files_struct(struct files_struct *files)
- {
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -169,6 +169,7 @@ void __put_task_struct(struct task_struc
-       if (!profile_handoff_task(tsk))
-               free_task(tsk);
- }
-+EXPORT_SYMBOL_GPL(__put_task_struct);
- /*
-  * macro override instead of weak attribute alias, to workaround
---- a/kernel/sched.c
-+++ b/kernel/sched.c
-@@ -6149,6 +6149,7 @@ int can_nice(const struct task_struct *p
-       return (nice_rlim <= p->signal->rlim[RLIMIT_NICE].rlim_cur ||
-               capable(CAP_SYS_NICE));
- }
-+EXPORT_SYMBOL_GPL(can_nice);
- #ifdef __ARCH_WANT_SYS_NICE
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -1115,6 +1115,7 @@ unsigned long zap_page_range(struct vm_a
-               tlb_finish_mmu(tlb, address, end);
-       return end;
- }
-+EXPORT_SYMBOL_GPL(zap_page_range);
- /**
-  * zap_vma_ptes - remove ptes mapping the vma
-@@ -2501,6 +2502,7 @@ int vmtruncate_range(struct inode *inode
-       return 0;
- }
-+EXPORT_SYMBOL_GPL(vmtruncate_range);
- /*
-  * We enter with non-exclusive mmap_sem (to exclude vma changes,
---- a/mm/vmalloc.c
-+++ b/mm/vmalloc.c
-@@ -1173,6 +1173,7 @@ void unmap_kernel_range(unsigned long ad
-       vunmap_page_range(addr, end);
-       flush_tlb_kernel_range(addr, end);
- }
-+EXPORT_SYMBOL_GPL(unmap_kernel_range);
- int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
- {
-@@ -1288,6 +1289,7 @@ struct vm_struct *get_vm_area(unsigned l
-       return __get_vm_area_node(size, 1, flags, VMALLOC_START, VMALLOC_END,
-                               -1, GFP_KERNEL, __builtin_return_address(0));
- }
-+EXPORT_SYMBOL_GPL(get_vm_area);
- struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags,
-                               void *caller)
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -725,6 +725,7 @@ extern void show_free_areas(void);
- int shmem_lock(struct file *file, int lock, struct user_struct *user);
- struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
-+void shmem_set_file(struct vm_area_struct *vma, struct file *file);
- int shmem_zero_setup(struct vm_area_struct *);
- #ifndef CONFIG_MMU
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1104,6 +1104,7 @@ struct sighand_struct *lock_task_sighand
-       return sighand;
- }
-+EXPORT_SYMBOL(lock_task_sighand);
- /*
-  * send signal info to all the members of a group
diff --git a/target/linux/generic-2.6/patches-2.6.33/981-wireless_ext_kconfig_hack.patch b/target/linux/generic-2.6/patches-2.6.33/981-wireless_ext_kconfig_hack.patch
deleted file mode 100644 (file)
index daac589..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/net/wireless/Kconfig
-+++ b/net/wireless/Kconfig
-@@ -1,5 +1,5 @@
- config WIRELESS_EXT
--      bool
-+      bool "Wireless extensions"
- config WEXT_CORE
-       def_bool y
-@@ -11,10 +11,10 @@ config WEXT_PROC
-       depends on WEXT_CORE
- config WEXT_SPY
--      bool
-+      bool "WEXT_SPY"
- config WEXT_PRIV
--      bool
-+      bool "WEXT_PRIV"
- config CFG80211
-       tristate "cfg80211 - wireless configuration API"
diff --git a/target/linux/generic-2.6/patches-2.6.33/985-cris-headers.patch b/target/linux/generic-2.6/patches-2.6.33/985-cris-headers.patch
deleted file mode 100644 (file)
index 73ede93..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/arch/cris/include/arch-v10/arch/Kbuild
-+++ b/arch/cris/include/arch-v10/arch/Kbuild
-@@ -1,3 +1,5 @@
-+header-y += elf.h
-+header-y += ptrace.h
- header-y += user.h
- header-y += svinto.h
- header-y += sv_addr_ag.h
---- a/arch/cris/include/asm/Kbuild
-+++ b/arch/cris/include/asm/Kbuild
-@@ -1,11 +1,14 @@
- include include/asm-generic/Kbuild.asm
--header-y += arch-v10/
--header-y += arch-v32/
-+header-y += ../arch-v10/arch/
-+header-y += ../arch-v32/arch/
-+header-y += elf.h
- header-y += ethernet.h
-+header-y += page.h
- header-y += rtc.h
- header-y += sync_serial.h
-+header-y += user.h
- unifdef-y += etraxgpio.h
- unifdef-y += rs485.h
diff --git a/target/linux/generic-2.6/patches-2.6.33/991-ppc4xx_optimization.patch b/target/linux/generic-2.6/patches-2.6.33/991-ppc4xx_optimization.patch
deleted file mode 100644 (file)
index 0efb777..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Upstream doesn't optimize the kernel and bootwrappers for ppc44x because
-they still want to support gcc 3.3 -- well, we don't.
-
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -123,7 +123,8 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
- KBUILD_CFLAGS         += -mno-sched-epilog
- endif
--cpu-as-$(CONFIG_4xx)          += -Wa,-m405
-+cpu-as-$(CONFIG_40x)          += -Wa,-m405
-+cpu-as-$(CONFIG_44x)          += -Wa,-m440
- cpu-as-$(CONFIG_6xx)          += -Wa,-maltivec
- cpu-as-$(CONFIG_POWER4)               += -Wa,-maltivec
- cpu-as-$(CONFIG_E500)         += -Wa,-me500
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -38,10 +38,10 @@ BOOTCFLAGS += -I$(obj) -I$(srctree)/$(ob
- DTS_FLAGS     ?= -p 1024
- $(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
--$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
-+$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
- $(obj)/cuboot-hotfoot.o: BOOTCFLAGS += -mcpu=405
--$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
--$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
-+$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=440
-+$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=440
- $(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
- $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
- $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
diff --git a/target/linux/generic-2.6/patches-2.6.33/997-lzo_decompressor_fix.patch b/target/linux/generic-2.6/patches-2.6.33/997-lzo_decompressor_fix.patch
deleted file mode 100644 (file)
index 4509865..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/usr/Kconfig
-+++ b/usr/Kconfig
-@@ -75,7 +75,7 @@ config RD_LZMA
- config RD_LZO
-       bool "Support initial ramdisks compressed using LZO" if EMBEDDED
-       default !EMBEDDED
--      depends on BLK_DEV_INITRD
-+      depends on BLK_DEV_INITRD && HAVE_KERNEL_LZO
-       select DECOMPRESS_LZO
-       help
-         Support loading of a LZO encoded initial ramdisk or cpio buffer
diff --git a/target/linux/generic-2.6/patches-2.6.33/998-openwrt_lzma_options.patch b/target/linux/generic-2.6/patches-2.6.33/998-openwrt_lzma_options.patch
deleted file mode 100644 (file)
index 0ac880c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
---- a/scripts/Makefile.lib
-+++ b/scripts/Makefile.lib
-@@ -238,7 +238,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) 
- quiet_cmd_lzma = LZMA    $@
- cmd_lzma = (cat $(filter-out FORCE,$^) | \
--      lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-+      lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-       (rm -f $@ ; false)
- quiet_cmd_lzo = LZO    $@
---- a/scripts/gen_initramfs_list.sh
-+++ b/scripts/gen_initramfs_list.sh
-@@ -225,7 +225,7 @@ cpio_list=
- output="/dev/stdout"
- output_file=""
- is_cpio_compressed=
--compr="gzip -9 -f"
-+compr="gzip -9 -f -"
- arg="$1"
- case "$arg" in
-@@ -239,9 +239,9 @@ case "$arg" in
-               output_file="$1"
-               cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
-               output=${cpio_list}
--              echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f"
--              echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
--              echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
-+              echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f -"
-+              echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f -"
-+              echo "$output_file" | grep -q "\.lzma$" && compr="lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so"
-               echo "$output_file" | grep -q "\.cpio$" && compr="cat"
-               shift
-               ;;
-@@ -292,7 +292,7 @@ if [ ! -z ${output_file} ]; then
-       if [ "${is_cpio_compressed}" = "compressed" ]; then
-               cat ${cpio_tfile} > ${output_file}
-       else
--              (cat ${cpio_tfile} | ${compr}  - > ${output_file}) \
-+              (cat ${cpio_tfile} | ${compr} > ${output_file}) \
-               || (rm -f ${output_file} ; false)
-       fi
-       [ -z ${cpio_file} ] && rm ${cpio_tfile}
---- a/lib/decompress.c
-+++ b/lib/decompress.c
-@@ -36,6 +36,7 @@ static const struct compress_format {
-       { {037, 0236}, "gzip", gunzip },
-       { {0x42, 0x5a}, "bzip2", bunzip2 },
-       { {0x5d, 0x00}, "lzma", unlzma },
-+      { {0x6d, 0x00}, "lzma-openwrt", unlzma },
-       { {0x89, 0x4c}, "lzo", unlzo },
-       { {0, 0}, NULL, NULL }
- };
diff --git a/target/linux/generic-2.6/patches-2.6.33/999-use_preinit_as_init.patch b/target/linux/generic-2.6/patches-2.6.33/999-use_preinit_as_init.patch
deleted file mode 100644 (file)
index c1f8ef0..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -831,10 +831,7 @@ static noinline int init_post(void)
-               printk(KERN_WARNING "Failed to execute %s.  Attempting "
-                                       "defaults...\n", execute_command);
-       }
--      run_init_process("/sbin/init");
--      run_init_process("/etc/init");
--      run_init_process("/bin/init");
--      run_init_process("/bin/sh");
-+      run_init_process("/etc/preinit");
-       panic("No init found.  Try passing init= option to kernel.");
- }
diff --git a/target/linux/generic-2.6/patches-2.6.34/006-squashfs_add_lzma.patch b/target/linux/generic-2.6/patches-2.6.34/006-squashfs_add_lzma.patch
deleted file mode 100644 (file)
index 9fd5797..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-From f49e1efdd179d54e814ff2a8e8f469496583062c Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Tue, 20 Oct 2009 10:54:36 +0100
-Subject: [PATCH] Squashfs: add LZMA compression
-
-Add support for LZMA compressed filesystems.  This is an initial
-implementation.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Kconfig        |    5 ++
- fs/squashfs/Makefile       |    1 +
- fs/squashfs/decompressor.c |    4 +
- fs/squashfs/lzma_wrapper.c |  151 ++++++++++++++++++++++++++++++++++++++++++++
- fs/squashfs/squashfs.h     |    3 +
- 5 files changed, 164 insertions(+), 0 deletions(-)
- create mode 100644 fs/squashfs/lzma_wrapper.c
-
---- a/fs/squashfs/Kconfig
-+++ b/fs/squashfs/Kconfig
-@@ -26,6 +26,11 @@ config SQUASHFS
-         If unsure, say N.
-+config SQUASHFS_LZMA
-+      bool "Include support for LZMA compressed file systems"
-+      depends on SQUASHFS
-+      select DECOMPRESS_LZMA
-+
- config SQUASHFS_EMBEDDED
-       bool "Additional option for memory-constrained systems" 
---- a/fs/squashfs/Makefile
-+++ b/fs/squashfs/Makefile
-@@ -5,3 +5,4 @@
- obj-$(CONFIG_SQUASHFS) += squashfs.o
- squashfs-y += block.o cache.o dir.o export.o file.o fragment.o id.o inode.o
- squashfs-y += namei.o super.o symlink.o zlib_wrapper.o decompressor.o
-+squashfs-$(CONFIG_SQUASHFS_LZMA) += lzma_wrapper.o
---- a/fs/squashfs/decompressor.c
-+++ b/fs/squashfs/decompressor.c
-@@ -50,7 +50,11 @@ static const struct squashfs_decompresso
- static const struct squashfs_decompressor *decompressor[] = {
-       &squashfs_zlib_comp_ops,
-+#ifdef CONFIG_SQUASHFS_LZMA
-+      &squashfs_lzma_comp_ops,
-+#else
-       &squashfs_lzma_unsupported_comp_ops,
-+#endif
-       &squashfs_lzo_unsupported_comp_ops,
-       &squashfs_unknown_comp_ops
- };
---- /dev/null
-+++ b/fs/squashfs/lzma_wrapper.c
-@@ -0,0 +1,151 @@
-+/*
-+ * Squashfs - a compressed read only filesystem for Linux
-+ *
-+ * Copyright (c) 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
-+ * Phillip Lougher <phillip@lougher.demon.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU General Public License
-+ * as published by the Free Software Foundation; either version 2,
-+ * or (at your option) any later version.
-+ *
-+ * This program is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-+ * GNU General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU General Public License
-+ * along with this program; if not, write to the Free Software
-+ * Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-+ *
-+ * lzma_wrapper.c
-+ */
-+
-+#include <asm/unaligned.h>
-+#include <linux/buffer_head.h>
-+#include <linux/mutex.h>
-+#include <linux/vmalloc.h>
-+#include <linux/decompress/unlzma.h>
-+
-+#include "squashfs_fs.h"
-+#include "squashfs_fs_sb.h"
-+#include "squashfs_fs_i.h"
-+#include "squashfs.h"
-+#include "decompressor.h"
-+
-+struct squashfs_lzma {
-+      void    *input;
-+      void    *output;
-+};
-+
-+/* decompress_unlzma.c is currently non re-entrant... */
-+DEFINE_MUTEX(lzma_mutex);
-+
-+/* decompress_unlzma.c doesn't provide any context in its callbacks... */
-+static int lzma_error;
-+
-+static void error(char *m)
-+{
-+      ERROR("unlzma error: %s\n", m);
-+      lzma_error = 1;
-+}
-+
-+      
-+static void *lzma_init(struct squashfs_sb_info *msblk)
-+{
-+      struct squashfs_lzma *stream = kzalloc(sizeof(*stream), GFP_KERNEL);
-+      if (stream == NULL)
-+              goto failed;
-+      stream->input = vmalloc(msblk->block_size);
-+      if (stream->input == NULL)
-+              goto failed;
-+      stream->output = vmalloc(msblk->block_size);
-+      if (stream->output == NULL)
-+              goto failed2;
-+
-+      return stream;
-+
-+failed2:
-+      vfree(stream->input);
-+failed:
-+      ERROR("failed to allocate lzma workspace\n");
-+      kfree(stream);
-+      return NULL;
-+}
-+
-+
-+static void lzma_free(void *strm)
-+{
-+      struct squashfs_lzma *stream = strm;
-+
-+      if (stream) {
-+              vfree(stream->input);
-+              vfree(stream->output);
-+      }
-+      kfree(stream);
-+}
-+
-+
-+static int lzma_uncompress(struct squashfs_sb_info *msblk, void **buffer,
-+      struct buffer_head **bh, int b, int offset, int length, int srclength,
-+      int pages)
-+{
-+      struct squashfs_lzma *stream = msblk->stream;
-+      void *buff = stream->input;
-+      int avail, i, bytes = length, res;
-+
-+      mutex_lock(&lzma_mutex);
-+
-+      for (i = 0; i < b; i++) {
-+              wait_on_buffer(bh[i]);
-+              if (!buffer_uptodate(bh[i]))
-+                      goto block_release;
-+
-+              avail = min(bytes, msblk->devblksize - offset);
-+              memcpy(buff, bh[i]->b_data + offset, avail);
-+              buff += avail;
-+              bytes -= avail;
-+              offset = 0;
-+              put_bh(bh[i]);
-+      }
-+
-+      lzma_error = 0;
-+      res = unlzma(stream->input, length, NULL, NULL, stream->output, NULL,
-+                                                      error);
-+      if (res || lzma_error)
-+              goto failed;
-+
-+      /* uncompressed size is stored in the LZMA header (5 byte offset) */
-+      res = bytes = get_unaligned_le32(stream->input + 5);
-+      for (i = 0, buff = stream->output; bytes && i < pages; i++) {
-+              avail = min_t(int, bytes, PAGE_CACHE_SIZE);
-+              memcpy(buffer[i], buff, avail);
-+              buff += avail;
-+              bytes -= avail;
-+      }
-+      if (bytes)
-+              goto failed;
-+
-+      mutex_unlock(&lzma_mutex);
-+      return res;
-+
-+block_release:
-+      for (; i < b; i++)
-+              put_bh(bh[i]);
-+
-+failed:
-+      mutex_unlock(&lzma_mutex);
-+
-+      ERROR("lzma decompression failed, data probably corrupt\n");
-+      return -EIO;
-+}
-+
-+const struct squashfs_decompressor squashfs_lzma_comp_ops = {
-+      .init = lzma_init,
-+      .free = lzma_free,
-+      .decompress = lzma_uncompress,
-+      .id = LZMA_COMPRESSION,
-+      .name = "lzma",
-+      .supported = 1
-+};
-+
---- a/fs/squashfs/squashfs.h
-+++ b/fs/squashfs/squashfs.h
-@@ -94,3 +94,6 @@ extern const struct address_space_operat
- /* zlib_wrapper.c */
- extern const struct squashfs_decompressor squashfs_zlib_comp_ops;
-+
-+/* lzma wrapper.c */
-+extern const struct squashfs_decompressor squashfs_lzma_comp_ops;
diff --git a/target/linux/generic-2.6/patches-2.6.34/007-squashfs_make_lzma_available.patch b/target/linux/generic-2.6/patches-2.6.34/007-squashfs_make_lzma_available.patch
deleted file mode 100644 (file)
index 9c57d94..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-From fdf23ed283bc6ef5c25076ce2065f892120ff556 Mon Sep 17 00:00:00 2001
-From: Phillip Lougher <phillip@lougher.demon.co.uk>
-Date: Thu, 22 Oct 2009 04:57:38 +0100
-Subject: [PATCH] Squashfs: Make unlzma available to non initramfs/initrd code
-
-Add a config option DECOMPRESS_LZMA_NEEDED which allows subsystems to
-specify they need the unlzma code.  Normally decompress_unlzma.c is
-compiled with __init and unlzma is not exported to modules.
-
-Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
----
- fs/squashfs/Kconfig                   |    1 +
- include/linux/decompress/bunzip2_mm.h |   12 ++++++++++++
- include/linux/decompress/inflate_mm.h |   12 ++++++++++++
- include/linux/decompress/mm.h         |    3 ---
- include/linux/decompress/unlzma_mm.h  |   20 ++++++++++++++++++++
- lib/Kconfig                           |    3 +++
- lib/decompress_bunzip2.c              |    1 +
- lib/decompress_inflate.c              |    1 +
- lib/decompress_unlzma.c               |    5 ++++-
- 9 files changed, 54 insertions(+), 4 deletions(-)
- create mode 100644 include/linux/decompress/bunzip2_mm.h
- create mode 100644 include/linux/decompress/inflate_mm.h
- create mode 100644 include/linux/decompress/unlzma_mm.h
-
---- a/fs/squashfs/Kconfig
-+++ b/fs/squashfs/Kconfig
-@@ -30,6 +30,7 @@ config SQUASHFS_LZMA
-       bool "Include support for LZMA compressed file systems"
-       depends on SQUASHFS
-       select DECOMPRESS_LZMA
-+      select DECOMPRESS_LZMA_NEEDED
- config SQUASHFS_EMBEDDED
---- /dev/null
-+++ b/include/linux/decompress/bunzip2_mm.h
-@@ -0,0 +1,12 @@
-+#ifndef BUNZIP2_MM_H
-+#define BUNZIP2_MM_H
-+
-+#ifdef STATIC
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+#else
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- /dev/null
-+++ b/include/linux/decompress/inflate_mm.h
-@@ -0,0 +1,12 @@
-+#ifndef INFLATE_MM_H
-+#define INFLATE_MM_H
-+
-+#ifdef STATIC
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+#else
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- a/include/linux/decompress/mm.h
-+++ b/include/linux/decompress/mm.h
-@@ -53,8 +53,6 @@ static void free(void *where)
- #define set_error_fn(x)
--#define INIT
--
- #else /* STATIC */
- /* Code active when compiled standalone for use when loading ramdisk: */
-@@ -77,7 +75,6 @@ static void free(void *where)
- static void(*error)(char *m);
- #define set_error_fn(x) error = x;
--#define INIT __init
- #define STATIC
- #include <linux/init.h>
---- /dev/null
-+++ b/include/linux/decompress/unlzma_mm.h
-@@ -0,0 +1,20 @@
-+#ifndef UNLZMA_MM_H
-+#define UNLZMA_MM_H
-+
-+#ifdef STATIC
-+
-+/* Code active when included from pre-boot environment: */
-+#define INIT
-+
-+#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
-+
-+/* Make it available to non initramfs/initrd code */
-+#define INIT
-+#include <linux/module.h>
-+#else
-+
-+/* Compile for initramfs/initrd code only */
-+#define INIT __init
-+#endif
-+
-+#endif
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -121,6 +121,9 @@ config DECOMPRESS_LZO
-       select LZO_DECOMPRESS
-       tristate
-+config DECOMPRESS_LZMA_NEEDED
-+       boolean
-+
- #
- # Generic allocator support is selected if needed
- #
---- a/lib/decompress_bunzip2.c
-+++ b/lib/decompress_bunzip2.c
-@@ -52,6 +52,7 @@
- #include <linux/slab.h>
- #endif /* STATIC */
-+#include <linux/decompress/bunzip2_mm.h>
- #include <linux/decompress/mm.h>
- #ifndef INT_MAX
---- a/lib/decompress_inflate.c
-+++ b/lib/decompress_inflate.c
-@@ -23,6 +23,7 @@
- #endif /* STATIC */
-+#include <linux/decompress/inflate_mm.h>
- #include <linux/decompress/mm.h>
- #define GZIP_IOBUF_SIZE (16*1024)
---- a/lib/decompress_unlzma.c
-+++ b/lib/decompress_unlzma.c
-@@ -36,6 +36,7 @@
- #include <linux/slab.h>
- #endif /* STATIC */
-+#include <linux/decompress/unlzma_mm.h>
- #include <linux/decompress/mm.h>
- #define       MIN(a, b) (((a) < (b)) ? (a) : (b))
-@@ -531,7 +532,7 @@ static inline void INIT process_bit1(str
--STATIC inline int INIT unlzma(unsigned char *buf, int in_len,
-+STATIC int INIT unlzma(unsigned char *buf, int in_len,
-                             int(*fill)(void*, unsigned int),
-                             int(*flush)(void*, unsigned int),
-                             unsigned char *output,
-@@ -664,4 +665,6 @@ STATIC int INIT decompress(unsigned char
- {
-       return unlzma(buf, in_len - 4, fill, flush, output, posp, error_fn);
- }
-+#elif defined(CONFIG_DECOMPRESS_LZMA_NEEDED)
-+EXPORT_SYMBOL(unlzma);
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.34/011-mips_boot.patch b/target/linux/generic-2.6/patches-2.6.34/011-mips_boot.patch
deleted file mode 100644 (file)
index c2a043a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -121,6 +121,8 @@
- #endif
-       .endm
-+      j kernel_entry
-+      nop
- #ifndef CONFIG_NO_EXCEPT_FILL
-       /*
-        * Reserved space for exception handlers.
diff --git a/target/linux/generic-2.6/patches-2.6.34/012-extra_optimization.patch b/target/linux/generic-2.6/patches-2.6.34/012-extra_optimization.patch
deleted file mode 100644 (file)
index 0b5174c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/Makefile
-+++ b/Makefile
-@@ -529,7 +529,7 @@ all: vmlinux
- ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
- KBUILD_CFLAGS += -Os
- else
--KBUILD_CFLAGS += -O2
-+KBUILD_CFLAGS += -O2 -fno-reorder-blocks -fno-tree-ch
- endif
- include $(srctree)/arch/$(SRCARCH)/Makefile
-@@ -567,6 +567,9 @@ endif
- NOSTDINC_FLAGS += -nostdinc -isystem $(shell $(CC) -print-file-name=include)
- CHECKFLAGS     += $(NOSTDINC_FLAGS)
-+# improve gcc optimization
-+CFLAGS += $(call cc-option,-funit-at-a-time,)
-+
- # warn about C99 declaration after statement
- KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
diff --git a/target/linux/generic-2.6/patches-2.6.34/013-gcc4_inline_fix.patch b/target/linux/generic-2.6/patches-2.6.34/013-gcc4_inline_fix.patch
deleted file mode 100644 (file)
index 77ab405..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/include/asm/system.h
-+++ b/arch/mips/include/asm/system.h
-@@ -194,7 +194,7 @@ extern __u64 __xchg_u64_unsupported_on_3
- #define __xchg_u64 __xchg_u64_unsupported_on_32bit_kernels
- #endif
--static inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
-+static __always_inline unsigned long __xchg(unsigned long x, volatile void * ptr, int size)
- {
-       switch (size) {
-       case 4:
diff --git a/target/linux/generic-2.6/patches-2.6.34/014-samsung_flash b/target/linux/generic-2.6/patches-2.6.34/014-samsung_flash
deleted file mode 100644 (file)
index 1faeb41..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
---- a/drivers/mtd/chips/cfi_cmdset_0002.c
-+++ b/drivers/mtd/chips/cfi_cmdset_0002.c
-@@ -51,6 +51,7 @@
- #define SST49LF040B           0x0050
- #define SST49LF008A           0x005a
- #define AT49BV6416            0x00d6
-+#define MANUFACTURER_SAMSUNG  0x00ec
- static int cfi_amdstd_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
- static int cfi_amdstd_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
-@@ -375,12 +376,19 @@ struct mtd_info *cfi_cmdset_0002(struct 
-               if (extp->MajorVersion != '1' ||
-                   (extp->MinorVersion < '0' || extp->MinorVersion > '4')) {
--                      printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
--                             "version %c.%c.\n",  extp->MajorVersion,
--                             extp->MinorVersion);
--                      kfree(extp);
--                      kfree(mtd);
--                      return NULL;
-+                      if (cfi->mfr == MANUFACTURER_SAMSUNG &&
-+                          (extp->MajorVersion == '3' && extp->MinorVersion == '3')) {
-+                          printk(KERN_NOTICE "  Newer Samsung flash detected, "
-+                                 "should be compatibile with Amd/Fujitsu.\n");
-+                      }
-+                      else {
-+                          printk(KERN_ERR "  Unknown Amd/Fujitsu Extended Query "
-+                                 "version %c.%c.\n",  extp->MajorVersion,
-+                                 extp->MinorVersion);
-+                          kfree(extp);
-+                          kfree(mtd);
-+                          return NULL;
-+                      }
-               }
-               /* Install our own private info structure */
diff --git a/target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch b/target/linux/generic-2.6/patches-2.6.34/020-mips_multi_machine_support.patch
deleted file mode 100644 (file)
index 738eb65..0000000
+++ /dev/null
@@ -1,173 +0,0 @@
---- /dev/null
-+++ b/arch/mips/include/asm/mips_machine.h
-@@ -0,0 +1,47 @@
-+/*
-+ *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  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.
-+ *
-+ */
-+
-+#ifndef __ASM_MIPS_MACHINE_H
-+#define __ASM_MIPS_MACHINE_H
-+
-+#include <linux/init.h>
-+#include <linux/list.h>
-+
-+struct mips_machine {
-+      unsigned long           mach_type;
-+      void                    (*mach_setup)(void);
-+      char                    *mach_name;
-+      struct list_head        list;
-+};
-+
-+void mips_machine_register(struct mips_machine *) __init;
-+void mips_machine_setup(unsigned long machtype) __init;
-+void mips_machine_set_name(char *name) __init;
-+
-+extern char *mips_machine_name;
-+
-+#define MIPS_MACHINE(_type, _name, _setup)                    \
-+static char machine_name_##_type[] __initdata = _name;                \
-+static struct mips_machine machine_##_type __initdata =               \
-+{                                                             \
-+      .mach_type      = _type,                                \
-+      .mach_name      = machine_name_##_type,                 \
-+      .mach_setup     = _setup,                               \
-+};                                                            \
-+                                                              \
-+static int __init register_machine_##_type(void)              \
-+{                                                             \
-+      mips_machine_register(&machine_##_type);                \
-+      return 0;                                               \
-+}                                                             \
-+                                                              \
-+pure_initcall(register_machine_##_type)
-+
-+#endif /* __ASM_MIPS_MACHINE_H */
-+
---- /dev/null
-+++ b/arch/mips/kernel/mips_machine.c
-@@ -0,0 +1,74 @@
-+/*
-+ *  Copyright (C) 2008-2009 Gabor Juhos <juhosg@openwrt.org>
-+ *
-+ *  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/mm.h>
-+
-+#include <asm/mips_machine.h>
-+#include <asm/bootinfo.h>
-+
-+static struct list_head mips_machines __initdata =
-+              LIST_HEAD_INIT(mips_machines);
-+
-+char *mips_machine_name = "Unknown";
-+
-+static struct mips_machine * __init mips_machine_find(unsigned long machtype)
-+{
-+      struct list_head *this;
-+
-+      list_for_each(this, &mips_machines) {
-+              struct mips_machine *mach;
-+
-+              mach = list_entry(this, struct mips_machine, list);
-+              if (mach->mach_type == machtype)
-+                      return mach;
-+      }
-+
-+      return NULL;
-+}
-+
-+void __init mips_machine_register(struct mips_machine *mach)
-+{
-+      list_add_tail(&mach->list, &mips_machines);
-+}
-+
-+void __init mips_machine_set_name(char *name)
-+{
-+      unsigned int len;
-+      char *p;
-+
-+      if (name == NULL)
-+              return;
-+
-+      len = strlen(name);
-+      p = kmalloc(len + 1, GFP_KERNEL);
-+      if (p) {
-+              strncpy(p, name, len);
-+              p[len] = '\0';
-+              mips_machine_name = p;
-+      } else {
-+              printk(KERN_WARNING "MIPS: no memory for machine_name\n");
-+      }
-+}
-+
-+void __init mips_machine_setup(unsigned long machtype)
-+{
-+      struct mips_machine *mach;
-+
-+      mach = mips_machine_find(machtype);
-+      if (!mach) {
-+              printk(KERN_ALERT "MIPS: no machine registered for "
-+                      "machtype %lu\n", machtype);
-+              return;
-+      }
-+
-+      mips_machine_set_name(mach->mach_name);
-+      printk(KERN_INFO "MIPS: machine is %s\n", mips_machine_name);
-+
-+      if (mach->mach_setup)
-+              mach->mach_setup();
-+}
---- a/arch/mips/kernel/Makefile
-+++ b/arch/mips/kernel/Makefile
-@@ -94,6 +94,7 @@
- obj-$(CONFIG_KEXEC)           += machine_kexec.o relocate_kernel.o
- obj-$(CONFIG_EARLY_PRINTK)    += early_printk.o
- obj-$(CONFIG_SPINLOCK_TEST)   += spinlock_test.o
-+obj-$(CONFIG_MIPS_MACHINE)    += mips_machine.o
- CFLAGS_cpu-bugs64.o   = $(shell if $(CC) $(KBUILD_CFLAGS) -Wa,-mdaddi -c -o /dev/null -xc /dev/null >/dev/null 2>&1; then echo "-DHAVE_AS_SET_DADDI"; fi)
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -851,6 +851,9 @@ config MIPS_DISABLE_OBSOLETE_IDE
- config SYNC_R4K
-       bool
-+config MIPS_MACHINE
-+      def_bool n
-+
- config NO_IOPORT
-       def_bool n
---- a/arch/mips/kernel/proc.c
-+++ b/arch/mips/kernel/proc.c
-@@ -12,6 +12,7 @@
- #include <asm/cpu-features.h>
- #include <asm/mipsregs.h>
- #include <asm/processor.h>
-+#include <asm/mips_machine.h>
- unsigned int vced_count, vcei_count;
-@@ -31,8 +32,12 @@ static int show_cpuinfo(struct seq_file 
-       /*
-        * For the first processor also print the system type
-        */
--      if (n == 0)
-+      if (n == 0) {
-               seq_printf(m, "system type\t\t: %s\n", get_system_type());
-+#ifdef CONFIG_MIPS_MACHINE
-+              seq_printf(m, "machine\t\t\t: %s\n", mips_machine_name);
-+#endif
-+      }
-       seq_printf(m, "processor\t\t: %ld\n", n);
-       sprintf(fmt, "cpu model\t\t: %%s V%%d.%%d%s\n",
diff --git a/target/linux/generic-2.6/patches-2.6.34/021-mips_image_cmdline_hack.patch b/target/linux/generic-2.6/patches-2.6.34/021-mips_image_cmdline_hack.patch
deleted file mode 100644 (file)
index 00de8d5..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -854,6 +854,10 @@ config SYNC_R4K
- config MIPS_MACHINE
-       def_bool n
-+config IMAGE_CMDLINE_HACK
-+      bool "OpenWrt specific image command line hack"
-+      default n
-+
- config NO_IOPORT
-       def_bool n
---- a/arch/mips/kernel/head.S
-+++ b/arch/mips/kernel/head.S
-@@ -143,6 +143,12 @@ FEXPORT(__kernel_entry)
-       j       kernel_entry
- #endif
-+#ifdef CONFIG_IMAGE_CMDLINE_HACK
-+      .ascii  "CMDLINE:"
-+EXPORT(__image_cmdline)
-+      .fill   0x400
-+#endif /* CONFIG_IMAGE_CMDLINE_HACK */
-+
-       __REF
- NESTED(kernel_entry, 16, sp)                  # kernel entry point
diff --git a/target/linux/generic-2.6/patches-2.6.34/022-mips_use_generic_thread_info_allocator.patch b/target/linux/generic-2.6/patches-2.6.34/022-mips_use_generic_thread_info_allocator.patch
deleted file mode 100644 (file)
index 786afd1..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/arch/mips/include/asm/thread_info.h
-+++ b/arch/mips/include/asm/thread_info.h
-@@ -83,6 +83,7 @@ register struct thread_info *__current_t
- #define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
- #define THREAD_MASK (THREAD_SIZE - 1UL)
-+#if 0
- #define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
- #ifdef CONFIG_DEBUG_STACK_USAGE
-@@ -92,6 +93,7 @@ register struct thread_info *__current_t
- #endif
- #define free_thread_info(info) kfree(info)
-+#endif
- #endif /* !__ASSEMBLY__ */
diff --git a/target/linux/generic-2.6/patches-2.6.34/025-mips_disable_fpu.patch b/target/linux/generic-2.6/patches-2.6.34/025-mips_disable_fpu.patch
deleted file mode 100644 (file)
index e6b764e..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-MIPS: allow disabling the kernel FPU emulator
-
-This patch allows turning off the in-kernel Algorithmics
-FPU emulator support, which allows one to save a couple of
-precious blocks on an embedded system.
-
-Signed-off-by: Florian Fainelli <florian@openwrt.org>
---
---- a/arch/mips/Kconfig
-+++ b/arch/mips/Kconfig
-@@ -839,6 +839,17 @@ config I8259
- config MIPS_BONITO64
-       bool
-+config MIPS_FPU_EMU
-+      bool "Enable FPU emulation"
-+      default y
-+      help
-+         This option allows building a kernel with or without the Algorithmics
-+         FPU emulator enabled. Turning off this option results in a kernel which
-+         does not catch floating operations exceptions. Make sure that your toolchain
-+         is configured to enable software floating point emulation in that case.
-+              
-+         If unsure say Y here.
-+
- config MIPS_MSC
-       bool
---- a/arch/mips/math-emu/Makefile
-+++ b/arch/mips/math-emu/Makefile
-@@ -2,12 +2,14 @@
- # Makefile for the Linux/MIPS kernel FPU emulation.
- #
--obj-y := cp1emu.o ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-+obj-y :=      kernel_linkage.o dsemul.o cp1emu.o
-+
-+obj-$(CONFIG_MIPS_FPU_EMU)    += ieee754m.o ieee754d.o ieee754dp.o ieee754sp.o ieee754.o \
-          ieee754xcpt.o dp_frexp.o dp_modf.o dp_div.o dp_mul.o dp_sub.o \
-          dp_add.o dp_fsp.o dp_cmp.o dp_logb.o dp_scalb.o dp_simple.o \
-          dp_tint.o dp_fint.o dp_tlong.o dp_flong.o sp_frexp.o sp_modf.o \
-          sp_div.o sp_mul.o sp_sub.o sp_add.o sp_fdp.o sp_cmp.o sp_logb.o \
-          sp_scalb.o sp_simple.o sp_tint.o sp_fint.o sp_tlong.o sp_flong.o \
--         dp_sqrt.o sp_sqrt.o kernel_linkage.o dsemul.o
-+         dp_sqrt.o sp_sqrt.o
- EXTRA_CFLAGS += -Werror
---- a/arch/mips/math-emu/cp1emu.c
-+++ b/arch/mips/math-emu/cp1emu.c
-@@ -58,7 +58,11 @@
- #define __mips 4
- /* Function which emulates a floating point instruction. */
-+#ifdef CONFIG_DEBUG_FS
-+DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats);
-+#endif
-+#ifdef CONFIG_MIPS_FPU_EMU
- static int fpu_emu(struct pt_regs *, struct mips_fpu_struct *,
-       mips_instruction);
-@@ -69,10 +73,6 @@ static int fpux_emu(struct pt_regs *,
- /* Further private data for which no space exists in mips_fpu_struct */
--#ifdef CONFIG_DEBUG_FS
--DEFINE_PER_CPU(struct mips_fpu_emulator_stats, fpuemustats);
--#endif
--
- /* Control registers */
- #define FPCREG_RID    0       /* $0  = revision id */
-@@ -1277,7 +1277,6 @@ int fpu_emulator_cop1Handler(struct pt_r
-       return sig;
- }
--
- #ifdef CONFIG_DEBUG_FS
- static int fpuemu_stat_get(void *data, u64 *val)
-@@ -1326,4 +1325,11 @@ static int __init debugfs_fpuemu(void)
-       return 0;
- }
- __initcall(debugfs_fpuemu);
--#endif
-+#endif /* CONFIG_DEBUGFS */
-+#else
-+int fpu_emulator_cop1Handler(struct pt_regs *xcp, struct mips_fpu_struct *ctx,
-+        int has_fpu)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
---- a/arch/mips/math-emu/dsemul.c
-+++ b/arch/mips/math-emu/dsemul.c
-@@ -109,6 +109,7 @@ int mips_dsemul(struct pt_regs *regs, mi
-       return SIGILL;          /* force out of emulation loop */
- }
-+#ifdef CONFIG_MIPS_FPU_EMU
- int do_dsemulret(struct pt_regs *xcp)
- {
-       struct emuframe __user *fr;
-@@ -165,3 +166,9 @@ int do_dsemulret(struct pt_regs *xcp)
-       return 1;
- }
-+#else
-+int do_dsemulret(struct pt_regs *xcp)
-+{
-+      return 0;
-+}
-+#endif /* CONFIG_MIPS_FPU_EMU */
---- a/arch/mips/math-emu/kernel_linkage.c
-+++ b/arch/mips/math-emu/kernel_linkage.c
-@@ -29,6 +29,7 @@
- #define SIGNALLING_NAN 0x7ff800007ff80000LL
-+#ifdef CONFIG_MIPS_FPU_EMU
- void fpu_emulator_init_fpu(void)
- {
-       static int first = 1;
-@@ -112,4 +113,36 @@ int fpu_emulator_restore_context32(struc
-       return err;
- }
--#endif
-+#endif        /* CONFIG_64BIT */
-+#else
-+
-+void fpu_emulator_init_fpu(void)
-+{
-+      printk(KERN_INFO "FPU emulator disabled, make sure your toolchain"
-+              "was compiled with software floating point support (soft-float)\n");
-+      return;
-+}
-+
-+int fpu_emulator_save_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context(struct sigcontext __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_save_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+int fpu_emulator_restore_context32(struct sigcontext32 __user *sc)
-+{
-+      return 0;
-+}
-+
-+#ifdef CONFIG_64BIT
-+#endif        /* CONFIG_64BIT */
-+#endif /* CONFIG_MIPS_FPU_EMU */
diff --git a/target/linux/generic-2.6/patches-2.6.34/027-mips_module_reloc.patch b/target/linux/generic-2.6/patches-2.6.34/027-mips_module_reloc.patch
deleted file mode 100644 (file)
index 024e7f1..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -93,7 +93,7 @@ all-$(CONFIG_SYS_SUPPORTS_ZBOOT)+= vmlin
- cflags-y                      += -G 0 -mno-abicalls -fno-pic -pipe
- cflags-y                      += -msoft-float
- LDFLAGS_vmlinux                       += -G 0 -static -n -nostdlib
--MODFLAGS                      += -mlong-calls
-+MODFLAGS                      += -mno-long-calls
- cflags-y += -ffreestanding
---- a/arch/mips/include/asm/module.h
-+++ b/arch/mips/include/asm/module.h
-@@ -9,6 +9,11 @@ struct mod_arch_specific {
-       struct list_head dbe_list;
-       const struct exception_table_entry *dbe_start;
-       const struct exception_table_entry *dbe_end;
-+
-+      void *phys_plt_tbl;
-+      void *virt_plt_tbl;
-+      unsigned int phys_plt_offset;
-+      unsigned int virt_plt_offset;
- };
- typedef uint8_t Elf64_Byte;           /* Type for a 8-bit quantity.  */
---- a/arch/mips/kernel/module.c
-+++ b/arch/mips/kernel/module.c
-@@ -43,6 +43,117 @@ static struct mips_hi16 *mips_hi16_list;
- static LIST_HEAD(dbe_list);
- static DEFINE_SPINLOCK(dbe_lock);
-+/*
-+ * Get the potential max trampolines size required of the init and
-+ * non-init sections. Only used if we cannot find enough contiguous
-+ * physically mapped memory to put the module into.
-+ */
-+static unsigned int
-+get_plt_size(const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs,
-+             const char *secstrings, unsigned int symindex, bool is_init)
-+{
-+      unsigned long ret = 0;
-+      unsigned int i, j;
-+      Elf_Sym *syms;
-+
-+      /* Everything marked ALLOC (this includes the exported symbols) */
-+      for (i = 1; i < hdr->e_shnum; ++i) {
-+              unsigned int info = sechdrs[i].sh_info;
-+
-+              if (sechdrs[i].sh_type != SHT_REL
-+                  && sechdrs[i].sh_type != SHT_RELA)
-+                      continue;
-+
-+              /* Not a valid relocation section? */
-+              if (info >= hdr->e_shnum)
-+                      continue;
-+
-+              /* Don't bother with non-allocated sections */
-+              if (!(sechdrs[info].sh_flags & SHF_ALLOC))
-+                      continue;
-+
-+              /* If it's called *.init*, and we're not init, we're
-+                   not interested */
-+              if ((strstr(secstrings + sechdrs[i].sh_name, ".init") != 0)
-+                  != is_init)
-+                      continue;
-+
-+              syms = (Elf_Sym *) sechdrs[symindex].sh_addr;
-+              if (sechdrs[i].sh_type == SHT_REL) {
-+                      Elf_Mips_Rel *rel = (void *) sechdrs[i].sh_addr;
-+                      unsigned int size = sechdrs[i].sh_size / sizeof(*rel);
-+
-+                      for (j = 0; j < size; ++j) {
-+                              Elf_Sym *sym;
-+
-+                              if (ELF_MIPS_R_TYPE(rel[j]) != R_MIPS_26)
-+                                      continue;
-+
-+                              sym = syms + ELF_MIPS_R_SYM(rel[j]);
-+                              if (!is_init && sym->st_shndx != SHN_UNDEF)
-+                                      continue;
-+
-+                              ret += 4 * sizeof(int);
-+                      }
-+              } else {
-+                      Elf_Mips_Rela *rela = (void *) sechdrs[i].sh_addr;
-+                      unsigned int size = sechdrs[i].sh_size / sizeof(*rela);
-+
-+                      for (j = 0; j < size; ++j) {
-+                              Elf_Sym *sym;
-+
-+                              if (ELF_MIPS_R_TYPE(rela[j]) != R_MIPS_26)
-+                                      continue;
-+
-+                              sym = syms + ELF_MIPS_R_SYM(rela[j]);
-+                              if (!is_init && sym->st_shndx != SHN_UNDEF)
-+                                      continue;
-+
-+                              ret += 4 * sizeof(int);
-+                      }
-+              }
-+      }
-+
-+      return ret;
-+}
-+
-+#ifndef MODULE_START
-+static void *alloc_phys(unsigned long size)
-+{
-+      unsigned order;
-+      struct page *page;
-+      struct page *p;
-+
-+      size = PAGE_ALIGN(size);
-+      order = get_order(size);
-+
-+      page = alloc_pages(GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN |
-+                      __GFP_THISNODE, order);
-+      if (!page)
-+              return NULL;
-+
-+      split_page(page, order);
-+
-+      for (p = page + (size >> PAGE_SHIFT); p < page + (1 << order); ++p)
-+              __free_page(p);
-+
-+      return page_address(page);
-+}
-+#endif
-+
-+static void free_phys(void *ptr, unsigned long size)
-+{
-+      struct page *page;
-+      struct page *end;
-+
-+      page = virt_to_page(ptr);
-+      end = page + (PAGE_ALIGN(size) >> PAGE_SHIFT);
-+
-+      for (; page < end; ++page)
-+              __free_page(page);
-+}
-+
-+
- void *module_alloc(unsigned long size)
- {
- #ifdef MODULE_START
-@@ -58,21 +169,99 @@ void *module_alloc(unsigned long size)
-       return __vmalloc_area(area, GFP_KERNEL, PAGE_KERNEL);
- #else
-+      void *ptr;
-+
-       if (size == 0)
-               return NULL;
--      return vmalloc(size);
-+
-+      ptr = alloc_phys(size);
-+
-+      /* If we failed to allocate physically contiguous memory,
-+       * fall back to regular vmalloc. The module loader code will
-+       * create jump tables to handle long jumps */
-+      if (!ptr)
-+              return vmalloc(size);
-+
-+      return ptr;
-+#endif
-+}
-+
-+static inline bool is_phys_addr(void *ptr)
-+{
-+#ifdef CONFIG_64BIT
-+      return (KSEGX((unsigned long)ptr) == CKSEG0);
-+#else
-+      return (KSEGX(ptr) == KSEG0);
- #endif
- }
- /* Free memory returned from module_alloc */
- void module_free(struct module *mod, void *module_region)
- {
--      vfree(module_region);
-+      if (is_phys_addr(module_region)) {
-+              if (mod->module_init == module_region)
-+                      free_phys(module_region, mod->init_size);
-+              else if (mod->module_core == module_region)
-+                      free_phys(module_region, mod->core_size);
-+              else
-+                      BUG();
-+      } else {
-+              vfree(module_region);
-+      }
-+}
-+
-+static void *__module_alloc(int size, bool phys)
-+{
-+      void *ptr;
-+
-+      if (phys)
-+              ptr = kmalloc(size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc(size);
-+      return ptr;
-+}
-+
-+static void __module_free(void *ptr)
-+{
-+      if (is_phys_addr(ptr))
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
- }
- int module_frob_arch_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
-                             char *secstrings, struct module *mod)
- {
-+      unsigned int symindex = 0;
-+      unsigned int core_size, init_size;
-+      int i;
-+
-+      for (i = 1; i < hdr->e_shnum; i++)
-+              if (sechdrs[i].sh_type == SHT_SYMTAB)
-+                      symindex = i;
-+
-+      core_size = get_plt_size(hdr, sechdrs, secstrings, symindex, false);
-+      init_size = get_plt_size(hdr, sechdrs, secstrings, symindex, true);
-+
-+      mod->arch.phys_plt_offset = 0;
-+      mod->arch.virt_plt_offset = 0;
-+      mod->arch.phys_plt_tbl = NULL;
-+      mod->arch.virt_plt_tbl = NULL;
-+
-+      if ((core_size + init_size) == 0)
-+              return 0;
-+
-+      mod->arch.phys_plt_tbl = __module_alloc(core_size + init_size, 1);
-+      if (!mod->arch.phys_plt_tbl)
-+              return -ENOMEM;
-+
-+      mod->arch.virt_plt_tbl = __module_alloc(core_size + init_size, 0);
-+      if (!mod->arch.virt_plt_tbl) {
-+              __module_free(mod->arch.phys_plt_tbl);
-+              mod->arch.phys_plt_tbl = NULL;
-+              return -ENOMEM;
-+      }
-+
-       return 0;
- }
-@@ -95,28 +284,36 @@ static int apply_r_mips_32_rela(struct m
-       return 0;
- }
--static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
-+static Elf_Addr add_plt_entry_to(unsigned *plt_offset,
-+                               void *start, Elf_Addr v)
- {
--      if (v % 4) {
--              pr_err("module %s: dangerous R_MIPS_26 REL relocation\n",
--                     me->name);
--              return -ENOEXEC;
--      }
-+      unsigned *tramp = start + *plt_offset;
-+      *plt_offset += 4 * sizeof(int);
--      if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
--              printk(KERN_ERR
--                     "module %s: relocation overflow\n",
--                     me->name);
--              return -ENOEXEC;
--      }
-+      /* adjust carry for addiu */
-+      if (v & 0x00008000)
-+              v += 0x10000;
--      *location = (*location & ~0x03ffffff) |
--                  ((*location + (v >> 2)) & 0x03ffffff);
-+      tramp[0] = 0x3c190000 | (v >> 16);      /* lui t9, hi16 */
-+      tramp[1] = 0x27390000 | (v & 0xffff);   /* addiu t9, t9, lo16 */
-+      tramp[2] = 0x03200008;                  /* jr t9 */
-+      tramp[3] = 0x00000000;                  /* nop */
--      return 0;
-+      return (Elf_Addr) tramp;
- }
--static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
-+static Elf_Addr add_plt_entry(struct module *me, void *location, Elf_Addr v)
-+{
-+      if (is_phys_addr(location))
-+              return add_plt_entry_to(&me->arch.phys_plt_offset,
-+                              me->arch.phys_plt_tbl, v);
-+      else
-+              return add_plt_entry_to(&me->arch.virt_plt_offset,
-+                              me->arch.virt_plt_tbl, v);
-+
-+}
-+
-+static int set_r_mips_26(struct module *me, u32 *location, u32 ofs, Elf_Addr v)
- {
-       if (v % 4) {
-               pr_err("module %s: dangerous R_MIPS_26 RELArelocation\n",
-@@ -125,17 +322,31 @@ static int apply_r_mips_26_rela(struct m
-       }
-       if ((v & 0xf0000000) != (((unsigned long)location + 4) & 0xf0000000)) {
--              printk(KERN_ERR
-+          v = add_plt_entry(me, location, v + (ofs << 2));
-+              if (!v) {
-+                      printk(KERN_ERR
-                      "module %s: relocation overflow\n",
-                      me->name);
--              return -ENOEXEC;
-+                      return -ENOEXEC;
-+              }
-+              ofs = 0;
-       }
--      *location = (*location & ~0x03ffffff) | ((v >> 2) & 0x03ffffff);
-+      *location = (*location & ~0x03ffffff) | ((ofs + (v >> 2)) & 0x03ffffff);
-       return 0;
- }
-+static int apply_r_mips_26_rel(struct module *me, u32 *location, Elf_Addr v)
-+{
-+      return set_r_mips_26(me, location, *location & 0x03ffffff, v);
-+}
-+
-+static int apply_r_mips_26_rela(struct module *me, u32 *location, Elf_Addr v)
-+{
-+      return set_r_mips_26(me, location, 0, v);
-+}
-+
- static int apply_r_mips_hi16_rel(struct module *me, u32 *location, Elf_Addr v)
- {
-       struct mips_hi16 *n;
-@@ -400,11 +611,32 @@ int module_finalize(const Elf_Ehdr *hdr,
-               list_add(&me->arch.dbe_list, &dbe_list);
-               spin_unlock_irq(&dbe_lock);
-       }
-+
-+      /* Get rid of the fixup trampoline if we're running the module
-+       * from physically mapped address space */
-+      if (me->arch.phys_plt_offset == 0) {
-+              __module_free(me->arch.phys_plt_tbl);
-+              me->arch.phys_plt_tbl = NULL;
-+      }
-+      if (me->arch.virt_plt_offset == 0) {
-+              __module_free(me->arch.virt_plt_tbl);
-+              me->arch.virt_plt_tbl = NULL;
-+      }
-+
-       return 0;
- }
- void module_arch_cleanup(struct module *mod)
- {
-+      if (mod->arch.phys_plt_tbl) {
-+              __module_free(mod->arch.phys_plt_tbl);
-+              mod->arch.phys_plt_tbl = NULL;
-+      }
-+      if (mod->arch.virt_plt_tbl) {
-+              __module_free(mod->arch.virt_plt_tbl);
-+              mod->arch.virt_plt_tbl = NULL;
-+      }
-+
-       spin_lock_irq(&dbe_lock);
-       list_del(&mod->arch.dbe_list);
-       spin_unlock_irq(&dbe_lock);
diff --git a/target/linux/generic-2.6/patches-2.6.34/028-module_exports.patch b/target/linux/generic-2.6/patches-2.6.34/028-module_exports.patch
deleted file mode 100644 (file)
index c56fbb7..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
---- a/include/asm-generic/vmlinux.lds.h
-+++ b/include/asm-generic/vmlinux.lds.h
-@@ -52,6 +52,27 @@
- #define LOAD_OFFSET 0
- #endif
-+#ifndef SYMTAB_KEEP_STR
-+#define SYMTAB_KEEP_STR *(__ksymtab_strings.*)
-+#define SYMTAB_DISCARD_STR
-+#else
-+#define SYMTAB_DISCARD_STR *(__ksymtab_strings.*)
-+#endif
-+
-+#ifndef SYMTAB_KEEP
-+#define SYMTAB_KEEP *(__ksymtab.*)
-+#define SYMTAB_DISCARD
-+#else
-+#define SYMTAB_DISCARD *(__ksymtab.*)
-+#endif
-+
-+#ifndef SYMTAB_KEEP_GPL
-+#define SYMTAB_KEEP_GPL *(__ksymtab_gpl.*)
-+#define SYMTAB_DISCARD_GPL
-+#else
-+#define SYMTAB_DISCARD_GPL *(__ksymtab_gpl.*)
-+#endif
-+
- #ifndef SYMBOL_PREFIX
- #define VMLINUX_SYMBOL(sym) sym
- #else
-@@ -258,35 +279,35 @@
-       /* Kernel symbol table: Normal symbols */                       \
-       __ksymtab         : AT(ADDR(__ksymtab) - LOAD_OFFSET) {         \
-               VMLINUX_SYMBOL(__start___ksymtab) = .;                  \
--              *(__ksymtab)                                            \
-+              SYMTAB_KEEP                                             \
-               VMLINUX_SYMBOL(__stop___ksymtab) = .;                   \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only symbols */                     \
-       __ksymtab_gpl     : AT(ADDR(__ksymtab_gpl) - LOAD_OFFSET) {     \
-               VMLINUX_SYMBOL(__start___ksymtab_gpl) = .;              \
--              *(__ksymtab_gpl)                                        \
-+              SYMTAB_KEEP_GPL                                         \
-               VMLINUX_SYMBOL(__stop___ksymtab_gpl) = .;               \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: Normal unused symbols */                \
-       __ksymtab_unused  : AT(ADDR(__ksymtab_unused) - LOAD_OFFSET) {  \
-               VMLINUX_SYMBOL(__start___ksymtab_unused) = .;           \
--              *(__ksymtab_unused)                                     \
-+              *(__ksymtab_unused.*)                                   \
-               VMLINUX_SYMBOL(__stop___ksymtab_unused) = .;            \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-only unused symbols */              \
-       __ksymtab_unused_gpl : AT(ADDR(__ksymtab_unused_gpl) - LOAD_OFFSET) { \
-               VMLINUX_SYMBOL(__start___ksymtab_unused_gpl) = .;       \
--              *(__ksymtab_unused_gpl)                                 \
-+              *(__ksymtab_unused_gpl.*)                               \
-               VMLINUX_SYMBOL(__stop___ksymtab_unused_gpl) = .;        \
-       }                                                               \
-                                                                       \
-       /* Kernel symbol table: GPL-future-only symbols */              \
-       __ksymtab_gpl_future : AT(ADDR(__ksymtab_gpl_future) - LOAD_OFFSET) { \
-               VMLINUX_SYMBOL(__start___ksymtab_gpl_future) = .;       \
--              *(__ksymtab_gpl_future)                                 \
-+              *(__ksymtab_gpl_future.*)                               \
-               VMLINUX_SYMBOL(__stop___ksymtab_gpl_future) = .;        \
-       }                                                               \
-                                                                       \
-@@ -327,7 +348,7 @@
-                                                                       \
-       /* Kernel symbol table: strings */                              \
-         __ksymtab_strings : AT(ADDR(__ksymtab_strings) - LOAD_OFFSET) {       \
--              *(__ksymtab_strings)                                    \
-+              SYMTAB_KEEP_STR                                         \
-       }                                                               \
-                                                                       \
-       /* __*init sections */                                          \
-@@ -642,6 +663,9 @@
-       EXIT_TEXT                                                       \
-       EXIT_DATA                                                       \
-       EXIT_CALL                                                       \
-+      SYMTAB_DISCARD                                                  \
-+      SYMTAB_DISCARD_GPL                                              \
-+      SYMTAB_DISCARD_STR                                              \
-       *(.discard)                                                     \
-       }
---- a/include/linux/module.h
-+++ b/include/linux/module.h
-@@ -194,16 +194,24 @@ void *__symbol_get_gpl(const char *symbo
- #define __CRC_SYMBOL(sym, sec)
- #endif
-+#ifdef MODULE
-+#define __EXPORT_SUFFIX(sym)
-+#else
-+#define __EXPORT_SUFFIX(sym) "." #sym
-+#endif
-+
- /* For every exported symbol, place a struct in the __ksymtab section */
- #define __EXPORT_SYMBOL(sym, sec)                             \
-       extern typeof(sym) sym;                                 \
-       __CRC_SYMBOL(sym, sec)                                  \
-       static const char __kstrtab_##sym[]                     \
--      __attribute__((section("__ksymtab_strings"), aligned(1))) \
-+      __attribute__((section("__ksymtab_strings"              \
-+        __EXPORT_SUFFIX(sym)), aligned(1)))                   \
-       = MODULE_SYMBOL_PREFIX #sym;                            \
-       static const struct kernel_symbol __ksymtab_##sym       \
-       __used                                                  \
--      __attribute__((section("__ksymtab" sec), unused))       \
-+      __attribute__((section("__ksymtab" sec                  \
-+        __EXPORT_SUFFIX(sym)), unused))                       \
-       = { (unsigned long)&sym, __kstrtab_##sym }
- #define EXPORT_SYMBOL(sym)                                    \
diff --git a/target/linux/generic-2.6/patches-2.6.34/029-arm_module_unresolved_weak_sym.patch b/target/linux/generic-2.6/patches-2.6.34/029-arm_module_unresolved_weak_sym.patch
deleted file mode 100644 (file)
index 8a3b2e2..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/arch/arm/kernel/module.c
-+++ b/arch/arm/kernel/module.c
-@@ -121,6 +121,10 @@ apply_relocate(Elf32_Shdr *sechdrs, cons
-                       return -ENOEXEC;
-               }
-+              if ((IS_ERR_VALUE(sym->st_value) || !sym->st_value) &&
-+                  ELF_ST_BIND(sym->st_info) == STB_WEAK)
-+                      continue;
-+
-               loc = dstsec->sh_addr + rel->r_offset;
-               switch (ELF32_R_TYPE(rel->r_info)) {
diff --git a/target/linux/generic-2.6/patches-2.6.34/030-pci_disable_common_quirks.patch b/target/linux/generic-2.6/patches-2.6.34/030-pci_disable_common_quirks.patch
deleted file mode 100644 (file)
index 96b4b33..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
---- a/drivers/pci/Kconfig
-+++ b/drivers/pci/Kconfig
-@@ -51,6 +51,12 @@ config PCI_STUB
-         When in doubt, say N.
-+config PCI_DISABLE_COMMON_QUIRKS
-+      bool "PCI disable common quirks"
-+      depends on PCI
-+      help
-+        If you don't know what to do here, say N.
-+
- config HT_IRQ
-       bool "Interrupts on hypertransport devices"
-       default y
---- a/drivers/pci/quirks.c
-+++ b/drivers/pci/quirks.c
-@@ -96,6 +96,7 @@ static void __devinit quirk_resource_ali
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_ANY_ID, PCI_ANY_ID, quirk_resource_alignment);
-+#ifndef CONFIG_PCI_DISABLE_COMMON_QUIRKS
- /* The Mellanox Tavor device gives false positive parity errors
-  * Mark this device with a broken_parity_status, to allow
-  * PCI scanning code to "skip" this now blacklisted device.
-@@ -1905,7 +1906,9 @@ static void __devinit fixup_rev1_53c810(
-       }
- }
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_NCR, PCI_DEVICE_ID_NCR_53C810, fixup_rev1_53c810);
-+#endif /* !CONFIG_PCI_DISABLE_COMMON_QUIRKS */
-+#ifndef CONFIG_PCI_DISABLE_COMMON_QUIRKS
- /* Enable 1k I/O space granularity on the Intel P64H2 */
- static void __devinit quirk_p64h2_1k_io(struct pci_dev *dev)
- {
-@@ -2536,6 +2539,7 @@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_I
- DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_INTEL, 0x150d, quirk_i82576_sriov);
- #endif        /* CONFIG_PCI_IOV */
-+#endif /* !CONFIG_PCI_DISABLE_COMMON_QUIRKS */
- static void pci_do_fixups(struct pci_dev *dev, struct pci_fixup *f,
-                         struct pci_fixup *end)
diff --git a/target/linux/generic-2.6/patches-2.6.34/031-ppc_gcc_build_fix.patch b/target/linux/generic-2.6/patches-2.6.34/031-ppc_gcc_build_fix.patch
deleted file mode 100644 (file)
index 6002794..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-GCC 4.4.x looks to be adding support for generating out-of-line register
-saves/restores based on:
-
-http://gcc.gnu.org/ml/gcc-patches/2008-04/msg01678.html
-
-This breaks the kernel build as we'd have to link with libgcc to get the
-implementation of the register save/restores.
-
-To workaround this issue, we just stole the save/restore code from gcc
-and simplified it down for our needs (integer only).  We only do this if
-PPC32 as gcc makes believe the linker on ppc64 will deal with this and
-only if CONFIG_CC_OPTIMIZE_FOR_SIZE is set (thus -Os).
-
-Signed-off-by: Kumar Gala <[EMAIL PROTECTED]>
----
-
-If someone using cutting edge toolchains for ppc64 could test and make
-sure if we enable CONFIG_CC_OPTIMIZE_FOR_SIZE things work that would be
-nice.
-
-- k
-
- arch/powerpc/kernel/misc_32.S   |   77 +++++++++++++++++++++++++++
- arch/powerpc/kernel/ppc_ksyms.c |  111 +++++++++++++++++++++++++++++++++++++++
- 2 files changed, 188 insertions(+), 0 deletions(-)
-
---- a/arch/powerpc/kernel/misc_32.S
-+++ b/arch/powerpc/kernel/misc_32.S
-@@ -802,3 +802,80 @@ relocate_new_kernel_end:
- relocate_new_kernel_size:
-       .long relocate_new_kernel_end - relocate_new_kernel
- #endif
-+
-+#if defined(CONFIG_PPC32) && defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
-+/* Routines for saving integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer save area.  */
-+
-+_GLOBAL(_savegpr_14)   stw     14,-72(11)      /* save gp registers */
-+_GLOBAL(_savegpr_15)   stw     15,-68(11)
-+_GLOBAL(_savegpr_16)   stw     16,-64(11)
-+_GLOBAL(_savegpr_17)   stw     17,-60(11)
-+_GLOBAL(_savegpr_18)   stw     18,-56(11)
-+_GLOBAL(_savegpr_19)   stw     19,-52(11)
-+_GLOBAL(_savegpr_20)   stw     20,-48(11)
-+_GLOBAL(_savegpr_21)   stw     21,-44(11)
-+_GLOBAL(_savegpr_22)   stw     22,-40(11)
-+_GLOBAL(_savegpr_23)   stw     23,-36(11)
-+_GLOBAL(_savegpr_24)   stw     24,-32(11)
-+_GLOBAL(_savegpr_25)   stw     25,-28(11)
-+_GLOBAL(_savegpr_26)   stw     26,-24(11)
-+_GLOBAL(_savegpr_27)   stw     27,-20(11)
-+_GLOBAL(_savegpr_28)   stw     28,-16(11)
-+_GLOBAL(_savegpr_29)   stw     29,-12(11)
-+_GLOBAL(_savegpr_30)   stw     30,-8(11)
-+_GLOBAL(_savegpr_31)   stw     31,-4(11)
-+                       blr
-+
-+/* Routines for restoring integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer restore area.  */
-+
-+_GLOBAL(_restgpr_14)   lwz     14,-72(11)      /* restore gp registers */
-+_GLOBAL(_restgpr_15)   lwz     15,-68(11)
-+_GLOBAL(_restgpr_16)   lwz     16,-64(11)
-+_GLOBAL(_restgpr_17)   lwz     17,-60(11)
-+_GLOBAL(_restgpr_18)   lwz     18,-56(11)
-+_GLOBAL(_restgpr_19)   lwz     19,-52(11)
-+_GLOBAL(_restgpr_20)   lwz     20,-48(11)
-+_GLOBAL(_restgpr_21)   lwz     21,-44(11)
-+_GLOBAL(_restgpr_22)   lwz     22,-40(11)
-+_GLOBAL(_restgpr_23)   lwz     23,-36(11)
-+_GLOBAL(_restgpr_24)   lwz     24,-32(11)
-+_GLOBAL(_restgpr_25)   lwz     25,-28(11)
-+_GLOBAL(_restgpr_26)   lwz     26,-24(11)
-+_GLOBAL(_restgpr_27)   lwz     27,-20(11)
-+_GLOBAL(_restgpr_28)   lwz     28,-16(11)
-+_GLOBAL(_restgpr_29)   lwz     29,-12(11)
-+_GLOBAL(_restgpr_30)   lwz     30,-8(11)
-+_GLOBAL(_restgpr_31)   lwz     31,-4(11)
-+                       blr
-+
-+/* Routines for restoring integer registers, called by the compiler.  */
-+/* Called with r11 pointing to the stack header word of the caller of the */
-+/* function, just beyond the end of the integer restore area.  */
-+
-+_GLOBAL(_restgpr_14_x) lwz     14,-72(11)      /* restore gp registers */
-+_GLOBAL(_restgpr_15_x) lwz     15,-68(11)
-+_GLOBAL(_restgpr_16_x) lwz     16,-64(11)
-+_GLOBAL(_restgpr_17_x) lwz     17,-60(11)
-+_GLOBAL(_restgpr_18_x) lwz     18,-56(11)
-+_GLOBAL(_restgpr_19_x) lwz     19,-52(11)
-+_GLOBAL(_restgpr_20_x) lwz     20,-48(11)
-+_GLOBAL(_restgpr_21_x) lwz     21,-44(11)
-+_GLOBAL(_restgpr_22_x) lwz     22,-40(11)
-+_GLOBAL(_restgpr_23_x) lwz     23,-36(11)
-+_GLOBAL(_restgpr_24_x) lwz     24,-32(11)
-+_GLOBAL(_restgpr_25_x) lwz     25,-28(11)
-+_GLOBAL(_restgpr_26_x) lwz     26,-24(11)
-+_GLOBAL(_restgpr_27_x) lwz     27,-20(11)
-+_GLOBAL(_restgpr_28_x) lwz     28,-16(11)
-+_GLOBAL(_restgpr_29_x) lwz     29,-12(11)
-+_GLOBAL(_restgpr_30_x) lwz     30,-8(11)
-+_GLOBAL(_restgpr_31_x) lwz     0,4(11)
-+                       lwz     31,-4(11)
-+                       mtlr    0
-+                       mr      1,11
-+                       blr
-+#endif
---- a/arch/powerpc/kernel/ppc_ksyms.c
-+++ b/arch/powerpc/kernel/ppc_ksyms.c
-@@ -185,3 +185,114 @@ EXPORT_SYMBOL(__mtdcr);
- EXPORT_SYMBOL(__mfdcr);
- #endif
- EXPORT_SYMBOL(empty_zero_page);
-+
-+#if defined(CONFIG_PPC32) && defined(CONFIG_CC_OPTIMIZE_FOR_SIZE)
-+void _savegpr_14(void);
-+void _savegpr_15(void);
-+void _savegpr_16(void);
-+void _savegpr_17(void);
-+void _savegpr_18(void);
-+void _savegpr_19(void);
-+void _savegpr_20(void);
-+void _savegpr_21(void);
-+void _savegpr_22(void);
-+void _savegpr_23(void);
-+void _savegpr_24(void);
-+void _savegpr_25(void);
-+void _savegpr_26(void);
-+void _savegpr_27(void);
-+void _savegpr_28(void);
-+void _savegpr_29(void);
-+void _savegpr_30(void);
-+void _savegpr_31(void);
-+void _restgpr_14(void);
-+void _restgpr_15(void);
-+void _restgpr_16(void);
-+void _restgpr_17(void);
-+void _restgpr_18(void);
-+void _restgpr_19(void);
-+void _restgpr_20(void);
-+void _restgpr_21(void);
-+void _restgpr_22(void);
-+void _restgpr_23(void);
-+void _restgpr_24(void);
-+void _restgpr_25(void);
-+void _restgpr_26(void);
-+void _restgpr_27(void);
-+void _restgpr_28(void);
-+void _restgpr_29(void);
-+void _restgpr_30(void);
-+void _restgpr_31(void);
-+void _restgpr_14_x(void);
-+void _restgpr_15_x(void);
-+void _restgpr_16_x(void);
-+void _restgpr_17_x(void);
-+void _restgpr_18_x(void);
-+void _restgpr_19_x(void);
-+void _restgpr_20_x(void);
-+void _restgpr_21_x(void);
-+void _restgpr_22_x(void);
-+void _restgpr_23_x(void);
-+void _restgpr_24_x(void);
-+void _restgpr_25_x(void);
-+void _restgpr_26_x(void);
-+void _restgpr_27_x(void);
-+void _restgpr_28_x(void);
-+void _restgpr_29_x(void);
-+void _restgpr_30_x(void);
-+void _restgpr_31_x(void);
-+EXPORT_SYMBOL(_savegpr_14);
-+EXPORT_SYMBOL(_savegpr_15);
-+EXPORT_SYMBOL(_savegpr_16);
-+EXPORT_SYMBOL(_savegpr_17);
-+EXPORT_SYMBOL(_savegpr_18);
-+EXPORT_SYMBOL(_savegpr_19);
-+EXPORT_SYMBOL(_savegpr_20);
-+EXPORT_SYMBOL(_savegpr_21);
-+EXPORT_SYMBOL(_savegpr_22);
-+EXPORT_SYMBOL(_savegpr_23);
-+EXPORT_SYMBOL(_savegpr_24);
-+EXPORT_SYMBOL(_savegpr_25);
-+EXPORT_SYMBOL(_savegpr_26);
-+EXPORT_SYMBOL(_savegpr_27);
-+EXPORT_SYMBOL(_savegpr_28);
-+EXPORT_SYMBOL(_savegpr_29);
-+EXPORT_SYMBOL(_savegpr_30);
-+EXPORT_SYMBOL(_savegpr_31);
-+EXPORT_SYMBOL(_restgpr_14);
-+EXPORT_SYMBOL(_restgpr_15);
-+EXPORT_SYMBOL(_restgpr_16);
-+EXPORT_SYMBOL(_restgpr_17);
-+EXPORT_SYMBOL(_restgpr_18);
-+EXPORT_SYMBOL(_restgpr_19);
-+EXPORT_SYMBOL(_restgpr_20);
-+EXPORT_SYMBOL(_restgpr_21);
-+EXPORT_SYMBOL(_restgpr_22);
-+EXPORT_SYMBOL(_restgpr_23);
-+EXPORT_SYMBOL(_restgpr_24);
-+EXPORT_SYMBOL(_restgpr_25);
-+EXPORT_SYMBOL(_restgpr_26);
-+EXPORT_SYMBOL(_restgpr_27);
-+EXPORT_SYMBOL(_restgpr_28);
-+EXPORT_SYMBOL(_restgpr_29);
-+EXPORT_SYMBOL(_restgpr_30);
-+EXPORT_SYMBOL(_restgpr_31);
-+EXPORT_SYMBOL(_restgpr_14_x);
-+EXPORT_SYMBOL(_restgpr_15_x);
-+EXPORT_SYMBOL(_restgpr_16_x);
-+EXPORT_SYMBOL(_restgpr_17_x);
-+EXPORT_SYMBOL(_restgpr_18_x);
-+EXPORT_SYMBOL(_restgpr_19_x);
-+EXPORT_SYMBOL(_restgpr_20_x);
-+EXPORT_SYMBOL(_restgpr_21_x);
-+EXPORT_SYMBOL(_restgpr_22_x);
-+EXPORT_SYMBOL(_restgpr_23_x);
-+EXPORT_SYMBOL(_restgpr_24_x);
-+EXPORT_SYMBOL(_restgpr_25_x);
-+EXPORT_SYMBOL(_restgpr_26_x);
-+EXPORT_SYMBOL(_restgpr_27_x);
-+EXPORT_SYMBOL(_restgpr_28_x);
-+EXPORT_SYMBOL(_restgpr_29_x);
-+EXPORT_SYMBOL(_restgpr_30_x);
-+EXPORT_SYMBOL(_restgpr_31_x);
-+#endif /* CONFIG_PPC32 && CONFIG_CC_OPTIMIZE_FOR_SIZE */
diff --git a/target/linux/generic-2.6/patches-2.6.34/060-block2mtd_init.patch b/target/linux/generic-2.6/patches-2.6.34/060-block2mtd_init.patch
deleted file mode 100644 (file)
index 3a47c85..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -14,6 +14,7 @@
- #include <linux/list.h>
- #include <linux/init.h>
- #include <linux/mtd/mtd.h>
-+#include <linux/mtd/partitions.h>
- #include <linux/buffer_head.h>
- #include <linux/mutex.h>
- #include <linux/mount.h>
-@@ -232,10 +233,11 @@ static void block2mtd_free_device(struct
- /* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size)
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
- {
-       struct block_device *bdev;
-       struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-       char *name;
-       if (!devname)
-@@ -273,17 +275,17 @@ static struct block2mtd_dev *add_device(
-       mutex_init(&dev->write_mutex);
--      /* Setup the MTD structure */
--      /* make the name contain the block device in */
--      name = kmalloc(sizeof("block2mtd: ") + strlen(devname) + 1,
--                      GFP_KERNEL);
-+      if (!mtdname)
-+              mtdname = devname;
-+
-+      name = kmalloc(strlen(mtdname) + 1, GFP_KERNEL);
-       if (!name)
-               goto devinit_err;
--      sprintf(name, "block2mtd: %s", devname);
-+      strcpy(name, mtdname);
-       dev->mtd.name = name;
--      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK;
-+      dev->mtd.size = dev->blkdev->bd_inode->i_size & PAGE_MASK & ~(erase_size - 1);
-       dev->mtd.erasesize = erase_size;
-       dev->mtd.writesize = 1;
-       dev->mtd.type = MTD_RAM;
-@@ -296,14 +298,17 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
--      if (add_mtd_device(&dev->mtd)) {
-+      part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-+      part->name = dev->mtd.name;
-+      part->offset = 0;
-+      part->size = dev->mtd.size;
-+      if (add_mtd_partitions(&dev->mtd, part, 1)) {
-               /* Device didnt get added, so free the entry */
-               goto devinit_err;
-       }
-       list_add(&dev->list, &blkmtd_device_list);
-       INFO("mtd%d: [%s] erase_size = %dKiB [%d]", dev->mtd.index,
--                      dev->mtd.name + strlen("block2mtd: "),
--                      dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-+                      mtdname, dev->mtd.erasesize >> 10, dev->mtd.erasesize);
-       return dev;
- devinit_err:
-@@ -376,9 +381,9 @@ static char block2mtd_paramline[80 + 12]
- static int block2mtd_setup2(const char *val)
- {
--      char buf[80 + 12]; /* 80 for device, 12 for erase size */
-+      char buf[80 + 12 + 80]; /* 80 for device, 12 for erase size, 80 for name */
-       char *str = buf;
--      char *token[2];
-+      char *token[3];
-       char *name;
-       size_t erase_size = PAGE_SIZE;
-       int i, ret;
-@@ -389,7 +394,7 @@ static int block2mtd_setup2(const char *
-       strcpy(str, val);
-       kill_final_newline(str);
--      for (i = 0; i < 2; i++)
-+      for (i = 0; i < 3; i++)
-               token[i] = strsep(&str, ",");
-       if (str)
-@@ -408,8 +413,10 @@ static int block2mtd_setup2(const char *
-                       parse_err("illegal erase size");
-               }
-       }
-+      if (token[2] && (strlen(token[2]) + 1 > 80))
-+              parse_err("mtd device name too long");
--      add_device(name, erase_size);
-+      add_device(name, erase_size, token[2]);
-       return 0;
- }
-@@ -443,7 +450,7 @@ static int block2mtd_setup(const char *v
- module_param_call(block2mtd, block2mtd_setup, NULL, NULL, 0200);
--MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>]\"");
-+MODULE_PARM_DESC(block2mtd, "Device to use. \"block2mtd=<dev>[,<erasesize>[,<name>]]\"");
- static int __init block2mtd_init(void)
- {
---- a/fs/partitions/check.c
-+++ b/fs/partitions/check.c
-@@ -625,6 +625,7 @@ try_scan:
-       kfree(state);
-       return 0;
- }
-+EXPORT_SYMBOL(rescan_partitions);
- unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.34/065-rootfs_split.patch b/target/linux/generic-2.6/patches-2.6.34/065-rootfs_split.patch
deleted file mode 100644 (file)
index 22b3f5e..0000000
+++ /dev/null
@@ -1,625 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -53,6 +53,16 @@ config MTD_PARTITIONS
-         devices. Partitioning on NFTL 'devices' is a different - that's the
-         'normal' form of partitioning used on a block device.
-+config MTD_ROOTFS_ROOT_DEV
-+      bool "Automatically set 'rootfs' partition to be root filesystem"
-+      depends on MTD_PARTITIONS
-+      default y
-+
-+config MTD_ROOTFS_SPLIT
-+      bool "Automatically split 'rootfs' partition for squashfs"
-+      depends on MTD_PARTITIONS
-+      default y
-+
- config MTD_REDBOOT_PARTS
-       tristate "RedBoot partition table parsing"
-       depends on MTD_PARTITIONS
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -18,6 +18,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/root_dev.h>
-+#include <linux/magic.h>
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -35,7 +37,7 @@ struct mtd_part {
-  * the pointer to that structure with this macro.
-  */
- #define PART(x)  ((struct mtd_part *)(x))
--
-+#define IS_PART(mtd) (mtd->read == part_read)
- /*
-  * MTD methods which simply translate the effective address and pass through
-@@ -503,6 +505,150 @@ out_register:
-       return slave;
- }
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+#define ROOTFS_SPLIT_NAME "rootfs_data"
-+#define ROOTFS_REMOVED_NAME "<removed>"
-+
-+struct squashfs_super_block {
-+      __le32 s_magic;
-+      __le32 pad0[9];
-+      __le64 bytes_used;
-+};
-+
-+
-+static int split_squashfs(struct mtd_info *master, int offset, int *split_offset)
-+{
-+      struct squashfs_super_block sb;
-+      int len, ret;
-+
-+      ret = master->read(master, offset, sizeof(sb), &len, (void *) &sb);
-+      if (ret || (len != sizeof(sb))) {
-+              printk(KERN_ALERT "split_squashfs: error occured while reading "
-+                      "from \"%s\"\n", master->name);
-+              return -EINVAL;
-+      }
-+
-+      if (SQUASHFS_MAGIC != le32_to_cpu(sb.s_magic) ) {
-+              printk(KERN_ALERT "split_squashfs: no squashfs found in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      if (le64_to_cpu((sb.bytes_used)) <= 0) {
-+              printk(KERN_ALERT "split_squashfs: squashfs is empty in \"%s\"\n",
-+                      master->name);
-+              *split_offset = 0;
-+              return 0;
-+      }
-+
-+      len = (u32) le64_to_cpu(sb.bytes_used);
-+      len += (offset & 0x000fffff);
-+      len +=  (master->erasesize - 1);
-+      len &= ~(master->erasesize - 1);
-+      len -= (offset & 0x000fffff);
-+      *split_offset = offset + len;
-+
-+      return 0;
-+}
-+
-+static int split_rootfs_data(struct mtd_info *master, struct mtd_info *rpart, const struct mtd_partition *part)
-+{
-+      struct mtd_partition *dpart;
-+      struct mtd_part *slave = NULL;
-+      int split_offset = 0;
-+      int ret;
-+
-+      ret = split_squashfs(master, part->offset, &split_offset);
-+      if (ret)
-+              return ret;
-+
-+      if (split_offset <= 0)
-+              return 0;
-+
-+      dpart = kmalloc(sizeof(*part)+sizeof(ROOTFS_SPLIT_NAME)+1, GFP_KERNEL);
-+      if (dpart == NULL) {
-+              printk(KERN_INFO "split_squashfs: no memory for partition \"%s\"\n",
-+                      ROOTFS_SPLIT_NAME);
-+              return -ENOMEM;
-+      }
-+
-+      memcpy(dpart, part, sizeof(*part));
-+      dpart->name = (unsigned char *)&dpart[1];
-+      strcpy(dpart->name, ROOTFS_SPLIT_NAME);
-+
-+      dpart->size -= split_offset - dpart->offset;
-+      dpart->offset = split_offset;
-+
-+      if (dpart == NULL)
-+              return 1;
-+
-+      printk(KERN_INFO "mtd: partition \"%s\" created automatically, ofs=%llX, len=%llX \n",
-+              ROOTFS_SPLIT_NAME, dpart->offset, dpart->size);
-+
-+      slave = add_one_partition(master, dpart, 0, split_offset);
-+      if (!slave) {
-+              kfree(dpart);
-+              return -ENOMEM;
-+      }
-+      rpart->split = &slave->mtd;
-+
-+      return 0;
-+}
-+
-+static int refresh_rootfs_split(struct mtd_info *mtd)
-+{
-+      struct mtd_partition tpart;
-+      struct mtd_part *part;
-+      char *name;
-+      //int index = 0;
-+      int offset, size;
-+      int ret;
-+
-+      part = PART(mtd);
-+
-+      /* check for the new squashfs offset first */
-+      ret = split_squashfs(part->master, part->offset, &offset);
-+      if (ret)
-+              return ret;
-+
-+      if ((offset > 0) && !mtd->split) {
-+              printk(KERN_INFO "%s: creating new split partition for \"%s\"\n", __func__, mtd->name);
-+              /* if we don't have a rootfs split partition, create a new one */
-+              tpart.name = (char *) mtd->name;
-+              tpart.size = mtd->size;
-+              tpart.offset = part->offset;
-+
-+              return split_rootfs_data(part->master, &part->mtd, &tpart);
-+      } else if ((offset > 0) && mtd->split) {
-+              /* update the offsets of the existing partition */
-+              size = mtd->size + part->offset - offset;
-+
-+              part = PART(mtd->split);
-+              part->offset = offset;
-+              part->mtd.size = size;
-+              printk(KERN_INFO "%s: %s partition \"" ROOTFS_SPLIT_NAME "\", offset: 0x%06x (0x%06x)\n",
-+                      __func__, (!strcmp(part->mtd.name, ROOTFS_SPLIT_NAME) ? "updating" : "creating"),
-+                      (u32) part->offset, (u32) part->mtd.size);
-+              name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
-+              strcpy(name, ROOTFS_SPLIT_NAME);
-+              part->mtd.name = name;
-+      } else if ((offset <= 0) && mtd->split) {
-+              printk(KERN_INFO "%s: removing partition \"%s\"\n", __func__, mtd->split->name);
-+
-+              /* mark existing partition as removed */
-+              part = PART(mtd->split);
-+              name = kmalloc(sizeof(ROOTFS_SPLIT_NAME) + 1, GFP_KERNEL);
-+              strcpy(name, ROOTFS_REMOVED_NAME);
-+              part->mtd.name = name;
-+              part->offset = 0;
-+              part->mtd.size = 0;
-+      }
-+
-+      return 0;
-+}
-+#endif /* CONFIG_MTD_ROOTFS_SPLIT */
-+
- /*
-  * This function, given a master MTD object and a partition table, creates
-  * and registers slave MTD objects which are bound to the master according to
-@@ -518,7 +664,7 @@ int add_mtd_partitions(struct mtd_info *
- {
-       struct mtd_part *slave;
-       uint64_t cur_offset = 0;
--      int i;
-+      int i, ret;
-       printk(KERN_NOTICE "Creating %d MTD partitions on \"%s\":\n", nbparts, master->name);
-@@ -526,6 +672,21 @@ int add_mtd_partitions(struct mtd_info *
-               slave = add_one_partition(master, parts + i, i, cur_offset);
-               if (!slave)
-                       return -ENOMEM;
-+
-+              if (!strcmp(parts[i].name, "rootfs")) {
-+#ifdef CONFIG_MTD_ROOTFS_ROOT_DEV
-+                      if (ROOT_DEV == 0) {
-+                              printk(KERN_NOTICE "mtd: partition \"rootfs\" "
-+                                      "set to be root filesystem\n");
-+                              ROOT_DEV = MKDEV(MTD_BLOCK_MAJOR, slave->mtd.index);
-+                      }
-+#endif
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+                      ret = split_rootfs_data(master, &slave->mtd, &parts[i]);
-+                      /* if (ret == 0)
-+                              j++; */
-+#endif
-+              }
-               cur_offset = slave->offset + slave->mtd.size;
-       }
-@@ -533,6 +694,32 @@ int add_mtd_partitions(struct mtd_info *
- }
- EXPORT_SYMBOL(add_mtd_partitions);
-+int refresh_mtd_partitions(struct mtd_info *mtd)
-+{
-+      int ret = 0;
-+
-+      if (IS_PART(mtd)) {
-+              struct mtd_part *part;
-+              struct mtd_info *master;
-+
-+              part = PART(mtd);
-+              master = part->master;
-+              if (master->refresh_device)
-+                      ret = master->refresh_device(master);
-+      }
-+
-+      if (!ret && mtd->refresh_device)
-+              ret = mtd->refresh_device(mtd);
-+
-+#ifdef CONFIG_MTD_ROOTFS_SPLIT
-+      if (!ret && IS_PART(mtd) && !strcmp(mtd->name, "rootfs"))
-+              refresh_rootfs_split(mtd);
-+#endif
-+
-+      return 0;
-+}
-+EXPORT_SYMBOL_GPL(refresh_mtd_partitions);
-+
- static DEFINE_SPINLOCK(part_parser_lock);
- static LIST_HEAD(part_parsers);
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -29,6 +29,8 @@ struct block2mtd_dev {
-       struct block_device *blkdev;
-       struct mtd_info mtd;
-       struct mutex write_mutex;
-+      rwlock_t bdev_mutex;
-+      char devname[0];
- };
-@@ -81,6 +83,12 @@ static int block2mtd_erase(struct mtd_in
-       size_t len = instr->len;
-       int err;
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-+
-       instr->state = MTD_ERASING;
-       mutex_lock(&dev->write_mutex);
-       err = _block2mtd_erase(dev, from, len);
-@@ -93,6 +101,10 @@ static int block2mtd_erase(struct mtd_in
-       instr->state = MTD_ERASE_DONE;
-       mtd_erase_callback(instr);
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+
-       return err;
- }
-@@ -104,10 +116,14 @@ static int block2mtd_read(struct mtd_inf
-       struct page *page;
-       int index = from >> PAGE_SHIFT;
-       int offset = from & (PAGE_SIZE-1);
--      int cpylen;
-+      int cpylen, err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev || (from > mtd->size)) {
-+              err = -EINVAL;
-+              goto done;
-+      }
--      if (from > mtd->size)
--              return -EINVAL;
-       if (from + len > mtd->size)
-               len = mtd->size - from;
-@@ -122,10 +138,14 @@ static int block2mtd_read(struct mtd_inf
-               len = len - cpylen;
-               page = page_read(dev->blkdev->bd_inode->i_mapping, index);
--              if (!page)
--                      return -ENOMEM;
--              if (IS_ERR(page))
--                      return PTR_ERR(page);
-+              if (!page) {
-+                      err = -ENOMEM;
-+                      goto done;
-+              }
-+              if (IS_ERR(page)) {
-+                      err = PTR_ERR(page);
-+                      goto done;
-+              }
-               memcpy(buf, page_address(page) + offset, cpylen);
-               page_cache_release(page);
-@@ -136,7 +156,10 @@ static int block2mtd_read(struct mtd_inf
-               offset = 0;
-               index++;
-       }
--      return 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-+      return err;
- }
-@@ -188,12 +211,22 @@ static int block2mtd_write(struct mtd_in
-               size_t *retlen, const u_char *buf)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      int err;
-+      int err = 0;
-+
-+      read_lock(&dev->bdev_mutex);
-+      if (!dev->blkdev) {
-+              err = -EINVAL;
-+              goto done;
-+      }
-       if (!len)
--              return 0;
--      if (to >= mtd->size)
--              return -ENOSPC;
-+              goto done;
-+
-+      if (to >= mtd->size) {
-+              err = -ENOSPC;
-+              goto done;
-+      }
-+
-       if (to + len > mtd->size)
-               len = mtd->size - to;
-@@ -202,6 +235,9 @@ static int block2mtd_write(struct mtd_in
-       mutex_unlock(&dev->write_mutex);
-       if (err > 0)
-               err = 0;
-+
-+done:
-+      read_unlock(&dev->bdev_mutex);
-       return err;
- }
-@@ -210,52 +246,29 @@ static int block2mtd_write(struct mtd_in
- static void block2mtd_sync(struct mtd_info *mtd)
- {
-       struct block2mtd_dev *dev = mtd->priv;
--      sync_blockdev(dev->blkdev);
--      return;
--}
--
--
--static void block2mtd_free_device(struct block2mtd_dev *dev)
--{
--      if (!dev)
--              return;
--
--      kfree(dev->mtd.name);
--      if (dev->blkdev) {
--              invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping,
--                                      0, -1);
--              close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);
--      }
-+      read_lock(&dev->bdev_mutex);
-+      if (dev->blkdev)
-+              sync_blockdev(dev->blkdev);
-+      read_unlock(&dev->bdev_mutex);
--      kfree(dev);
-+      return;
- }
--/* FIXME: ensure that mtd->size % erase_size == 0 */
--static struct block2mtd_dev *add_device(char *devname, int erase_size, const char *mtdname)
-+static int _open_bdev(struct block2mtd_dev *dev)
- {
-       struct block_device *bdev;
--      struct block2mtd_dev *dev;
--      struct mtd_partition *part;
--      char *name;
--
--      if (!devname)
--              return NULL;
--
--      dev = kzalloc(sizeof(struct block2mtd_dev), GFP_KERNEL);
--      if (!dev)
--              return NULL;
-       /* Get a handle on the device */
--      bdev = open_bdev_exclusive(devname, FMODE_READ|FMODE_WRITE, NULL);
-+      bdev = open_bdev_exclusive(dev->devname, FMODE_READ|FMODE_WRITE, NULL);
- #ifndef MODULE
-       if (IS_ERR(bdev)) {
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
--              dev_t devt = name_to_dev_t(devname);
-+              dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-               }
-@@ -263,17 +276,98 @@ static struct block2mtd_dev *add_device(
- #endif
-       if (IS_ERR(bdev)) {
--              ERROR("error: cannot open device %s", devname);
--              goto devinit_err;
-+              ERROR("error: cannot open device %s", dev->devname);
-+              return 1;
-       }
-       dev->blkdev = bdev;
-       if (MAJOR(bdev->bd_dev) == MTD_BLOCK_MAJOR) {
-               ERROR("attempting to use an MTD device as a block device");
--              goto devinit_err;
-+              return 1;
-       }
-+      return 0;
-+}
-+
-+static void _close_bdev(struct block2mtd_dev *dev)
-+{
-+      struct block_device *bdev;
-+
-+      if (!dev->blkdev)
-+              return;
-+
-+      bdev = dev->blkdev;
-+      invalidate_mapping_pages(dev->blkdev->bd_inode->i_mapping, 0, -1);
-+      close_bdev_exclusive(dev->blkdev, FMODE_READ|FMODE_WRITE);
-+      dev->blkdev = NULL;
-+}
-+
-+static void block2mtd_free_device(struct block2mtd_dev *dev)
-+{
-+      if (!dev)
-+              return;
-+
-+      kfree(dev->mtd.name);
-+      _close_bdev(dev);
-+      kfree(dev);
-+}
-+
-+
-+static int block2mtd_refresh(struct mtd_info *mtd)
-+{
-+      struct block2mtd_dev *dev = mtd->priv;
-+      struct block_device *bdev;
-+      dev_t devt;
-+      int err = 0;
-+
-+      /* no other mtd function can run at this point */
-+      write_lock(&dev->bdev_mutex);
-+
-+      /* get the device number for the whole disk */
-+      devt = MKDEV(MAJOR(dev->blkdev->bd_dev), 0);
-+
-+      /* close the old block device */
-+      _close_bdev(dev);
-+
-+      /* open the whole disk, issue a partition rescan, then */
-+      bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
-+      if (!bdev || !bdev->bd_disk)
-+              err = -EINVAL;
-+#ifndef CONFIG_MTD_BLOCK2MTD_MODULE
-+      else
-+              err = rescan_partitions(bdev->bd_disk, bdev);
-+#endif
-+      if (bdev)
-+              close_bdev_exclusive(bdev, FMODE_READ|FMODE_WRITE);
-+
-+      /* try to open the partition block device again */
-+      _open_bdev(dev);
-+      write_unlock(&dev->bdev_mutex);
-+
-+      return err;
-+}
-+
-+/* FIXME: ensure that mtd->size % erase_size == 0 */
-+static struct block2mtd_dev *add_device(char *devname, int erase_size, char *mtdname)
-+{
-+      struct block2mtd_dev *dev;
-+      struct mtd_partition *part;
-+      char *name;
-+
-+      if (!devname)
-+              return NULL;
-+
-+      dev = kzalloc(sizeof(struct block2mtd_dev) + strlen(devname) + 1, GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      strcpy(dev->devname, devname);
-+
-+      if (_open_bdev(dev))
-+              goto devinit_err;
-+
-       mutex_init(&dev->write_mutex);
-+      rwlock_init(&dev->bdev_mutex);
-       if (!mtdname)
-               mtdname = devname;
-@@ -297,6 +391,7 @@ static struct block2mtd_dev *add_device(
-       dev->mtd.read = block2mtd_read;
-       dev->mtd.priv = dev;
-       dev->mtd.owner = THIS_MODULE;
-+      dev->mtd.refresh_device = block2mtd_refresh;
-       part = kzalloc(sizeof(struct mtd_partition), GFP_KERNEL);
-       part->name = dev->mtd.name;
---- a/drivers/mtd/mtdchar.c
-+++ b/drivers/mtd/mtdchar.c
-@@ -18,6 +18,7 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/compatmac.h>
-+#include <linux/mtd/partitions.h>
- #include <asm/uaccess.h>
-@@ -814,6 +815,13 @@ static int mtd_ioctl(struct inode *inode
-               file->f_pos = 0;
-               break;
-       }
-+#ifdef CONFIG_MTD_PARTITIONS
-+      case MTDREFRESH:
-+      {
-+              ret = refresh_mtd_partitions(mtd);
-+              break;
-+      }
-+#endif
-       default:
-               ret = -ENOTTY;
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -101,6 +101,7 @@ struct mtd_oob_ops {
-       uint8_t         *oobbuf;
- };
-+struct mtd_info;
- struct mtd_info {
-       u_char type;
-       uint32_t flags;
-@@ -241,6 +242,9 @@ struct mtd_info {
-       struct device dev;
-       int usecount;
-+      int (*refresh_device)(struct mtd_info *mtd);
-+      struct mtd_info *split;
-+
-       /* If the driver is something smart, like UBI, it may need to maintain
-        * its own reference counting. The below functions are only for driver.
-        * The driver may register its callbacks. These callbacks are not
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -34,12 +34,14 @@
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_partition;
- struct mtd_partition {
-       char *name;                     /* identifier string */
-       uint64_t size;                  /* partition size */
-       uint64_t offset;                /* offset within the master MTD space */
-       uint32_t mask_flags;            /* master MTD flags to mask out for this partition */
-       struct nand_ecclayout *ecclayout;       /* out of band layout for this partition (NAND only)*/
-+      int (*refresh_partition)(struct mtd_info *);
- };
- #define MTDPART_OFS_NXTBLK    (-2)
-@@ -51,6 +53,7 @@ struct mtd_info;
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
-+int refresh_mtd_partitions(struct mtd_info *);
- /*
-  * Functions dealing with the various ways of partitioning the space
---- a/include/mtd/mtd-abi.h
-+++ b/include/mtd/mtd-abi.h
-@@ -110,6 +110,7 @@ struct otp_info {
- #define MEMERASE64            _IOW('M', 20, struct erase_info_user64)
- #define MEMWRITEOOB64         _IOWR('M', 21, struct mtd_oob_buf64)
- #define MEMREADOOB64          _IOWR('M', 22, struct mtd_oob_buf64)
-+#define MTDREFRESH            _IO('M', 23)
- /*
-  * Obsolete legacy interface. Keep it in order not to break userspace
diff --git a/target/linux/generic-2.6/patches-2.6.34/066-block2mtd_probe.patch b/target/linux/generic-2.6/patches-2.6.34/066-block2mtd_probe.patch
deleted file mode 100644 (file)
index b2b1a34..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/devices/block2mtd.c
-+++ b/drivers/mtd/devices/block2mtd.c
-@@ -268,6 +268,7 @@ static int _open_bdev(struct block2mtd_d
-               /* We might not have rootfs mounted at this point. Try
-                  to resolve the device name by other means. */
-+              wait_for_device_probe();
-               dev_t devt = name_to_dev_t(dev->devname);
-               if (devt) {
-                       bdev = open_by_devnum(devt, FMODE_WRITE | FMODE_READ);
diff --git a/target/linux/generic-2.6/patches-2.6.34/070-redboot_space.patch b/target/linux/generic-2.6/patches-2.6.34/070-redboot_space.patch
deleted file mode 100644 (file)
index 6ace83c..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -249,14 +249,21 @@ static int parse_redboot_partitions(stru
- #endif
-               names += strlen(names)+1;
--#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-               if(fl->next && fl->img->flash_base + fl->img->size + master->erasesize <= fl->next->img->flash_base) {
--                      i++;
--                      parts[i].offset = parts[i-1].size + parts[i-1].offset;
--                      parts[i].size = fl->next->img->flash_base - parts[i].offset;
--                      parts[i].name = nullname;
--              }
-+                      if (!strcmp(parts[i].name, "rootfs")) {
-+                              parts[i].size = fl->next->img->flash_base;
-+                              parts[i].size &= ~(master->erasesize - 1);
-+                              parts[i].size -= parts[i].offset;
-+#ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-+                              nrparts--;
-+                      } else {
-+                              i++;
-+                              parts[i].offset = parts[i-1].size + parts[i-1].offset;
-+                              parts[i].size = fl->next->img->flash_base - parts[i].offset;
-+                              parts[i].name = nullname;
- #endif
-+                      }
-+              }
-               tmp_fl = fl;
-               fl = fl->next;
-               kfree(tmp_fl);
diff --git a/target/linux/generic-2.6/patches-2.6.34/071-redboot_boardconfig.patch b/target/linux/generic-2.6/patches-2.6.34/071-redboot_boardconfig.patch
deleted file mode 100644 (file)
index f9bc4fe..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
---- a/drivers/mtd/redboot.c
-+++ b/drivers/mtd/redboot.c
-@@ -11,6 +11,8 @@
- #include <linux/mtd/mtd.h>
- #include <linux/mtd/partitions.h>
-+#define BOARD_CONFIG_PART             "boardconfig"
-+
- struct fis_image_desc {
-     unsigned char name[16];      // Null terminated name
-     uint32_t    flash_base;    // Address within FLASH of image
-@@ -41,6 +43,7 @@ static int parse_redboot_partitions(stru
-                              struct mtd_partition **pparts,
-                              unsigned long fis_origin)
- {
-+      unsigned long max_offset = 0;
-       int nrparts = 0;
-       struct fis_image_desc *buf;
-       struct mtd_partition *parts;
-@@ -209,14 +212,14 @@ static int parse_redboot_partitions(stru
-               }
-       }
- #endif
--      parts = kzalloc(sizeof(*parts)*nrparts + nulllen + namelen, GFP_KERNEL);
-+      parts = kzalloc(sizeof(*parts) * (nrparts + 1) + nulllen + namelen + sizeof(BOARD_CONFIG_PART), GFP_KERNEL);
-       if (!parts) {
-               ret = -ENOMEM;
-               goto out;
-       }
--      nullname = (char *)&parts[nrparts];
-+      nullname = (char *)&parts[nrparts + 1];
- #ifdef CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED
-       if (nulllen > 0) {
-               strcpy(nullname, nullstring);
-@@ -235,6 +238,8 @@ static int parse_redboot_partitions(stru
-       }
- #endif
-       for ( ; i<nrparts; i++) {
-+              if(max_offset < buf[i].flash_base + buf[i].size)
-+                      max_offset = buf[i].flash_base + buf[i].size;
-               parts[i].size = fl->img->size;
-               parts[i].offset = fl->img->flash_base;
-               parts[i].name = names;
-@@ -268,6 +273,14 @@ static int parse_redboot_partitions(stru
-               fl = fl->next;
-               kfree(tmp_fl);
-       }
-+      if(master->size - max_offset >= master->erasesize)
-+      {
-+              parts[nrparts].size = master->size - max_offset;
-+              parts[nrparts].offset = max_offset;
-+              parts[nrparts].name = names;
-+              strcpy(names, BOARD_CONFIG_PART);
-+              nrparts++;
-+      }
-       ret = nrparts;
-       *pparts = parts;
-  out:
diff --git a/target/linux/generic-2.6/patches-2.6.34/080-mtd_plat_nand_chip_fixup.patch b/target/linux/generic-2.6/patches-2.6.34/080-mtd_plat_nand_chip_fixup.patch
deleted file mode 100644 (file)
index 16ce76c..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
---- a/include/linux/mtd/nand.h
-+++ b/include/linux/mtd/nand.h
-@@ -491,6 +491,7 @@ struct platform_nand_chip {
-       int                     chip_delay;
-       unsigned int            options;
-       const char              **part_probe_types;
-+      int                     (*chip_fixup)(struct mtd_info *mtd);
-       void                    (*set_parts)(uint64_t size,
-                                       struct platform_nand_chip *chip);
-       void                    *priv;
---- a/drivers/mtd/nand/plat_nand.c
-+++ b/drivers/mtd/nand/plat_nand.c
-@@ -91,7 +91,18 @@ static int __devinit plat_nand_probe(str
-       }
-       /* Scan to find existance of the device */
--      if (nand_scan(&data->mtd, 1)) {
-+      if (nand_scan_ident(&data->mtd, 1)) {
-+              res = -ENXIO;
-+              goto out;
-+      }
-+
-+      if (pdata->chip.chip_fixup) {
-+              res = pdata->chip.chip_fixup(&data->mtd);
-+              if (res)
-+                      goto out;
-+      }
-+
-+      if (nand_scan_tail(&data->mtd)) {
-               err = -ENXIO;
-               goto out;
-       }
diff --git a/target/linux/generic-2.6/patches-2.6.34/081-mtd_myloader_partition_parser.patch b/target/linux/generic-2.6/patches-2.6.34/081-mtd_myloader_partition_parser.patch
deleted file mode 100644 (file)
index 61b822e..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
---- a/drivers/mtd/Kconfig
-+++ b/drivers/mtd/Kconfig
-@@ -181,6 +181,22 @@ config MTD_AR7_PARTS
-       ---help---
-         TI AR7 partitioning support
-+config MTD_MYLOADER_PARTS
-+      tristate "MyLoader partition parsing"
-+      depends on MTD_PARTITIONS && (ADM5120 || ATHEROS_AR231X || ATHEROS_AR71XX)
-+      ---help---
-+        MyLoader is a bootloader which allows the user to define partitions
-+        in flash devices, by putting a table in the second erase block
-+        on the device, similar to a partition table. This table gives the 
-+        offsets and lengths of the user defined partitions.
-+
-+        If you need code which can detect and parse these tables, and
-+        register MTD 'partitions' corresponding to each image detected,
-+        enable this option.
-+
-+        You will still need the parsing functions to be called by the driver
-+        for your particular device. It won't happen automatically.
-+
- comment "User Modules And Translation Layers"
- config MTD_CHAR
---- a/drivers/mtd/Makefile
-+++ b/drivers/mtd/Makefile
-@@ -13,6 +13,7 @@ obj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdli
- obj-$(CONFIG_MTD_AFS_PARTS)   += afs.o
- obj-$(CONFIG_MTD_AR7_PARTS)   += ar7part.o
- obj-$(CONFIG_MTD_OF_PARTS)      += ofpart.o
-+obj-$(CONFIG_MTD_MYLOADER_PARTS) += myloader.o
- # 'Users' - code which presents functionality to userspace.
- obj-$(CONFIG_MTD_CHAR)                += mtdchar.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/082-mtd_info_move_forward_decl.patch b/target/linux/generic-2.6/patches-2.6.34/082-mtd_info_move_forward_decl.patch
deleted file mode 100644 (file)
index 13f0a21..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/include/linux/mtd/partitions.h
-+++ b/include/linux/mtd/partitions.h
-@@ -33,6 +33,7 @@
-  * Note: writeable partitions require their size and offset be
-  * erasesize aligned (e.g. use MTDPART_OFS_NEXTBLK).
-  */
-+struct mtd_info;
- struct mtd_partition;
- struct mtd_partition {
-@@ -49,7 +50,6 @@ struct mtd_partition {
- #define MTDPART_SIZ_FULL      (0)
--struct mtd_info;
- int add_mtd_partitions(struct mtd_info *, const struct mtd_partition *, int);
- int del_mtd_partitions(struct mtd_info *);
diff --git a/target/linux/generic-2.6/patches-2.6.34/083-mtd_fix_nand_correct_data_return_code.patch b/target/linux/generic-2.6/patches-2.6.34/083-mtd_fix_nand_correct_data_return_code.patch
deleted file mode 100644 (file)
index f630059..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
---- a/drivers/mtd/nand/nand_ecc.c
-+++ b/drivers/mtd/nand/nand_ecc.c
-@@ -507,8 +507,7 @@ int __nand_correct_data(unsigned char *b
-       if ((bitsperbyte[b0] + bitsperbyte[b1] + bitsperbyte[b2]) == 1)
-               return 1;       /* error in ecc data; no action needed */
--      printk(KERN_ERR "uncorrectable error : ");
--      return -1;
-+      return -EBADMSG;
- }
- EXPORT_SYMBOL(__nand_correct_data);
diff --git a/target/linux/generic-2.6/patches-2.6.34/084-mtd_m25p80_add_pm25lv_flash_support.patch b/target/linux/generic-2.6/patches-2.6.34/084-mtd_m25p80_add_pm25lv_flash_support.patch
deleted file mode 100644 (file)
index 54cc6bb..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -645,6 +645,10 @@ static const struct spi_device_id m25p_i
-       { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
-       { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
-+      /* PMC -- pm25x "blocks" are 32K, sectors are 4K */
-+      { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K) },
-+      { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K) },
-+
-       /* Spansion -- single (large) sector size only, at least
-        * for the chips listed here (without boot sectors).
-        */
diff --git a/target/linux/generic-2.6/patches-2.6.34/085-mtd_m25p80_add_en25pxx_support.patch b/target/linux/generic-2.6/patches-2.6.34/085-mtd_m25p80_add_en25pxx_support.patch
deleted file mode 100644 (file)
index 607430b..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -645,6 +645,10 @@ static const struct spi_device_id m25p_i
-       { "mx25l12805d", INFO(0xc22018, 0, 64 * 1024, 256, 0) },
-       { "mx25l12855e", INFO(0xc22618, 0, 64 * 1024, 256, 0) },
-+      /* EON -- en25pxx */
-+      { "en25p32", INFO(0x1c2016, 0, 64 * 1024,  64, 0) },
-+      { "en25p64", INFO(0x1c2017, 0, 64 * 1024, 128, 0) },
-+
-       /* PMC -- pm25x "blocks" are 32K, sectors are 4K */
-       { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K) },
-       { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K) },
diff --git a/target/linux/generic-2.6/patches-2.6.34/086-mtd_m25p80_add_xxxs33b_support.patch b/target/linux/generic-2.6/patches-2.6.34/086-mtd_m25p80_add_xxxs33b_support.patch
deleted file mode 100644 (file)
index 2f6d899..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -649,6 +649,11 @@ static const struct spi_device_id m25p_i
-       { "en25p32", INFO(0x1c2016, 0, 64 * 1024,  64, 0) },
-       { "en25p64", INFO(0x1c2017, 0, 64 * 1024, 128, 0) },
-+      /* Numonyx -- xxxs33b */
-+      { "160s33b",  INFO(0x898911, 0, 64 * 1024,  64, 0) },
-+      { "320s33b",  INFO(0x898912, 0, 64 * 1024, 128, 0) },
-+      { "640s33b",  INFO(0x898913, 0, 64 * 1024, 256, 0) },
-+
-       /* PMC -- pm25x "blocks" are 32K, sectors are 4K */
-       { "pm25lv512", INFO(0, 0, 32 * 1024, 2, SECT_4K) },
-       { "pm25lv010", INFO(0, 0, 32 * 1024, 4, SECT_4K) },
-@@ -833,11 +838,12 @@ static int __devinit m25p_probe(struct s
-       dev_set_drvdata(&spi->dev, flash);
-       /*
--       * Atmel and SST serial flash tend to power
-+       * Atmel, SST and Intel/Numonyx serial flash tend to power
-        * up with the software protection bits set
-        */
-       if (info->jedec_id >> 16 == 0x1f ||
-+          info->jedec_id >> 16 == 0x89 ||
-           info->jedec_id >> 16 == 0xbf) {
-               write_enable(flash);
-               write_sr(flash, 0);
diff --git a/target/linux/generic-2.6/patches-2.6.34/087-mtd-m25p80-add-w25q32-chip-support.patch b/target/linux/generic-2.6/patches-2.6.34/087-mtd-m25p80-add-w25q32-chip-support.patch
deleted file mode 100644 (file)
index 8d32ec2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/drivers/mtd/devices/m25p80.c
-+++ b/drivers/mtd/devices/m25p80.c
-@@ -706,6 +706,7 @@ static const struct spi_device_id m25p_i
-       { "w25x80", INFO(0xef3014, 0, 64 * 1024,  16, SECT_4K) },
-       { "w25x16", INFO(0xef3015, 0, 64 * 1024,  32, SECT_4K) },
-       { "w25x32", INFO(0xef3016, 0, 64 * 1024,  64, SECT_4K) },
-+      { "w25q32", INFO(0xef4016, 0, 64 * 1024,  64, SECT_4K) },
-       { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) },
-       /* Catalyst / On Semiconductor -- non-JEDEC */
diff --git a/target/linux/generic-2.6/patches-2.6.34/100-netfilter_layer7_2.21.patch b/target/linux/generic-2.6/patches-2.6.34/100-netfilter_layer7_2.21.patch
deleted file mode 100644 (file)
index be7d97f..0000000
+++ /dev/null
@@ -1,2132 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -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 */
---- a/include/net/netfilter/nf_conntrack.h
-+++ b/include/net/netfilter/nf_conntrack.h
-@@ -116,6 +116,22 @@ struct nf_conn {
-       u_int32_t secmark;
- #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: */
-       union nf_conntrack_proto proto;
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -858,6 +858,27 @@ config NETFILTER_XT_MATCH_STATE
-         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)
-+       depends on NF_CT_ACCT
-+      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
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -89,6 +89,7 @@ obj-$(CONFIG_NETFILTER_XT_MATCH_RECENT) 
- 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
---- a/net/netfilter/nf_conntrack_core.c
-+++ b/net/netfilter/nf_conntrack_core.c
-@@ -201,6 +201,14 @@ destroy_conntrack(struct nf_conntrack *n
-        * 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));
---- a/net/netfilter/nf_conntrack_standalone.c
-+++ b/net/netfilter/nf_conntrack_standalone.c
-@@ -171,6 +171,12 @@ static int ct_seq_show(struct seq_file *
-               goto release;
- #endif
-+#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;
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.c
-@@ -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
-+
-+
---- /dev/null
-+++ b/net/netfilter/regexp/regexp.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regmagic.h
-@@ -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
---- /dev/null
-+++ b/net/netfilter/regexp/regsub.c
-@@ -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';
-+}
---- /dev/null
-+++ b/net/netfilter/xt_layer7.c
-@@ -0,0 +1,666 @@
-+/*
-+  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.21");
-+
-+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("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, 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, 28)
-+static bool 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
-+static bool 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
-+                return 0;
-+        }
-+      return 1;
-+}
-+
-+
-+#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();
-+
-+      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/target/linux/generic-2.6/patches-2.6.34/101-netfilter_layer7_pktmatch.patch b/target/linux/generic-2.6/patches-2.6.34/101-netfilter_layer7_pktmatch.patch
deleted file mode 100644 (file)
index f65e301..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
---- a/include/linux/netfilter/xt_layer7.h
-+++ b/include/linux/netfilter/xt_layer7.h
-@@ -8,6 +8,7 @@ struct xt_layer7_info {
-     char protocol[MAX_PROTOCOL_LEN];
-     char pattern[MAX_PATTERN_LEN];
-     u_int8_t invert;
-+    u_int8_t pkt;
- };
- #endif /* _XT_LAYER7_H */
---- a/net/netfilter/xt_layer7.c
-+++ b/net/netfilter/xt_layer7.c
-@@ -314,33 +314,35 @@ static int match_no_append(struct nf_con
- }
- /* 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)
-+static int add_datastr(char *target, int offset, char *app_data, int len)
- {
-       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;
-+      if (!target) 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++) {
-+      for(i = 0; i < maxdatalen-offset-1 && i < len; i++) {
-               if(app_data[i] != '\0') {
-                       /* the kernel version of tolower mungs 'upper ascii' */
--                      master_conntrack->layer7.app_data[length+oldlength] =
-+                      target[length+offset] =
-                               isascii(app_data[i])? 
-                                       tolower(app_data[i]) : app_data[i];
-                       length++;
-               }
-       }
-+      target[length+offset] = '\0';
-+
-+      return length;
-+}
-+
-+/* 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;
--      master_conntrack->layer7.app_data[length+oldlength] = '\0';
--      master_conntrack->layer7.app_data_len = length + oldlength;
-+      length = add_datastr(master_conntrack->layer7.app_data, master_conntrack->layer7.app_data_len, app_data, appdatalen);
-+      master_conntrack->layer7.app_data_len += length;
-       return length;
- }
-@@ -438,7 +440,7 @@ match(const struct sk_buff *skbin,
-       enum ip_conntrack_info master_ctinfo, ctinfo;
-       struct nf_conn *master_conntrack, *conntrack;
--      unsigned char * app_data;
-+      unsigned char *app_data, *tmp_data;
-       unsigned int pattern_result, appdatalen;
-       regexp * comppattern;
-@@ -466,8 +468,8 @@ match(const struct sk_buff *skbin,
-               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) {
-+      if(!info->pkt && (total_acct_packets(master_conntrack) > num_packets ||
-+         master_conntrack->layer7.app_proto)) {
-               pattern_result = match_no_append(conntrack, master_conntrack, 
-                                                ctinfo, master_ctinfo, info);
-@@ -500,6 +502,25 @@ match(const struct sk_buff *skbin,
-       /* the return value gets checked later, when we're ready to use it */
-       comppattern = compile_and_cache(info->pattern, info->protocol);
-+      if (info->pkt) {
-+              tmp_data = kmalloc(maxdatalen, GFP_ATOMIC);
-+              if(!tmp_data){
-+                      if (net_ratelimit())
-+                              printk(KERN_ERR "layer7: out of memory in match, bailing.\n");
-+                      return info->invert;
-+              }
-+
-+              tmp_data[0] = '\0';
-+              add_datastr(tmp_data, 0, app_data, appdatalen);
-+              pattern_result = ((comppattern && regexec(comppattern, tmp_data)) ? 1 : 0);
-+
-+              kfree(tmp_data);
-+              tmp_data = NULL;
-+              spin_unlock_bh(&l7_lock);
-+
-+              return (pattern_result ^ info->invert);
-+      }
-+
-       /* 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){
diff --git a/target/linux/generic-2.6/patches-2.6.34/110-netfilter_match_speedup.patch b/target/linux/generic-2.6/patches-2.6.34/110-netfilter_match_speedup.patch
deleted file mode 100644 (file)
index e99c6db..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
---- a/include/linux/netfilter_ipv4/ip_tables.h
-+++ b/include/linux/netfilter_ipv4/ip_tables.h
-@@ -62,6 +62,7 @@ struct ipt_ip {
- #define IPT_F_FRAG            0x01    /* Set if rule is a fragment rule */
- #define IPT_F_GOTO            0x02    /* Set if jump is a goto */
- #define IPT_F_MASK            0x03    /* All possible flag bits mask. */
-+#define IPT_F_NO_DEF_MATCH    0x80    /* Internal: no default match rules present */
- /* Values for "inv" field in struct ipt_ip. */
- #define IPT_INV_VIA_IN                0x01    /* Invert the sense of IN IFACE. */
---- a/net/ipv4/netfilter/ip_tables.c
-+++ b/net/ipv4/netfilter/ip_tables.c
-@@ -88,6 +88,9 @@ ip_packet_match(const struct iphdr *ip,
- #define FWINV(bool, invflg) ((bool) ^ !!(ipinfo->invflags & (invflg)))
-+      if (ipinfo->flags & IPT_F_NO_DEF_MATCH)
-+              return true;
-+
-       if (FWINV((ip->saddr&ipinfo->smsk.s_addr) != ipinfo->src.s_addr,
-                 IPT_INV_SRCIP) ||
-           FWINV((ip->daddr&ipinfo->dmsk.s_addr) != ipinfo->dst.s_addr,
-@@ -138,13 +141,35 @@ ip_packet_match(const struct iphdr *ip,
-               return false;
-       }
-+#undef FWINV
-       return true;
- }
- static bool
--ip_checkentry(const struct ipt_ip *ip)
-+ip_checkentry(struct ipt_ip *ip)
- {
--      if (ip->flags & ~IPT_F_MASK) {
-+#define FWINV(bool, invflg) ((bool) || (ip->invflags & (invflg)))
-+
-+      if (FWINV(ip->smsk.s_addr, IPT_INV_SRCIP) ||
-+              FWINV(ip->dmsk.s_addr, IPT_INV_DSTIP))
-+              goto has_match_rules;
-+
-+      if (FWINV(!!((const unsigned long *)ip->iniface_mask)[0],
-+              IPT_INV_VIA_IN) ||
-+          FWINV(!!((const unsigned long *)ip->outiface_mask)[0],
-+              IPT_INV_VIA_OUT))
-+              goto has_match_rules;
-+
-+      if (FWINV(ip->proto, IPT_INV_PROTO))
-+              goto has_match_rules;
-+
-+      if (FWINV(ip->flags&IPT_F_FRAG, IPT_INV_FRAG))
-+              goto has_match_rules;
-+
-+      ip->flags |= IPT_F_NO_DEF_MATCH;
-+
-+has_match_rules:
-+      if (ip->flags & ~(IPT_F_MASK|IPT_F_NO_DEF_MATCH)) {
-               duprintf("Unknown flag bits set: %08X\n",
-                        ip->flags & ~IPT_F_MASK);
-               return false;
-@@ -154,6 +179,8 @@ ip_checkentry(const struct ipt_ip *ip)
-                        ip->invflags & ~IPT_INV_MASK);
-               return false;
-       }
-+
-+#undef FWINV
-       return true;
- }
-@@ -196,7 +223,6 @@ static inline bool unconditional(const s
-       static const struct ipt_ip uncond;
-       return memcmp(ip, &uncond, sizeof(uncond)) == 0;
--#undef FWINV
- }
- #if defined(CONFIG_NETFILTER_XT_TARGET_TRACE) || \
-@@ -321,8 +347,28 @@ ipt_do_table(struct sk_buff *skb,
-       struct xt_match_param mtpar;
-       struct xt_target_param tgpar;
--      /* Initialization */
-       ip = ip_hdr(skb);
-+
-+      IP_NF_ASSERT(table->valid_hooks & (1 << hook));
-+      xt_info_rdlock_bh();
-+      private = table->private;
-+      table_base = private->entries[smp_processor_id()];
-+      e = get_entry(table_base, private->hook_entry[hook]);
-+
-+      if (e->target_offset <= sizeof(struct ipt_entry) &&
-+              (e->ip.flags & IPT_F_NO_DEF_MATCH)) {
-+                      struct ipt_entry_target *t = ipt_get_target(e);
-+                      if (!t->u.kernel.target->target) {
-+                              int v = ((struct ipt_standard_target *)t)->verdict;
-+                              if ((v < 0) && (v != IPT_RETURN)) {
-+                                      ADD_COUNTER(e->counters, ntohs(ip->tot_len), 1);
-+                                      xt_info_rdunlock_bh();
-+                                      return (unsigned)(-v) - 1;
-+                              }
-+                      }
-+      }
-+
-+      /* Initialization */
-       indev = in ? in->name : nulldevname;
-       outdev = out ? out->name : nulldevname;
-       /* We handle fragments by dealing with the first fragment as
-@@ -339,13 +385,6 @@ ipt_do_table(struct sk_buff *skb,
-       mtpar.family  = tgpar.family = NFPROTO_IPV4;
-       mtpar.hooknum = tgpar.hooknum = hook;
--      IP_NF_ASSERT(table->valid_hooks & (1 << hook));
--      xt_info_rdlock_bh();
--      private = table->private;
--      table_base = private->entries[smp_processor_id()];
--
--      e = get_entry(table_base, private->hook_entry[hook]);
--
-       /* For return from builtin chain */
-       back = get_entry(table_base, private->underflow[hook]);
-@@ -992,6 +1031,7 @@ copy_entries_to_user(unsigned int total_
-               unsigned int i;
-               const struct ipt_entry_match *m;
-               const struct ipt_entry_target *t;
-+              u8 flags;
-               e = (struct ipt_entry *)(loc_cpu_entry + off);
-               if (copy_to_user(userptr + off
-@@ -1002,6 +1042,14 @@ copy_entries_to_user(unsigned int total_
-                       goto free_counters;
-               }
-+              flags = e->ip.flags & ~IPT_F_NO_DEF_MATCH;
-+              if (copy_to_user(userptr + off
-+                               + offsetof(struct ipt_entry, ip.flags),
-+                               &flags, sizeof(flags)) != 0) {
-+                      ret = -EFAULT;
-+                      goto free_counters;
-+              }
-+
-               for (i = sizeof(struct ipt_entry);
-                    i < e->target_offset;
-                    i += m->u.match_size) {
diff --git a/target/linux/generic-2.6/patches-2.6.34/150-netfilter_imq.patch b/target/linux/generic-2.6/patches-2.6.34/150-netfilter_imq.patch
deleted file mode 100644 (file)
index 510ce70..0000000
+++ /dev/null
@@ -1,1336 +0,0 @@
---- /dev/null
-+++ b/drivers/net/imq.c
-@@ -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");
-+
---- a/drivers/net/Kconfig
-+++ b/drivers/net/Kconfig
-@@ -109,6 +109,129 @@ config EQUALIZER
-         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
---- a/drivers/net/Makefile
-+++ b/drivers/net/Makefile
-@@ -165,6 +165,7 @@ 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
---- /dev/null
-+++ b/include/linux/imq.h
-@@ -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 */
-+
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -1168,6 +1168,7 @@ extern int               dev_alloc_name(struct net_de
- 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_queue(struct net_device *dev,
---- /dev/null
-+++ b/include/linux/netfilter/xt_IMQ.h
-@@ -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 */
-+
---- /dev/null
-+++ b/include/linux/netfilter_ipv4/ipt_IMQ.h
-@@ -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 */
-+
---- /dev/null
-+++ b/include/linux/netfilter_ipv6/ip6t_IMQ.h
-@@ -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 */
-+
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -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
-@@ -327,6 +330,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_dst;
- #ifdef CONFIG_XFRM
-@@ -363,6 +369,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
-@@ -384,6 +393,10 @@
-       /* 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
-@@ -432,6 +445,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);
-@@ -1976,6 +1995,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);
---- a/include/net/netfilter/nf_queue.h
-+++ b/include/net/netfilter/nf_queue.h
-@@ -13,6 +13,12 @@ struct nf_queue_entry {
-       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 @@ extern int nf_unregister_queue_handler(u
-                                      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 */
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -97,6 +97,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>
-@@ -1810,7 +1813,11 @@ int dev_hard_start_xmit(struct sk_buff *
-       int rc = NETDEV_TX_OK;
-       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)) {
-@@ -1912,8 +1919,7 @@ static inline u16 dev_cap_txqueue(struct
-       return queue_index;
- }
--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)
- {
-       u16 queue_index;
-       struct sock *sk = skb->sk;
-@@ -1939,6 +1945,7 @@ static struct netdev_queue *dev_pick_tx(
-       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,
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -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 @@ static int sock_pipe_buf_steal(struct pi
-       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 const struct pipe_buf_operations sock_pipe_buf_ops = {
-@@ -398,6 +478,26 @@ static void skb_release_head_state(struc
-               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);
-@@ -538,6 +638,9 @@ static void __copy_skb_header(struct sk_
-       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;
-@@ -2779,6 +2882,13 @@ void __init skb_init(void)
-                                               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
- }
- /**
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -396,6 +396,18 @@ config NETFILTER_XT_TARGET_LED
-         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
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -46,6 +46,7 @@ obj-$(CONFIG_NETFILTER_XT_TARGET_CONNMAR
- 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
---- a/net/netfilter/nf_queue.c
-+++ b/net/netfilter/nf_queue.c
-@@ -20,6 +20,26 @@ static const struct nf_queue_handler *qu
- 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 @@ void nf_unregister_queue_handlers(const 
- }
- 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 @@ static void nf_queue_entry_release_refs(
-       /* 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 @@ static int __nf_queue(struct sk_buff *sk
- #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 @@ static int __nf_queue(struct sk_buff *sk
-               .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 @@ static int __nf_queue(struct sk_buff *sk
-       }
- #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) {
---- /dev/null
-+++ b/net/netfilter/xt_IMQ.c
-@@ -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/target/linux/generic-2.6/patches-2.6.34/180-netfilter_depends.patch b/target/linux/generic-2.6/patches-2.6.34/180-netfilter_depends.patch
deleted file mode 100644 (file)
index fc00d15..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -160,7 +160,6 @@ config NF_CONNTRACK_FTP
- config NF_CONNTRACK_H323
-       tristate "H.323 protocol support"
--      depends on (IPV6 || IPV6=n)
-       depends on NETFILTER_ADVANCED
-       help
-         H.323 is a VoIP signalling protocol from ITU-T. As one of the most
-@@ -505,7 +504,6 @@ config NETFILTER_XT_TARGET_SECMARK
- config NETFILTER_XT_TARGET_TCPMSS
-       tristate '"TCPMSS" target support'
--      depends on (IPV6 || IPV6=n)
-       default m if NETFILTER_ADVANCED=n
-       ---help---
-         This option adds a `TCPMSS' target, which allows you to alter the
diff --git a/target/linux/generic-2.6/patches-2.6.34/190-netfilter_rtsp.patch b/target/linux/generic-2.6/patches-2.6.34/190-netfilter_rtsp.patch
deleted file mode 100644 (file)
index 29e8208..0000000
+++ /dev/null
@@ -1,1366 +0,0 @@
---- /dev/null
-+++ b/include/linux/netfilter/nf_conntrack_rtsp.h
-@@ -0,0 +1,63 @@
-+/*
-+ * RTSP extension for IP connection tracking.
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.h
-+ *
-+ *      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.
-+ */
-+#ifndef _IP_CONNTRACK_RTSP_H
-+#define _IP_CONNTRACK_RTSP_H
-+
-+//#define IP_NF_RTSP_DEBUG 1
-+#define IP_NF_RTSP_VERSION "0.6.21"
-+
-+#ifdef __KERNEL__
-+/* port block types */
-+typedef enum {
-+    pb_single,  /* client_port=x */
-+    pb_range,   /* client_port=x-y */
-+    pb_discon   /* client_port=x/y (rtspbis) */
-+} portblock_t;
-+
-+/* We record seq number and length of rtsp headers here, all in host order. */
-+
-+/*
-+ * This structure is per expected connection.  It is a member of struct
-+ * ip_conntrack_expect.  The TCP SEQ for the conntrack expect is stored
-+ * there and we are expected to only store the length of the data which
-+ * needs replaced.  If a packet contains multiple RTSP messages, we create
-+ * one expected connection per message.
-+ *
-+ * We use these variables to mark the entire header block.  This may seem
-+ * like overkill, but the nature of RTSP requires it.  A header may appear
-+ * multiple times in a message.  We must treat two Transport headers the
-+ * same as one Transport header with two entries.
-+ */
-+struct ip_ct_rtsp_expect
-+{
-+    u_int32_t   len;        /* length of header block */
-+    portblock_t pbtype;     /* Type of port block that was requested */
-+    u_int16_t   loport;     /* Port that was requested, low or first */
-+    u_int16_t   hiport;     /* Port that was requested, high or second */
-+#if 0
-+    uint        method;     /* RTSP method */
-+    uint        cseq;       /* CSeq from request */
-+#endif
-+};
-+
-+extern unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,
-+                               struct ip_ct_rtsp_expect *prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+
-+extern void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+#define RTSP_PORT   554
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _IP_CONNTRACK_RTSP_H */
---- /dev/null
-+++ b/include/linux/netfilter_helpers.h
-@@ -0,0 +1,133 @@
-+/*
-+ * Helpers for netfiler modules.  This file provides implementations for basic
-+ * functions such as strncasecmp(), etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_STRNCASECMP        nf_strncasecmp()
-+ *   NF_NEED_STRTOU16           nf_strtou16()
-+ *   NF_NEED_STRTOU32           nf_strtou32()
-+ */
-+#ifndef _NETFILTER_HELPERS_H
-+#define _NETFILTER_HELPERS_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+#define iseol(c) ( (c) == '\r' || (c) == '\n' )
-+
-+/*
-+ * The standard strncasecmp()
-+ */
-+#ifdef NF_NEED_STRNCASECMP
-+static int
-+nf_strncasecmp(const char* s1, const char* s2, u_int32_t len)
-+{
-+    if (s1 == NULL || s2 == NULL)
-+    {
-+        if (s1 == NULL && s2 == NULL)
-+        {
-+            return 0;
-+        }
-+        return (s1 == NULL) ? -1 : 1;
-+    }
-+    while (len > 0 && tolower(*s1) == tolower(*s2))
-+    {
-+        len--;
-+        s1++;
-+        s2++;
-+    }
-+    return ( (len == 0) ? 0 : (tolower(*s1) - tolower(*s2)) );
-+}
-+#endif /* NF_NEED_STRNCASECMP */
-+
-+/*
-+ * Parse a string containing a 16-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU16
-+static int
-+nf_strtou16(const char* pbuf, u_int16_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (isdigit(pbuf[n]))
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU16 */
-+
-+/*
-+ * Parse a string containing a 32-bit unsigned integer.
-+ * Returns the number of chars used, or zero if no number is found.
-+ */
-+#ifdef NF_NEED_STRTOU32
-+static int
-+nf_strtou32(const char* pbuf, u_int32_t* pval)
-+{
-+    int n = 0;
-+
-+    *pval = 0;
-+    while (pbuf[n] >= '0' && pbuf[n] <= '9')
-+    {
-+        *pval = (*pval * 10) + (pbuf[n] - '0');
-+        n++;
-+    }
-+
-+    return n;
-+}
-+#endif /* NF_NEED_STRTOU32 */
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.
-+ */
-+#ifdef NF_NEED_NEXTLINE
-+static int
-+nf_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    while (p[off] != '\n')
-+    {
-+        if (len-off <= 1)
-+        {
-+            return 0;
-+        }
-+
-+        physlen++;
-+        off++;
-+    }
-+
-+    /* if we saw a crlf, physlen needs adjusted */
-+    if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+    {
-+        physlen--;
-+    }
-+
-+    /* advance past the newline */
-+    off++;
-+
-+    *plineoff = *poff;
-+    *plinelen = physlen;
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_HELPERS_H */
---- /dev/null
-+++ b/include/linux/netfilter_mime.h
-@@ -0,0 +1,89 @@
-+/*
-+ * MIME functions for netfilter modules.  This file provides implementations
-+ * for basic MIME parsing.  MIME headers are used in many protocols, such as
-+ * HTTP, RTSP, SIP, etc.
-+ *
-+ * gcc will warn for defined but unused functions, so we only include the
-+ * functions requested.  The following macros are used:
-+ *   NF_NEED_MIME_NEXTLINE      nf_mime_nextline()
-+ */
-+#ifndef _NETFILTER_MIME_H
-+#define _NETFILTER_MIME_H
-+
-+/* Only include these functions for kernel code. */
-+#ifdef __KERNEL__
-+
-+#include <linux/ctype.h>
-+
-+/*
-+ * Given a buffer and length, advance to the next line and mark the current
-+ * line.  If the current line is empty, *plinelen will be set to zero.  If
-+ * not, it will be set to the actual line length (including CRLF).
-+ *
-+ * 'line' in this context means logical line (includes LWS continuations).
-+ * Returns 1 on success, 0 on failure.
-+ */
-+#ifdef NF_NEED_MIME_NEXTLINE
-+static int
-+nf_mime_nextline(char* p, uint len, uint* poff, uint* plineoff, uint* plinelen)
-+{
-+    uint    off = *poff;
-+    uint    physlen = 0;
-+    int     is_first_line = 1;
-+
-+    if (off >= len)
-+    {
-+        return 0;
-+    }
-+
-+    do
-+    {
-+        while (p[off] != '\n')
-+        {
-+            if (len-off <= 1)
-+            {
-+                return 0;
-+            }
-+
-+            physlen++;
-+            off++;
-+        }
-+
-+        /* if we saw a crlf, physlen needs adjusted */
-+        if (physlen > 0 && p[off] == '\n' && p[off-1] == '\r')
-+        {
-+            physlen--;
-+        }
-+
-+        /* advance past the newline */
-+        off++;
-+
-+        /* check for an empty line */
-+        if (physlen == 0)
-+        {
-+            break;
-+        }
-+
-+        /* check for colon on the first physical line */
-+        if (is_first_line)
-+        {
-+            is_first_line = 0;
-+            if (memchr(p+(*poff), ':', physlen) == NULL)
-+            {
-+                return 0;
-+            }
-+        }
-+    }
-+    while (p[off] == ' ' || p[off] == '\t');
-+
-+    *plineoff = *poff;
-+    *plinelen = (physlen == 0) ? 0 : (off - *poff);
-+    *poff = off;
-+
-+    return 1;
-+}
-+#endif /* NF_NEED_MIME_NEXTLINE */
-+
-+#endif /* __KERNEL__ */
-+
-+#endif /* _NETFILTER_MIME_H */
---- a/net/ipv4/netfilter/Makefile
-+++ b/net/ipv4/netfilter/Makefile
-@@ -26,6 +26,7 @@ obj-$(CONFIG_NF_NAT_AMANDA) += nf_nat_am
- obj-$(CONFIG_NF_NAT_FTP) += nf_nat_ftp.o
- obj-$(CONFIG_NF_NAT_H323) += nf_nat_h323.o
- obj-$(CONFIG_NF_NAT_IRC) += nf_nat_irc.o
-+obj-$(CONFIG_NF_NAT_RTSP) += nf_nat_rtsp.o
- obj-$(CONFIG_NF_NAT_PPTP) += nf_nat_pptp.o
- obj-$(CONFIG_NF_NAT_SIP) += nf_nat_sip.o
- obj-$(CONFIG_NF_NAT_SNMP_BASIC) += nf_nat_snmp_basic.o
---- a/net/netfilter/Kconfig
-+++ b/net/netfilter/Kconfig
-@@ -267,6 +267,16 @@ config NF_CONNTRACK_TFTP
-         To compile it as a module, choose M here.  If unsure, say N.
-+config NF_CONNTRACK_RTSP
-+      tristate "RTSP protocol support"
-+      depends on NF_CONNTRACK
-+      help
-+              Support the RTSP protocol.  This allows UDP transports to be setup
-+              properly, including RTP and RDT.
-+
-+              If you want to compile it as a module, say 'M' here and read
-+              Documentation/modules.txt.  If unsure, say 'Y'.
-+
- config NF_CT_NETLINK
-       tristate 'Connection tracking netlink interface'
-       select NETFILTER_NETLINK
---- a/net/netfilter/Makefile
-+++ b/net/netfilter/Makefile
-@@ -33,6 +33,7 @@ obj-$(CONFIG_NF_CONNTRACK_PPTP) += nf_co
- obj-$(CONFIG_NF_CONNTRACK_SANE) += nf_conntrack_sane.o
- obj-$(CONFIG_NF_CONNTRACK_SIP) += nf_conntrack_sip.o
- obj-$(CONFIG_NF_CONNTRACK_TFTP) += nf_conntrack_tftp.o
-+obj-$(CONFIG_NF_CONNTRACK_RTSP) += nf_conntrack_rtsp.o
- # transparent proxy support
- obj-$(CONFIG_NETFILTER_TPROXY) += nf_tproxy_core.o
---- a/net/ipv4/netfilter/Kconfig
-+++ b/net/ipv4/netfilter/Kconfig
-@@ -257,6 +257,11 @@ config NF_NAT_IRC
-       depends on NF_CONNTRACK && NF_NAT
-       default NF_NAT && NF_CONNTRACK_IRC
-+config NF_NAT_RTSP
-+      tristate
-+      depends on IP_NF_IPTABLES && NF_CONNTRACK && NF_NAT
-+      default NF_NAT && NF_CONNTRACK_RTSP
-+
- config NF_NAT_TFTP
-       tristate
-       depends on NF_CONNTRACK && NF_NAT
---- /dev/null
-+++ b/net/netfilter/nf_conntrack_rtsp.c
-@@ -0,0 +1,517 @@
-+/*
-+ * RTSP extension for IP connection tracking
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_conntrack_irc.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.
-+ *
-+ * Module load syntax:
-+ *   insmod nf_conntrack_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                              max_outstanding=n setup_timeout=secs
-+ *
-+ * If no ports are specified, the default will be port 554.
-+ *
-+ * With max_outstanding you can define the maximum number of not yet
-+ * answered SETUP requests per RTSP session (default 8).
-+ * With setup_timeout you can specify how long the system waits for
-+ * an expected data channel (default 300 seconds).
-+ *
-+ * 2005-02-13: Harald Welte <laforge at netfilter.org>
-+ *    - port to 2.6
-+ *    - update to recent post-2.6.11 api changes
-+ * 2006-09-14: Steven Van Acker <deepstar at singularity.be>
-+ *      - removed calls to NAT code from conntrack helper: NAT no longer needed to use rtsp-conntrack
-+ * 2007-04-18: Michael Guntsche <mike at it-loops.com>
-+ *                    - Port to new NF API
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/netfilter.h>
-+#include <linux/ip.h>
-+#include <linux/inet.h>
-+#include <net/tcp.h>
-+
-+#include <net/netfilter/nf_conntrack.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+#include <net/netfilter/nf_conntrack_helper.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#define NF_NEED_STRTOU32
-+#define NF_NEED_NEXTLINE
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#include <linux/ctype.h>
-+#define MAX_SIMUL_SETUP 8 /* XXX: use max_outstanding */
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS 8
-+static int ports[MAX_PORTS];
-+static int num_ports = 0;
-+static int max_outstanding = 8;
-+static unsigned int setup_timeout = 300;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP connection tracking module");
-+MODULE_LICENSE("GPL");
-+module_param_array(ports, int, &num_ports, 0400);
-+MODULE_PARM_DESC(ports, "port numbers of RTSP servers");
-+module_param(max_outstanding, int, 0400);
-+MODULE_PARM_DESC(max_outstanding, "max number of outstanding SETUP requests per RTSP session");
-+module_param(setup_timeout, int, 0400);
-+MODULE_PARM_DESC(setup_timeout, "timeout on for unestablished data channels");
-+
-+static char *rtsp_buffer;
-+static DEFINE_SPINLOCK(rtsp_buffer_lock);
-+
-+unsigned int (*nf_nat_rtsp_hook)(struct sk_buff *skb,
-+                               enum ip_conntrack_info ctinfo,
-+                               unsigned int matchoff, unsigned int matchlen,struct ip_ct_rtsp_expect* prtspexp,
-+                               struct nf_conntrack_expect *exp);
-+void (*nf_nat_rtsp_hook_expectfn)(struct nf_conn *ct, struct nf_conntrack_expect *exp);
-+
-+EXPORT_SYMBOL_GPL(nf_nat_rtsp_hook);
-+
-+/*
-+ * Max mappings we will allow for one RTSP connection (for RTP, the number
-+ * of allocated ports is twice this value).  Note that SMIL burns a lot of
-+ * ports so keep this reasonably high.  If this is too low, you will see a
-+ * lot of "no free client map entries" messages.
-+ */
-+#define MAX_PORT_MAPS 16
-+
-+/*** default port list was here in the masq code: 554, 3030, 4040 ***/
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*
-+ * Parse an RTSP packet.
-+ *
-+ * Returns zero if parsing failed.
-+ *
-+ * Parameters:
-+ *  IN      ptcp        tcp data pointer
-+ *  IN      tcplen      tcp data len
-+ *  IN/OUT  ptcpoff     points to current tcp offset
-+ *  OUT     phdrsoff    set to offset of rtsp headers
-+ *  OUT     phdrslen    set to length of rtsp headers
-+ *  OUT     pcseqoff    set to offset of CSeq header
-+ *  OUT     pcseqlen    set to length of CSeq header
-+ */
-+static int
-+rtsp_parse_message(char* ptcp, uint tcplen, uint* ptcpoff,
-+                   uint* phdrsoff, uint* phdrslen,
-+                   uint* pcseqoff, uint* pcseqlen,
-+                   uint* transoff, uint* translen)
-+{
-+      uint    entitylen = 0;
-+      uint    lineoff;
-+      uint    linelen;
-+
-+      if (!nf_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen))
-+              return 0;
-+
-+      *phdrsoff = *ptcpoff;
-+      while (nf_mime_nextline(ptcp, tcplen, ptcpoff, &lineoff, &linelen)) {
-+              if (linelen == 0) {
-+                      if (entitylen > 0)
-+                              *ptcpoff += min(entitylen, tcplen - *ptcpoff);
-+                      break;
-+              }
-+              if (lineoff+linelen > tcplen) {
-+                      INFOP("!! overrun !!\n");
-+                      break;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "CSeq:", 5) == 0) {
-+                      *pcseqoff = lineoff;
-+                      *pcseqlen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0) {
-+                      *transoff = lineoff;
-+                      *translen = linelen;
-+              }
-+
-+              if (nf_strncasecmp(ptcp+lineoff, "Content-Length:", 15) == 0) {
-+                      uint off = lineoff+15;
-+                      SKIP_WSPACE(ptcp+lineoff, linelen, off);
-+                      nf_strtou32(ptcp+off, &entitylen);
-+              }
-+      }
-+      *phdrslen = (*ptcpoff) - (*phdrsoff);
-+
-+      return 1;
-+}
-+
-+/*
-+ * Find lo/hi client ports (if any) in transport header
-+ * In:
-+ *   ptcp, tcplen = packet
-+ *   tranoff, tranlen = buffer to search
-+ *
-+ * Out:
-+ *   pport_lo, pport_hi = lo/hi ports (host endian)
-+ *
-+ * Returns nonzero if any client ports found
-+ *
-+ * Note: it is valid (and expected) for the client to request multiple
-+ * transports, so we need to parse the entire line.
-+ */
-+static int
-+rtsp_parse_transport(char* ptran, uint tranlen,
-+                     struct ip_ct_rtsp_expect* prtspexp)
-+{
-+      int     rc = 0;
-+      uint    off = 0;
-+
-+      if (tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+          nf_strncasecmp(ptran, "Transport:", 10) != 0) {
-+              INFOP("sanity check failed\n");
-+              return 0;
-+      }
-+
-+      DEBUGP("tran='%.*s'\n", (int)tranlen, ptran);
-+      off += 10;
-+      SKIP_WSPACE(ptran, tranlen, off);
-+
-+      /* Transport: tran;field;field=val,tran;field;field=val,... */
-+      while (off < tranlen) {
-+              const char* pparamend;
-+              uint        nextparamoff;
-+
-+              pparamend = memchr(ptran+off, ',', tranlen-off);
-+              pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+              nextparamoff = pparamend-ptran;
-+
-+              while (off < nextparamoff) {
-+                      const char* pfieldend;
-+                      uint        nextfieldoff;
-+
-+                      pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+                      nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+                      if (strncmp(ptran+off, "client_port=", 12) == 0) {
-+                              u_int16_t   port;
-+                              uint        numlen;
-+
-+                              off += 12;
-+                              numlen = nf_strtou16(ptran+off, &port);
-+                              off += numlen;
-+                              if (prtspexp->loport != 0 && prtspexp->loport != port)
-+                                      DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                              else {
-+                                      DEBUGP("lo port found : %hu\n", port);
-+                                      prtspexp->loport = prtspexp->hiport = port;
-+                                      if (ptran[off] == '-') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_range;
-+                                              prtspexp->hiport = port;
-+
-+                                              // If we have a range, assume rtp:
-+                                              // loport must be even, hiport must be loport+1
-+                                              if ((prtspexp->loport & 0x0001) != 0 ||
-+                                                  prtspexp->hiport != prtspexp->loport+1) {
-+                                                      DEBUGP("incorrect range: %hu-%hu, correcting\n",
-+                                                             prtspexp->loport, prtspexp->hiport);
-+                                                      prtspexp->loport &= 0xfffe;
-+                                                      prtspexp->hiport = prtspexp->loport+1;
-+                                              }
-+                                      } else if (ptran[off] == '/') {
-+                                              off++;
-+                                              numlen = nf_strtou16(ptran+off, &port);
-+                                              off += numlen;
-+                                              prtspexp->pbtype = pb_discon;
-+                                              prtspexp->hiport = port;
-+                                      }
-+                                      rc = 1;
-+                              }
-+                      }
-+
-+                      /*
-+                       * Note we don't look for the destination parameter here.
-+                       * If we are using NAT, the NAT module will handle it.  If not,
-+                       * and the client is sending packets elsewhere, the expectation
-+                       * will quietly time out.
-+                       */
-+
-+                      off = nextfieldoff;
-+              }
-+
-+              off = nextparamoff;
-+      }
-+
-+      return rc;
-+}
-+
-+void expected(struct nf_conn *ct, struct nf_conntrack_expect *exp)
-+{
-+    if(nf_nat_rtsp_hook_expectfn) {
-+        nf_nat_rtsp_hook_expectfn(ct,exp);
-+    }
-+}
-+
-+/*** conntrack functions ***/
-+
-+/* outbound packet: client->server */
-+
-+static inline int
-+help_out(struct sk_buff *skb, unsigned char *rb_ptr, unsigned int datalen,
-+                struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct ip_ct_rtsp_expect expinfo;
-+
-+      int dir = CTINFO2DIR(ctinfo);   /* = IP_CT_DIR_ORIGINAL */
-+      //struct  tcphdr* tcph = (void*)iph + iph->ihl * 4;
-+      //uint    tcplen = pktlen - iph->ihl * 4;
-+      char*   pdata = rb_ptr;
-+      //uint    datalen = tcplen - tcph->doff * 4;
-+      uint    dataoff = 0;
-+      int ret = NF_ACCEPT;
-+
-+      struct nf_conntrack_expect *exp;
-+
-+      __be16 be_loport;
-+
-+      memset(&expinfo, 0, sizeof(expinfo));
-+
-+      while (dataoff < datalen) {
-+              uint    cmdoff = dataoff;
-+              uint    hdrsoff = 0;
-+              uint    hdrslen = 0;
-+              uint    cseqoff = 0;
-+              uint    cseqlen = 0;
-+              uint    transoff = 0;
-+              uint    translen = 0;
-+              uint    off;
-+
-+              if (!rtsp_parse_message(pdata, datalen, &dataoff,
-+                                      &hdrsoff, &hdrslen,
-+                                      &cseqoff, &cseqlen,
-+                                      &transoff, &translen))
-+                      break;      /* not a valid message */
-+
-+              if (strncmp(pdata+cmdoff, "SETUP ", 6) != 0)
-+                      continue;   /* not a SETUP message */
-+              DEBUGP("found a setup message\n");
-+
-+              off = 0;
-+              if(translen) {
-+                      rtsp_parse_transport(pdata+transoff, translen, &expinfo);
-+              }
-+
-+              if (expinfo.loport == 0) {
-+                      DEBUGP("no udp transports found\n");
-+                      continue;   /* no udp transports found */
-+              }
-+
-+              DEBUGP("udp transport found, ports=(%d,%hu,%hu)\n",
-+                     (int)expinfo.pbtype, expinfo.loport, expinfo.hiport);
-+
-+              exp = nf_ct_expect_alloc(ct);
-+              if (!exp) {
-+                      ret = NF_DROP;
-+                      goto out;
-+              }
-+
-+              be_loport = htons(expinfo.loport);
-+
-+              nf_ct_expect_init(exp, NF_CT_EXPECT_CLASS_DEFAULT,
-+                      ct->tuplehash[!dir].tuple.src.l3num,
-+                      &ct->tuplehash[!dir].tuple.src.u3, &ct->tuplehash[!dir].tuple.dst.u3,
-+                      IPPROTO_UDP, NULL, &be_loport);
-+
-+              exp->master = ct;
-+
-+              exp->expectfn = expected;
-+              exp->flags = 0;
-+
-+              if (expinfo.pbtype == pb_range) {
-+                      DEBUGP("Changing expectation mask to handle multiple ports\n");
-+                      exp->mask.src.u.udp.port  = 0xfffe;
-+              }
-+
-+              DEBUGP("expect_related %u.%u.%u.%u:%u-%u.%u.%u.%u:%u\n",
-+                     NIPQUAD(exp->tuple.src.u3.ip),
-+                     ntohs(exp->tuple.src.u.udp.port),
-+                     NIPQUAD(exp->tuple.dst.u3.ip),
-+                     ntohs(exp->tuple.dst.u.udp.port));
-+
-+              if (nf_nat_rtsp_hook)
-+                      /* pass the request off to the nat helper */
-+                      ret = nf_nat_rtsp_hook(skb, ctinfo, hdrsoff, hdrslen, &expinfo, exp);
-+              else if (nf_ct_expect_related(exp) != 0) {
-+                      INFOP("nf_ct_expect_related failed\n");
-+                      ret  = NF_DROP;
-+              }
-+              nf_ct_expect_put(exp);
-+              goto out;
-+      }
-+out:
-+
-+      return ret;
-+}
-+
-+
-+static inline int
-+help_in(struct sk_buff *skb, size_t pktlen,
-+ struct nf_conn* ct, enum ip_conntrack_info ctinfo)
-+{
-+ return NF_ACCEPT;
-+}
-+
-+static int help(struct sk_buff *skb, unsigned int protoff,
-+              struct nf_conn *ct, enum ip_conntrack_info ctinfo)
-+{
-+      struct tcphdr _tcph, *th;
-+      unsigned int dataoff, datalen;
-+      char *rb_ptr;
-+      int ret = NF_DROP;
-+
-+      /* Until there's been traffic both ways, don't look in packets. */
-+      if (ctinfo != IP_CT_ESTABLISHED &&
-+          ctinfo != IP_CT_ESTABLISHED + IP_CT_IS_REPLY) {
-+              DEBUGP("conntrackinfo = %u\n", ctinfo);
-+              return NF_ACCEPT;
-+      }
-+
-+      /* Not whole TCP header? */
-+      th = skb_header_pointer(skb, protoff, sizeof(_tcph), &_tcph);
-+
-+      if (!th)
-+              return NF_ACCEPT;
-+
-+      /* No data ? */
-+      dataoff = protoff + th->doff*4;
-+      datalen = skb->len - dataoff;
-+      if (dataoff >= skb->len)
-+              return NF_ACCEPT;
-+
-+      spin_lock_bh(&rtsp_buffer_lock);
-+      rb_ptr = skb_header_pointer(skb, dataoff,
-+                                  skb->len - dataoff, rtsp_buffer);
-+      BUG_ON(rb_ptr == NULL);
-+
-+#if 0
-+      /* Checksum invalid?  Ignore. */
-+      /* FIXME: Source route IP option packets --RR */
-+      if (tcp_v4_check(tcph, tcplen, iph->saddr, iph->daddr,
-+                       csum_partial((char*)tcph, tcplen, 0)))
-+      {
-+              DEBUGP("bad csum: %p %u %u.%u.%u.%u %u.%u.%u.%u\n",
-+                     tcph, tcplen, NIPQUAD(iph->saddr), NIPQUAD(iph->daddr));
-+              return NF_ACCEPT;
-+      }
-+#endif
-+
-+      switch (CTINFO2DIR(ctinfo)) {
-+      case IP_CT_DIR_ORIGINAL:
-+              ret = help_out(skb, rb_ptr, datalen, ct, ctinfo);
-+              break;
-+      case IP_CT_DIR_REPLY:
-+              DEBUGP("IP_CT_DIR_REPLY\n");
-+              /* inbound packet: server->client */
-+              ret = NF_ACCEPT;
-+              break;
-+      }
-+
-+      spin_unlock_bh(&rtsp_buffer_lock);
-+
-+      return ret;
-+}
-+
-+static struct nf_conntrack_helper rtsp_helpers[MAX_PORTS];
-+static char rtsp_names[MAX_PORTS][10];
-+static struct nf_conntrack_expect_policy rtsp_expect_policy;
-+
-+/* This function is intentionally _NOT_ defined as __exit */
-+static void
-+fini(void)
-+{
-+      int i;
-+      for (i = 0; i < num_ports; i++) {
-+              DEBUGP("unregistering port %d\n", ports[i]);
-+              nf_conntrack_helper_unregister(&rtsp_helpers[i]);
-+      }
-+      kfree(rtsp_buffer);
-+}
-+
-+static int __init
-+init(void)
-+{
-+      int i, ret;
-+      struct nf_conntrack_helper *hlpr;
-+      char *tmpname;
-+
-+      printk("nf_conntrack_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      if (max_outstanding < 1) {
-+              printk("nf_conntrack_rtsp: max_outstanding must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+      if (setup_timeout < 0) {
-+              printk("nf_conntrack_rtsp: setup_timeout must be a positive integer\n");
-+              return -EBUSY;
-+      }
-+
-+      rtsp_expect_policy.max_expected = max_outstanding;
-+      rtsp_expect_policy.timeout = setup_timeout;
-+
-+      rtsp_buffer = kmalloc(65536, GFP_KERNEL);
-+      if (!rtsp_buffer)
-+              return -ENOMEM;
-+
-+      /* If no port given, default to standard rtsp port */
-+      if (ports[0] == 0) {
-+              ports[0] = RTSP_PORT;
-+      }
-+
-+      for (i = 0; (i < MAX_PORTS) && ports[i]; i++) {
-+              hlpr = &rtsp_helpers[i];
-+              memset(hlpr, 0, sizeof(struct nf_conntrack_helper));
-+              hlpr->tuple.src.u.tcp.port = htons(ports[i]);
-+              hlpr->tuple.dst.protonum = IPPROTO_TCP;
-+              hlpr->expect_policy = &rtsp_expect_policy;
-+              hlpr->me = THIS_MODULE;
-+              hlpr->help = help;
-+
-+              tmpname = &rtsp_names[i][0];
-+              if (ports[i] == RTSP_PORT) {
-+                      sprintf(tmpname, "rtsp");
-+              } else {
-+                      sprintf(tmpname, "rtsp-%d", i);
-+              }
-+              hlpr->name = tmpname;
-+
-+              DEBUGP("port #%d: %d\n", i, ports[i]);
-+
-+              ret = nf_conntrack_helper_register(hlpr);
-+
-+              if (ret) {
-+                      printk("nf_conntrack_rtsp: ERROR registering port %d\n", ports[i]);
-+                      fini();
-+                      return -EBUSY;
-+              }
-+              num_ports++;
-+      }
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
-+
-+EXPORT_SYMBOL(nf_nat_rtsp_hook_expectfn);
-+
---- /dev/null
-+++ b/net/ipv4/netfilter/nf_nat_rtsp.c
-@@ -0,0 +1,496 @@
-+/*
-+ * RTSP extension for TCP NAT alteration
-+ * (C) 2003 by Tom Marshall <tmarshall at real.com>
-+ * based on ip_nat_irc.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.
-+ *
-+ * Module load syntax:
-+ *      insmod nf_nat_rtsp.o ports=port1,port2,...port<MAX_PORTS>
-+ *                           stunaddr=<address>
-+ *                           destaction=[auto|strip|none]
-+ *
-+ * If no ports are specified, the default will be port 554 only.
-+ *
-+ * stunaddr specifies the address used to detect that a client is using STUN.
-+ * If this address is seen in the destination parameter, it is assumed that
-+ * the client has already punched a UDP hole in the firewall, so we don't
-+ * mangle the client_port.  If none is specified, it is autodetected.  It
-+ * only needs to be set if you have multiple levels of NAT.  It should be
-+ * set to the external address that the STUN clients detect.  Note that in
-+ * this case, it will not be possible for clients to use UDP with servers
-+ * between the NATs.
-+ *
-+ * If no destaction is specified, auto is used.
-+ *   destaction=auto:  strip destination parameter if it is not stunaddr.
-+ *   destaction=strip: always strip destination parameter (not recommended).
-+ *   destaction=none:  do not touch destination parameter (not recommended).
-+ */
-+
-+#include <linux/module.h>
-+#include <net/tcp.h>
-+#include <net/netfilter/nf_nat_helper.h>
-+#include <net/netfilter/nf_nat_rule.h>
-+#include <linux/netfilter/nf_conntrack_rtsp.h>
-+#include <net/netfilter/nf_conntrack_expect.h>
-+
-+#include <linux/inet.h>
-+#include <linux/ctype.h>
-+#define NF_NEED_STRNCASECMP
-+#define NF_NEED_STRTOU16
-+#include <linux/netfilter_helpers.h>
-+#define NF_NEED_MIME_NEXTLINE
-+#include <linux/netfilter_mime.h>
-+
-+#define INFOP(fmt, args...) printk(KERN_INFO "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#if 0
-+#define DEBUGP(fmt, args...) printk(KERN_DEBUG "%s: %s: " fmt, __FILE__, __FUNCTION__ , ## args)
-+#else
-+#define DEBUGP(fmt, args...)
-+#endif
-+
-+#define MAX_PORTS       8
-+#define DSTACT_AUTO     0
-+#define DSTACT_STRIP    1
-+#define DSTACT_NONE     2
-+
-+static char*    stunaddr = NULL;
-+static char*    destaction = NULL;
-+
-+static u_int32_t extip = 0;
-+static int       dstact = 0;
-+
-+MODULE_AUTHOR("Tom Marshall <tmarshall at real.com>");
-+MODULE_DESCRIPTION("RTSP network address translation module");
-+MODULE_LICENSE("GPL");
-+module_param(stunaddr, charp, 0644);
-+MODULE_PARM_DESC(stunaddr, "Address for detecting STUN");
-+module_param(destaction, charp, 0644);
-+MODULE_PARM_DESC(destaction, "Action for destination parameter (auto/strip/none)");
-+
-+#define SKIP_WSPACE(ptr,len,off) while(off < len && isspace(*(ptr+off))) { off++; }
-+
-+/*** helper functions ***/
-+
-+static void
-+get_skb_tcpdata(struct sk_buff* skb, char** pptcpdata, uint* ptcpdatalen)
-+{
-+    struct iphdr*   iph  = ip_hdr(skb);
-+    struct tcphdr*  tcph = (void *)iph + ip_hdrlen(skb);
-+
-+    *pptcpdata = (char*)tcph +  tcph->doff*4;
-+    *ptcpdatalen = ((char*)skb_transport_header(skb) + skb->len) - *pptcpdata;
-+}
-+
-+/*** nat functions ***/
-+
-+/*
-+ * Mangle the "Transport:" header:
-+ *   - Replace all occurences of "client_port=<spec>"
-+ *   - Handle destination parameter
-+ *
-+ * In:
-+ *   ct, ctinfo = conntrack context
-+ *   skb        = packet
-+ *   tranoff    = Transport header offset from TCP data
-+ *   tranlen    = Transport header length (incl. CRLF)
-+ *   rport_lo   = replacement low  port (host endian)
-+ *   rport_hi   = replacement high port (host endian)
-+ *
-+ * Returns packet size difference.
-+ *
-+ * Assumes that a complete transport header is present, ending with CR or LF
-+ */
-+static int
-+rtsp_mangle_tran(enum ip_conntrack_info ctinfo,
-+                 struct nf_conntrack_expect* exp,
-+                                                               struct ip_ct_rtsp_expect* prtspexp,
-+                 struct sk_buff* skb, uint tranoff, uint tranlen)
-+{
-+    char*       ptcp;
-+    uint        tcplen;
-+    char*       ptran;
-+    char        rbuf1[16];      /* Replacement buffer (one port) */
-+    uint        rbuf1len;       /* Replacement len (one port) */
-+    char        rbufa[16];      /* Replacement buffer (all ports) */
-+    uint        rbufalen;       /* Replacement len (all ports) */
-+    u_int32_t   newip;
-+    u_int16_t   loport, hiport;
-+    uint        off = 0;
-+    uint        diff;           /* Number of bytes we removed */
-+
-+    struct nf_conn *ct = exp->master;
-+    struct nf_conntrack_tuple *t;
-+
-+    char    szextaddr[15+1];
-+    uint    extaddrlen;
-+    int     is_stun;
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    ptran = ptcp+tranoff;
-+
-+    if (tranoff+tranlen > tcplen || tcplen-tranoff < tranlen ||
-+        tranlen < 10 || !iseol(ptran[tranlen-1]) ||
-+        nf_strncasecmp(ptran, "Transport:", 10) != 0)
-+    {
-+        INFOP("sanity check failed\n");
-+        return 0;
-+    }
-+    off += 10;
-+    SKIP_WSPACE(ptcp+tranoff, tranlen, off);
-+
-+    newip = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+    t = &exp->tuple;
-+    t->dst.u3.ip = newip;
-+
-+    extaddrlen = extip ? sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(extip))
-+                       : sprintf(szextaddr, "%u.%u.%u.%u", NIPQUAD(newip));
-+    DEBUGP("stunaddr=%s (%s)\n", szextaddr, (extip?"forced":"auto"));
-+
-+    rbuf1len = rbufalen = 0;
-+    switch (prtspexp->pbtype)
-+    {
-+    case pb_single:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu\n", loport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu", loport);
-+        }
-+        break;
-+    case pb_range:
-+        for (loport = prtspexp->loport; loport != 0; loport += 2) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                hiport = loport + ~exp->mask.src.u.udp.port;
-+                DEBUGP("using ports %hu-%hu\n", loport, hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            rbufalen = sprintf(rbufa, "%hu-%hu", loport, loport+1);
-+        }
-+        break;
-+    case pb_discon:
-+        for (loport = prtspexp->loport; loport != 0; loport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(loport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (1 of 2)\n", loport);
-+                break;
-+            }
-+        }
-+        for (hiport = prtspexp->hiport; hiport != 0; hiport++) /* XXX: improper wrap? */
-+        {
-+            t->dst.u.udp.port = htons(hiport);
-+            if (nf_ct_expect_related(exp) == 0)
-+            {
-+                DEBUGP("using port %hu (2 of 2)\n", hiport);
-+                break;
-+            }
-+        }
-+        if (loport != 0 && hiport != 0)
-+        {
-+            rbuf1len = sprintf(rbuf1, "%hu", loport);
-+            if (hiport == loport+1)
-+            {
-+                rbufalen = sprintf(rbufa, "%hu-%hu", loport, hiport);
-+            }
-+            else
-+            {
-+                rbufalen = sprintf(rbufa, "%hu/%hu", loport, hiport);
-+            }
-+        }
-+        break;
-+    }
-+
-+    if (rbuf1len == 0)
-+    {
-+        return 0;   /* cannot get replacement port(s) */
-+    }
-+
-+    /* Transport: tran;field;field=val,tran;field;field=val,... */
-+    while (off < tranlen)
-+    {
-+        uint        saveoff;
-+        const char* pparamend;
-+        uint        nextparamoff;
-+
-+        pparamend = memchr(ptran+off, ',', tranlen-off);
-+        pparamend = (pparamend == NULL) ? ptran+tranlen : pparamend+1;
-+        nextparamoff = pparamend-ptcp;
-+
-+        /*
-+         * We pass over each param twice.  On the first pass, we look for a
-+         * destination= field.  It is handled by the security policy.  If it
-+         * is present, allowed, and equal to our external address, we assume
-+         * that STUN is being used and we leave the client_port= field alone.
-+         */
-+        is_stun = 0;
-+        saveoff = off;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (dstact != DSTACT_NONE && strncmp(ptran+off, "destination=", 12) == 0)
-+            {
-+                if (strncmp(ptran+off+12, szextaddr, extaddrlen) == 0)
-+                {
-+                    is_stun = 1;
-+                }
-+                if (dstact == DSTACT_STRIP || (dstact == DSTACT_AUTO && !is_stun))
-+                {
-+                    diff = nextfieldoff-off;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                                         off, diff, NULL, 0))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+        if (is_stun)
-+        {
-+            continue;
-+        }
-+        off = saveoff;
-+        while (off < nextparamoff)
-+        {
-+            const char* pfieldend;
-+            uint        nextfieldoff;
-+
-+            pfieldend = memchr(ptran+off, ';', nextparamoff-off);
-+            nextfieldoff = (pfieldend == NULL) ? nextparamoff : pfieldend-ptran+1;
-+
-+            if (strncmp(ptran+off, "client_port=", 12) == 0)
-+            {
-+                u_int16_t   port;
-+                uint        numlen;
-+                uint        origoff;
-+                uint        origlen;
-+                char*       rbuf    = rbuf1;
-+                uint        rbuflen = rbuf1len;
-+
-+                off += 12;
-+                origoff = (ptran-ptcp)+off;
-+                origlen = 0;
-+                numlen = nf_strtou16(ptran+off, &port);
-+                off += numlen;
-+                origlen += numlen;
-+                if (port != prtspexp->loport)
-+                {
-+                    DEBUGP("multiple ports found, port %hu ignored\n", port);
-+                }
-+                else
-+                {
-+                    if (ptran[off] == '-' || ptran[off] == '/')
-+                    {
-+                        off++;
-+                        origlen++;
-+                        numlen = nf_strtou16(ptran+off, &port);
-+                        off += numlen;
-+                        origlen += numlen;
-+                        rbuf = rbufa;
-+                        rbuflen = rbufalen;
-+                    }
-+
-+                    /*
-+                     * note we cannot just memcpy() if the sizes are the same.
-+                     * the mangle function does skb resizing, checks for a
-+                     * cloned skb, and updates the checksums.
-+                     *
-+                     * parameter 4 below is offset from start of tcp data.
-+                     */
-+                    diff = origlen-rbuflen;
-+                    if (!nf_nat_mangle_tcp_packet(skb, ct, ctinfo,
-+                                              origoff, origlen, rbuf, rbuflen))
-+                    {
-+                        /* mangle failed, all we can do is bail */
-+                      nf_ct_unexpect_related(exp);
-+                        return 0;
-+                    }
-+                    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+                    ptran = ptcp+tranoff;
-+                    tranlen -= diff;
-+                    nextparamoff -= diff;
-+                    nextfieldoff -= diff;
-+                }
-+            }
-+
-+            off = nextfieldoff;
-+        }
-+
-+        off = nextparamoff;
-+    }
-+
-+    return 1;
-+}
-+
-+static uint
-+help_out(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+       unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+       struct nf_conntrack_expect* exp)
-+{
-+    char*   ptcp;
-+    uint    tcplen;
-+    uint    hdrsoff;
-+    uint    hdrslen;
-+    uint    lineoff;
-+    uint    linelen;
-+    uint    off;
-+
-+    //struct iphdr* iph = (struct iphdr*)skb->nh.iph;
-+    //struct tcphdr* tcph = (struct tcphdr*)((void*)iph + iph->ihl*4);
-+
-+    get_skb_tcpdata(skb, &ptcp, &tcplen);
-+    hdrsoff = matchoff;//exp->seq - ntohl(tcph->seq);
-+    hdrslen = matchlen;
-+    off = hdrsoff;
-+    DEBUGP("NAT rtsp help_out\n");
-+
-+    while (nf_mime_nextline(ptcp, hdrsoff+hdrslen, &off, &lineoff, &linelen))
-+    {
-+        if (linelen == 0)
-+        {
-+            break;
-+        }
-+        if (off > hdrsoff+hdrslen)
-+        {
-+            INFOP("!! overrun !!");
-+            break;
-+        }
-+        DEBUGP("hdr: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+
-+        if (nf_strncasecmp(ptcp+lineoff, "Transport:", 10) == 0)
-+        {
-+            uint oldtcplen = tcplen;
-+          DEBUGP("hdr: Transport\n");
-+            if (!rtsp_mangle_tran(ctinfo, exp, prtspexp, skb, lineoff, linelen))
-+            {
-+              DEBUGP("hdr: Transport mangle failed");
-+                break;
-+            }
-+            get_skb_tcpdata(skb, &ptcp, &tcplen);
-+            hdrslen -= (oldtcplen-tcplen);
-+            off -= (oldtcplen-tcplen);
-+            lineoff -= (oldtcplen-tcplen);
-+            linelen -= (oldtcplen-tcplen);
-+            DEBUGP("rep: len=%u, %.*s", linelen, (int)linelen, ptcp+lineoff);
-+        }
-+    }
-+
-+    return NF_ACCEPT;
-+}
-+
-+static unsigned int
-+help(struct sk_buff *skb, enum ip_conntrack_info ctinfo,
-+     unsigned int matchoff, unsigned int matchlen, struct ip_ct_rtsp_expect* prtspexp,
-+     struct nf_conntrack_expect* exp)
-+{
-+    int dir = CTINFO2DIR(ctinfo);
-+    int rc = NF_ACCEPT;
-+
-+    switch (dir)
-+    {
-+    case IP_CT_DIR_ORIGINAL:
-+        rc = help_out(skb, ctinfo, matchoff, matchlen, prtspexp, exp);
-+        break;
-+    case IP_CT_DIR_REPLY:
-+      DEBUGP("unmangle ! %u\n", ctinfo);
-+      /* XXX: unmangle */
-+      rc = NF_ACCEPT;
-+        break;
-+    }
-+    //UNLOCK_BH(&ip_rtsp_lock);
-+
-+    return rc;
-+}
-+
-+static void expected(struct nf_conn* ct, struct nf_conntrack_expect *exp)
-+{
-+    struct nf_nat_multi_range_compat mr;
-+    u_int32_t newdstip, newsrcip, newip;
-+
-+    struct nf_conn *master = ct->master;
-+
-+    newdstip = master->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    newsrcip = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+    //FIXME (how to port that ?)
-+    //code from 2.4 : newip = (HOOK2MANIP(hooknum) == IP_NAT_MANIP_SRC) ? newsrcip : newdstip;
-+    newip = newdstip;
-+
-+    DEBUGP("newsrcip=%u.%u.%u.%u, newdstip=%u.%u.%u.%u, newip=%u.%u.%u.%u\n",
-+           NIPQUAD(newsrcip), NIPQUAD(newdstip), NIPQUAD(newip));
-+
-+    mr.rangesize = 1;
-+    // We don't want to manip the per-protocol, just the IPs.
-+    mr.range[0].flags = IP_NAT_RANGE_MAP_IPS;
-+    mr.range[0].min_ip = mr.range[0].max_ip = newip;
-+
-+    nf_nat_setup_info(ct, &mr.range[0], IP_NAT_MANIP_DST);
-+}
-+
-+
-+static void __exit fini(void)
-+{
-+      nf_nat_rtsp_hook = NULL;
-+        nf_nat_rtsp_hook_expectfn = NULL;
-+      synchronize_net();
-+}
-+
-+static int __init init(void)
-+{
-+      printk("nf_nat_rtsp v" IP_NF_RTSP_VERSION " loading\n");
-+
-+      BUG_ON(nf_nat_rtsp_hook);
-+      nf_nat_rtsp_hook = help;
-+        nf_nat_rtsp_hook_expectfn = &expected;
-+
-+      if (stunaddr != NULL)
-+              extip = in_aton(stunaddr);
-+
-+      if (destaction != NULL) {
-+              if (strcmp(destaction, "auto") == 0)
-+                      dstact = DSTACT_AUTO;
-+
-+              if (strcmp(destaction, "strip") == 0)
-+                      dstact = DSTACT_STRIP;
-+
-+              if (strcmp(destaction, "none") == 0)
-+                      dstact = DSTACT_NONE;
-+      }
-+
-+      return 0;
-+}
-+
-+module_init(init);
-+module_exit(fini);
diff --git a/target/linux/generic-2.6/patches-2.6.34/200-sched_esfq.patch b/target/linux/generic-2.6/patches-2.6.34/200-sched_esfq.patch
deleted file mode 100644 (file)
index 1d51358..0000000
+++ /dev/null
@@ -1,795 +0,0 @@
---- a/include/linux/pkt_sched.h
-+++ b/include/linux/pkt_sched.h
-@@ -173,8 +173,37 @@ struct tc_sfq_xstats {
-  *
-  *    The only reason for this is efficiency, it is possible
-  *    to change these parameters in compile time.
-+ *
-+ *    If you need to play with these values, use esfq instead.
-  */
-+/* ESFQ section */
-+
-+enum
-+{
-+        /* traditional */
-+      TCA_SFQ_HASH_CLASSIC,
-+      TCA_SFQ_HASH_DST,
-+      TCA_SFQ_HASH_SRC,
-+      TCA_SFQ_HASH_FWMARK,
-+      /* conntrack */
-+      TCA_SFQ_HASH_CTORIGDST,
-+      TCA_SFQ_HASH_CTORIGSRC,
-+      TCA_SFQ_HASH_CTREPLDST,
-+      TCA_SFQ_HASH_CTREPLSRC,
-+      TCA_SFQ_HASH_CTNATCHG,
-+};
-+
-+struct tc_esfq_qopt
-+{
-+      unsigned        quantum;        /* Bytes per round allocated to flow */
-+      int             perturb_period; /* Period of hash perturbation */
-+      __u32           limit;          /* Maximal packets in queue */
-+      unsigned        divisor;        /* Hash divisor  */
-+      unsigned        flows;          /* Maximal number of flows  */
-+      unsigned        hash_kind;      /* Hash function to use for flow identification */
-+};
-+
- /* RED section */
- enum {
---- a/net/sched/Kconfig
-+++ b/net/sched/Kconfig
-@@ -137,6 +137,37 @@ config NET_SCH_SFQ
-         To compile this code as a module, choose M here: the
-         module will be called sch_sfq.
-+config NET_SCH_ESFQ
-+      tristate "Enhanced Stochastic Fairness Queueing (ESFQ)"
-+      ---help---
-+        Say Y here if you want to use the Enhanced Stochastic Fairness
-+        Queueing (ESFQ) packet scheduling algorithm for some of your network
-+        devices or as a leaf discipline for a classful qdisc such as HTB or
-+        CBQ (see the top of <file:net/sched/sch_esfq.c> for details and
-+        references to the SFQ algorithm).
-+
-+        This is an enchanced SFQ version which allows you to control some
-+        hardcoded values in the SFQ scheduler.
-+
-+        ESFQ also adds control of the hash function used to identify packet
-+        flows. The original SFQ discipline hashes by connection; ESFQ add
-+        several other hashing methods, such as by src IP or by dst IP, which
-+        can be more fair to users in some networking situations.
-+
-+        To compile this code as a module, choose M here: the
-+        module will be called sch_esfq.
-+
-+config NET_SCH_ESFQ_NFCT
-+      bool "Connection Tracking Hash Types"
-+      depends on NET_SCH_ESFQ && NF_CONNTRACK
-+      ---help---
-+        Say Y here to enable support for hashing based on netfilter connection
-+        tracking information. This is useful for a router that is also using
-+        NAT to connect privately-addressed hosts to the Internet. If you want
-+        to provide fair distribution of upstream bandwidth, ESFQ must use
-+        connection tracking information, since all outgoing packets will share
-+        the same source address.
-+
- config NET_SCH_TEQL
-       tristate "True Link Equalizer (TEQL)"
-       ---help---
---- a/net/sched/Makefile
-+++ b/net/sched/Makefile
-@@ -24,6 +24,7 @@ obj-$(CONFIG_NET_SCH_GRED)   += sch_gred.o
- obj-$(CONFIG_NET_SCH_INGRESS) += sch_ingress.o 
- obj-$(CONFIG_NET_SCH_DSMARK)  += sch_dsmark.o
- obj-$(CONFIG_NET_SCH_SFQ)     += sch_sfq.o
-+obj-$(CONFIG_NET_SCH_ESFQ)    += sch_esfq.o
- obj-$(CONFIG_NET_SCH_TBF)     += sch_tbf.o
- obj-$(CONFIG_NET_SCH_TEQL)    += sch_teql.o
- obj-$(CONFIG_NET_SCH_PRIO)    += sch_prio.o
---- /dev/null
-+++ b/net/sched/sch_esfq.c
-@@ -0,0 +1,702 @@
-+/*
-+ * net/sched/sch_esfq.c       Extended Stochastic Fairness Queueing discipline.
-+ *
-+ *            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:   Alexey Kuznetsov, <kuznet@ms2.inr.ac.ru>
-+ *
-+ * Changes:   Alexander Atanasov, <alex@ssi.bg>
-+ *            Added dynamic depth,limit,divisor,hash_kind options.
-+ *            Added dst and src hashes.
-+ *
-+ *            Alexander Clouter, <alex@digriz.org.uk>
-+ *            Ported ESFQ to Linux 2.6.
-+ *
-+ *            Corey Hickey, <bugfood-c@fatooh.org>
-+ *            Maintenance of the Linux 2.6 port.
-+ *            Added fwmark hash (thanks to Robert Kurjata).
-+ *            Added usage of jhash.
-+ *            Added conntrack support.
-+ *            Added ctnatchg hash (thanks to Ben Pfountz).
-+ */
-+
-+#include <linux/module.h>
-+#include <asm/uaccess.h>
-+#include <asm/system.h>
-+#include <linux/bitops.h>
-+#include <linux/types.h>
-+#include <linux/kernel.h>
-+#include <linux/jiffies.h>
-+#include <linux/string.h>
-+#include <linux/mm.h>
-+#include <linux/socket.h>
-+#include <linux/sockios.h>
-+#include <linux/in.h>
-+#include <linux/errno.h>
-+#include <linux/interrupt.h>
-+#include <linux/if_ether.h>
-+#include <linux/inet.h>
-+#include <linux/netdevice.h>
-+#include <linux/etherdevice.h>
-+#include <linux/notifier.h>
-+#include <linux/init.h>
-+#include <net/ip.h>
-+#include <net/netlink.h>
-+#include <linux/ipv6.h>
-+#include <net/route.h>
-+#include <linux/skbuff.h>
-+#include <net/sock.h>
-+#include <net/pkt_sched.h>
-+#include <linux/jhash.h>
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+#include <net/netfilter/nf_conntrack.h>
-+#endif
-+
-+/*    Stochastic Fairness Queuing algorithm.
-+      For more comments look at sch_sfq.c.
-+      The difference is that you can change limit, depth,
-+      hash table size and choose alternate hash types.
-+
-+      classic:        same as in sch_sfq.c
-+      dst:            destination IP address
-+      src:            source IP address
-+      fwmark:         netfilter mark value
-+      ctorigdst:      original destination IP address
-+      ctorigsrc:      original source IP address
-+      ctrepldst:      reply destination IP address
-+      ctreplsrc:      reply source IP
-+
-+*/
-+
-+#define ESFQ_HEAD 0
-+#define ESFQ_TAIL 1
-+
-+/* This type should contain at least SFQ_DEPTH*2 values */
-+typedef unsigned int esfq_index;
-+
-+struct esfq_head
-+{
-+      esfq_index      next;
-+      esfq_index      prev;
-+};
-+
-+struct esfq_sched_data
-+{
-+/* Parameters */
-+      int             perturb_period;
-+      unsigned        quantum;        /* Allotment per round: MUST BE >= MTU */
-+      int             limit;
-+      unsigned        depth;
-+      unsigned        hash_divisor;
-+      unsigned        hash_kind;
-+/* Variables */
-+      struct timer_list perturb_timer;
-+      int             perturbation;
-+      esfq_index      tail;           /* Index of current slot in round */
-+      esfq_index      max_depth;      /* Maximal depth */
-+
-+      esfq_index      *ht;                    /* Hash table */
-+      esfq_index      *next;                  /* Active slots link */
-+      short           *allot;                 /* Current allotment per slot */
-+      unsigned short  *hash;                  /* Hash value indexed by slots */
-+      struct sk_buff_head     *qs;            /* Slot queue */
-+      struct esfq_head        *dep;           /* Linked list of slots, indexed by depth */
-+};
-+
-+/* This contains the info we will hash. */
-+struct esfq_packet_info
-+{
-+      u32     proto;          /* protocol or port */
-+      u32     src;            /* source from packet header */
-+      u32     dst;            /* destination from packet header */
-+      u32     ctorigsrc;      /* original source from conntrack */
-+      u32     ctorigdst;      /* original destination from conntrack */
-+      u32     ctreplsrc;      /* reply source from conntrack */
-+      u32     ctrepldst;      /* reply destination from conntrack */
-+      u32     mark;           /* netfilter mark (fwmark) */
-+};
-+
-+static __inline__ unsigned esfq_jhash_1word(struct esfq_sched_data *q,u32 a)
-+{
-+      return jhash_1word(a, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_2words(struct esfq_sched_data *q, u32 a, u32 b)
-+{
-+      return jhash_2words(a, b, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static __inline__ unsigned esfq_jhash_3words(struct esfq_sched_data *q, u32 a, u32 b, u32 c)
-+{
-+      return jhash_3words(a, b, c, q->perturbation) & (q->hash_divisor-1);
-+}
-+
-+static unsigned esfq_hash(struct esfq_sched_data *q, struct sk_buff *skb)
-+{
-+      struct esfq_packet_info info;
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      enum ip_conntrack_info ctinfo;
-+      struct nf_conn *ct = nf_ct_get(skb, &ctinfo);
-+#endif
-+
-+      switch (skb->protocol) {
-+      case __constant_htons(ETH_P_IP):
-+      {
-+              struct iphdr *iph = ip_hdr(skb);
-+              info.dst = iph->daddr;
-+              info.src = iph->saddr;
-+              if (!(iph->frag_off&htons(IP_MF|IP_OFFSET)) &&
-+                  (iph->protocol == IPPROTO_TCP ||
-+                   iph->protocol == IPPROTO_UDP ||
-+                   iph->protocol == IPPROTO_SCTP ||
-+                   iph->protocol == IPPROTO_DCCP ||
-+                   iph->protocol == IPPROTO_ESP))
-+                      info.proto = *(((u32*)iph) + iph->ihl);
-+              else
-+                      info.proto = iph->protocol;
-+              break;
-+      }
-+      case __constant_htons(ETH_P_IPV6):
-+      {
-+              struct ipv6hdr *iph = ipv6_hdr(skb);
-+              /* Hash ipv6 addresses into a u32. This isn't ideal,
-+               * but the code is simple. */
-+              info.dst = jhash2(iph->daddr.s6_addr32, 4, q->perturbation);
-+              info.src = jhash2(iph->saddr.s6_addr32, 4, q->perturbation);
-+              if (iph->nexthdr == IPPROTO_TCP ||
-+                  iph->nexthdr == IPPROTO_UDP ||
-+                  iph->nexthdr == IPPROTO_SCTP ||
-+                  iph->nexthdr == IPPROTO_DCCP ||
-+                  iph->nexthdr == IPPROTO_ESP)
-+                      info.proto = *(u32*)&iph[1];
-+              else
-+                      info.proto = iph->nexthdr;
-+              break;
-+      }
-+      default:
-+              info.dst   = (u32)(unsigned long)skb_dst(skb);
-+              info.src   = (u32)(unsigned long)skb->sk;
-+              info.proto = skb->protocol;
-+      }
-+
-+      info.mark = skb->mark;
-+
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      /* defaults if there is no conntrack info */
-+      info.ctorigsrc = info.src;
-+      info.ctorigdst = info.dst;
-+      info.ctreplsrc = info.dst;
-+      info.ctrepldst = info.src;
-+      /* collect conntrack info */
-+      if (ct && ct != &nf_conntrack_untracked) {
-+              if (skb->protocol == __constant_htons(ETH_P_IP)) {
-+                      info.ctorigsrc = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip;
-+                      info.ctorigdst = ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip;
-+                      info.ctreplsrc = ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip;
-+                      info.ctrepldst = ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip;
-+              }
-+              else if (skb->protocol == __constant_htons(ETH_P_IPV6)) {
-+                      /* Again, hash ipv6 addresses into a single u32. */
-+                      info.ctorigsrc = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctorigdst = jhash2(ct->tuplehash[IP_CT_DIR_ORIGINAL].tuple.dst.u3.ip6, 4, q->perturbation);
-+                      info.ctreplsrc = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.src.u3.ip6, 4, q->perturbation);
-+                      info.ctrepldst = jhash2(ct->tuplehash[IP_CT_DIR_REPLY].tuple.dst.u3.ip6, 4, q->perturbation);
-+              }
-+
-+      }
-+#endif
-+
-+      switch(q->hash_kind) {
-+      case TCA_SFQ_HASH_CLASSIC:
-+              return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+      case TCA_SFQ_HASH_DST:
-+              return esfq_jhash_1word(q, info.dst);
-+      case TCA_SFQ_HASH_SRC:
-+              return esfq_jhash_1word(q, info.src);
-+      case TCA_SFQ_HASH_FWMARK:
-+              return esfq_jhash_1word(q, info.mark);
-+#ifdef CONFIG_NET_SCH_ESFQ_NFCT
-+      case TCA_SFQ_HASH_CTORIGDST:
-+              return esfq_jhash_1word(q, info.ctorigdst);
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+              return esfq_jhash_1word(q, info.ctorigsrc);
-+      case TCA_SFQ_HASH_CTREPLDST:
-+              return esfq_jhash_1word(q, info.ctrepldst);
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      case TCA_SFQ_HASH_CTNATCHG:
-+      {
-+              if (info.ctorigdst == info.ctreplsrc)
-+                      return esfq_jhash_1word(q, info.ctorigsrc);
-+              return esfq_jhash_1word(q, info.ctreplsrc);
-+      }
-+#endif
-+      default:
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash method. Falling back to classic.\n");
-+      }
-+      return esfq_jhash_3words(q, info.dst, info.src, info.proto);
-+}
-+
-+static inline void esfq_link(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d = q->qs[x].qlen + q->depth;
-+
-+      p = d;
-+      n = q->dep[d].next;
-+      q->dep[x].next = n;
-+      q->dep[x].prev = p;
-+      q->dep[p].next = q->dep[n].prev = x;
-+}
-+
-+static inline void esfq_dec(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+
-+      if (n == p && q->max_depth == q->qs[x].qlen + 1)
-+              q->max_depth--;
-+
-+      esfq_link(q, x);
-+}
-+
-+static inline void esfq_inc(struct esfq_sched_data *q, esfq_index x)
-+{
-+      esfq_index p, n;
-+      int d;
-+
-+      n = q->dep[x].next;
-+      p = q->dep[x].prev;
-+      q->dep[p].next = n;
-+      q->dep[n].prev = p;
-+      d = q->qs[x].qlen;
-+      if (q->max_depth < d)
-+              q->max_depth = d;
-+
-+      esfq_link(q, x);
-+}
-+
-+static unsigned int esfq_drop(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index d = q->max_depth;
-+      struct sk_buff *skb;
-+      unsigned int len;
-+
-+      /* Queue is full! Find the longest slot and
-+         drop a packet from it */
-+
-+      if (d > 1) {
-+              esfq_index x = q->dep[d+q->depth].next;
-+              skb = q->qs[x].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[x]);
-+              kfree_skb(skb);
-+              esfq_dec(q, x);
-+              sch->q.qlen--;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      if (d == 1) {
-+              /* It is difficult to believe, but ALL THE SLOTS HAVE LENGTH 1. */
-+              d = q->next[q->tail];
-+              q->next[q->tail] = q->next[d];
-+              q->allot[q->next[d]] += q->quantum;
-+              skb = q->qs[d].prev;
-+              len = skb->len;
-+              __skb_unlink(skb, &q->qs[d]);
-+              kfree_skb(skb);
-+              esfq_dec(q, d);
-+              sch->q.qlen--;
-+              q->ht[q->hash[d]] = q->depth;
-+              sch->qstats.drops++;
-+              sch->qstats.backlog -= len;
-+              return len;
-+      }
-+
-+      return 0;
-+}
-+
-+static void esfq_q_enqueue(struct sk_buff *skb, struct esfq_sched_data *q, unsigned int end)
-+{
-+      unsigned hash = esfq_hash(q, skb);
-+      unsigned depth = q->depth;
-+      esfq_index x;
-+
-+      x = q->ht[hash];
-+      if (x == depth) {
-+              q->ht[hash] = x = q->dep[depth].next;
-+              q->hash[x] = hash;
-+      }
-+
-+      if (end == ESFQ_TAIL)
-+              __skb_queue_tail(&q->qs[x], skb);
-+      else
-+              __skb_queue_head(&q->qs[x], skb);
-+
-+      esfq_inc(q, x);
-+      if (q->qs[x].qlen == 1) {               /* The flow is new */
-+              if (q->tail == depth) { /* It is the first flow */
-+                      q->tail = x;
-+                      q->next[x] = x;
-+                      q->allot[x] = q->quantum;
-+              } else {
-+                      q->next[x] = q->next[q->tail];
-+                      q->next[q->tail] = x;
-+                      q->tail = x;
-+              }
-+      }
-+}
-+
-+static int esfq_enqueue(struct sk_buff *skb, struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_enqueue(skb, q, ESFQ_TAIL);
-+      sch->qstats.backlog += skb->len;
-+      if (++sch->q.qlen < q->limit-1) {
-+              sch->bstats.bytes += skb->len;
-+              sch->bstats.packets++;
-+              return 0;
-+      }
-+
-+      sch->qstats.drops++;
-+      esfq_drop(sch);
-+      return NET_XMIT_CN;
-+}
-+
-+static struct sk_buff *esfq_peek(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_index a;
-+
-+      /* No active slots */
-+      if (q->tail == q->depth)
-+              return NULL;
-+
-+      a = q->next[q->tail];
-+      return skb_peek(&q->qs[a]);
-+}
-+
-+static struct sk_buff *esfq_q_dequeue(struct esfq_sched_data *q)
-+{
-+      struct sk_buff *skb;
-+      unsigned depth = q->depth;
-+      esfq_index a, old_a;
-+
-+      /* No active slots */
-+      if (q->tail == depth)
-+              return NULL;
-+
-+      a = old_a = q->next[q->tail];
-+
-+      /* Grab packet */
-+      skb = __skb_dequeue(&q->qs[a]);
-+      esfq_dec(q, a);
-+
-+      /* Is the slot empty? */
-+      if (q->qs[a].qlen == 0) {
-+              q->ht[q->hash[a]] = depth;
-+              a = q->next[a];
-+              if (a == old_a) {
-+                      q->tail = depth;
-+                      return skb;
-+              }
-+              q->next[q->tail] = a;
-+              q->allot[a] += q->quantum;
-+      } else if ((q->allot[a] -= skb->len) <= 0) {
-+              q->tail = a;
-+              a = q->next[a];
-+              q->allot[a] += q->quantum;
-+      }
-+
-+      return skb;
-+}
-+
-+static struct sk_buff *esfq_dequeue(struct Qdisc* sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct sk_buff *skb;
-+
-+      skb = esfq_q_dequeue(q);
-+      if (skb == NULL)
-+              return NULL;
-+      sch->q.qlen--;
-+      sch->qstats.backlog -= skb->len;
-+      return skb;
-+}
-+
-+static void esfq_q_destroy(struct esfq_sched_data *q)
-+{
-+      del_timer(&q->perturb_timer);
-+      if(q->ht)
-+              kfree(q->ht);
-+      if(q->dep)
-+              kfree(q->dep);
-+      if(q->next)
-+              kfree(q->next);
-+      if(q->allot)
-+              kfree(q->allot);
-+      if(q->hash)
-+              kfree(q->hash);
-+      if(q->qs)
-+              kfree(q->qs);
-+}
-+
-+static void esfq_destroy(struct Qdisc *sch)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      esfq_q_destroy(q);
-+}
-+
-+
-+static void esfq_reset(struct Qdisc* sch)
-+{
-+      struct sk_buff *skb;
-+
-+      while ((skb = esfq_dequeue(sch)) != NULL)
-+              kfree_skb(skb);
-+}
-+
-+static void esfq_perturbation(unsigned long arg)
-+{
-+      struct Qdisc *sch = (struct Qdisc*)arg;
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+
-+      q->perturbation = net_random()&0x1F;
-+
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+}
-+
-+static unsigned int esfq_check_hash(unsigned int kind)
-+{
-+      switch (kind) {
-+      case TCA_SFQ_HASH_CTORIGDST:
-+      case TCA_SFQ_HASH_CTORIGSRC:
-+      case TCA_SFQ_HASH_CTREPLDST:
-+      case TCA_SFQ_HASH_CTREPLSRC:
-+      case TCA_SFQ_HASH_CTNATCHG:
-+#ifndef CONFIG_NET_SCH_ESFQ_NFCT
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Conntrack hash types disabled in kernel config. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+#endif
-+      case TCA_SFQ_HASH_CLASSIC:
-+      case TCA_SFQ_HASH_DST:
-+      case TCA_SFQ_HASH_SRC:
-+      case TCA_SFQ_HASH_FWMARK:
-+              return kind;
-+      default:
-+      {
-+              if (net_ratelimit())
-+                      printk(KERN_WARNING "ESFQ: Unknown hash type. Falling back to classic.\n");
-+              return TCA_SFQ_HASH_CLASSIC;
-+      }
-+      }
-+}
-+
-+static int esfq_q_init(struct esfq_sched_data *q, struct nlattr *opt)
-+{
-+      struct tc_esfq_qopt *ctl = nla_data(opt);
-+      esfq_index p = ~0U/2;
-+      int i;
-+
-+      if (opt && opt->nla_len < nla_attr_size(sizeof(*ctl)))
-+              return -EINVAL;
-+
-+      q->perturbation = 0;
-+      q->hash_kind = TCA_SFQ_HASH_CLASSIC;
-+      q->max_depth = 0;
-+      if (opt == NULL) {
-+              q->perturb_period = 0;
-+              q->hash_divisor = 1024;
-+              q->tail = q->limit = q->depth = 128;
-+
-+      } else {
-+              struct tc_esfq_qopt *ctl = nla_data(opt);
-+              if (ctl->quantum)
-+                      q->quantum = ctl->quantum;
-+              q->perturb_period = ctl->perturb_period*HZ;
-+              q->hash_divisor = ctl->divisor ? : 1024;
-+              q->tail = q->limit = q->depth = ctl->flows ? : 128;
-+
-+              if ( q->depth > p - 1 )
-+                      return -EINVAL;
-+
-+              if (ctl->limit)
-+                      q->limit = min_t(u32, ctl->limit, q->depth);
-+
-+              if (ctl->hash_kind) {
-+                      q->hash_kind = esfq_check_hash(ctl->hash_kind);
-+              }
-+      }
-+
-+      q->ht = kmalloc(q->hash_divisor*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->ht)
-+              goto err_case;
-+      q->dep = kmalloc((1+q->depth*2)*sizeof(struct esfq_head), GFP_KERNEL);
-+      if (!q->dep)
-+              goto err_case;
-+      q->next = kmalloc(q->depth*sizeof(esfq_index), GFP_KERNEL);
-+      if (!q->next)
-+              goto err_case;
-+      q->allot = kmalloc(q->depth*sizeof(short), GFP_KERNEL);
-+      if (!q->allot)
-+              goto err_case;
-+      q->hash = kmalloc(q->depth*sizeof(unsigned short), GFP_KERNEL);
-+      if (!q->hash)
-+              goto err_case;
-+      q->qs = kmalloc(q->depth*sizeof(struct sk_buff_head), GFP_KERNEL);
-+      if (!q->qs)
-+              goto err_case;
-+
-+      for (i=0; i< q->hash_divisor; i++)
-+              q->ht[i] = q->depth;
-+      for (i=0; i<q->depth; i++) {
-+              skb_queue_head_init(&q->qs[i]);
-+              q->dep[i+q->depth].next = i+q->depth;
-+              q->dep[i+q->depth].prev = i+q->depth;
-+      }
-+
-+      for (i=0; i<q->depth; i++)
-+              esfq_link(q, i);
-+      return 0;
-+err_case:
-+      esfq_q_destroy(q);
-+      return -ENOBUFS;
-+}
-+
-+static int esfq_init(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      int err;
-+
-+      q->quantum = psched_mtu(qdisc_dev(sch)); /* default */
-+      if ((err = esfq_q_init(q, opt)))
-+              return err;
-+
-+      init_timer(&q->perturb_timer);
-+      q->perturb_timer.data = (unsigned long)sch;
-+      q->perturb_timer.function = esfq_perturbation;
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      }
-+
-+      return 0;
-+}
-+
-+static int esfq_change(struct Qdisc *sch, struct nlattr *opt)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      struct esfq_sched_data new;
-+      struct sk_buff *skb;
-+      int err;
-+
-+      /* set up new queue */
-+      memset(&new, 0, sizeof(struct esfq_sched_data));
-+      new.quantum = psched_mtu(qdisc_dev(sch)); /* default */
-+      if ((err = esfq_q_init(&new, opt)))
-+              return err;
-+
-+      /* copy all packets from the old queue to the new queue */
-+      sch_tree_lock(sch);
-+      while ((skb = esfq_q_dequeue(q)) != NULL)
-+              esfq_q_enqueue(skb, &new, ESFQ_TAIL);
-+
-+      /* clean up the old queue */
-+      esfq_q_destroy(q);
-+
-+      /* copy elements of the new queue into the old queue */
-+      q->perturb_period = new.perturb_period;
-+      q->quantum        = new.quantum;
-+      q->limit          = new.limit;
-+      q->depth          = new.depth;
-+      q->hash_divisor   = new.hash_divisor;
-+      q->hash_kind      = new.hash_kind;
-+      q->tail           = new.tail;
-+      q->max_depth      = new.max_depth;
-+      q->ht    = new.ht;
-+      q->dep   = new.dep;
-+      q->next  = new.next;
-+      q->allot = new.allot;
-+      q->hash  = new.hash;
-+      q->qs    = new.qs;
-+
-+      /* finish up */
-+      if (q->perturb_period) {
-+              q->perturb_timer.expires = jiffies + q->perturb_period;
-+              add_timer(&q->perturb_timer);
-+      } else {
-+              q->perturbation = 0;
-+      }
-+      sch_tree_unlock(sch);
-+      return 0;
-+}
-+
-+static int esfq_dump(struct Qdisc *sch, struct sk_buff *skb)
-+{
-+      struct esfq_sched_data *q = qdisc_priv(sch);
-+      unsigned char *b = skb_tail_pointer(skb);
-+      struct tc_esfq_qopt opt;
-+
-+      opt.quantum = q->quantum;
-+      opt.perturb_period = q->perturb_period/HZ;
-+
-+      opt.limit = q->limit;
-+      opt.divisor = q->hash_divisor;
-+      opt.flows = q->depth;
-+      opt.hash_kind = q->hash_kind;
-+
-+      NLA_PUT(skb, TCA_OPTIONS, sizeof(opt), &opt);
-+
-+      return skb->len;
-+
-+nla_put_failure:
-+      nlmsg_trim(skb, b);
-+      return -1;
-+}
-+
-+static struct Qdisc_ops esfq_qdisc_ops =
-+{
-+      .next           =       NULL,
-+      .cl_ops         =       NULL,
-+      .id             =       "esfq",
-+      .priv_size      =       sizeof(struct esfq_sched_data),
-+      .enqueue        =       esfq_enqueue,
-+      .dequeue        =       esfq_dequeue,
-+      .peek           =       esfq_peek,
-+      .drop           =       esfq_drop,
-+      .init           =       esfq_init,
-+      .reset          =       esfq_reset,
-+      .destroy        =       esfq_destroy,
-+      .change         =       esfq_change,
-+      .dump           =       esfq_dump,
-+      .owner          =       THIS_MODULE,
-+};
-+
-+static int __init esfq_module_init(void)
-+{
-+      return register_qdisc(&esfq_qdisc_ops);
-+}
-+static void __exit esfq_module_exit(void)
-+{
-+      unregister_qdisc(&esfq_qdisc_ops);
-+}
-+module_init(esfq_module_init)
-+module_exit(esfq_module_exit)
-+MODULE_LICENSE("GPL");
diff --git a/target/linux/generic-2.6/patches-2.6.34/201-jhash3.patch b/target/linux/generic-2.6/patches-2.6.34/201-jhash3.patch
deleted file mode 100644 (file)
index 0218fa1..0000000
+++ /dev/null
@@ -1,227 +0,0 @@
---- a/include/linux/jhash.h
-+++ b/include/linux/jhash.h
-@@ -3,80 +3,95 @@
- /* jhash.h: Jenkins hash support.
-  *
-- * Copyright (C) 1996 Bob Jenkins (bob_jenkins@burtleburtle.net)
-+ * Copyright (C) 2006. Bob Jenkins (bob_jenkins@burtleburtle.net)
-  *
-  * http://burtleburtle.net/bob/hash/
-  *
-  * These are the credits from Bob's sources:
-  *
-- * lookup2.c, by Bob Jenkins, December 1996, Public Domain.
-- * hash(), hash2(), hash3, and mix() are externally useful functions.
-- * Routines to test the hash are included if SELF_TEST is defined.
-- * You can use this free for any purpose.  It has no warranty.
-+ * lookup3.c, by Bob Jenkins, May 2006, Public Domain.
-  *
-- * Copyright (C) 2003 David S. Miller (davem@redhat.com)
-+ * These are functions for producing 32-bit hashes for hash table lookup.
-+ * hashword(), hashlittle(), hashlittle2(), hashbig(), mix(), and final() 
-+ * are externally useful functions.  Routines to test the hash are included 
-+ * if SELF_TEST is defined.  You can use this free for any purpose.  It's in
-+ * the public domain.  It has no warranty.
-+ *
-+ * Copyright (C) 2009 Jozsef Kadlecsik (kadlec@blackhole.kfki.hu)
-  *
-  * I've modified Bob's hash to be useful in the Linux kernel, and
-- * any bugs present are surely my fault.  -DaveM
-+ * any bugs present are my fault.  Jozsef
-  */
--/* NOTE: Arguments are modified. */
--#define __jhash_mix(a, b, c) \
-+#define __rot(x,k) (((x)<<(k)) | ((x)>>(32-(k))))
-+
-+/* __jhash_mix - mix 3 32-bit values reversibly. */
-+#define __jhash_mix(a,b,c) \
-+{ \
-+  a -= c;  a ^= __rot(c, 4);  c += b; \
-+  b -= a;  b ^= __rot(a, 6);  a += c; \
-+  c -= b;  c ^= __rot(b, 8);  b += a; \
-+  a -= c;  a ^= __rot(c,16);  c += b; \
-+  b -= a;  b ^= __rot(a,19);  a += c; \
-+  c -= b;  c ^= __rot(b, 4);  b += a; \
-+}
-+
-+/* __jhash_final - final mixing of 3 32-bit values (a,b,c) into c */
-+#define __jhash_final(a,b,c) \
- { \
--  a -= b; a -= c; a ^= (c>>13); \
--  b -= c; b -= a; b ^= (a<<8); \
--  c -= a; c -= b; c ^= (b>>13); \
--  a -= b; a -= c; a ^= (c>>12);  \
--  b -= c; b -= a; b ^= (a<<16); \
--  c -= a; c -= b; c ^= (b>>5); \
--  a -= b; a -= c; a ^= (c>>3);  \
--  b -= c; b -= a; b ^= (a<<10); \
--  c -= a; c -= b; c ^= (b>>15); \
-+  c ^= b; c -= __rot(b,14); \
-+  a ^= c; a -= __rot(c,11); \
-+  b ^= a; b -= __rot(a,25); \
-+  c ^= b; c -= __rot(b,16); \
-+  a ^= c; a -= __rot(c,4);  \
-+  b ^= a; b -= __rot(a,14); \
-+  c ^= b; c -= __rot(b,24); \
- }
--/* The golden ration: an arbitrary value */
--#define JHASH_GOLDEN_RATIO    0x9e3779b9
-+/* An arbitrary initial parameter */
-+#define JHASH_GOLDEN_RATIO    0xdeadbeef
- /* The most generic version, hashes an arbitrary sequence
-  * of bytes.  No alignment or length assumptions are made about
-- * the input key.
-+ * the input key. The result depends on endianness.
-  */
- static inline u32 jhash(const void *key, u32 length, u32 initval)
- {
--      u32 a, b, c, len;
-+      u32 a,b,c;
-       const u8 *k = key;
--      len = length;
--      a = b = JHASH_GOLDEN_RATIO;
--      c = initval;
--
--      while (len >= 12) {
--              a += (k[0] +((u32)k[1]<<8) +((u32)k[2]<<16) +((u32)k[3]<<24));
--              b += (k[4] +((u32)k[5]<<8) +((u32)k[6]<<16) +((u32)k[7]<<24));
--              c += (k[8] +((u32)k[9]<<8) +((u32)k[10]<<16)+((u32)k[11]<<24));
--
--              __jhash_mix(a,b,c);
-+      /* Set up the internal state */
-+      a = b = c = JHASH_GOLDEN_RATIO + length + initval;
-+      /* all but the last block: affect some 32 bits of (a,b,c) */
-+      while (length > 12) {
-+              a += (k[0] + ((u32)k[1]<<8) + ((u32)k[2]<<16) + ((u32)k[3]<<24));
-+              b += (k[4] + ((u32)k[5]<<8) + ((u32)k[6]<<16) + ((u32)k[7]<<24));
-+              c += (k[8] + ((u32)k[9]<<8) + ((u32)k[10]<<16) + ((u32)k[11]<<24));
-+              __jhash_mix(a, b, c);
-+              length -= 12;
-               k += 12;
--              len -= 12;
-       }
--      c += length;
--      switch (len) {
--      case 11: c += ((u32)k[10]<<24);
--      case 10: c += ((u32)k[9]<<16);
--      case 9 : c += ((u32)k[8]<<8);
--      case 8 : b += ((u32)k[7]<<24);
--      case 7 : b += ((u32)k[6]<<16);
--      case 6 : b += ((u32)k[5]<<8);
-+      /* last block: affect all 32 bits of (c) */
-+      /* all the case statements fall through */
-+      switch (length) {
-+      case 12: c += (u32)k[11]<<24;
-+      case 11: c += (u32)k[10]<<16;
-+      case 10: c += (u32)k[9]<<8;
-+      case 9 : c += k[8];
-+      case 8 : b += (u32)k[7]<<24;
-+      case 7 : b += (u32)k[6]<<16;
-+      case 6 : b += (u32)k[5]<<8;
-       case 5 : b += k[4];
--      case 4 : a += ((u32)k[3]<<24);
--      case 3 : a += ((u32)k[2]<<16);
--      case 2 : a += ((u32)k[1]<<8);
-+      case 4 : a += (u32)k[3]<<24;
-+      case 3 : a += (u32)k[2]<<16;
-+      case 2 : a += (u32)k[1]<<8;
-       case 1 : a += k[0];
--      };
--
--      __jhash_mix(a,b,c);
-+              __jhash_final(a, b, c);
-+      case 0 :
-+              break;
-+      }
-       return c;
- }
-@@ -86,58 +101,57 @@ static inline u32 jhash(const void *key,
-  */
- static inline u32 jhash2(const u32 *k, u32 length, u32 initval)
- {
--      u32 a, b, c, len;
-+      u32 a, b, c;
--      a = b = JHASH_GOLDEN_RATIO;
--      c = initval;
--      len = length;
-+      /* Set up the internal state */
-+      a = b = c = JHASH_GOLDEN_RATIO + (length<<2) + initval;
--      while (len >= 3) {
-+      /* handle most of the key */
-+      while (length > 3) {
-               a += k[0];
-               b += k[1];
-               c += k[2];
-               __jhash_mix(a, b, c);
--              k += 3; len -= 3;
-+              length -= 3;
-+              k += 3;
-       }
--      c += length * 4;
--
--      switch (len) {
--      case 2 : b += k[1];
--      case 1 : a += k[0];
--      };
--
--      __jhash_mix(a,b,c);
-+      /* handle the last 3 u32's */
-+      /* all the case statements fall through */ 
-+      switch (length) {
-+      case 3: c += k[2];
-+      case 2: b += k[1];
-+      case 1: a += k[0];
-+              __jhash_final(a, b, c);
-+      case 0:     /* case 0: nothing left to add */
-+              break;
-+      }
-       return c;
- }
--
- /* A special ultra-optimized versions that knows they are hashing exactly
-  * 3, 2 or 1 word(s).
-- *
-- * NOTE: In partilar the "c += length; __jhash_mix(a,b,c);" normally
-- *       done at the end is not done here.
-  */
- static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
- {
--      a += JHASH_GOLDEN_RATIO;
--      b += JHASH_GOLDEN_RATIO;
--      c += initval;
-+      a += JHASH_GOLDEN_RATIO + initval;
-+      b += JHASH_GOLDEN_RATIO + initval;
-+      c += JHASH_GOLDEN_RATIO + initval;
--      __jhash_mix(a, b, c);
-+      __jhash_final(a, b, c);
-       return c;
- }
- static inline u32 jhash_2words(u32 a, u32 b, u32 initval)
- {
--      return jhash_3words(a, b, 0, initval);
-+      return jhash_3words(0, a, b, initval);
- }
- static inline u32 jhash_1word(u32 a, u32 initval)
- {
--      return jhash_3words(a, 0, 0, initval);
-+      return jhash_3words(0, 0, a, initval);
- }
- #endif /* _LINUX_JHASH_H */
diff --git a/target/linux/generic-2.6/patches-2.6.34/202-mips_mem_functions_performance.patch b/target/linux/generic-2.6/patches-2.6.34/202-mips_mem_functions_performance.patch
deleted file mode 100644 (file)
index 6ea9ba5..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
---- a/arch/mips/include/asm/string.h
-+++ b/arch/mips/include/asm/string.h
-@@ -133,11 +133,44 @@ strncmp(__const__ char *__cs, __const__ 
- #define __HAVE_ARCH_MEMSET
- extern void *memset(void *__s, int __c, size_t __count);
-+#define memset(__s, __c, len)                                 \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memset((__s), (__c), __len);            \
-+      else                                                    \
-+              __ret = __builtin_memset((__s), (__c), __len);  \
-+      __ret;                                                  \
-+})
- #define __HAVE_ARCH_MEMCPY
- extern void *memcpy(void *__to, __const__ void *__from, size_t __n);
-+#define memcpy(dst, src, len)                                 \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memcpy((dst), (src), __len);            \
-+      else                                                    \
-+              __ret = __builtin_memcpy((dst), (src), __len);  \
-+      __ret;                                                  \
-+})
- #define __HAVE_ARCH_MEMMOVE
- extern void *memmove(void *__dest, __const__ void *__src, size_t __n);
-+#define memmove(dst, src, len)                                        \
-+({                                                            \
-+      size_t __len = (len);                                   \
-+      void *__ret;                                            \
-+      if (__builtin_constant_p(len) && __len >= 64)           \
-+              __ret = memmove((dst), (src), __len);           \
-+      else                                                    \
-+              __ret = __builtin_memmove((dst), (src), __len); \
-+      __ret;                                                  \
-+})
-+
-+#define __HAVE_ARCH_MEMCMP
-+#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len))
- #endif /* _ASM_STRING_H */
---- a/arch/mips/lib/Makefile
-+++ b/arch/mips/lib/Makefile
-@@ -3,7 +3,7 @@
- #
- lib-y += csum_partial.o delay.o memcpy.o memcpy-inatomic.o memset.o \
--         strlen_user.o strncpy_user.o strnlen_user.o uncached.o
-+         strlen_user.o strncpy_user.o strnlen_user.o uncached.o memcmp.o
- obj-y                 += iomap.o
- obj-$(CONFIG_PCI)     += iomap-pci.o
---- /dev/null
-+++ b/arch/mips/lib/memcmp.c
-@@ -0,0 +1,22 @@
-+/*
-+ *  copied from linux/lib/string.c
-+ *
-+ *  Copyright (C) 1991, 1992  Linus Torvalds
-+ */
-+
-+#include <linux/module.h>
-+#include <linux/string.h>
-+
-+#undef memcmp
-+int memcmp(const void *cs, const void *ct, size_t count)
-+{
-+      const unsigned char *su1, *su2;
-+      int res = 0;
-+
-+      for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--)
-+              if ((res = *su1 - *su2) != 0)
-+                      break;
-+      return res;
-+}
-+EXPORT_SYMBOL(memcmp);
-+
diff --git a/target/linux/generic-2.6/patches-2.6.34/203-slab_maxsize.patch b/target/linux/generic-2.6/patches-2.6.34/203-slab_maxsize.patch
deleted file mode 100644 (file)
index 0c1ae72..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
---- a/include/linux/slab.h
-+++ b/include/linux/slab.h
-@@ -124,8 +124,8 @@ int kmem_ptr_validate(struct kmem_cache 
-  * to do various tricks to work around compiler limitations in order to
-  * ensure proper constant folding.
-  */
--#define KMALLOC_SHIFT_HIGH    ((MAX_ORDER + PAGE_SHIFT - 1) <= 25 ? \
--                              (MAX_ORDER + PAGE_SHIFT - 1) : 25)
-+#define KMALLOC_SHIFT_HIGH    ((MAX_ORDER + PAGE_SHIFT - 1) <= 17 ? \
-+                              (MAX_ORDER + PAGE_SHIFT - 1) : 17)
- #define KMALLOC_MAX_SIZE      (1UL << KMALLOC_SHIFT_HIGH)
- #define KMALLOC_MAX_ORDER     (KMALLOC_SHIFT_HIGH - PAGE_SHIFT)
diff --git a/target/linux/generic-2.6/patches-2.6.34/204-jffs2_eofdetect.patch b/target/linux/generic-2.6/patches-2.6.34/204-jffs2_eofdetect.patch
deleted file mode 100644 (file)
index 16d3e1f..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
---- a/fs/jffs2/build.c
-+++ b/fs/jffs2/build.c
-@@ -111,6 +111,17 @@ static int jffs2_build_filesystem(struct
-       dbg_fsbuild("scanned flash completely\n");
-       jffs2_dbg_dump_block_lists_nolock(c);
-+      if (c->flags & (1 << 7)) {
-+              printk("%s(): unlocking the mtd device... ", __func__);
-+              if (c->mtd->unlock)
-+                      c->mtd->unlock(c->mtd, 0, c->mtd->size);
-+              printk("done.\n");
-+
-+              printk("%s(): erasing all blocks after the end marker... ", __func__);
-+              jffs2_erase_pending_blocks(c, -1);
-+              printk("done.\n");
-+      }
-+
-       dbg_fsbuild("pass 1 starting\n");
-       c->flags |= JFFS2_SB_FLAG_BUILDING;
-       /* Now scan the directory tree, increasing nlink according to every dirent found. */
---- a/fs/jffs2/scan.c
-+++ b/fs/jffs2/scan.c
-@@ -72,7 +72,7 @@ static int file_dirty(struct jffs2_sb_in
-               return ret;
-       if ((ret = jffs2_scan_dirty_space(c, jeb, jeb->free_size)))
-               return ret;
--      /* Turned wasted size into dirty, since we apparently 
-+      /* Turned wasted size into dirty, since we apparently
-          think it's recoverable now. */
-       jeb->dirty_size += jeb->wasted_size;
-       c->dirty_size += jeb->wasted_size;
-@@ -144,8 +144,11 @@ int jffs2_scan_medium(struct jffs2_sb_in
-               /* reset summary info for next eraseblock scan */
-               jffs2_sum_reset_collected(s);
--              ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
--                                              buf_size, s);
-+              if (c->flags & (1 << 7))
-+                      ret = BLK_STATE_ALLFF;
-+              else
-+                      ret = jffs2_scan_eraseblock(c, jeb, buf_size?flashbuf:(flashbuf+jeb->offset),
-+                                                      buf_size, s);
-               if (ret < 0)
-                       goto out;
-@@ -400,7 +403,7 @@ static int jffs2_scan_xref_node(struct j
-       if (!ref)
-               return -ENOMEM;
--      /* BEFORE jffs2_build_xattr_subsystem() called, 
-+      /* BEFORE jffs2_build_xattr_subsystem() called,
-        * and AFTER xattr_ref is marked as a dead xref,
-        * ref->xid is used to store 32bit xid, xd is not used
-        * ref->ino is used to store 32bit inode-number, ic is not used
-@@ -473,7 +476,7 @@ static int jffs2_scan_eraseblock (struct
-               struct jffs2_sum_marker *sm;
-               void *sumptr = NULL;
-               uint32_t sumlen;
--            
-+
-               if (!buf_size) {
-                       /* XIP case. Just look, point at the summary if it's there */
-                       sm = (void *)buf + c->sector_size - sizeof(*sm);
-@@ -489,9 +492,9 @@ static int jffs2_scan_eraseblock (struct
-                               buf_len = sizeof(*sm);
-                       /* Read as much as we want into the _end_ of the preallocated buffer */
--                      err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len, 
-+                      err = jffs2_fill_scan_buf(c, buf + buf_size - buf_len,
-                                                 jeb->offset + c->sector_size - buf_len,
--                                                buf_len);                             
-+                                                buf_len);
-                       if (err)
-                               return err;
-@@ -510,9 +513,9 @@ static int jffs2_scan_eraseblock (struct
-                               }
-                               if (buf_len < sumlen) {
-                                       /* Need to read more so that the entire summary node is present */
--                                      err = jffs2_fill_scan_buf(c, sumptr, 
-+                                      err = jffs2_fill_scan_buf(c, sumptr,
-                                                                 jeb->offset + c->sector_size - sumlen,
--                                                                sumlen - buf_len);                            
-+                                                                sumlen - buf_len);
-                                       if (err)
-                                               return err;
-                               }
-@@ -525,7 +528,7 @@ static int jffs2_scan_eraseblock (struct
-                       if (buf_size && sumlen > buf_size)
-                               kfree(sumptr);
--                      /* If it returns with a real error, bail. 
-+                      /* If it returns with a real error, bail.
-                          If it returns positive, that's a block classification
-                          (i.e. BLK_STATE_xxx) so return that too.
-                          If it returns zero, fall through to full scan. */
-@@ -546,6 +549,17 @@ static int jffs2_scan_eraseblock (struct
-                       return err;
-       }
-+      if ((buf[0] == 0xde) &&
-+              (buf[1] == 0xad) &&
-+              (buf[2] == 0xc0) &&
-+              (buf[3] == 0xde)) {
-+              /* end of filesystem. erase everything after this point */
-+              printk("%s(): End of filesystem marker found at 0x%x\n", __func__, jeb->offset);
-+              c->flags |= (1 << 7);
-+
-+              return BLK_STATE_ALLFF;
-+      }
-+
-       /* We temporarily use 'ofs' as a pointer into the buffer/jeb */
-       ofs = 0;
-@@ -671,7 +685,7 @@ scan_more:
-                               scan_end = buf_len;
-                               goto more_empty;
-                       }
--                      
-+
-                       /* See how much more there is to read in this eraseblock... */
-                       buf_len = min_t(uint32_t, buf_size, jeb->offset + c->sector_size - ofs);
-                       if (!buf_len) {
-@@ -907,7 +921,7 @@ scan_more:
-       D1(printk(KERN_DEBUG "Block at 0x%08x: free 0x%08x, dirty 0x%08x, unchecked 0x%08x, used 0x%08x, wasted 0x%08x\n",
-                 jeb->offset,jeb->free_size, jeb->dirty_size, jeb->unchecked_size, jeb->used_size, jeb->wasted_size));
--      
-+
-       /* mark_node_obsolete can add to wasted !! */
-       if (jeb->wasted_size) {
-               jeb->dirty_size += jeb->wasted_size;
diff --git a/target/linux/generic-2.6/patches-2.6.34/205-skb_padding.patch b/target/linux/generic-2.6/patches-2.6.34/205-skb_padding.patch
deleted file mode 100644 (file)
index 6e6d28b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
---- a/include/linux/skbuff.h
-+++ b/include/linux/skbuff.h
-@@ -1377,11 +1377,18 @@ static inline int skb_network_offset(con
-  *
-  * Various parts of the networking layer expect at least 32 bytes of
-  * headroom, you should not reduce this.
-+ *
-+ * This has been changed to 64 to acommodate for routing between ethernet
-+ * and wireless, but only for new allocations
-  */
- #ifndef NET_SKB_PAD
- #define NET_SKB_PAD   32
- #endif
-+#ifndef NET_SKB_PAD_ALLOC
-+#define NET_SKB_PAD_ALLOC     64
-+#endif
-+
- extern int ___pskb_trim(struct sk_buff *skb, unsigned int len);
- static inline void __skb_trim(struct sk_buff *skb, unsigned int len)
-@@ -1471,9 +1478,9 @@ static inline void __skb_queue_purge(str
- static inline struct sk_buff *__dev_alloc_skb(unsigned int length,
-                                             gfp_t gfp_mask)
- {
--      struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD, gfp_mask);
-+      struct sk_buff *skb = alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask);
-       if (likely(skb))
--              skb_reserve(skb, NET_SKB_PAD);
-+              skb_reserve(skb, NET_SKB_PAD_ALLOC);
-       return skb;
- }
-@@ -1556,7 +1563,7 @@ static inline int __skb_cow(struct sk_bu
-               delta = headroom - skb_headroom(skb);
-       if (delta || cloned)
--              return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD), 0,
-+              return pskb_expand_head(skb, ALIGN(delta, NET_SKB_PAD_ALLOC), 0,
-                                       GFP_ATOMIC);
-       return 0;
- }
---- a/net/core/skbuff.c
-+++ b/net/core/skbuff.c
-@@ -339,9 +339,9 @@ struct sk_buff *__netdev_alloc_skb(struc
-       int node = dev->dev.parent ? dev_to_node(dev->dev.parent) : -1;
-       struct sk_buff *skb;
--      skb = __alloc_skb(length + NET_SKB_PAD, gfp_mask, 0, node);
-+      skb = __alloc_skb(length + NET_SKB_PAD_ALLOC, gfp_mask, 0, node);
-       if (likely(skb)) {
--              skb_reserve(skb, NET_SKB_PAD);
-+              skb_reserve(skb, NET_SKB_PAD_ALLOC);
-               skb->dev = dev;
-       }
-       return skb;
diff --git a/target/linux/generic-2.6/patches-2.6.34/207-powerpc_asm_segment_h.patch b/target/linux/generic-2.6/patches-2.6.34/207-powerpc_asm_segment_h.patch
deleted file mode 100644 (file)
index 1272e82..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
---- /dev/null
-+++ b/include/asm-powerpc/segment.h
-@@ -0,0 +1,6 @@
-+#ifndef _ASM_SEGMENT_H
-+#define _ASM_SEGMENT_H
-+
-+/* Only here because we have some old header files that expect it.. */
-+
-+#endif /* _ASM_SEGMENT_H */
diff --git a/target/linux/generic-2.6/patches-2.6.34/208-mips_oprofile_fix.patch b/target/linux/generic-2.6/patches-2.6.34/208-mips_oprofile_fix.patch
deleted file mode 100644 (file)
index 0cbf4ed..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/arch/mips/Makefile
-+++ b/arch/mips/Makefile
-@@ -49,7 +49,9 @@ ifneq ($(SUBARCH),$(ARCH))
- endif
- ifndef CONFIG_FUNCTION_TRACER
--cflags-y := -ffunction-sections
-+  ifndef CONFIG_PROFILING
-+    cflags-y := -ffunction-sections
-+  endif
- endif
- ifdef CONFIG_FUNCTION_GRAPH_TRACER
-   ifndef KBUILD_MCOUNT_RA_ADDRESS
---- a/arch/mips/oprofile/op_model_mipsxx.c
-+++ b/arch/mips/oprofile/op_model_mipsxx.c
-@@ -298,6 +298,11 @@ static void reset_counters(void *arg)
-       }
- }
-+static irqreturn_t mipsxx_perfcount_int(int irq, void *dev_id)
-+{
-+      return mipsxx_perfcount_handler();
-+}
-+
- static int __init mipsxx_init(void)
- {
-       int counters;
-@@ -374,6 +379,10 @@ static int __init mipsxx_init(void)
-       save_perf_irq = perf_irq;
-       perf_irq = mipsxx_perfcount_handler;
-+      if (cp0_perfcount_irq >= 0)
-+              return request_irq(cp0_perfcount_irq, mipsxx_perfcount_int,
-+                      IRQF_SHARED, "Perfcounter", save_perf_irq);
-+
-       return 0;
- }
-@@ -381,6 +390,9 @@ static void mipsxx_exit(void)
- {
-       int counters = op_model_mipsxx_ops.num_counters;
-+      if (cp0_perfcount_irq >= 0)
-+              free_irq(cp0_perfcount_irq, save_perf_irq);
-+
-       counters = counters_per_cpu_to_total(counters);
-       on_each_cpu(reset_counters, (void *)(long)counters, 1);
diff --git a/target/linux/generic-2.6/patches-2.6.34/209-mini_fo.patch b/target/linux/generic-2.6/patches-2.6.34/209-mini_fo.patch
deleted file mode 100644 (file)
index b2625cd..0000000
+++ /dev/null
@@ -1,7782 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -180,6 +180,7 @@ source "fs/ubifs/Kconfig"
- source "fs/cramfs/Kconfig"
- source "fs/squashfs/Kconfig"
- source "fs/freevxfs/Kconfig"
-+source "fs/mini_fo/Kconfig"
- source "fs/minix/Kconfig"
- source "fs/omfs/Kconfig"
- source "fs/hpfs/Kconfig"
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -77,6 +77,7 @@ obj-$(CONFIG_SQUASHFS)               += squashfs/
- obj-y                         += ramfs/
- obj-$(CONFIG_HUGETLBFS)               += hugetlbfs/
- obj-$(CONFIG_CODA_FS)         += coda/
-+obj-$(CONFIG_MINI_FO)         += mini_fo/
- obj-$(CONFIG_MINIX_FS)                += minix/
- obj-$(CONFIG_FAT_FS)          += fat/
- obj-$(CONFIG_BFS_FS)          += bfs/
---- /dev/null
-+++ b/fs/mini_fo/aux.c
-@@ -0,0 +1,577 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/* check if file exists in storage  */
-+int exists_in_storage(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+      if(dtost(dentry) == MODIFIED || dtost(dentry) == CREATED || dtost(dentry) == DEL_REWRITTEN)
-+              return 1;
-+      return 0;
-+}
-+
-+/* check if dentry is in an existing state */
-+int is_mini_fo_existant(dentry_t *dentry)
-+{
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) == DELETED || dtost(dentry) == NON_EXISTANT)
-+              return 0;
-+      else
-+              return 1;
-+}
-+
-+/*
-+ * This function will create a negative storage dentry for
-+ * dentry, what is required for many create like options.
-+ * It will create the storage structure if necessary.
-+ */
-+int get_neg_sto_dentry(dentry_t *dentry)
-+{
-+      int err = 0;
-+      unsigned int len;
-+      const unsigned char *name;
-+
-+      if(!dentry ||
-+         !dtopd(dentry) ||
-+         !(dtost(dentry) == UNMODIFIED ||
-+           dtost(dentry) == NON_EXISTANT ||
-+           dtost(dentry) == DELETED)) {
-+              printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      /* Have we got a neg. dentry already? */
-+      if(dtohd2(dentry)) {
-+              err = 0;
-+              goto out;
-+      }
-+      if(dtost(dentry->d_parent) == UNMODIFIED) {
-+              /* build sto struct */
-+              err = build_sto_structure(dentry->d_parent->d_parent, dentry->d_parent);
-+              if(err ||
-+                 dtost(dentry->d_parent) != MODIFIED) {
-+                      printk(KERN_CRIT "mini_fo: get_neg_sto_dentry: ERROR building sto structure.\n");
-+                      err = -1;
-+                      goto out;
-+              }
-+      }
-+
-+      len = dentry->d_name.len;
-+      name = dentry->d_name.name;
-+
-+      dtohd2(dentry) =
-+              lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+
-+ out:
-+      return err;
-+}
-+
-+int check_mini_fo_dentry(dentry_t *dentry)
-+{
-+      ASSERT(dentry != NULL);
-+      ASSERT(dtopd(dentry) != NULL);
-+      ASSERT((dtohd(dentry) != NULL) || (dtohd2(dentry) != NULL));
-+
-+/*    if(dtost(dentry) == MODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT(dtohd(dentry) != NULL); */
-+/*            ASSERT(dtohd(dentry)->d_inode != NULL); */
-+/*            ASSERT(dtohd2(dentry) != NULL); */
-+/*            ASSERT(dtohd2(dentry)->d_inode != NULL); */
-+/*    } */
-+/*    else if(dtost(dentry) == UNMODIFIED) { */
-+/*            ASSERT(dentry->d_inode != NULL); */
-+/*            ASSERT( */
-+/*    } */
-+      return 0;
-+}
-+
-+int check_mini_fo_file(file_t *file)
-+{
-+      ASSERT(file != NULL);
-+      ASSERT(ftopd(file) != NULL);
-+      ASSERT(file->f_dentry != NULL);
-+
-+      /* violent checking, check depending of state and type
-+       *      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {}
-+       */
-+      ASSERT((ftohf(file) != NULL) || (ftohf2(file) != NULL));
-+      return 0;
-+}
-+
-+int check_mini_fo_inode(inode_t *inode)
-+{
-+      ASSERT(inode != NULL);
-+      ASSERT(itopd(inode) != NULL);
-+      ASSERT((itohi(inode) != NULL) || (itohi2(inode) != NULL));
-+      return 0;
-+}
-+
-+/*
-+ * will walk a base path as provided by get_mini_fo_bpath and return
-+ * the (hopefully ;-) ) positive dentry of the renamed base dir.
-+ *
-+ * This does some work of path_init.
-+ */
-+dentry_t *bpath_walk(super_block_t *sb, char *bpath)
-+{
-+      int err;
-+        struct vfsmount *mnt;
-+      struct nameidata nd;
-+
-+      /* be paranoid */
-+      if(!bpath || bpath[0] != '/') {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid string.\n");
-+              return NULL;
-+      }
-+      if(!sb || !stopd(sb)) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: Invalid sb.\n");
-+              return NULL;
-+      }
-+
-+      /* fix this: how do I reach this lock?
-+       * read_lock(&current->fs->lock); */
-+      mnt = mntget(stopd(sb)->hidden_mnt);
-+      /* read_unlock(&current->fs->lock); */
-+
-+      err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-+
-+      /* validate */
-+      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-+              return NULL;
-+      }
-+      return nd.dentry;
-+}
-+
-+
-+/* returns the full path of the basefile incl. its name */
-+int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len)
-+{
-+      char *buf_walker;
-+      int len = 0;
-+      dentry_t *sky_walker;
-+
-+      if(!dentry || !dtohd(dentry)) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              len += sky_walker->d_name.len + 1 ; /* 1 for '/' */
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* 1 to oil the loop */
-+      *bpath = (char*)  kmalloc(len + 1, GFP_KERNEL);
-+      if(!*bpath) {
-+              printk(KERN_CRIT "mini_fo: get_mini_fo_bpath: out of mem.\n");
-+              return -1;
-+      }
-+      buf_walker = *bpath+len; /* put it on last char */
-+      *buf_walker = '\n';
-+      sky_walker = dtohd(dentry);
-+
-+      do {
-+              buf_walker -= sky_walker->d_name.len;
-+              strncpy(buf_walker,
-+                      sky_walker->d_name.name,
-+                      sky_walker->d_name.len);
-+              *(--buf_walker) = '/';
-+              sky_walker = sky_walker->d_parent;
-+      } while(sky_walker != stopd(dentry->d_inode->i_sb)->base_dir_dentry);
-+
-+      /* bpath_len doesn't count newline! */
-+      *bpath_len = len;
-+      return 0;
-+}
-+
-+int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                  dentry_t *src_dentry, struct vfsmount *src_mnt)
-+{
-+      void *buf;
-+      mm_segment_t old_fs;
-+      file_t *tgt_file;
-+      file_t *src_file;
-+      int bytes, len, tmp, err;
-+      err = 0;
-+
-+      if(!(tgt_dentry->d_inode && src_dentry->d_inode)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, neg. dentry passed.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dget(tgt_dentry);
-+      dget(src_dentry);
-+      mntget(tgt_mnt);
-+      mntget(src_mnt);
-+
-+      /* open file write only */
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      if(!tgt_file || IS_ERR(tgt_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-+              err = PTR_ERR(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* open file read only */
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      if(!src_file || IS_ERR(src_file)) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-+              err = PTR_ERR(src_file);
-+
-+              /* close target file */
-+              fput(tgt_file);
-+              goto out_err;
-+      }
-+
-+      /* check if the filesystem(s) support read respective write */
-+      if(!src_file->f_op->read || !tgt_file->f_op->write) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, no fs read or write support.\n");
-+              err = -EPERM;
-+              goto out_close;
-+      }
-+
-+      /* allocate a page for transfering the data */
-+      buf = (void *) __get_free_page(GFP_KERNEL);
-+      if(!buf) {
-+              printk(KERN_CRIT "mini_fo_cp_cont: ERROR, out of kernel mem.\n");
-+              goto out_err;
-+      }
-+
-+      tgt_file->f_pos = 0;
-+      src_file->f_pos = 0;
-+
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+
-+      /* Doing this I assume that a read operation will return a full
-+       * buffer while there is still data to read, and a less than
-+       * full buffer when all data has been read.
-+       */
-+      bytes = len = PAGE_SIZE;
-+      while(bytes == len) {
-+              bytes = src_file->f_op->read(src_file, buf, len,
-+                                           &src_file->f_pos);
-+              tmp = tgt_file->f_op->write(tgt_file, buf, bytes,
-+                                          &tgt_file->f_pos);
-+              if(tmp != bytes) {
-+                      printk(KERN_CRIT "mini_fo_cp_cont: ERROR writing.\n");
-+                      goto out_close_unset;
-+              }
-+      }
-+
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+      fput(tgt_file);
-+      fput(src_file);
-+      goto out;
-+
-+ out_close_unset:
-+      free_page((unsigned long) buf);
-+      set_fs(old_fs);
-+
-+ out_close:
-+      fput(tgt_file);
-+      fput(src_file);
-+
-+ out_err:
-+      dput(tgt_dentry);
-+      dput(src_dentry);
-+
-+      /* mk: not sure if this need to be done */
-+      mntput(tgt_mnt);
-+      mntput(src_mnt);
-+
-+ out:
-+      return err;
-+}
-+
-+/* mk:
-+ * ndl (no-duplicate list) stuff
-+ * This is used in mini_fo_readdir, to save the storage directory contents
-+ * and later when reading base, match them against the list in order
-+ * to avoid duplicates.
-+ */
-+
-+/* add a file specified by name and len to the ndl
-+ * Return values: 0 on success, <0 on failure.
-+ */
-+int ndl_add_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct ndl_entry *tmp_entry;
-+
-+      tmp_entry = (struct ndl_entry *)
-+              kmalloc(sizeof(struct ndl_entry), GFP_KERNEL);
-+      if(!tmp_entry) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+        tmp_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!tmp_entry->name) {
-+                printk(KERN_CRIT "mini_fo: ndl_add_entry: out of mem.\n");
-+                return -ENOMEM;
-+        }
-+      strncpy(tmp_entry->name, name, len);
-+        tmp_entry->len = len;
-+
-+        list_add(&tmp_entry->list, &rd->ndl_list);
-+        rd->ndl_size++;
-+        return 0;
-+}
-+
-+/* delete all list entries and free memory */
-+void ndl_put_list(struct readdir_data *rd)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return;
-+      while(!list_empty(&rd->ndl_list)) {
-+              tmp = rd->ndl_list.next;
-+                list_del(tmp);
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+              kfree(tmp_entry->name);
-+                kfree(tmp_entry);
-+        }
-+      rd->ndl_size = 0;
-+}
-+
-+/* Check if a file specified by name and len is in the ndl
-+ * Return value: 0 if not in list, 1 if file is found in ndl.
-+ */
-+int ndl_check_entry(struct readdir_data *rd, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+      struct ndl_entry *tmp_entry;
-+
-+      if(rd->ndl_size <= 0)
-+              return 0;
-+
-+      list_for_each(tmp, &rd->ndl_list) {
-+                tmp_entry = list_entry(tmp, struct ndl_entry, list);
-+                if(tmp_entry->len != len)
-+                        continue;
-+                if(!strncmp(tmp_entry->name, name, len))
-+                        return 1;
-+        }
-+        return 0;
-+}
-+
-+/* mk:
-+ * Recursive function to create corresponding directorys in the storage fs.
-+ * The function will build the storage directorys up to dentry.
-+ */
-+int build_sto_structure(dentry_t *dir, dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(dentry->d_parent != dir) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [1].\n");
-+              return 1;
-+      }
-+
-+              if(dtost(dir) != MODIFIED) {
-+              err = build_sto_structure(dir->d_parent, dentry->d_parent);
-+              if(err)
-+                      return err;
-+      }
-+
-+      /* ok, coming back again. */
-+      check_mini_fo_dentry(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(!hidden_sto_dentry) {
-+              /*
-+               * This is the case after creating the first
-+               * hidden_sto_dentry.
-+               * After one negative storage_dentry, all pointers to
-+               * hidden_storage dentries are set to NULL. We need to
-+               * create the negative dentry before we create the storage
-+               * file.
-+               */
-+              unsigned int len;
-+              const unsigned char *name;
-+              len = dtohd(dentry)->d_name.len;
-+              name = dtohd(dentry)->d_name.name;
-+              hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              dtohd2(dentry) = hidden_sto_dentry;
-+      }
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      /* lets be safe */
-+      if(dtohd2(dir) != hidden_sto_dir_dentry) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: invalid parameter or meta data corruption [2].\n");
-+              return 1;
-+      }
-+
-+      /* check for errors in lock_parent */
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if(IS_ERR(hidden_sto_dir_dentry)) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: lock_parent failed.\n");
-+              return err;
-+      }
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      dir->d_inode->i_mode);
-+
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [1].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return err;
-+      }
-+
-+      /* everything ok! */
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: build_sto_structure: failed to create storage dir [2].\n");
-+              /* was: unlock_dir(dir); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&dir->d_inode->i_mutex);
-+#else
-+              up(&dir->d_inode->i_sem);
-+#endif
-+              dput(dir);
-+              return 1;
-+      }
-+
-+      /* interpose the new inode and set new state */
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      dtopd(dentry)->state = MODIFIED;
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+      fist_copy_attr_timesizes(dir->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dir->d_inode->i_nlink++;
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+      return 0;
-+}
-+
-+
-+#if 0 /* unused */
-+
-+/*
-+ * Read "len" bytes from "filename" into "buf".
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_read_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+    /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDONLY, 0);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_read_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->read)
-+      return -2;  /* file(system) doesn't allow reads */
-+
-+    /* now read len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->read(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+
-+
-+/*
-+ * Write "len" bytes from "buf" to "filename"
-+ * "buf" is in kernel space.
-+ */
-+int
-+mini_fo_write_file(const char *filename, void *buf, int len)
-+{
-+    file_t *filp;
-+    mm_segment_t oldfs;
-+    int bytes;
-+                              /* Chroot? Maybe NULL isn't right here */
-+    filp = filp_open(filename, O_RDWR|O_CREAT, 0640);
-+    if (!filp || IS_ERR(filp)) {
-+      printk("mini_fo_write_file err %d\n", (int) PTR_ERR(filp));
-+      return -1;  /* or do something else */
-+    }
-+
-+    if (!filp->f_op->write)
-+      return -2;  /* file(system) doesn't allow writes */
-+
-+    /* now write len bytes from offset 0 */
-+    filp->f_pos = 0;          /* start offset */
-+    oldfs = get_fs();
-+    set_fs(KERNEL_DS);
-+    bytes = filp->f_op->write(filp, buf, len, &filp->f_pos);
-+    set_fs(oldfs);
-+
-+    /* close the file */
-+    fput(filp);
-+
-+    return bytes;
-+}
-+
-+#endif /* unused */
-+
---- /dev/null
-+++ b/fs/mini_fo/ChangeLog
-@@ -0,0 +1,281 @@
-+2006-01-24  Markus Klotzbuecher  <mk@mary.denx.de>
-+
-+      * Add tons of ugly ifdefs to Ed L. Cashin's mutex patch to
-+          retain backwards compatibility.
-+
-+2006-01-24  Ed L. Cashin <ecashin@coraid.com>
-+
-+      * Support for the new mutex infrastructure
-+      (7892f2f48d165a34b0b8130c8a195dfd807b8cb6)
-+
-+2005-10-15  Markus Klotzbuecher  <mk@localhost.localdomain>
-+
-+      * Bugfix for a serious memory leak in mini_fo_follow_link.
-+
-+2005-09-21  Markus Klotzbuecher  <mk@mary>
-+
-+      * new release 0.6.1
-+
-+      * fix of a compiler warning due to changes in 2.6.13
-+
-+2005-09-21  Klaus Wenninger  <klaus.wenninger@siemens.com>
-+
-+      * file.c: readdir: fix for a bug that caused directory entries
-+          to show up twice when using storage filesystems such as
-+          minixfs or pramfs.
-+
-+2005-06-30  Eric Lammerts <eric@lammerts.org>
-+
-+      * fix for an oops when overwriting a binary thats beeing
-+          executed.
-+
-+2005-06-09    <mk@mary>
-+
-+      * Renamed overlay to mini_fo-overlay.
-+
-+      * Added mini_fo-merge script to allow merging of storage and base
-+      after making modifications.
-+
-+2005-05-22  root  <mk@mary>
-+
-+      * Added overlay script that allows to easily mount mini_fo ontop
-+      of a given base directory
-+
-+2005-05-10    <mk@mary>
-+
-+      * inode.c: xattr functions return -EOPNOSUPP instead of
-+          -ENOSUPP, what confuses "ls -l"
-+
-+      * Changed license from LGPL to GPL.
-+
-+2005-05-08  root  <mk@mary>
-+
-+      * Makefile: clean it up and added make install and make
-+          uninstall.
-+
-+2005-05-06    <mk@mary>
-+
-+      * merged devel branch back to main. [v0-6-0-pre3]
-+
-+      * removed unused files print.c and fist_ioctl. [devel-0-0-18]
-+
-+      * ioctl: removed fist_ioctl stuff, that is not needed for
-+          now.
-+
-+2005-05-03    <mk@mary>
-+
-+      * file.c: simplified mini_fo_open and mini_fo_setattr using
-+          new state changing functions. [devel-0-0-17]
-+
-+      * inode.c: Fixed getattr state bug (see below) in 2.4 function
-+          mini_fo_inode revalidate.
-+
-+      * inode.c: found an other bug in mini_fo_getattr. States are not
-+        reliable in this function, as a file can be opened, unlinked and
-+        the getattr function called. This results in a deleted dentry
-+        with an inode. Fix is to ignore states and simply use the inode
-+        available.
-+
-+2005-04-29    <mk@mary>
-+
-+      * file.c: Bugfix and cleanup in fasync and fsync. [devel-0-0-16]
-+
-+      * file.c: do not use mini_fo_lock so the generic version is
-+          used (I guess).
-+
-+      * inode.c: getattr, never call getattr on lower files, as this
-+          will cause the inum to change.
-+
-+      * inode.c: rename_reg_file renamed to rename_nondir, as it
-+          doesn't matter as long it't not a dir. Removed all
-+          rename_dev_file etc.
-+
-+      * tagged as devel-0-0-15
-+
-+      * inode.c: added support for chosing support for extended
-+          attrs at compile time by XATTR define in mini_fo.h .
-+
-+      * inode.c: fixed mini_fo_getattr to use mini_fo inode and not
-+          lower again, what avoids inode number changes that confused
-+          rm again. This is the proper solution.
-+
-+2005-04-24    <mk@mary>
-+
-+      * all files: updated Copyright notive to 2005. [devel-0-0-14]
-+
-+      * inode.c: fixed mini_fo_getattr to not change the inode
-+          number, even if lower files change.
-+
-+      * super.c: fixed a bug that caused deleted base file to show
-+          up suddenly after some time, or after creating a special
-+          file. The problem was that after some time or after special
-+          file creating sync_sb_inodes is called by the vfs, that
-+          called our mini_fo_put_inode. There was (wrongly) called
-+          __meta_put_lists, that nuked the lists, although the inode
-+          was going to continue its life. Moving __meta_put_lists to
-+          mini_fo_clear_inode, where an inode is really destroyed,
-+          solved the problem.
-+
-+
-+2005-04-23    <mk@mary>
-+
-+      * state.c, aux.c: more cleaning up and
-+          simplifications. [devel-0-0-13]
-+
-+      * inode.c: implemented mini_fo_getattr, that was required for
-+          2.6 because inode_revalidate has been remove there, and the
-+        old "du" bug returned.
-+
-+
-+2005-04-20    <mk@mary>
-+
-+      * aux.c: get_neg_sto_dentry(): allow to be called for dentries
-+          in state UNMODIFIED, NON_EXISTANT _and_ DELETED.
-+
-+2005-04-19    <mk@mary>
-+
-+      * Fixed a bug under 2.6 that caused files deleted via mini_fo
-+          not to be deleted properly and therefore the fs filled up
-+          untill no memory was left. [devel-0-0-12]
-+
-+      * Added basic hard link support. This means that creating
-+          hardlinks will work, but existing ones will be treated as
-+          individual files. [devel-0-0-11]
-+
-+2005-04-17    <mk@mary>
-+
-+      * Bugfixes
-+
-+2005-04-13  root  <mk@mary>
-+
-+      * Added file state.c for the state transition
-+          functions. Doesn't work very well yet, though...
-+
-+2005-04-12    <mk@mary>
-+
-+      * Porting to 2.6 started, which is easier than expected, also
-+          due to Olivier previous work.
-+
-+2005-04-08    <mk@mary>
-+
-+      * Fixed the bug that caused du to return invalid sizes of
-+          directory trees. The problem was that
-+          mini_fo_inode_revalidate didn't always copy the attributes
-+          from the base inode properly.
-+
-+2005-04-01  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Merged devel branch back to main trunk and updated the
-+          RELEASE notes. This will be 0-6-0-pre1.
-+
-+2005-03-31  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed some bugs in rename_reg_file, that only showed up in
-+          the kernel compile test. Kernel compiles cleanly ontop of
-+          mini_fo, now also make mrproper etc. work. Seems pretty stable.
-+
-+2005-03-28  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Many, many directory renaming bugfixes and a lot of other
-+          cleanup. Dir renaming seems to work relatively stable.
-+
-+2005-03-22  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing lightweight directory renaming. Some
-+          basic testing indicates it works fine.
-+        Next is to implement testcases for the testsuite and confirm
-+          everything is really working ok.
-+
-+2005-03-18  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Finished implementing meta.c stuff required for directory
-+          renaming.
-+
-+2005-03-17  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Fixed all compile warnings + an extremly old bug that
-+          somehow crept in while reworking the wol stuff to the META
-+          system. Turning on -Werror again... :-)
-+
-+      * Fixed some bugs in the new rename_reg_file function.
-+
-+      * Rewrote mini_fo rename and split it into several
-+          subfunctions, that handle the different types
-+          seperately. Rewrote the regular file function aswell, as it
-+          was implemented somewhat inefficient.
-+
-+2005-03-16  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Implemented new META subsystem, removed old WOL stuff in favor
-+        if it.
-+
-+      * After some basic testing everything seems ok...
-+
-+2005-03-11  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Renaming a non regular file caused trouble because I always
-+        tried to copy the contents. Now I only do this for regular
-+        files. mini_fo_rename still isn't implemented properly, renaming
-+        of device files, symlinks etc. results in a empty regular file
-+        instead of the proper type.
-+
-+      * Directory renaming suddenly works! What a surprise! I guess
-+          this is because renaming is implemented as making a copy and
-+          removing the original. Still this might not work
-+          everywhere...
-+
-+2005-03-09  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Bugfix, when a mini_fo directory that exists in storage
-+        (state: MODIFIED, CREATED and DEL_REWRITTEN) is deleted, a
-+        possibly existing WOL file contained in it needs to be
-+        deleted too.
-+
-+      * Starting cleanup: defined state names in order to get rid of
-+          the state numbers.
-+
-+2005-03-08  Markus Klotzbuecher  <mk@chasey>
-+
-+      * Makefile fix, fist_ioctl was built against wrong sources if ARCH=um
-+
-+      * Fixed a bug in dentry.c, mini_fo_d_hash. In state 4 =
-+          DEL_REWRITTEN the hash was calculated from the base dentry,
-+          which was wrong and and caused assertions in
-+          __mini_fo_hidden_dentry to fail.
-+
-+2005-02-21    <mk@mary>
-+
-+      * Implemented directory deleting (inode.c)
-+
-+      * main.c: made mini_fo_parse_options a little more robust.
-+
-+2004-12-22    <mk@mary>
-+
-+      * Makefile cleanup and uml stuff, removed unneccessary files
-+
-+      * Created a new and hopefully more informative README
-+
-+      * CHANGELOG: created a new CHANGELOG and added old entries reversely
-+
-+
-+2004-10-24 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Fix: owner and group where not correctly copied from base to
-+          storage.
-+
-+
-+2004-10-05 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of fsync, fasync and lock mini_fo functions.
-+
-+
-+2004-09-29 Bob Lee <bob@pantasys.com>
-+
-+      * Fix of a serious pointer bug
-+
-+
-+2004-09-28 Gleb Natapov <gleb@nbase.co.il>
-+
-+      * Implementation of mini_fo_mknod and mini_fo_rename, support
-+          for device files.
-+
---- /dev/null
-+++ b/fs/mini_fo/dentry.c
-@@ -0,0 +1,244 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+/*
-+ * THIS IS A BOOLEAN FUNCTION: returns 1 if valid, 0 otherwise.
-+ */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_d_revalidate(dentry_t *dentry, struct nameidata *nd)
-+#else
-+mini_fo_d_revalidate(dentry_t *dentry, int flags)
-+#endif
-+{
-+      int err1 = 1; /* valid = 1, invalid = 0 */
-+      int err2 = 1;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      hidden_dentry  = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry &&
-+         hidden_dentry->d_op &&
-+         hidden_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, nd);
-+#else
-+              err1 = hidden_dentry->d_op->d_revalidate(hidden_dentry, flags);
-+#endif
-+      }
-+      if(hidden_sto_dentry &&
-+         hidden_sto_dentry->d_op &&
-+         hidden_sto_dentry->d_op->d_revalidate) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           nd);
-+#else
-+              err2 = hidden_sto_dentry->d_op->d_revalidate(hidden_sto_dentry,
-+                                                           flags);
-+#endif
-+      }
-+
-+      /* mk: if one of the lower level dentries are valid,
-+       * the mini_fo dentry is too.
-+       */
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_d_hash(dentry_t *dentry, qstr_t *name)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry);
-+       * hidden_sto_dentry = mini_fo_hidden_sto_dentry(dentry); */
-+
-+      /* state 1, 3, 4, 5: build the hash for the storage dentry */
-+      if((dtopd(dentry)->state == MODIFIED) ||
-+         (dtopd(dentry)->state == CREATED) ||
-+         (dtopd(dentry)->state == DEL_REWRITTEN) ||
-+         (dtopd(dentry)->state == DELETED)) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 2: build the hash for the base dentry */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+              }
-+              goto out;
-+      }
-+      /* state 6: build hash for the dentry that exists */
-+      if(dtopd(dentry)->state == NON_EXISTANT) {
-+              hidden_sto_dentry = dtohd2(dentry);
-+              if(hidden_sto_dentry &&
-+                 hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_hash) {
-+                      err = hidden_sto_dentry->d_op->d_hash(hidden_sto_dentry, name);
-+                      goto out;
-+              }
-+              hidden_dentry = dtohd(dentry);
-+              if(hidden_dentry &&
-+                 hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_hash) {
-+                      err = hidden_dentry->d_op->d_hash(hidden_dentry, name);
-+                      goto out;
-+              }
-+      }
-+
-+      printk(KERN_CRIT "mini_fo: d_hash: invalid state detected.\n");
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_d_compare(dentry_t *dentry, qstr_t *a, qstr_t *b)
-+{
-+      int err;
-+      dentry_t *hidden_dentry=NULL;
-+
-+      /* hidden_dentry = mini_fo_hidden_dentry(dentry); */
-+      if(dtohd2(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else if(dtohd(dentry))
-+              hidden_dentry = dtohd(dentry);
-+
-+      if (hidden_dentry && hidden_dentry->d_op && hidden_dentry->d_op->d_compare) {
-+              err = hidden_dentry->d_op->d_compare(hidden_dentry, a, b);
-+      } else {
-+              err = ((a->len != b->len) || memcmp(a->name, b->name, b->len));
-+      }
-+
-+      return err;
-+}
-+
-+
-+int
-+mini_fo_d_delete(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      int err = 0;
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_delete: negative dentry passed.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              if(hidden_dentry->d_op &&
-+                 hidden_dentry->d_op->d_delete) {
-+                      err = hidden_dentry->d_op->d_delete(hidden_dentry);
-+              }
-+      }
-+      if(hidden_sto_dentry) {
-+              if(hidden_sto_dentry->d_op &&
-+                 hidden_sto_dentry->d_op->d_delete) {
-+                      err = hidden_sto_dentry->d_op->d_delete(hidden_sto_dentry);
-+              }
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+void
-+mini_fo_d_release(dentry_t *dentry)
-+{
-+      dentry_t *hidden_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+
-+      /* this could be a negative dentry, so check first */
-+      if (!dtopd(dentry)) {
-+              printk(KERN_CRIT "mini_fo_d_release: no private data.\n");
-+              goto out;
-+      }
-+      hidden_dentry = dtohd(dentry);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      if(hidden_dentry) {
-+              /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_dentry);
-+      }
-+      if(hidden_sto_dentry) {
-+                /* decrement hidden dentry's counter and free its inode */
-+              dput(hidden_sto_dentry);
-+      }
-+
-+      /* free private data (mini_fo_dentry_info) here */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* just to be safe */
-+ out:
-+      return;
-+}
-+
-+
-+/*
-+ * we don't really need mini_fo_d_iput, because dentry_iput will call iput() if
-+ * mini_fo_d_iput is not defined. We left this implemented for ease of
-+ * tracing/debugging.
-+ */
-+void
-+mini_fo_d_iput(dentry_t *dentry, inode_t *inode)
-+{
-+      iput(inode);
-+}
-+
-+
-+struct dentry_operations mini_fo_dops = {
-+      d_revalidate:   mini_fo_d_revalidate,
-+      d_hash:         mini_fo_d_hash,
-+      d_compare:              mini_fo_d_compare,
-+      d_release:              mini_fo_d_release,
-+      d_delete:               mini_fo_d_delete,
-+      d_iput:         mini_fo_d_iput,
-+};
---- /dev/null
-+++ b/fs/mini_fo/file.c
-@@ -0,0 +1,713 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#define ROUND_UP(x) (((x)+sizeof(long)-1) & ~(sizeof(long)-1))
-+
-+/*******************
-+ * File Operations *
-+ *******************/
-+
-+STATIC loff_t
-+mini_fo_llseek(file_t *file, loff_t offset, int origin)
-+{
-+      loff_t err;
-+      file_t *hidden_file = NULL;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to llseek from a directory */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      /* always set hidden position to this one */
-+      hidden_file->f_pos = file->f_pos;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      memcpy(&(hidden_file->f_ra),
-+             &(file->f_ra),
-+             sizeof(struct file_ra_state));
-+#else
-+      if (file->f_reada) { /* update readahead information if needed */
-+              hidden_file->f_reada = file->f_reada;
-+              hidden_file->f_ramax = file->f_ramax;
-+              hidden_file->f_raend = file->f_raend;
-+              hidden_file->f_ralen = file->f_ralen;
-+              hidden_file->f_rawin = file->f_rawin;
-+      }
-+#endif
-+      if (hidden_file->f_op && hidden_file->f_op->llseek)
-+              err = hidden_file->f_op->llseek(hidden_file, offset, origin);
-+      else
-+              err = generic_file_llseek(hidden_file, offset, origin);
-+
-+      if (err < 0)
-+              goto out;
-+
-+      if (err != file->f_pos) {
-+              file->f_pos = err;
-+              // ION maybe this?
-+              //      file->f_pos = hidden_file->f_pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              file->f_reada = 0;
-+#endif
-+              file->f_version++;
-+      }
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* mk: fanout capable */
-+STATIC ssize_t
-+mini_fo_read(file_t *file, char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      loff_t pos = *ppos;
-+
-+      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+              /* Check if trying to read from a directory */
-+              /* printk(KERN_CRIT "mini_fo_read: ERROR: trying to read data from a directory.\n"); */
-+              err = -EISDIR;
-+              goto out;
-+      }
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->read)
-+              goto out;
-+
-+      err = hidden_file->f_op->read(hidden_file, buf, count, &pos);
-+      *ppos = pos;
-+
-+      if (err >= 0) {
-+              /* atime should also be updated for reads of size zero or more */
-+              fist_copy_attr_atime(file->f_dentry->d_inode,
-+                                   hidden_file->f_dentry->d_inode);
-+      }
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * MAJOR HACK
-+       * because pread() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on read() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+      if (hidden_file->f_reada) { /* update readahead information if needed */
-+              file->f_reada = hidden_file->f_reada;
-+              file->f_ramax = hidden_file->f_ramax;
-+              file->f_raend = hidden_file->f_raend;
-+              file->f_ralen = hidden_file->f_ralen;
-+              file->f_rawin = hidden_file->f_rawin;
-+      }
-+#else
-+      memcpy(&(file->f_ra),&(hidden_file->f_ra),sizeof(struct file_ra_state));
-+#endif
-+
-+ out:
-+      return err;
-+}
-+
-+
-+/* this mini_fo_write() does not modify data pages! */
-+STATIC ssize_t
-+mini_fo_write(file_t *file, const char *buf, size_t count, loff_t *ppos)
-+{
-+      int err = -EINVAL;
-+      file_t *hidden_file = NULL;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      loff_t pos = *ppos;
-+
-+      /* mk: fan out: */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      /* This is bad! We have no storage file to write to. This
-+                       * should never happen because if a file is opened for
-+                       * writing, a copy should have been made earlier.
-+                       */
-+                      printk(KERN_CRIT "mini_fo: write : ERROR, no storage file to write.\n");
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      inode = file->f_dentry->d_inode;
-+      hidden_inode = itohi2(inode);
-+      if(!hidden_inode) {
-+              printk(KERN_CRIT "mini_fo: write: no sto inode found, not good.\n");
-+              goto out;
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->write)
-+              goto out;
-+
-+      /* adjust for append -- seek to the end of the file */
-+      if (file->f_flags & O_APPEND)
-+              pos = inode->i_size;
-+
-+      err = hidden_file->f_op->write(hidden_file, buf, count, &pos);
-+
-+      /*
-+       * copy ctime and mtime from lower layer attributes
-+       * atime is unchanged for both layers
-+       */
-+      if (err >= 0)
-+              fist_copy_attr_times(inode, hidden_inode);
-+
-+      *ppos = pos;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      /*
-+       * XXX: MAJOR HACK
-+       *
-+       * because pwrite() does not have any way to tell us that it is
-+       * our caller, then we don't know for sure if we have to update
-+       * the file positions.  This hack relies on write() having passed us
-+       * the "real" pointer of its struct file's f_pos field.
-+       */
-+      if (ppos == &file->f_pos)
-+              hidden_file->f_pos = *ppos = pos;
-+#endif
-+      /* update this inode's size */
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+ out:
-+      return err;
-+}
-+
-+/* Global variable to hold a file_t pointer.
-+ * This serves to allow mini_fo_filldir function to know which file is
-+ * beeing read, which is required for two reasons:
-+ *
-+ *   - be able to call wol functions in order to avoid listing deleted
-+ *     base files.
-+ *   - if we're reading a directory which is in state 1, we need to
-+ *     maintain a list (in mini_fo_filldir) of which files allready
-+ *     have been copied to userspace,to detect files existing in base
-+ *     and storage and not list them twice.
-+ */
-+filldir_t mini_fo_filldir_orig;
-+file_t *mini_fo_filldir_file;
-+
-+/* mainly copied from fs/readdir.c */
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                u64 ino, unsigned int d_type)
-+#else
-+mini_fo_filldir(void * __buf, const char * name, int namlen, loff_t offset,
-+                ino_t ino, unsigned int d_type)
-+#endif
-+{
-+      struct getdents_callback * buf = (struct getdents_callback *) __buf;
-+      file_t* file = mini_fo_filldir_file;
-+
-+      /* In theses states we filter meta files in storage (WOL) */
-+      if(file && (dtopd(file->f_dentry)->state == MODIFIED ||
-+                  dtopd(file->f_dentry)->state == CREATED ||
-+                  dtopd(file->f_dentry)->state == DEL_REWRITTEN)) {
-+
-+              int tmp = strlen(META_FILENAME);
-+              if(tmp  == namlen) {
-+                      if(!strncmp(name, META_FILENAME, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      /* check if we are merging the contents of storage and base */
-+      if(file && dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* check if we are still reading storage contents, if
-+               * yes, we just save the name of the file for duplicate
-+               * checking later. */
-+
-+              if(!ftopd(file)->rd.sto_done) {
-+                      /* put file into ndl list */
-+                      if(ndl_add_entry(&ftopd(file)->rd, name, namlen))
-+                              printk(KERN_CRIT "mini_fo_filldir: Error adding to ndl.\n");
-+              } else {
-+                      /* check if file has been deleted */
-+                      if(meta_check_d_entry(file->f_dentry, name, namlen))
-+                              return 0;
-+
-+                      /* do duplicate checking */
-+                      if(ndl_check_entry(&ftopd(file)->rd, name, namlen))
-+                              return 0;
-+              }
-+      }
-+
-+      return mini_fo_filldir_orig(buf, name, namlen, offset, ino, d_type);
-+}
-+
-+
-+STATIC int
-+mini_fo_readdir(file_t *file, void *dirent, filldir_t filldir)
-+{
-+      int err = 0;/* mk: ??? -ENOTDIR; */
-+      file_t *hidden_file = NULL;
-+      file_t *hidden_sto_file = NULL;
-+      inode_t *inode;
-+      struct getdents_callback *buf;
-+      int oldcount;
-+
-+#if defined(FIST_FILTER_NAME) || defined(FIST_FILTER_SCA)
-+      struct mini_fo_getdents_callback buf;
-+#endif /* FIST_FILTER_NAME || FIST_FILTER_SCA */
-+
-+      buf = (struct getdents_callback *) dirent;
-+      oldcount = buf->count;
-+      inode = file->f_dentry->d_inode;
-+      mini_fo_filldir_file = file;
-+      mini_fo_filldir_orig = filldir;
-+
-+      ftopd(file)->rd.sto_done = 0;
-+      do {
-+              if (ftopd(file) != NULL) {
-+                      if(ftohf2(file)) {
-+                              hidden_sto_file = ftohf2(file);
-+                              err = vfs_readdir(hidden_sto_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_sto_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_sto_file->f_dentry->d_inode);
-+                              /* not finshed yet, we'll be called again */
-+                              if (buf->count != oldcount)
-+                                      break;
-+                      }
-+
-+                      ftopd(file)->rd.sto_done = 1;
-+
-+                      if(ftohf(file)) {
-+                              hidden_file = ftohf(file);
-+                              err = vfs_readdir(hidden_file, mini_fo_filldir, dirent);
-+                              file->f_pos = hidden_file->f_pos;
-+                              if (err > 0)
-+                                      fist_copy_attr_atime(inode, hidden_file->f_dentry->d_inode);
-+                      }
-+
-+              }
-+      } while (0);
-+
-+      /* mk:
-+       * we need to check if all the directory data has been copied to userspace,
-+       * or if we will be called again by userspace to complete the operation.
-+       */
-+      if(buf->count == oldcount) {
-+              ndl_put_list(&ftopd(file)->rd);
-+      }
-+
-+      /* unset this, safe */
-+      mini_fo_filldir_file = NULL;
-+      return err;
-+}
-+
-+
-+STATIC unsigned int
-+mini_fo_poll(file_t *file, poll_table *wait)
-+{
-+      unsigned int mask = DEFAULT_POLLMASK;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      if (!hidden_file->f_op || !hidden_file->f_op->poll)
-+              goto out;
-+
-+      mask = hidden_file->f_op->poll(hidden_file, wait);
-+
-+ out:
-+      return mask;
-+}
-+
-+/* FIST-LITE special version of mmap */
-+STATIC int
-+mini_fo_mmap(file_t *file, vm_area_t *vma)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      /* fanout capability */
-+      if (ftopd(file) != NULL) {
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+              } else {
-+                      hidden_file = ftohf(file);
-+              }
-+      }
-+
-+      ASSERT(hidden_file != NULL);
-+      ASSERT(hidden_file->f_op != NULL);
-+      ASSERT(hidden_file->f_op->mmap != NULL);
-+
-+      vma->vm_file = hidden_file;
-+      err = hidden_file->f_op->mmap(hidden_file, vma);
-+      get_file(hidden_file); /* make sure it doesn't get freed on us */
-+      fput(file);            /* no need to keep extra ref on ours */
-+
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_open(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      int hidden_flags;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      /* fanout stuff */
-+      file_t *hidden_sto_file = NULL;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      __ftopd(file) =
-+              kmalloc(sizeof(struct mini_fo_file_info), GFP_KERNEL);
-+      if (!ftopd(file)) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* init the readdir_helper structure */
-+      INIT_LIST_HEAD(&ftopd(file)->rd.ndl_list);
-+      ftopd(file)->rd.ndl_size = 0;
-+
-+      /* In certain paths this could stay uninitalized and cause trouble */
-+      ftohf(file) = NULL;
-+      ftohf2(file) = NULL;
-+      hidden_flags = file->f_flags;
-+
-+      /* create storage files? */
-+      if(dtost(file->f_dentry) == UNMODIFIED) {
-+              if(!IS_WRITE_FLAG(file->f_flags)) {
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+                      /* dentry_open will decrement mnt refcnt if err.
-+                       * otherwise fput() will do an mntput() for us upon file close. */
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file;      /* link two files */
-+                      goto out;
-+              }
-+              else {
-+                      if(S_ISDIR(file->f_dentry->d_inode->i_mode)) {
-+                              err = dir_unmod_to_mod(file->f_dentry);
-+                      } else
-+                              err = nondir_unmod_to_mod(file->f_dentry, 1);
-+
-+                      if (err) {
-+                              printk("mini_fo_open: ERROR creating storage file.\n");
-+                              goto out;
-+                      }
-+              }
-+      }
-+      hidden_sto_dentry = dtohd2(file->f_dentry);
-+      dget(hidden_sto_dentry);
-+
-+      if(dtopd(file->f_dentry)->state == MODIFIED) {
-+              /* Directorys are special, interpose on both lower level files */
-+              if(S_ISDIR(itohi(inode)->i_mode)) {
-+                      /* check for invalid file types of lower level files */
-+                      if(!(S_ISDIR(itohi(inode)->i_mode) && S_ISDIR(itohi2(inode)->i_mode))) {
-+                              printk(KERN_CRIT "mini_fo_open: meta data corruption detected.\n");
-+                              dput(hidden_sto_dentry);
-+                              err = -EINVAL;
-+                              goto out;
-+                      }
-+
-+                      /* lower level directorys are ok, open the base file */
-+                      hidden_dentry = dtohd(file->f_dentry);
-+                      dget(hidden_dentry);
-+
-+                      mntget(stopd(inode->i_sb)->hidden_mnt);
-+                      hidden_file = dentry_open(hidden_dentry,
-+                                                stopd(inode->i_sb)->hidden_mnt,
-+                                                hidden_flags);
-+                      if (IS_ERR(hidden_file)) {
-+                              err = PTR_ERR(hidden_file);
-+                              dput(hidden_dentry);
-+                              dput(hidden_sto_dentry);
-+                              goto out;
-+                      }
-+                      ftohf(file) = hidden_file; /* link the two files */
-+              }
-+      }
-+
-+      if(!exists_in_storage(file->f_dentry)) {
-+              printk(KERN_CRIT "mini_fo_open: invalid file state detected.\n");
-+              err = -EINVAL;
-+              dput(hidden_sto_dentry);
-+
-+              /* If the base file has been opened, we need to close it here */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* ok, now we can safely open the storage file */
-+      mntget(stopd(inode->i_sb)->hidden_mnt2);
-+      hidden_sto_file = dentry_open(hidden_sto_dentry,
-+                                    stopd(inode->i_sb)->hidden_mnt2,
-+                                    hidden_flags);
-+
-+      /* dentry_open dputs the dentry if it fails */
-+      if (IS_ERR(hidden_sto_file)) {
-+              err = PTR_ERR(hidden_sto_file);
-+              /* close base file if open */
-+              if(ftohf(file)) {
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              hidden_file->f_op->flush(hidden_file, NULL);
-+#else
-+                              hidden_file->f_op->flush(hidden_file);
-+#endif
-+                      dput(hidden_dentry);
-+              }
-+              goto out;
-+      }
-+      ftohf2(file) = hidden_sto_file; /* link storage file */
-+
-+ out:
-+      if (err < 0 && ftopd(file)) {
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_flush(file_t *file, fl_owner_t id)
-+#else
-+mini_fo_flush(file_t *file)
-+#endif
-+{
-+      int err1 = 0;           /* assume ok (see open.c:close_fp) */
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      /* mk: we don't do any state checking here, as its not worth the time.
-+       * Just flush the lower level files if they exist.
-+       */
-+      if(ftopd(file) != NULL) {
-+              if(ftohf(file) != NULL) {
-+                      hidden_file = ftohf(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err1 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err1 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+              if(ftohf2(file) != NULL) {
-+                      hidden_file = ftohf2(file);
-+                      if (hidden_file->f_op && hidden_file->f_op->flush)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+                              err2 = hidden_file->f_op->flush(hidden_file, id);
-+#else
-+                              err2 = hidden_file->f_op->flush(hidden_file);
-+#endif
-+              }
-+      }
-+      return (err1 | err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_release(inode_t *inode, file_t *file)
-+{
-+      int err = 0;
-+      file_t *hidden_file = NULL;
-+
-+      if (ftopd(file) != NULL) {
-+              if(ftohf(file)) {
-+                      hidden_file = ftohf(file);
-+                      fput(hidden_file);
-+              }
-+              if(ftohf2(file)) {
-+                      hidden_file = ftohf2(file);
-+                      fput(hidden_file);
-+              }
-+              kfree(ftopd(file));
-+      }
-+      return err;
-+}
-+
-+STATIC int
-+mini_fo_fsync(file_t *file, dentry_t *dentry, int datasync)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+
-+      check_mini_fo_file(file);
-+
-+      if ((hidden_file = ftohf(file)) != NULL) {
-+              hidden_dentry = dtohd(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err1 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+
-+      if ((hidden_file = ftohf2(file)) != NULL) {
-+              hidden_dentry = dtohd2(dentry);
-+              if (hidden_file->f_op && hidden_file->f_op->fsync) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+                      err2 = hidden_file->f_op->fsync(hidden_file, hidden_dentry, datasync);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+                      mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+                      up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              }
-+      }
-+      else
-+              goto err;
-+
-+err:
-+      return (err1 || err2);
-+}
-+
-+
-+STATIC int
-+mini_fo_fasync(int fd, file_t *file, int flag)
-+{
-+      int err1 = 0;
-+      int err2 = 0;
-+
-+      file_t *hidden_file = NULL;
-+
-+      check_mini_fo_file(file);
-+
-+      if((hidden_file = ftohf(file)) != NULL) {
-+              err1 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+      if((hidden_file = ftohf2(file)) != NULL) {
-+              err2 = hidden_file->f_op->fasync(fd, hidden_file, flag);
-+      }
-+
-+      return (err1 || err2);
-+}
-+
-+
-+
-+struct file_operations mini_fo_dir_fops =
-+      {
-+              read:   generic_read_dir,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed lock:     mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
-+
-+struct file_operations mini_fo_main_fops =
-+      {
-+              llseek: mini_fo_llseek,
-+              read:   mini_fo_read,
-+              write:  mini_fo_write,
-+              readdir: mini_fo_readdir,
-+              poll:   mini_fo_poll,
-+              /* ioctl:       mini_fo_ioctl, */
-+              mmap:   mini_fo_mmap,
-+              open:   mini_fo_open,
-+              flush:  mini_fo_flush,
-+              release: mini_fo_release,
-+              fsync:  mini_fo_fsync,
-+              fasync: mini_fo_fasync,
-+              /* not needed: lock:    mini_fo_lock, */
-+              /* not needed: readv */
-+              /* not needed: writev */
-+              /* not implemented: sendpage */
-+              /* not implemented: get_unmapped_area */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/fist.h
-@@ -0,0 +1,254 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __FIST_H_
-+#define __FIST_H_
-+
-+/*
-+ * KERNEL ONLY CODE:
-+ */
-+#ifdef __KERNEL__
-+#include <linux/version.h>
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,33)
-+#include <generated/autoconf.h>
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
-+#include <linux/autoconf.h>
-+#else
-+#include <linux/config.h>
-+#endif
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#ifdef CONFIG_MODVERSIONS
-+# define MODVERSIONS
-+# include <linux/modversions.h>
-+#endif /* CONFIG_MODVERSIONS */
-+#endif /* KERNEL_VERSION < 2.6.0 */
-+#include <linux/sched.h>
-+#include <linux/kernel.h>
-+#include <linux/mm.h>
-+#include <linux/string.h>
-+#include <linux/stat.h>
-+#include <linux/errno.h>
-+#include <linux/wait.h>
-+#include <linux/limits.h>
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+#include <linux/locks.h>
-+#else
-+#include <linux/buffer_head.h>
-+#include <linux/pagemap.h>
-+#include <linux/namei.h>
-+#include <linux/module.h>
-+#include <linux/mount.h>
-+#include <linux/page-flags.h>
-+#include <linux/writeback.h>
-+#include <linux/statfs.h>
-+#endif
-+#include <linux/smp.h>
-+#include <linux/smp_lock.h>
-+#include <linux/file.h>
-+#include <linux/slab.h>
-+#include <linux/vmalloc.h>
-+#include <linux/poll.h>
-+#include <linux/list.h>
-+#include <linux/init.h>
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)
-+#include <linux/xattr.h>
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#include <linux/security.h>
-+#endif
-+
-+#include <linux/swap.h>
-+
-+#include <asm/system.h>
-+/* #include <asm/segment.h> */
-+#include <asm/mman.h>
-+#include <linux/seq_file.h>
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* those mapped to ATTR_* were copied from linux/fs.h */
-+#define FA_MODE               ATTR_MODE
-+#define FA_UID                ATTR_UID
-+#define FA_GID                ATTR_GID
-+#define FA_SIZE               ATTR_SIZE
-+#define FA_ATIME      ATTR_ATIME
-+#define FA_MTIME      ATTR_MTIME
-+#define FA_CTIME      ATTR_CTIME
-+#define FA_ATIME_SET  ATTR_ATIME_SET
-+#define FA_MTIME_SET  ATTR_MTIME_SET
-+#define FA_FORCE      ATTR_FORCE
-+#define FA_ATTR_FLAGS ATTR_ATTR_FLAG
-+
-+/* must be greater than all other ATTR_* flags! */
-+#define FA_NLINK      2048
-+#define FA_BLKSIZE    4096
-+#define FA_BLOCKS     8192
-+#define FA_TIMES      (FA_ATIME|FA_MTIME|FA_CTIME)
-+#define FA_ALL                0
-+
-+/* macros to manage changes between kernels */
-+#define INODE_DATA(i) (&(i)->i_data)
-+
-+#define MIN(x,y) ((x < y) ? (x) : (y))
-+#define MAX(x,y) ((x > y) ? (x) : (y))
-+#define MAXPATHLEN PATH_MAX
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5)
-+# define lookup_one_len(a,b,c) lookup_one(a,b)
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,5) */
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8)
-+# define generic_file_llseek default_llseek
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,4,8) */
-+
-+#ifndef SEEK_SET
-+# define SEEK_SET 0
-+#endif /* not SEEK_SET */
-+
-+#ifndef SEEK_CUR
-+# define SEEK_CUR 1
-+#endif /* not SEEK_CUR */
-+
-+#ifndef SEEK_END
-+# define SEEK_END 2
-+#endif /* not SEEK_END */
-+
-+#ifndef DEFAULT_POLLMASK
-+# define DEFAULT_POLLMASK (POLLIN | POLLOUT | POLLRDNORM | POLLWRNORM)
-+#endif /* not DEFAULT_POLLMASK */
-+
-+/* XXX: fix this so fistgen generates kfree() code directly */
-+#define kfree_s(a,b) kfree(a)
-+
-+/*
-+ * TYPEDEFS:
-+ */
-+typedef struct dentry dentry_t;
-+typedef struct file file_t;
-+typedef struct inode inode_t;
-+typedef inode_t vnode_t;
-+typedef struct page page_t;
-+typedef struct qstr qstr_t;
-+typedef struct super_block super_block_t;
-+typedef super_block_t vfs_t;
-+typedef struct vm_area_struct vm_area_t;
-+
-+
-+/*
-+ * EXTERNALS:
-+ */
-+
-+#define FPPF(str,page) printk("PPF %s 0x%x/%d: Lck:%d Err:%d Ref:%d Upd:%d Other::%d:%d:%d:%d:\n", \
-+              str, \
-+              (int) page, \
-+              (int) page->index, \
-+              (PageLocked(page) ? 1 : 0), \
-+              (PageError(page) ? 1 : 0), \
-+              (PageReferenced(page) ? 1 : 0), \
-+              (Page_Uptodate(page) ? 1 : 0), \
-+              (PageDecrAfter(page) ? 1 : 0), \
-+              (PageSlab(page) ? 1 : 0), \
-+              (PageSwapCache(page) ? 1 : 0), \
-+              (PageReserved(page) ? 1 : 0) \
-+              )
-+#define EZKDBG printk("EZK %s:%d:%s\n",__FILE__,__LINE__,__FUNCTION__)
-+#if 0
-+# define EZKDBG1 printk("EZK %s:%d\n",__FILE__,__LINE__)
-+#else
-+# define EZKDBG1
-+#endif
-+
-+extern int fist_get_debug_value(void);
-+extern int fist_set_debug_value(int val);
-+#if 0 /* mini_fo doesn't need these */
-+extern void fist_dprint_internal(int level, char *str,...);
-+extern void fist_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_print_inode(char *str, const inode_t *inode);
-+extern void fist_print_file(char *str, const file_t *file);
-+extern void fist_print_buffer_flags(char *str, struct buffer_head *buffer);
-+extern void fist_print_page_flags(char *str, page_t *page);
-+extern void fist_print_page_bytes(char *str, page_t *page);
-+extern void fist_print_pte_flags(char *str, const page_t *page);
-+extern void fist_checkinode(inode_t *inode, char *msg);
-+extern void fist_print_sb(char *str, const super_block_t *sb);
-+
-+/* Â§$% by mk: special debug functions */
-+extern void fist_mk_print_dentry(char *str, const dentry_t *dentry);
-+extern void fist_mk_print_inode(char *str, const inode_t *inode);
-+
-+extern char *add_indent(void);
-+extern char *del_indent(void);
-+#endif/* mini_fo doesn't need these */
-+
-+
-+#define STATIC
-+#define ASSERT(EX)    \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED: %s at %s:%d (%s)\n", #EX,   \
-+             __FILE__, __LINE__, __FUNCTION__);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+/* same ASSERT, but tell me who was the caller of the function */
-+#define ASSERT2(EX)   \
-+do {  \
-+    if (!(EX)) {      \
-+      printk(KERN_CRIT "ASSERTION FAILED (caller): %s at %s:%d (%s)\n", #EX,  \
-+             file, line, func);       \
-+      (*((char *)0))=0;       \
-+    } \
-+} while (0)
-+
-+#if 0 /* mini_fo doesn't need these */
-+#define dprintk(format, args...) printk(KERN_DEBUG format, ##args)
-+#define fist_dprint(level, str, args...) fist_dprint_internal(level, KERN_DEBUG str, ## args)
-+#define print_entry_location() fist_dprint(4, "%sIN:  %s %s:%d\n", add_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_location() fist_dprint(4, "%s OUT: %s %s:%d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__)
-+#define print_exit_status(status) fist_dprint(4, "%s OUT: %s %s:%d, STATUS: %d\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, status)
-+#define print_exit_pointer(status) \
-+do { \
-+  if (IS_ERR(status)) \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: %ld\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+  else \
-+    fist_dprint(4, "%s OUT: %s %s:%d, RESULT: 0x%x\n", del_indent(), __FUNCTION__, __FILE__, __LINE__, PTR_ERR(status)); \
-+} while (0)
-+#endif/* mini_fo doesn't need these */
-+
-+#endif /* __KERNEL__ */
-+
-+
-+/*
-+ * DEFINITIONS FOR USER AND KERNEL CODE:
-+ * (Note: ioctl numbers 1--9 are reserved for fistgen, the rest
-+ *  are auto-generated automatically based on the user's .fist file.)
-+ */
-+# define FIST_IOCTL_GET_DEBUG_VALUE   _IOR(0x15, 1, int)
-+# define FIST_IOCTL_SET_DEBUG_VALUE   _IOW(0x15, 2, int)
-+
-+#endif /* not __FIST_H_ */
---- /dev/null
-+++ b/fs/mini_fo/inode.c
-@@ -0,0 +1,1564 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+mini_fo_create(inode_t *dir, dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = create_sto_reg_file(dentry, mode, nd);
-+#else
-+      err = create_sto_reg_file(dentry, mode);
-+#endif
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC dentry_t *
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry, struct nameidata* nd)
-+#else
-+mini_fo_lookup(inode_t *dir, dentry_t *dentry)
-+#endif
-+{
-+      int err = 0;
-+      dentry_t *hidden_dir_dentry;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry = NULL;
-+
-+      /* whiteout flag */
-+      int del_flag = 0;
-+      char *bpath = NULL;
-+
-+      const char *name;
-+      unsigned int namelen;
-+
-+      /* Don't allow lookups of META-files */
-+      namelen = strlen(META_FILENAME);
-+      if(namelen == dentry->d_name.len) {
-+              if(!strncmp(dentry->d_name.name, META_FILENAME, namelen)) {
-+                      err = -ENOENT;
-+                      goto out;
-+              }
-+      }
-+
-+      hidden_dir_dentry = dtohd(dentry->d_parent);
-+      hidden_sto_dir_dentry = dtohd2(dentry->d_parent);
-+
-+      name = dentry->d_name.name;
-+      namelen = dentry->d_name.len;
-+
-+      /* must initialize dentry operations */
-+      dentry->d_op = &mini_fo_dops;
-+
-+      /* setup the del_flag */
-+      del_flag = __meta_check_d_entry(dir, name, namelen);
-+      bpath = __meta_check_r_entry(dir, name, namelen);
-+
-+      /* perform the lookups of base and storage files:
-+       *
-+       * This caused some serious trouble, as a lookup_one_len passing
-+       * a negative dentry oopses. Solution is to only do the lookup
-+       * if the dentry is positive, else we set it to NULL
-+       * More trouble, who said a *_dir_dentry can't be NULL?
-+       */
-+      if(bpath) {
-+              /* Cross-Interposing (C), yeah! */
-+              hidden_dentry = bpath_walk(dir->i_sb, bpath);
-+              if(!hidden_dentry || !hidden_dentry->d_inode) {
-+                      printk(KERN_CRIT "mini_fo_lookup: bpath_walk failed.\n");
-+                      err= -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* this can be set up safely without fear of spaghetti
-+               * interposing as it is only used for copying times */
-+              hidden_dir_dentry = hidden_dentry->d_parent;
-+              kfree(bpath);
-+      }
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+              hidden_dentry =
-+                      lookup_one_len(name, hidden_dir_dentry, namelen);
-+      else
-+              hidden_dentry = NULL;
-+
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+              hidden_sto_dentry =
-+                      lookup_one_len(name, hidden_sto_dir_dentry, namelen);
-+      else
-+              hidden_sto_dentry =  NULL;
-+
-+      /* catch error in lookup */
-+      if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-+              /* mk: we need to call dput on the dentry, whose
-+               * lookup_one_len operation failed, in order to avoid
-+               * unmount trouble.
-+               */
-+              if(IS_ERR(hidden_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from base dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_dentry);
-+              } else {
-+                      dput(hidden_dentry);
-+              }
-+              if(IS_ERR(hidden_sto_dentry)) {
-+                      printk(KERN_CRIT "mini_fo_lookup: ERR from storage dentry, lookup failed.\n");
-+                      err = PTR_ERR(hidden_sto_dentry);
-+              } else {
-+                      dput(hidden_sto_dentry);
-+              }
-+              goto out;
-+      }
-+
-+      /* allocate dentry private data */
-+      __dtopd(dentry) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+
-+      if (!dtopd(dentry)) {
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      /* check for different states of the mini_fo file to be looked up. */
-+
-+      /* state 1, file has been modified */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              /* update parent directory's atime */
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = MODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state1).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 2, file is unmodified */
-+      if(hidden_dentry && hidden_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = UNMODIFIED;
-+              dtohd(dentry) = hidden_dentry;
-+              dtohd2(dentry) = hidden_sto_dentry; /* could be negative */
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state2).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+      /* state 3, file has been newly created */
-+      if(hidden_sto_dentry && hidden_sto_dentry->d_inode && !del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = CREATED;
-+              dtohd(dentry) = hidden_dentry; /* could be negative */
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(hidden_dentry,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state3).\n");
-+                      goto out_free;
-+              }
-+              goto out;
-+      }
-+
-+      /* state 4, file has deleted and created again. */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         hidden_sto_dentry->d_inode && del_flag) {
-+
-+              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+              dtopd(dentry)->state = DEL_REWRITTEN;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              err = mini_fo_tri_interpose(NULL,
-+                                          hidden_sto_dentry,
-+                                          dentry, dir->i_sb, 1);
-+              if (err) {
-+                      printk(KERN_CRIT "mini_fo_lookup: error interposing (state4).\n");
-+                      goto out_free;
-+              }
-+              /* We will never need this dentry again, as the file has been
-+               * deleted from base */
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 5, file has been deleted in base */
-+      if(hidden_dentry && hidden_sto_dentry &&
-+         hidden_dentry->d_inode &&
-+         !hidden_sto_dentry->d_inode && del_flag) {
-+
-+              /* check which parents atime we need for updating */
-+              if(hidden_sto_dir_dentry->d_inode)
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_sto_dir_dentry->d_inode);
-+              else
-+                      fist_copy_attr_atime(dir,
-+                                           hidden_dir_dentry->d_inode);
-+
-+              dtopd(dentry)->state = DELETED;
-+              dtohd(dentry) = NULL;
-+              dtohd2(dentry) = hidden_sto_dentry;
-+
-+              /* add negative dentry to dcache to speed up lookups */
-+              d_add(dentry, NULL);
-+              dput(hidden_dentry);
-+              goto out;
-+      }
-+      /* state 6, file does not exist */
-+      if(((hidden_dentry && !hidden_dentry->d_inode) ||
-+          (hidden_sto_dentry && !hidden_sto_dentry->d_inode)) && !del_flag)
-+              {
-+                      /* check which parents atime we need for updating */
-+                      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+                              fist_copy_attr_atime(dir, hidden_sto_dir_dentry->d_inode);
-+                      else
-+                              fist_copy_attr_atime(dir, hidden_dir_dentry->d_inode);
-+
-+                      dtopd(dentry)->state = NON_EXISTANT;
-+                      dtohd(dentry) = hidden_dentry;
-+                      dtohd2(dentry) = hidden_sto_dentry;
-+                      d_add(dentry, NULL);
-+                      goto out;
-+              }
-+
-+      /* if we get to here, were in an invalid state. bad. */
-+      printk(KERN_CRIT "mini_fo_lookup: ERROR, meta data corruption detected.\n");
-+
-+      /* end state checking */
-+ out_free:
-+      d_drop(dentry);         /* so that our bad dentry will get destroyed */
-+      kfree(dtopd(dentry));
-+      __dtopd(dentry) = NULL; /* be safe */
-+
-+ out_dput:
-+      if(hidden_dentry)
-+              dput(hidden_dentry);
-+      if(hidden_sto_dentry)
-+              dput(hidden_sto_dentry); /* drops usage count and marks for release */
-+
-+ out:
-+      /* initalize wol if file exists and is directory */
-+      if(dentry->d_inode) {
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      itopd(dentry->d_inode)->deleted_list_size = -1;
-+                      itopd(dentry->d_inode)->renamed_list_size = -1;
-+                      meta_build_lists(dentry);
-+              }
-+      }
-+      return ERR_PTR(err);
-+}
-+
-+
-+STATIC int
-+mini_fo_link(dentry_t *old_dentry, inode_t *dir, dentry_t *new_dentry)
-+{
-+      int err;
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_dir_dentry;
-+
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(dir);
-+
-+      /* no links to directorys and existing targets target allowed */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode) ||
-+         is_mini_fo_existant(new_dentry)) {
-+              err = -EPERM;
-+              goto out;
-+      }
-+
-+      /* bring it directly from unmod to del_rew */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              err = meta_add_d_entry(old_dentry->d_parent,
-+                                     old_dentry->d_name.name,
-+                                     old_dentry->d_name.len);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+              dput(dtohd(old_dentry));
-+              dtohd(old_dentry) = NULL;
-+              dtost(old_dentry) = DEL_REWRITTEN;
-+      }
-+
-+      err = get_neg_sto_dentry(new_dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      /* was: hidden_dir_dentry = lock_parent(hidden_new_dentry); */
-+      hidden_dir_dentry = dget(hidden_new_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = vfs_link(hidden_old_dentry,
-+                     hidden_dir_dentry->d_inode,
-+                     hidden_new_dentry);
-+      if (err || !hidden_new_dentry->d_inode)
-+              goto out_lock;
-+
-+      dtost(new_dentry) = CREATED;
-+      err = mini_fo_tri_interpose(NULL, hidden_new_dentry, new_dentry, dir->i_sb, 0);
-+      if (err)
-+              goto out_lock;
-+
-+      fist_copy_attr_timesizes(dir, hidden_new_dentry->d_inode);
-+      /* propagate number of hard-links */
-+      old_dentry->d_inode->i_nlink = itohi2(old_dentry->d_inode)->i_nlink;
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_dir_dentry);
-+
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+      if (!new_dentry->d_inode)
-+              d_drop(new_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_unlink(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              err = nondir_mod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              err = nondir_unmod_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              err = nondir_creat_to_del(dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              err = nondir_del_rew_to_del(dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_unlink: ERROR, invalid state detected.\n");
-+
-+ out:
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+
-+      if(!err) {
-+              /* is this causing my pain? d_delete(dentry); */
-+              d_drop(dentry);
-+      }
-+
-+      dput(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_symlink(inode_t *dir, dentry_t *dentry, const char *symname)
-+{
-+      int err=0;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        umode_t mode;
-+#endif
-+
-+      /* Fail if the symlink file exists */
-+      if(!(dtost(dentry) == DELETED ||
-+           dtost(dentry) == NON_EXISTANT)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      dget(hidden_sto_dentry);
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      mode = S_IALLUGO;
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry, symname, mode);
-+#else
-+      err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-+                        hidden_sto_dentry,
-+                        symname);
-+#endif
-+      if (err || !hidden_sto_dentry->d_inode)
-+                goto out_lock;
-+
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        } else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+        /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+        dput(hidden_sto_dentry);
-+        if (!dentry->d_inode)
-+                d_drop(dentry);
-+ out:
-+        return err;
-+}
-+
-+STATIC int
-+mini_fo_mkdir(inode_t *dir, dentry_t *dentry, int mode)
-+{
-+      int err;
-+
-+      err = create_sto_dir(dentry, mode);
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rmdir(inode_t *dir, dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *meta_dentry;
-+      inode_t *hidden_sto_dir = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+      check_mini_fo_inode(dir);
-+
-+      dget(dentry);
-+      if(dtopd(dentry)->state == MODIFIED) {
-+              /* XXX: disabled, because it does not bother to check files on
-+               * the original filesystem - just a hack, but better than simply
-+               * removing it without testing */
-+              err = -EINVAL;
-+              goto out;
-+
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was:hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+              dput(dtohd(dentry));
-+
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* carefull with R files */
-+              if( __meta_is_r_entry(dir,
-+                                    dentry->d_name.name,
-+                                    dentry->d_name.len) == 1) {
-+                      err = meta_remove_r_entry(dentry->d_parent,
-+                                                dentry->d_name.name,
-+                                                dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rmdir: meta_remove_r_entry failed.\n");
-+                              goto out;
-+                      }
-+              }
-+              else {
-+                      /* ok, add deleted file to META */
-+                      meta_add_d_entry(dentry->d_parent,
-+                                       dentry->d_name.name,
-+                                       dentry->d_name.len);
-+              }
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              /* XXX: simply adding it to the delete list here is fscking dangerous!
-+               * as a temporary hack, i will disable rmdir on unmodified directories
-+               * for now.
-+               */
-+              err = -EINVAL;
-+              goto out;
-+
-+              err = get_neg_sto_dentry(dentry);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+
-+              /* dput base dentry, this will relase the inode and free the
-+               * dentry, as we will never need it again. */
-+              dput(dtohd(dentry));
-+              dtohd(dentry) = NULL;
-+              dtopd(dentry)->state = DELETED;
-+
-+              /* add deleted file to META-file */
-+              meta_add_d_entry(dentry->d_parent,
-+                               dentry->d_name.name,
-+                               dentry->d_name.len);
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == CREATED) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = NON_EXISTANT;
-+
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+
-+              goto out;
-+      }
-+      else if(dtopd(dentry)->state == DEL_REWRITTEN) {
-+              hidden_sto_dir = itohi2(dir);
-+              hidden_sto_dentry = dtohd2(dentry);
-+
-+              /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+              hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              /* Delete an old WOL file contained in the storage dir */
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           hidden_sto_dentry,
-+                                           strlen(META_FILENAME));
-+              if(meta_dentry->d_inode) {
-+                      /* is this necessary? dget(meta_dentry); */
-+                      err = vfs_unlink(hidden_sto_dentry->d_inode,
-+                                       meta_dentry);
-+                      dput(meta_dentry);
-+                      if(!err)
-+                              d_delete(meta_dentry);
-+              }
-+
-+              err = vfs_rmdir(hidden_sto_dir, hidden_sto_dentry);
-+              dput(hidden_sto_dentry);
-+              if(!err)
-+                      d_delete(hidden_sto_dentry);
-+
-+              /* propagate number of hard-links */
-+              dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+              dtopd(dentry)->state = DELETED;
-+              /* was: unlock_dir(hidden_sto_dir_dentry); */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+              dput(hidden_sto_dir_dentry);
-+              goto out;
-+      }
-+
-+      printk(KERN_CRIT "mini_fo_rmdir: ERROR, invalid state detected.\n");
-+
-+ out:
-+      if(!err) {
-+              d_drop(dentry);
-+      }
-+
-+      fist_copy_attr_times(dir, itohi2(dentry->d_parent->d_inode));
-+      dput(dentry);
-+
-+      return err;
-+}
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, dev_t dev)
-+#else
-+mini_fo_mknod(inode_t *dir, dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      err = create_sto_nod(dentry, mode, dev);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo_mknod: creating sto nod failed.\n");
-+              err = -EINVAL;
-+      }
-+
-+      check_mini_fo_dentry(dentry);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_rename(inode_t *old_dir, dentry_t *old_dentry,
-+             inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      /* dispatch */
-+      if(S_ISDIR(old_dentry->d_inode->i_mode))
-+              return rename_directory(old_dir, old_dentry, new_dir, new_dentry);
-+      return rename_nondir(old_dir, old_dentry, new_dir, new_dentry);
-+
-+}
-+
-+int rename_directory(inode_t *old_dir, dentry_t *old_dentry,
-+                   inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err, bpath_len;
-+      char *bpath;
-+
-+      dentry_t *hidden_old_dentry;
-+      dentry_t *hidden_new_dentry;
-+      dentry_t *hidden_old_dir_dentry;
-+      dentry_t *hidden_new_dir_dentry;
-+
-+      err = 0;
-+      bpath = NULL;
-+      bpath_len = 0;
-+
-+      /* this is a test, chuck out if it works */
-+      if(!(dtopd(new_dentry)->state == DELETED ||
-+           dtopd(new_dentry)->state == NON_EXISTANT)) {
-+              printk(KERN_CRIT "mini_fo: rename_directory: \
-+                                  uh, ah, new_dentry not negative.\n");
-+              /* return -1; */
-+      }
-+
-+      /* state = UNMODIFIED */
-+      if(dtopd(old_dentry)->state == UNMODIFIED) {
-+              err = dir_unmod_to_mod(old_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+
-+      /* state = MODIFIED */
-+      if(dtopd(old_dentry)->state == MODIFIED) {
-+              bpath = meta_check_r_entry(old_dentry->d_parent,
-+                                         old_dentry->d_name.name,
-+                                         old_dentry->d_name.len);
-+              if(bpath) {
-+                      err = meta_remove_r_entry(old_dentry->d_parent,
-+                                                old_dentry->d_name.name,
-+                                                old_dentry->d_name.len);
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: rename_directory:\
-+                                                   meta_remove_r_entry \
-+                                                  failed.\n");
-+                              goto out;
-+                      }
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath,
-+                                             strlen(bpath),
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      kfree(bpath);
-+              }
-+              else {/* wol it */
-+                      err = meta_add_d_entry(old_dentry->d_parent,
-+                                             old_dentry->d_name.name,
-+                                             old_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+                      /* put it on rename list */
-+                      err = get_mini_fo_bpath(old_dentry,
-+                                              &bpath,
-+                                              &bpath_len);
-+                      if (err)
-+                              goto out;
-+                      err = meta_add_r_entry(new_dentry->d_parent,
-+                                             bpath, bpath_len,
-+                                             new_dentry->d_name.name,
-+                                             new_dentry->d_name.len);
-+                      if (err)
-+                              goto out;
-+              }
-+              /* no state change, MODIFIED stays MODIFIED */
-+      }
-+      /* state = CREATED */
-+      if(dtopd(old_dentry)->state == CREATED ||
-+         dtopd(old_dentry)->state == DEL_REWRITTEN) {
-+              if(dtohd(old_dentry))
-+                      dput(dtohd(old_dentry));
-+
-+              if(dtopd(new_dentry)->state == DELETED) {
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+                      dtohd(old_dentry) = NULL;
-+              }
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      dtopd(old_dentry)->state = CREATED;
-+                      /* steal new dentry's neg. base dentry */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      dtohd(new_dentry) = NULL;
-+              }
-+      }
-+      if(dtopd(new_dentry)->state == UNMODIFIED ||
-+         dtopd(new_dentry)->state == NON_EXISTANT) {
-+              err = get_neg_sto_dentry(new_dentry);
-+              if(err)
-+                      goto out;
-+      }
-+
-+      /* now move sto file */
-+      hidden_old_dentry = dtohd2(old_dentry);
-+      hidden_new_dentry = dtohd2(new_dentry);
-+
-+      dget(hidden_old_dentry);
-+      dget(hidden_new_dentry);
-+
-+      hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+      hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+      double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+      err = vfs_rename(hidden_old_dir_dentry->d_inode, hidden_old_dentry,
-+                       hidden_new_dir_dentry->d_inode, hidden_new_dentry);
-+      if(err)
-+              goto out_lock;
-+
-+      fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+      if (new_dir != old_dir)
-+              fist_copy_attr_all(old_dir,
-+                                 hidden_old_dir_dentry->d_inode);
-+
-+ out_lock:
-+      /* double_unlock will dput the new/old parent dentries
-+       * whose refcnts were incremented via get_parent above. */
-+      double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+      dput(hidden_new_dentry);
-+      dput(hidden_old_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int rename_nondir(inode_t *old_dir, dentry_t *old_dentry,
-+                inode_t *new_dir, dentry_t *new_dentry)
-+{
-+      int err=0;
-+
-+      check_mini_fo_dentry(old_dentry);
-+      check_mini_fo_dentry(new_dentry);
-+      check_mini_fo_inode(old_dir);
-+      check_mini_fo_inode(new_dir);
-+
-+      /* state: UNMODIFIED */
-+      if(dtost(old_dentry) == UNMODIFIED) {
-+              err = nondir_unmod_to_mod(old_dentry, 1);
-+              if(err) {
-+                      err = -EINVAL;
-+                      goto out;
-+              }
-+      }
-+
-+      /* the easy states */
-+      if(exists_in_storage(old_dentry)) {
-+
-+              dentry_t *hidden_old_dentry;
-+              dentry_t *hidden_new_dentry;
-+              dentry_t *hidden_old_dir_dentry;
-+              dentry_t *hidden_new_dir_dentry;
-+
-+              /* if old file is MODIFIED, add it to the deleted_list */
-+              if(dtopd(old_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(old_dentry->d_parent,
-+                                       old_dentry->d_name.name,
-+                                       old_dentry->d_name.len);
-+
-+                      dput(dtohd(old_dentry));
-+              }
-+              /* if old file is CREATED, we only release the base dentry */
-+              if(dtopd(old_dentry)->state == CREATED) {
-+                      if(dtohd(old_dentry))
-+                              dput(dtohd(old_dentry));
-+              }
-+
-+              /* now setup the new states (depends on new_dentry state) */
-+              /* new dentry state =  MODIFIED */
-+              if(dtopd(new_dentry)->state == MODIFIED) {
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* new dentry will be d_put'ed later by the vfs
-+                       * so don't do it here
-+                       * dput(dtohd(new_dentry));
-+                       */
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  UNMODIFIED */
-+              else if(dtopd(new_dentry)->state == UNMODIFIED) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      meta_add_d_entry(new_dentry->d_parent,
-+                                       new_dentry->d_name.name,
-+                                       new_dentry->d_name.len);
-+
-+                      /* is this right??? */
-+                      /*dput(dtohd(new_dentry));*/
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              /* new dentry state =  CREATED */
-+              else if(dtopd(new_dentry)->state == CREATED) {
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  NON_EXISTANT */
-+              else if(dtopd(new_dentry)->state == NON_EXISTANT) {
-+                      if(get_neg_sto_dentry(new_dentry))
-+                              return -EINVAL;
-+
-+                      /* we keep the neg. base dentry (if exists) */
-+                      dtohd(old_dentry) = dtohd(new_dentry);
-+                      /* ...and set it to Null, or we'll get
-+                       * Dr. dcache.c:345 if it gets dput twice... */
-+                      dtohd(new_dentry) = NULL;
-+                      dtopd(old_dentry)->state = CREATED;
-+              }
-+              /* new dentry state =  DEL_REWRITTEN or DELETED */
-+              else if(dtopd(new_dentry)->state == DEL_REWRITTEN ||
-+                      dtopd(new_dentry)->state == DELETED) {
-+                      dtohd(old_dentry) = NULL;
-+                      dtopd(old_dentry)->state = DEL_REWRITTEN;
-+              }
-+              else { /* not possible, uhh, ahh */
-+                      printk(KERN_CRIT
-+                             "mini_fo: rename_reg_file: invalid state detected [1].\n");
-+                      return -1;
-+              }
-+
-+              /* now we definitely have a sto file */
-+              hidden_old_dentry = dtohd2(old_dentry);
-+              hidden_new_dentry = dtohd2(new_dentry);
-+
-+              dget(hidden_old_dentry);
-+              dget(hidden_new_dentry);
-+
-+              hidden_old_dir_dentry = dget(hidden_old_dentry->d_parent);
-+              hidden_new_dir_dentry = dget(hidden_new_dentry->d_parent);
-+              double_lock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+
-+              err = vfs_rename(hidden_old_dir_dentry->d_inode,
-+                               hidden_old_dentry,
-+                               hidden_new_dir_dentry->d_inode,
-+                               hidden_new_dentry);
-+              if(err)
-+                      goto out_lock;
-+
-+              fist_copy_attr_all(new_dir, hidden_new_dir_dentry->d_inode);
-+              if (new_dir != old_dir)
-+                      fist_copy_attr_all(old_dir, hidden_old_dir_dentry->d_inode);
-+
-+      out_lock:
-+              /* double_unlock will dput the new/old parent dentries
-+               * whose refcnts were incremented via get_parent above.
-+               */
-+              double_unlock(hidden_old_dir_dentry, hidden_new_dir_dentry);
-+              dput(hidden_new_dentry);
-+              dput(hidden_old_dentry);
-+      out:
-+              return err;
-+      }
-+      else { /* invalid state */
-+              printk(KERN_CRIT "mini_fo: rename_reg_file: ERROR: invalid state detected [2].\n");
-+              return -1;
-+      }
-+}
-+
-+
-+STATIC int
-+mini_fo_readlink(dentry_t *dentry, char *buf, int bufsiz)
-+{
-+      int err=0;
-+      dentry_t *hidden_dentry = NULL;
-+
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              hidden_dentry = dtohd2(dentry);
-+      } else if(dtohd(dentry) && dtohd(dentry)->d_inode) {
-+              hidden_dentry = dtohd(dentry);
-+      } else {
-+              goto out;
-+      }
-+
-+      if (!hidden_dentry->d_inode->i_op ||
-+          !hidden_dentry->d_inode->i_op->readlink) {
-+              err = -EINVAL;          goto out;
-+      }
-+
-+      err = hidden_dentry->d_inode->i_op->readlink(hidden_dentry,
-+                                                   buf,
-+                                                   bufsiz);
-+      if (err > 0)
-+              fist_copy_attr_atime(dentry->d_inode, hidden_dentry->d_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+static int mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#else
-+static void* mini_fo_follow_link(dentry_t *dentry, struct nameidata *nd)
-+#endif
-+{
-+      char *buf;
-+      int len = PAGE_SIZE, err;
-+      mm_segment_t old_fs;
-+
-+      /* in 2.6 this is freed by mini_fo_put_link called by __do_follow_link */
-+      buf = kmalloc(len, GFP_KERNEL);
-+      if (!buf) {
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+
-+      /* read the symlink, and then we will follow it */
-+      old_fs = get_fs();
-+      set_fs(KERNEL_DS);
-+      err = dentry->d_inode->i_op->readlink(dentry, buf, len);
-+      set_fs(old_fs);
-+      if (err < 0) {
-+              kfree(buf);
-+              buf = NULL;
-+              goto out;
-+      }
-+      buf[err] = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        nd_set_link(nd, buf);
-+        err = 0;
-+#else
-+      err = vfs_follow_link(nd, buf);
-+#endif
-+
-+ out:
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      kfree(buf);
-+#endif
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+        return err;
-+#else
-+        return ERR_PTR(err);
-+#endif
-+}
-+
-+STATIC
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd)
-+#else
-+void mini_fo_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie)
-+#endif
-+{
-+        char *link;
-+        link = nd_get_link(nd);
-+        kfree(link);
-+}
-+#endif
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
-+#else
-+mini_fo_permission(inode_t *inode, int mask)
-+#endif
-+{
-+      inode_t *hidden_inode;
-+      int mode;
-+      int err;
-+
-+      if(itohi2(inode)) {
-+              hidden_inode = itohi2(inode);
-+      } else {
-+              hidden_inode = itohi(inode);
-+      }
-+      mode = inode->i_mode;
-+
-+      /* not really needed, as permission handles everything:
-+       *      err = vfs_permission(inode, mask);
-+       *      if (err)
-+       *              goto out;
-+       */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = permission(hidden_inode, mask, nd);
-+#else
-+      err = permission(hidden_inode, mask);
-+#endif
-+
-+      /*  out: */
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_inode_revalidate(dentry_t *dentry)
-+{
-+      int err = 0;
-+      dentry_t *hidden_dentry;
-+      inode_t *hidden_inode;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+              hidden_inode = hidden_dentry->d_inode;
-+      } else {
-+                printk(KERN_CRIT "mini_fo_inode_revalidate: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      if (hidden_inode && hidden_inode->i_op && hidden_inode->i_op->revalidate){
-+              err = hidden_inode->i_op->revalidate(hidden_dentry);
-+              if (err)
-+                      goto out;
-+      }
-+      fist_copy_attr_all(dentry->d_inode, hidden_inode);
-+ out:
-+      return err;
-+}
-+#endif
-+
-+STATIC int
-+mini_fo_setattr(dentry_t *dentry, struct iattr *ia)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(!is_mini_fo_existant(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [1].\n");
-+              goto out;
-+      }
-+
-+      if(dtost(dentry) == UNMODIFIED) {
-+              if(!IS_COPY_FLAG(ia->ia_valid))
-+                      goto out; /* we ignore these changes to base */
-+
-+              if(S_ISDIR(dentry->d_inode->i_mode)) {
-+                      err = dir_unmod_to_mod(dentry);
-+              } else {
-+                      /* we copy contents if file is not beeing truncated */
-+                      if(S_ISREG(dentry->d_inode->i_mode) &&
-+                         !(ia->ia_size == 0 && (ia->ia_valid & ATTR_SIZE))) {
-+                              err = nondir_unmod_to_mod(dentry, 1);
-+                      } else
-+                              err = nondir_unmod_to_mod(dentry, 0);
-+              }
-+              if(err) {
-+                      err = -EINVAL;
-+                      printk(KERN_CRIT "mini_fo_setattr: ERROR changing states.\n");
-+                      goto out;
-+              }
-+      }
-+      if(!exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo_setattr: ERROR, invalid state detected [2].\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      ASSERT(dentry->d_inode);
-+      ASSERT(dtohd2(dentry));
-+      ASSERT(itopd(dentry->d_inode));
-+      ASSERT(itohi2(dentry->d_inode));
-+
-+      err = notify_change(dtohd2(dentry), ia);
-+      fist_copy_attr_all(dentry->d_inode, itohi2(dentry->d_inode));
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+STATIC int
-+mini_fo_getattr(struct vfsmount *mnt, struct dentry *dentry, struct kstat *stat)
-+{
-+      int err = 0;
-+        dentry_t *hidden_dentry;
-+
-+      ASSERT(dentry->d_inode);
-+      ASSERT(itopd(dentry->d_inode));
-+
-+      if(itohi2(dentry->d_inode)) {
-+                hidden_dentry = dtohd2(dentry);
-+      } else if(itohi(dentry->d_inode)) {
-+                hidden_dentry = dtohd(dentry);
-+      } else {
-+                printk(KERN_CRIT "mini_fo_getattr: ERROR, invalid state detected.\n");
-+                err = -ENOENT;
-+                goto out;
-+        }
-+      fist_copy_attr_all(dentry->d_inode, hidden_dentry->d_inode);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      generic_fillattr(dentry->d_inode, stat);
-+      if (!stat->blksize) {
-+              struct super_block *s = hidden_dentry->d_inode->i_sb;
-+              unsigned blocks;
-+              blocks = (stat->size+s->s_blocksize-1) >> s->s_blocksize_bits;
-+              stat->blocks = (s->s_blocksize / 512) * blocks;
-+              stat->blksize = s->s_blocksize;
-+      }
-+ out:
-+        return err;
-+}
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+#if 0 /* no xattr_alloc() and xattr_free() */
-+/* This is lifted from fs/xattr.c */
-+static void *
-+xattr_alloc(size_t size, size_t limit)
-+{
-+      void *ptr;
-+
-+      if (size > limit)
-+              return ERR_PTR(-E2BIG);
-+
-+      if (!size)      /* size request, no buffer is needed */
-+              return NULL;
-+      else if (size <= PAGE_SIZE)
-+              ptr = kmalloc((unsigned long) size, GFP_KERNEL);
-+      else
-+              ptr = vmalloc((unsigned long) size);
-+      if (!ptr)
-+              return ERR_PTR(-ENOMEM);
-+      return ptr;
-+}
-+
-+static void
-+xattr_free(void *ptr, size_t size)
-+{
-+      if (!size)      /* size request, no buffer was needed */
-+              return;
-+      else if (size <= PAGE_SIZE)
-+              kfree(ptr);
-+      else
-+              vfree(ptr);
-+}
-+#endif /* no xattr_alloc() and xattr_free() */
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_getxattr(struct dentry *dentry, const char *name, void *value, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      /* Define these anyway so we don't need as much ifdef'ed code. */
-+      char *encoded_name = NULL;
-+      char *encoded_value = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->getxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->getxattr(hidden_dentry, encoded_name, encoded_value, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+#if ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,21) \
-+     && LINUX_VERSION_CODE <= KERNEL_VERSION(2,4,23)) \
-+     || LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0))
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               const void *value, size_t size, int flags)
-+#else
-+mini_fo_setxattr(struct dentry *dentry, const char *name,
-+               void *value, size_t size, int flags)
-+#endif
-+
-+{
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+
-+      /* Define these anyway, so we don't have as much ifdef'ed code. */
-+      char *encoded_value = NULL;
-+      char *encoded_name = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->setxattr) {
-+              encoded_name = (char *)name;
-+              encoded_value = (char *)value;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->setxattr(hidden_dentry, encoded_name, encoded_value, size, flags);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_removexattr(struct dentry *dentry, const char *name) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_name;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->removexattr) {
-+              encoded_name = (char *)name;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->removexattr(hidden_dentry, encoded_name);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+
-+/* BKL held by caller.
-+ * dentry->d_inode->i_sem down
-+ */
-+STATIC int
-+mini_fo_listxattr(struct dentry *dentry, char *list, size_t size) {
-+      struct dentry *hidden_dentry = NULL;
-+      int err = -EOPNOTSUPP;
-+      char *encoded_list = NULL;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(exists_in_storage(dentry))
-+              hidden_dentry = dtohd2(dentry);
-+      else
-+              hidden_dentry = dtohd(dentry);
-+
-+      ASSERT(hidden_dentry);
-+      ASSERT(hidden_dentry->d_inode);
-+      ASSERT(hidden_dentry->d_inode->i_op);
-+
-+      if (hidden_dentry->d_inode->i_op->listxattr) {
-+              encoded_list = list;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              down(&hidden_dentry->d_inode->i_sem);
-+#endif
-+              /* lock_kernel() already done by caller. */
-+              err = hidden_dentry->d_inode->i_op->listxattr(hidden_dentry, encoded_list, size);
-+              /* unlock_kernel() will be done by caller. */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_dentry->d_inode->i_sem);
-+#endif
-+      }
-+      return err;
-+}
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+
-+struct inode_operations mini_fo_symlink_iops =
-+      {
-+              readlink:       mini_fo_readlink,
-+              follow_link: mini_fo_follow_link,
-+              /* mk: permission:      mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+              put_link:       mini_fo_put_link,
-+#endif
-+
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20)) */
-+      };
-+
-+struct inode_operations mini_fo_dir_iops =
-+      {
-+              create: mini_fo_create,
-+              lookup: mini_fo_lookup,
-+              link:   mini_fo_link,
-+              unlink: mini_fo_unlink,
-+              symlink:        mini_fo_symlink,
-+              mkdir:  mini_fo_mkdir,
-+              rmdir:  mini_fo_rmdir,
-+              mknod:  mini_fo_mknod,
-+              rename: mini_fo_rename,
-+              /* no readlink/follow_link for non-symlinks */
-+              // off because we have setattr
-+              //    truncate: mini_fo_truncate,
-+              /* mk:permission:       mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+              setattr:        mini_fo_setattr,
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr: mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
-+
-+struct inode_operations mini_fo_main_iops =
-+      {
-+              /* permission:  mini_fo_permission, */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+              revalidate:     mini_fo_inode_revalidate,
-+#endif
-+              setattr:        mini_fo_setattr,
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              getattr:        mini_fo_getattr,
-+#endif
-+#if defined(XATTR) && (LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20))
-+              setxattr:       mini_fo_setxattr,
-+              getxattr:       mini_fo_getxattr,
-+              listxattr:      mini_fo_listxattr,
-+              removexattr:    mini_fo_removexattr
-+# endif /* XATTR && LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,20) */
-+      };
---- /dev/null
-+++ b/fs/mini_fo/main.c
-@@ -0,0 +1,423 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+#include <linux/module.h>
-+
-+/* This definition must only appear after we include <linux/module.h> */
-+#ifndef MODULE_LICENSE
-+# define MODULE_LICENSE(bison)
-+#endif /* not MODULE_LICENSE */
-+
-+/*
-+ * This is the mini_fo tri interpose function, which extends the
-+ * functionality of the regular interpose by interposing a higher
-+ * level inode on top of two lower level ones: the base filesystem
-+ * inode and the storage filesystem inode.
-+ *
-+ *  sb we pass is mini_fo's super_block
-+ */
-+int
-+mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                    dentry_t *hidden_sto_dentry,
-+                    dentry_t *dentry, super_block_t *sb, int flag)
-+{
-+      inode_t *hidden_inode = NULL;
-+      inode_t *hidden_sto_inode = NULL; /* store corresponding storage inode */
-+      int err = 0;
-+      inode_t *inode;
-+
-+      /* Pointer to hidden_sto_inode if exists, else to hidden_inode.
-+       * This is used to copy the attributes of the correct inode. */
-+      inode_t *master_inode;
-+
-+      if(hidden_dentry)
-+              hidden_inode = hidden_dentry->d_inode;
-+      if(hidden_sto_dentry)
-+              hidden_sto_inode = hidden_sto_dentry->d_inode;
-+
-+      ASSERT(dentry->d_inode == NULL);
-+
-+      /* mk: One of the inodes associated with the dentrys is likely to
-+       * be NULL, so carefull:
-+       */
-+      ASSERT((hidden_inode != NULL) || (hidden_sto_inode != NULL));
-+
-+      if(hidden_sto_inode)
-+              master_inode = hidden_sto_inode;
-+      else
-+              master_inode = hidden_inode;
-+
-+      /*
-+       * We allocate our new inode below, by calling iget.
-+       * iget will call our read_inode which will initialize some
-+       * of the new inode's fields
-+       */
-+
-+      /*
-+       * original: inode = iget(sb, hidden_inode->i_ino);
-+       */
-+      inode = iget(sb, iunique(sb, 25));
-+      if (!inode) {
-+              err = -EACCES;          /* should be impossible??? */
-+              goto out;
-+      }
-+
-+      /*
-+       * interpose the inode if not already interposed
-+       *   this is possible if the inode is being reused
-+       * XXX: what happens if we get_empty_inode() but there's another already?
-+       * for now, ASSERT() that this can't happen; fix later.
-+       */
-+      if (itohi(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi(inode) != NULL.\n");
-+      }
-+      if (itohi2(inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo_tri_interpose: itohi2(inode) != NULL.\n");
-+      }
-+
-+      /* mk: Carefull, igrab can't handle NULL inodes (ok, why should it?), so
-+       * we need to check here:
-+       */
-+      if(hidden_inode)
-+              itohi(inode) = igrab(hidden_inode);
-+      else
-+              itohi(inode) = NULL;
-+
-+      if(hidden_sto_inode)
-+              itohi2(inode) = igrab(hidden_sto_inode);
-+      else
-+              itohi2(inode) = NULL;
-+
-+
-+      /* Use different set of inode ops for symlinks & directories*/
-+      if (S_ISLNK(master_inode->i_mode))
-+              inode->i_op = &mini_fo_symlink_iops;
-+      else if (S_ISDIR(master_inode->i_mode))
-+              inode->i_op = &mini_fo_dir_iops;
-+
-+      /* Use different set of file ops for directories */
-+      if (S_ISDIR(master_inode->i_mode))
-+              inode->i_fop = &mini_fo_dir_fops;
-+
-+      /* properly initialize special inodes */
-+      if (S_ISBLK(master_inode->i_mode) || S_ISCHR(master_inode->i_mode) ||
-+          S_ISFIFO(master_inode->i_mode) || S_ISSOCK(master_inode->i_mode)) {
-+              init_special_inode(inode, master_inode->i_mode, master_inode->i_rdev);
-+      }
-+
-+      /* Fix our inode's address operations to that of the lower inode */
-+      if (inode->i_mapping->a_ops != master_inode->i_mapping->a_ops) {
-+              inode->i_mapping->a_ops = master_inode->i_mapping->a_ops;
-+      }
-+
-+      /* only (our) lookup wants to do a d_add */
-+      if (flag)
-+              d_add(dentry, inode);
-+      else
-+              d_instantiate(dentry, inode);
-+
-+      ASSERT(dtopd(dentry) != NULL);
-+
-+      /* all well, copy inode attributes */
-+      fist_copy_attr_all(inode, master_inode);
-+
-+ out:
-+      return err;
-+}
-+
-+/* parse mount options "base=" and "sto=" */
-+dentry_t *
-+mini_fo_parse_options(super_block_t *sb, char *options)
-+{
-+      dentry_t *hidden_root = ERR_PTR(-EINVAL);
-+      dentry_t *hidden_root2 = ERR_PTR(-EINVAL);
-+      struct nameidata nd, nd2;
-+      char *name, *tmp, *end;
-+      int err = 0;
-+
-+      /* We don't want to go off the end of our arguments later on. */
-+      for (end = options; *end; end++);
-+
-+      while (options < end) {
-+              tmp = options;
-+              while (*tmp && *tmp != ',')
-+                      tmp++;
-+              *tmp = '\0';
-+              if (!strncmp("base=", options, 5)) {
-+                      name = options + 5;
-+                      printk(KERN_INFO "mini_fo: using base directory: %s\n", name);
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if (path_init(name, LOOKUP_FOLLOW, &nd))
-+                              err = path_walk(name, &nd);
-+#else
-+                      err = path_lookup(name, LOOKUP_FOLLOW, &nd);
-+#endif
-+                      if (err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden directory '%s'\n", name);
-+                              hidden_root = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root = nd.dentry;
-+                      stopd(sb)->base_dir_dentry = nd.dentry;
-+                      stopd(sb)->hidden_mnt = nd.mnt;
-+
-+              } else if(!strncmp("sto=", options, 4)) {
-+                      /* parse the storage dir */
-+                      name = options + 4;
-+                      printk(KERN_INFO "mini_fo: using storage directory: %s\n", name);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+                      if(path_init(name, LOOKUP_FOLLOW, &nd2))
-+                              err = path_walk(name, &nd2);
-+#else
-+                        err = path_lookup(name, LOOKUP_FOLLOW, &nd2);
-+#endif
-+                      if(err) {
-+                              printk(KERN_CRIT "mini_fo: error accessing hidden storage directory '%s'\n", name);
-+
-+                              hidden_root2 = ERR_PTR(err);
-+                              goto out;
-+                      }
-+                      hidden_root2 = nd2.dentry;
-+                      stopd(sb)->storage_dir_dentry = nd2.dentry;
-+                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      stohs2(sb) = hidden_root2->d_sb;
-+
-+                      /* validate storage dir, this is done in
-+                       * mini_fo_read_super for the base directory.
-+                       */
-+                      if (IS_ERR(hidden_root2)) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: storage dentry lookup failed (err = %ld)\n", PTR_ERR(hidden_root2));
-+                              goto out;
-+                      }
-+                      if (!hidden_root2->d_inode) {
-+                              printk(KERN_WARNING "mini_fo_parse_options: no storage dir to interpose on.\n");
-+                              goto out;
-+                      }
-+                      stohs2(sb) = hidden_root2->d_sb;
-+              } else {
-+                      printk(KERN_WARNING "mini_fo: unrecognized option '%s'\n", options);
-+                      hidden_root = ERR_PTR(-EINVAL);
-+                      goto out;
-+              }
-+              options = tmp + 1;
-+      }
-+
-+ out:
-+      if(IS_ERR(hidden_root2))
-+              return hidden_root2;
-+      return hidden_root;
-+}
-+
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+static int
-+#else
-+super_block_t *
-+#endif
-+mini_fo_read_super(super_block_t *sb, void *raw_data, int silent)
-+{
-+      dentry_t *hidden_root;
-+      int err = 0;
-+
-+      if (!raw_data) {
-+              printk(KERN_WARNING "mini_fo_read_super: missing argument\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      /*
-+       * Allocate superblock private data
-+       */
-+      __stopd(sb) = kmalloc(sizeof(struct mini_fo_sb_info), GFP_KERNEL);
-+      if (!stopd(sb)) {
-+              printk(KERN_WARNING "%s: out of memory\n", __FUNCTION__);
-+              err = -ENOMEM;
-+              goto out;
-+      }
-+      stohs(sb) = NULL;
-+
-+      hidden_root = mini_fo_parse_options(sb, raw_data);
-+      if (IS_ERR(hidden_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: lookup_dentry failed (err = %ld)\n", PTR_ERR(hidden_root));
-+              err = PTR_ERR(hidden_root);
-+              goto out_free;
-+      }
-+      if (!hidden_root->d_inode) {
-+              printk(KERN_WARNING "mini_fo_read_super: no directory to interpose on\n");
-+              goto out_free;
-+      }
-+      stohs(sb) = hidden_root->d_sb;
-+
-+      /*
-+       * Linux 2.4.2-ac3 and beyond has code in
-+       * mm/filemap.c:generic_file_write() that requires sb->s_maxbytes
-+       * to be populated.  If not set, all write()s under that sb will
-+       * return 0.
-+       *
-+       * Linux 2.4.4+ automatically sets s_maxbytes to MAX_NON_LFS;
-+       * the filesystem should override it only if it supports LFS.
-+       */
-+      /* non-SCA code is good to go with LFS */
-+      sb->s_maxbytes = hidden_root->d_sb->s_maxbytes;
-+
-+      sb->s_op = &mini_fo_sops;
-+      /*
-+       * we can't use d_alloc_root if we want to use
-+       * our own interpose function unchanged,
-+       * so we simply replicate *most* of the code in d_alloc_root here
-+       */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      sb->s_root = d_alloc(NULL, &(const struct qstr) { "/", 1, 0 });
-+#else
-+      sb->s_root = d_alloc(NULL, &(const struct qstr){hash: 0, name: "/", len : 1});
-+#endif
-+      if (IS_ERR(sb->s_root)) {
-+              printk(KERN_WARNING "mini_fo_read_super: d_alloc failed\n");
-+              err = -ENOMEM;
-+              goto out_dput;
-+      }
-+
-+      sb->s_root->d_op = &mini_fo_dops;
-+      sb->s_root->d_sb = sb;
-+      sb->s_root->d_parent = sb->s_root;
-+
-+      /* link the upper and lower dentries */
-+      __dtopd(sb->s_root) = (struct mini_fo_dentry_info *)
-+              kmalloc(sizeof(struct mini_fo_dentry_info), GFP_KERNEL);
-+      if (!dtopd(sb->s_root)) {
-+              err = -ENOMEM;
-+              goto out_dput2;
-+      }
-+      dtopd(sb->s_root)->state = MODIFIED;
-+      dtohd(sb->s_root) = hidden_root;
-+
-+      /* fanout relevant, interpose on storage root dentry too */
-+      dtohd2(sb->s_root) = stopd(sb)->storage_dir_dentry;
-+
-+      /* ...and call tri-interpose to interpose root dir inodes
-+       * if (mini_fo_interpose(hidden_root, sb->s_root, sb, 0))
-+       */
-+      if(mini_fo_tri_interpose(hidden_root, dtohd2(sb->s_root), sb->s_root, sb, 0))
-+              goto out_dput2;
-+
-+      /* initalize the wol list */
-+      itopd(sb->s_root->d_inode)->deleted_list_size = -1;
-+      itopd(sb->s_root->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(sb->s_root);
-+
-+      goto out;
-+
-+ out_dput2:
-+      dput(sb->s_root);
-+ out_dput:
-+      dput(hidden_root);
-+      dput(dtohd2(sb->s_root)); /* release the hidden_sto_dentry too */
-+ out_free:
-+      kfree(stopd(sb));
-+      __stopd(sb) = NULL;
-+ out:
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+        return err;
-+#else
-+        if (err) {
-+              return ERR_PTR(err);
-+        } else {
-+              return sb;
-+        }
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+static int mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data, struct vfsmount *mnt)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super, mnt);
-+}
-+#else
-+static struct super_block *mini_fo_get_sb(struct file_system_type *fs_type,
-+                                        int flags, const char *dev_name,
-+                                        void *raw_data)
-+{
-+      return get_sb_nodev(fs_type, flags, raw_data, mini_fo_read_super);
-+}
-+#endif
-+
-+void mini_fo_kill_block_super(struct super_block *sb)
-+{
-+      generic_shutdown_super(sb);
-+      /*
-+       *      XXX: BUG: Halcrow: Things get unstable sometime after this point:
-+       *      lib/rwsem-spinlock.c:127: spin_is_locked on uninitialized
-+       *      fs/fs-writeback.c:402: spin_lock(fs/super.c:a0381828) already
-+       *      locked by fs/fs-writeback.c/402
-+       *
-+       *      Apparently, someone's not releasing a lock on sb_lock...
-+       */
-+}
-+
-+static struct file_system_type mini_fo_fs_type = {
-+      .owner          = THIS_MODULE,
-+      .name           = "mini_fo",
-+      .get_sb         = mini_fo_get_sb,
-+      .kill_sb        = mini_fo_kill_block_super,
-+      .fs_flags       = 0,
-+};
-+
-+
-+#else
-+static DECLARE_FSTYPE(mini_fo_fs_type, "mini_fo", mini_fo_read_super, 0);
-+#endif
-+
-+static int __init init_mini_fo_fs(void)
-+{
-+      printk("Registering mini_fo version $Id$\n");
-+      return register_filesystem(&mini_fo_fs_type);
-+}
-+static void __exit exit_mini_fo_fs(void)
-+{
-+      printk("Unregistering mini_fo version $Id$\n");
-+      unregister_filesystem(&mini_fo_fs_type);
-+}
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+EXPORT_NO_SYMBOLS;
-+#endif
-+
-+MODULE_AUTHOR("Erez Zadok <ezk@cs.sunysb.edu>");
-+MODULE_DESCRIPTION("FiST-generated mini_fo filesystem");
-+MODULE_LICENSE("GPL");
-+
-+/* MODULE_PARM(fist_debug_var, "i"); */
-+/* MODULE_PARM_DESC(fist_debug_var, "Debug level"); */
-+
-+module_init(init_mini_fo_fs)
-+module_exit(exit_mini_fo_fs)
---- /dev/null
-+++ b/fs/mini_fo/Makefile
-@@ -0,0 +1,17 @@
-+#
-+# Makefile for mini_fo 2.4 and 2.6 Linux kernels
-+#
-+# Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+#
-+# 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.
-+#
-+
-+obj-$(CONFIG_MINI_FO) := mini_fo.o
-+mini_fo-objs   := meta.o dentry.o file.o inode.o main.o super.o state.o aux.o
-+
-+# dependencies
-+${mini_fo-objs}: mini_fo.h fist.h
-+
---- /dev/null
-+++ b/fs/mini_fo/meta.c
-@@ -0,0 +1,1000 @@
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+int meta_build_lists(dentry_t *dentry)
-+{
-+      struct mini_fo_inode_info *inode_info;
-+
-+      dentry_t *meta_dentry = 0;
-+      file_t *meta_file = 0;
-+      mm_segment_t old_fs;
-+      void *buf;
-+
-+      int bytes, len;
-+      struct vfsmount *meta_mnt;
-+      char *entry;
-+
-+      inode_info = itopd(dentry->d_inode);
-+      if(!(inode_info->deleted_list_size == -1 &&
-+           inode_info->renamed_list_size == -1)) {
-+              printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                  Error, list(s) not virgin.\n");
-+              return -1;
-+      }
-+
-+      /* init our meta lists */
-+      INIT_LIST_HEAD(&inode_info->deleted_list);
-+      inode_info->deleted_list_size = 0;
-+
-+      INIT_LIST_HEAD(&inode_info->renamed_list);
-+      inode_info->renamed_list_size = 0;
-+
-+      /* might there be a META-file? */
-+      if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              meta_dentry = lookup_one_len(META_FILENAME,
-+                                           dtohd2(dentry),
-+                                           strlen(META_FILENAME));
-+              if(!meta_dentry->d_inode) {
-+                      dput(meta_dentry);
-+                      goto out_ok;
-+              }
-+              /* $%& err, is this correct? */
-+              meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              mntget(meta_mnt);
-+
-+
-+              /* open META-file for reading */
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              if(!meta_file || IS_ERR(meta_file)) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR opening META file.\n");
-+                      goto out_err;
-+              }
-+
-+              /* check if fs supports reading */
-+              if(!meta_file->f_op->read) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, fs does not support reading.\n");
-+                      goto out_err_close;
-+              }
-+
-+              /* allocate a page for transfering the data */
-+              buf = (void *) __get_free_page(GFP_KERNEL);
-+              if(!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_build_lists: \
-+                                          ERROR, out of mem.\n");
-+                      goto out_err_close;
-+              }
-+              meta_file->f_pos = 0;
-+              old_fs = get_fs();
-+              set_fs(KERNEL_DS);
-+              do {
-+                      char *c;
-+                      bytes = meta_file->f_op->read(meta_file, buf, PAGE_SIZE, &meta_file->f_pos);
-+                      if(bytes == PAGE_SIZE) {
-+                              /* trim a cut off filename and adjust f_pos to get it next time */
-+                              for(c = (char*) buf+PAGE_SIZE;
-+                                  *c != '\n';
-+                                  c--, bytes--, meta_file->f_pos--);
-+                      }
-+                      entry = (char *) buf;
-+                      while(entry < (char *) buf+bytes) {
-+
-+                              char *old_path;
-+                              char *dir_name;
-+                              int old_len, new_len;
-+
-+                              /* len without '\n'*/
-+                              len = (int) (strchr(entry, '\n') - entry);
-+                              switch (*entry) {
-+                              case 'D':
-+                                      /* format: "D filename" */
-+                                      meta_list_add_d_entry(dentry,
-+                                                            entry+2,
-+                                                            len-2);
-+                                      break;
-+                              case 'R':
-+                                      /* format: "R path/xy/dir newDir" */
-+                                      old_path = entry+2;
-+                                      dir_name = strchr(old_path, ' ') + 1;
-+                                      old_len =  dir_name - old_path - 1;
-+                                      new_len = ((int) entry) + len - ((int ) dir_name);
-+                                      meta_list_add_r_entry(dentry,
-+                                                            old_path,
-+                                                            old_len,
-+                                                            dir_name,
-+                                                            new_len);
-+                                      break;
-+                              default:
-+                                      /* unknown entry type detected */
-+                                      break;
-+                              }
-+                              entry += len+1;
-+                      }
-+
-+              } while(meta_file->f_pos < meta_dentry->d_inode->i_size);
-+
-+              free_page((unsigned long) buf);
-+              set_fs(old_fs);
-+              fput(meta_file);
-+      }
-+      goto out_ok;
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out_err:
-+      mntput(meta_mnt);
-+      dput(meta_dentry);
-+      return -1;
-+ out_ok:
-+      return 1; /* check this!!! inode_info->wol_size; */
-+}
-+
-+/* cleanups up all lists and free's the mem by dentry */
-+int meta_put_lists(dentry_t *dentry)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_put_lists: invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_put_lists(dentry->d_inode);
-+}
-+
-+/* cleanups up all lists and free's the mem by inode */
-+int __meta_put_lists(inode_t *inode)
-+{
-+      int err = 0;
-+      if(!inode || !itopd(inode)) {
-+              printk("mini_fo: __meta_put_lists: invalid inode passed.\n");
-+              return -1;
-+      }
-+      err = __meta_put_d_list(inode);
-+      err |= __meta_put_r_list(inode);
-+      return err;
-+}
-+
-+int meta_sync_lists(dentry_t *dentry)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk("mini_fo: meta_sync_lists: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      err = meta_sync_d_list(dentry, 0);
-+      err |= meta_sync_r_list(dentry, 1);
-+      return err;
-+}
-+
-+
-+/* remove all D entries from the renamed list and free the mem */
-+int __meta_put_d_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: __meta_put_d_list: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the DELETED-list */
-+        if(inode_info->deleted_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->deleted_list)) {
-+              tmp = inode_info->deleted_list.next;
-+              list_del(tmp);
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+      }
-+      inode_info->deleted_list_size = 0;
-+
-+      return 0;
-+}
-+
-+/* remove all R entries from the renamed list and free the mem */
-+int __meta_put_r_list(inode_t *inode)
-+{
-+      struct list_head *tmp;
-+      struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_put_r_list: invalid inode.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        /* nuke the RENAMED-list */
-+        if(inode_info->renamed_list_size <= 0)
-+              return 0;
-+
-+      while(!list_empty(&inode_info->renamed_list)) {
-+              tmp = inode_info->renamed_list.next;
-+              list_del(tmp);
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+      }
-+      inode_info->renamed_list_size = 0;
-+
-+      return 0;
-+}
-+
-+int meta_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      err = meta_list_add_d_entry(dentry, name, len);
-+      err |= meta_write_d_entry(dentry,name,len);
-+      return err;
-+}
-+
-+/* add a D entry to the deleted list */
-+int meta_list_add_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0)
-+                return -1;
-+
-+        del_entry = (struct deleted_entry *)
-+              kmalloc(sizeof(struct deleted_entry), GFP_KERNEL);
-+        del_entry->name = (char*) kmalloc(len, GFP_KERNEL);
-+        if(!del_entry || !del_entry->name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_d_entry: \
-+                                  out of mem.\n");
-+              kfree(del_entry->name);
-+              kfree(del_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(del_entry->name, name, len);
-+        del_entry->len = len;
-+
-+        list_add(&del_entry->list, &inode_info->deleted_list);
-+        inode_info->deleted_list_size++;
-+        return 0;
-+}
-+
-+int meta_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+      int err = 0;
-+      err = meta_list_add_r_entry(dentry,
-+                                  old_name, old_len,
-+                                  new_name, new_len);
-+      err |= meta_write_r_entry(dentry,
-+                                old_name, old_len,
-+                                new_name, new_len);
-+      return err;
-+}
-+
-+/* add a R entry to the renamed list */
-+int meta_list_add_r_entry(dentry_t *dentry,
-+                        const char *old_name, int old_len,
-+                        const char *new_name, int new_len)
-+{
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+
-+        ren_entry = (struct renamed_entry *)
-+              kmalloc(sizeof(struct renamed_entry), GFP_KERNEL);
-+        ren_entry->old_name = (char*) kmalloc(old_len, GFP_KERNEL);
-+        ren_entry->new_name = (char*) kmalloc(new_len, GFP_KERNEL);
-+
-+        if(!ren_entry || !ren_entry->old_name || !ren_entry->new_name) {
-+                printk(KERN_CRIT "mini_fo: meta_list_add_r_entry: \
-+                                  out of mem.\n");
-+              kfree(ren_entry->new_name);
-+              kfree(ren_entry->old_name);
-+              kfree(ren_entry);
-+                return -ENOMEM;
-+        }
-+
-+        strncpy(ren_entry->old_name, old_name, old_len);
-+        ren_entry->old_len = old_len;
-+        strncpy(ren_entry->new_name, new_name, new_len);
-+        ren_entry->new_len = new_len;
-+
-+        list_add(&ren_entry->list, &inode_info->renamed_list);
-+        inode_info->renamed_list_size++;
-+        return 0;
-+}
-+
-+
-+int meta_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      int err = 0;
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+
-+      err = meta_list_remove_r_entry(dentry, name, len);
-+      err |= meta_sync_lists(dentry);
-+      return err;
-+}
-+
-+int meta_list_remove_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT
-+                     "mini_fo: meta_list_remove_r_entry: \
-+                        invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_list_remove_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_list_remove_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT
-+                     "mini_fo: __meta_list_remove_r_entry: \
-+                        invalid inode passed.\n");
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size < 0)
-+                return -1;
-+        if(inode_info->renamed_list_size == 0)
-+                return 1;
-+
-+      list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      list_del(tmp);
-+                      kfree(ren_entry->new_name);
-+                      kfree(ren_entry->old_name);
-+                      kfree(ren_entry);
-+                      inode_info->renamed_list_size--;
-+                      return 0;
-+              }
-+      }
-+      return 1;
-+}
-+
-+
-+/* append a single D entry to the meta file */
-+int meta_write_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry), strlen (META_FILENAME));
-+
-+      /* We need to create a META-file */
-+        if(!meta_dentry->d_inode) {
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR,
-+                         NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry,
-+                         S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt); /* $%& is this necessary? */
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: len for name, 1 for \n and 2 for "D " */
-+      buf = (char *) kmalloc(len+3, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'D';
-+      buf[1] = ' ';
-+      strncpy(buf+2, name, len);
-+      buf[len+2] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, len+3,
-+                                     &meta_file->f_pos);
-+      if(bytes != len+3) {
-+              printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-+                                  ERROR writing.\n");
-+              err = -1;
-+      }
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* append a single R entry to the meta file */
-+int meta_write_r_entry(dentry_t *dentry,
-+                     const char *old_name, int old_len,
-+                     const char *new_name, int new_len)
-+{
-+      dentry_t *meta_dentry = 0;
-+        file_t *meta_file = 0;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+      struct vfsmount *meta_mnt = 0;
-+        char *buf;
-+
-+
-+      err = 0;
-+
-+      if(itopd(dentry->d_inode)->renamed_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* build the storage structure? */
-+      if(dtopd(dentry)->state == UNMODIFIED) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen (META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+      }
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR opening meta file.\n");
-+                mntput(meta_mnt);
-+                dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* size: 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+      buf_len = old_len + new_len + 4;
-+      buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+      if (!buf) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: out of mem.\n");
-+              return -ENOMEM;
-+      }
-+
-+      buf[0] = 'R';
-+      buf[1] = ' ';
-+      strncpy(buf + 2, old_name, old_len);
-+      buf[old_len + 2] = ' ';
-+      strncpy(buf + old_len + 3, new_name, new_len);
-+      buf[buf_len -1] = '\n';
-+      bytes = meta_file->f_op->write(meta_file, buf, buf_len, &meta_file->f_pos);
-+      if(bytes != buf_len) {
-+              printk(KERN_CRIT "mini_fo: meta_write_r_entry: ERROR writing.\n");
-+              err = -1;
-+      }
-+
-+      kfree(buf);
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+/* sync D list to disk, append data if app_flag is 1 */
-+/* check the meta_mnt, which seems not to be used (properly)  */
-+
-+int meta_sync_d_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  invalid inode passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+
-+              /* size: len for name, 1 for \n and 2 for "D " */
-+              buf = (char *) kmalloc(del_entry->len+3, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+
-+              buf[0] = 'D';
-+              buf[1] = ' ';
-+              strncpy(buf+2, del_entry->name, del_entry->len);
-+              buf[del_entry->len+2] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             del_entry->len+3,
-+                                             &meta_file->f_pos);
-+              if(bytes != del_entry->len+3) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+
-+}
-+
-+int meta_sync_r_list(dentry_t *dentry, int app_flag)
-+{
-+      dentry_t *meta_dentry;
-+        file_t *meta_file;
-+        mm_segment_t old_fs;
-+
-+        int bytes, err, buf_len;
-+        struct vfsmount *meta_mnt;
-+        char *buf;
-+
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      err = 0;
-+      meta_file=0;
-+      meta_mnt=0;
-+
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  invalid dentry passed.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      inode_info = itopd(dentry->d_inode);
-+
-+        if(inode_info->deleted_list_size < 0) {
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* ok, there is something to sync */
-+
-+      /* build the storage structure? */
-+        if(!dtohd2(dentry) && !itohi2(dentry->d_inode)) {
-+                err = build_sto_structure(dentry->d_parent, dentry);
-+                if(err) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          build_sto_structure failed.\n");
-+                      goto out;
-+                }
-+        }
-+      meta_dentry = lookup_one_len(META_FILENAME,
-+                                   dtohd2(dentry),
-+                                   strlen(META_FILENAME));
-+        if(!meta_dentry->d_inode) {
-+                /* We need to create a META-file */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR, NULL);
-+#else
-+                vfs_create(dtohd2(dentry)->d_inode,
-+                         meta_dentry, S_IRUSR | S_IWUSR);
-+#endif
-+              app_flag = 0;
-+      }
-+      /* need we truncate the meta file? */
-+      if(!app_flag) {
-+              struct iattr newattrs;
-+                newattrs.ia_size = 0;
-+                newattrs.ia_valid = ATTR_SIZE | ATTR_CTIME;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_lock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                down(&meta_dentry->d_inode->i_sem);
-+#endif
-+                err = notify_change(meta_dentry, &newattrs);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&meta_dentry->d_inode->i_mutex);
-+#else
-+                up(&meta_dentry->d_inode->i_sem);
-+#endif
-+                if(err || meta_dentry->d_inode->i_size != 0) {
-+                        printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR truncating meta file.\n");
-+                        goto out_err_close;
-+              }
-+      }
-+
-+        /* open META-file for writing */
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        if(!meta_file || IS_ERR(meta_file)) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR opening meta file.\n");
-+              /* we don't mntget so we dont't mntput (for now)
-+               * mntput(meta_mnt);
-+               */
-+              dput(meta_dentry);
-+              err = -1;
-+                goto out;
-+        }
-+
-+        /* check if fs supports writing */
-+        if(!meta_file->f_op->write) {
-+                printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                  ERROR, fs does not support writing.\n");
-+                goto out_err_close;
-+        }
-+
-+      meta_file->f_pos = meta_dentry->d_inode->i_size; /* append */
-+        old_fs = get_fs();
-+        set_fs(KERNEL_DS);
-+
-+      /* here we go... */
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              /* size:
-+               * 2 for "R ", old_len+new_len for names, 1 blank+1 \n */
-+              buf_len = ren_entry->old_len + ren_entry->new_len + 4;
-+              buf = (char *) kmalloc(buf_len, GFP_KERNEL);
-+              if (!buf) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          out of mem.\n");
-+                      return -ENOMEM;
-+              }
-+              buf[0] = 'R';
-+              buf[1] = ' ';
-+              strncpy(buf + 2, ren_entry->old_name, ren_entry->old_len);
-+              buf[ren_entry->old_len + 2] = ' ';
-+              strncpy(buf + ren_entry->old_len + 3,
-+                      ren_entry->new_name, ren_entry->new_len);
-+              buf[buf_len - 1] = '\n';
-+              bytes = meta_file->f_op->write(meta_file, buf,
-+                                             buf_len, &meta_file->f_pos);
-+              if(bytes != buf_len) {
-+                      printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-+                                          ERROR writing.\n");
-+                      err |= -1;
-+              }
-+              kfree(buf);
-+      }
-+      set_fs(old_fs);
-+
-+ out_err_close:
-+      fput(meta_file);
-+ out:
-+      return err;
-+}
-+
-+int meta_check_d_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode)
-+              printk(KERN_CRIT "mini_fo: meta_check_d_dentry: \
-+                                  invalid dentry passed.\n");
-+      return __meta_check_d_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_check_d_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct deleted_entry *del_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode))
-+              printk(KERN_CRIT "mini_fo: __meta_check_d_dentry: \
-+                                  invalid inode passed.\n");
-+
-+        inode_info = itopd(inode);
-+
-+        if(inode_info->deleted_list_size <= 0)
-+                return 0;
-+
-+        list_for_each(tmp, &inode_info->deleted_list) {
-+              del_entry = list_entry(tmp, struct deleted_entry, list);
-+              if(del_entry->len != len)
-+                      continue;
-+
-+              if(!strncmp(del_entry->name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
-+/*
-+ * check if file has been renamed and return path to orig. base dir.
-+ * Implements no error return values so far, what of course sucks.
-+ * String is null terminated.'
-+ */
-+char* meta_check_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid dentry passed.\n");
-+              return NULL;
-+      }
-+      return __meta_check_r_entry(dentry->d_inode, name, len);
-+}
-+
-+char* __meta_check_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+      char *old_path;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry: \
-+                                  invalid inode passed.\n");
-+              return NULL;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return NULL;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len)) {
-+                      old_path = (char *)
-+                              kmalloc(ren_entry->old_len+1, GFP_KERNEL);
-+                      strncpy(old_path,
-+                              ren_entry->old_name,
-+                              ren_entry->old_len);
-+                      old_path[ren_entry->old_len]='\0';
-+                      return old_path;
-+              }
-+      }
-+      return NULL;
-+}
-+
-+/*
-+ * This version only checks if entry exists and return:
-+ *     1 if exists,
-+ *     0 if not,
-+ *    -1 if error.
-+ */
-+int meta_is_r_entry(dentry_t *dentry, const char *name, int len)
-+{
-+      if(!dentry || !dentry->d_inode) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid dentry passed.\n");
-+              return -1;
-+      }
-+      return __meta_is_r_entry(dentry->d_inode, name, len);
-+}
-+
-+int __meta_is_r_entry(inode_t *inode, const char *name, int len)
-+{
-+      struct list_head *tmp;
-+        struct renamed_entry *ren_entry;
-+        struct mini_fo_inode_info *inode_info;
-+
-+      if(!inode || !itopd(inode)) {
-+              printk(KERN_CRIT "mini_fo: meta_check_r_dentry [2]: \
-+                                  invalid inode passed.\n");
-+              return -1;
-+      }
-+      inode_info = itopd(inode);
-+
-+        if(inode_info->renamed_list_size <= 0)
-+                return -1;
-+
-+        list_for_each(tmp, &inode_info->renamed_list) {
-+              ren_entry = list_entry(tmp, struct renamed_entry, list);
-+              if(ren_entry->new_len != len)
-+                      continue;
-+
-+              if(!strncmp(ren_entry->new_name, name, len))
-+                      return 1;
-+      }
-+      return 0;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/mini_fo.h
-@@ -0,0 +1,510 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifndef __MINI_FO_H_
-+#define __MINI_FO_H_
-+
-+#ifdef __KERNEL__
-+
-+/* META stuff */
-+#define META_FILENAME "META_dAfFgHE39ktF3HD2sr"
-+
-+/* use xattrs? */
-+#define XATTR
-+
-+/* File attributes that when changed, result in a file beeing copied to storage */
-+#define COPY_FLAGS ATTR_MODE | ATTR_UID | ATTR_GID | ATTR_SIZE
-+
-+/*
-+ * mini_fo filestates
-+ */
-+#define MODIFIED       1
-+#define UNMODIFIED     2
-+#define CREATED        3
-+#define DEL_REWRITTEN  4
-+#define DELETED        5
-+#define NON_EXISTANT   6
-+
-+/* fist file systems superblock magic */
-+# define MINI_FO_SUPER_MAGIC 0xf15f
-+
-+/*
-+ * STRUCTURES:
-+ */
-+
-+/* mini_fo inode data in memory */
-+struct mini_fo_inode_info {
-+      inode_t *wii_inode;
-+      inode_t *wii_inode2; /* pointer to storage inode */
-+
-+      /* META-data lists */
-+      /* deleted list, ex wol */
-+      struct list_head deleted_list;
-+      int deleted_list_size;
-+
-+      /* renamed list */
-+      struct list_head renamed_list;
-+      int renamed_list_size;
-+
-+      /* add other lists here ... */
-+};
-+
-+/* mini_fo dentry data in memory */
-+struct mini_fo_dentry_info {
-+      dentry_t *wdi_dentry;
-+      dentry_t *wdi_dentry2; /* pointer to  storage dentry */
-+      unsigned int state;  /* state of the mini_fo dentry */
-+};
-+
-+
-+/* mini_fo super-block data in memory */
-+struct mini_fo_sb_info {
-+      super_block_t *wsi_sb, *wsi_sb2; /* mk: might point to the same sb */
-+      struct vfsmount *hidden_mnt, *hidden_mnt2;
-+      dentry_t *base_dir_dentry;
-+      dentry_t *storage_dir_dentry;
-+      ;
-+};
-+
-+/* readdir_data, readdir helper struct */
-+struct readdir_data {
-+      struct list_head ndl_list; /* linked list head ptr */
-+      int ndl_size; /* list size */
-+      int sto_done; /* flag to show that the storage dir entries have
-+                     * all been read an now follow base entries */
-+};
-+
-+/* file private data. */
-+struct mini_fo_file_info {
-+      struct file *wfi_file;
-+      struct file *wfi_file2; /* pointer to storage file */
-+      struct readdir_data rd;
-+};
-+
-+/* struct ndl_entry */
-+struct ndl_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/********************************
-+ *  META-data structures
-+ ********************************/
-+
-+/* deleted entry */
-+struct deleted_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* renamed entry */
-+struct renamed_entry {
-+      struct list_head list;
-+      char *old_name;     /* old directory with full path */
-+      int old_len;        /* length of above string */
-+      char *new_name;     /* new directory name */
-+      int new_len;        /* length of above string */
-+};
-+
-+/* attr_change entry */
-+struct attr_change_entry {
-+      struct list_head list;
-+      char *name;
-+      int len;
-+};
-+
-+/* link entry */
-+struct link_entry {
-+      struct list_head list;
-+      int links_moved;
-+      int inum_base;
-+      int inum_sto;
-+      char *weird_name;
-+      int weird_name_len;
-+};
-+
-+
-+/* Some other stuff required for mini_fo_filldir64, copied from
-+ * fs/readdir.c
-+ */
-+
-+#define ROUND_UP64(x) (((x)+sizeof(u64)-1) & ~(sizeof(u64)-1))
-+#define NAME_OFFSET(de) ((int) ((de)->d_name - (char *) (de)))
-+
-+
-+struct linux_dirent64 {
-+        u64             d_ino;
-+        s64             d_off;
-+        unsigned short  d_reclen;
-+        unsigned char   d_type;
-+        char            d_name[0];
-+};
-+
-+
-+struct getdents_callback64 {
-+        struct linux_dirent64 * current_dir;
-+        struct linux_dirent64 * previous;
-+        int count;
-+        int error;
-+};
-+
-+struct linux_dirent {
-+      unsigned long   d_ino;
-+      unsigned long   d_off;
-+      unsigned short  d_reclen;
-+      char            d_name[1];
-+};
-+
-+struct getdents_callback {
-+      struct linux_dirent * current_dir;
-+      struct linux_dirent * previous;
-+      int count;
-+      int error;
-+};
-+
-+
-+/*
-+ * MACROS:
-+ */
-+
-+/* file TO private_data */
-+# define ftopd(file) ((struct mini_fo_file_info *)((file)->private_data))
-+# define __ftopd(file) ((file)->private_data)
-+/* file TO hidden_file */
-+# define ftohf(file) ((ftopd(file))->wfi_file)
-+# define ftohf2(file) ((ftopd(file))->wfi_file2)
-+
-+/* inode TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->i_private)
-+# define __itopd(ino) ((ino)->i_private)
-+#else
-+# define itopd(ino) ((struct mini_fo_inode_info *)(ino)->u.generic_ip)
-+# define __itopd(ino) ((ino)->u.generic_ip)
-+#endif
-+/* inode TO hidden_inode */
-+# define itohi(ino) (itopd(ino)->wii_inode)
-+# define itohi2(ino) (itopd(ino)->wii_inode2)
-+
-+/* superblock TO private_data */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->s_fs_info)
-+# define __stopd(super) ((super)->s_fs_info)
-+#else
-+# define stopd(super) ((struct mini_fo_sb_info *)(super)->u.generic_sbp)
-+# define __stopd(super) ((super)->u.generic_sbp)
-+#endif
-+
-+/* unused? # define vfs2priv stopd */
-+/* superblock TO hidden_superblock */
-+
-+# define stohs(super) (stopd(super)->wsi_sb)
-+# define stohs2(super) (stopd(super)->wsi_sb2)
-+
-+/* dentry TO private_data */
-+# define dtopd(dentry) ((struct mini_fo_dentry_info *)(dentry)->d_fsdata)
-+# define __dtopd(dentry) ((dentry)->d_fsdata)
-+/* dentry TO hidden_dentry */
-+# define dtohd(dent) (dtopd(dent)->wdi_dentry)
-+# define dtohd2(dent) (dtopd(dent)->wdi_dentry2)
-+
-+/* dentry to state */
-+# define dtost(dent) (dtopd(dent)->state)
-+# define sbt(sb) ((sb)->s_type->name)
-+
-+#define IS_WRITE_FLAG(flag) (flag & (O_RDWR | O_WRONLY | O_APPEND))
-+#define IS_COPY_FLAG(flag) (flag & (COPY_FLAGS))
-+
-+/* macros to simplify non-SCA code */
-+#  define MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages)
-+#  define MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages)
-+#  define FREE_PAGE_POINTERS(hidden_pages, num)
-+#  define FREE_PAGEDATA_POINTERS(hidden_pages_data, num)
-+#  define FOR_EACH_PAGE
-+#  define CURRENT_HIDDEN_PAGE hidden_page
-+#  define CURRENT_HIDDEN_PAGEDATA hidden_page_data
-+#  define CURRENT_HIDDEN_PAGEINDEX page->index
-+
-+/*
-+ * EXTERNALS:
-+ */
-+extern struct file_operations mini_fo_main_fops;
-+extern struct file_operations mini_fo_dir_fops;
-+extern struct inode_operations mini_fo_main_iops;
-+extern struct inode_operations mini_fo_dir_iops;
-+extern struct inode_operations mini_fo_symlink_iops;
-+extern struct super_operations mini_fo_sops;
-+extern struct dentry_operations mini_fo_dops;
-+extern struct vm_operations_struct mini_fo_shared_vmops;
-+extern struct vm_operations_struct mini_fo_private_vmops;
-+extern struct address_space_operations mini_fo_aops;
-+
-+#if 0 /* unused by mini_fo */
-+extern int mini_fo_interpose(dentry_t *hidden_dentry, dentry_t *this_dentry, super_block_t *sb, int flag);
-+#if defined(FIST_FILTER_DATA) || defined(FIST_FILTER_SCA)
-+extern page_t *mini_fo_get1page(file_t *file, int index);
-+extern int mini_fo_fill_zeros(file_t *file, page_t *page, unsigned from);
-+# endif /* FIST_FILTER_DATA || FIST_FILTER_SCA */
-+
-+
-+#  define mini_fo_hidden_dentry(d) __mini_fo_hidden_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+#  define mini_fo_hidden_sto_dentry(d) __mini_fo_hidden_sto_dentry(__FILE__,__FUNCTION__,__LINE__,(d))
-+
-+extern dentry_t *__mini_fo_hidden_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+extern dentry_t *__mini_fo_hidden_sto_dentry(char *file, char *func, int line, dentry_t *this_dentry);
-+
-+extern int mini_fo_read_file(const char *filename, void *buf, int len);
-+extern int mini_fo_write_file(const char *filename, void *buf, int len);
-+extern dentry_t *fist_lookup(dentry_t *dir, const char *name, vnode_t **out, uid_t uid, gid_t gid);
-+#endif /* unused by mini_fo */
-+
-+/* state transition functions */
-+extern int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag);
-+extern int nondir_del_rew_to_del(dentry_t *dentry);
-+extern int nondir_creat_to_del(dentry_t *dentry);
-+extern int nondir_mod_to_del(dentry_t *dentry);
-+extern int nondir_unmod_to_del(dentry_t *dentry);
-+
-+extern int dir_unmod_to_mod(dentry_t *dentry);
-+
-+/* rename specials */
-+extern int rename_directory(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+extern int rename_nondir(inode_t *old_dir, dentry_t *old_dentry, inode_t *new_dir, dentry_t *new_dentry);
-+
-+/* misc stuff */
-+extern int mini_fo_tri_interpose(dentry_t *hidden_dentry,
-+                               dentry_t *hidden_sto_dentry,
-+                               dentry_t *dentry,
-+                               super_block_t *sb, int flag);
-+
-+extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-+                         dentry_t *src_dentry, struct vfsmount *src_mnt);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, dev_t dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd);
-+#else
-+extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode);
-+
-+extern int create_sto_nod(dentry_t *dentry, int mode, int dev);
-+extern int create_sto_reg_file(dentry_t *dentry, int mode);
-+#endif
-+
-+extern int create_sto_dir(dentry_t *dentry, int mode);
-+
-+extern int exists_in_storage(dentry_t *dentry);
-+extern int is_mini_fo_existant(dentry_t *dentry);
-+extern int get_neg_sto_dentry(dentry_t *dentry);
-+extern int build_sto_structure(dentry_t *dir, dentry_t *dentry);
-+extern int get_mini_fo_bpath(dentry_t *dentry, char **bpath, int *bpath_len);
-+extern dentry_t *bpath_walk(super_block_t *sb, char *bpath);
-+extern int bpath_put(dentry_t *dentry);
-+
-+/* check_mini_fo types functions */
-+extern int check_mini_fo_dentry(dentry_t *dentry);
-+extern int check_mini_fo_file(file_t *file);
-+extern int check_mini_fo_inode(inode_t *inode);
-+
-+/* General meta functions, can be called from outside of meta.c */
-+extern int meta_build_lists(dentry_t *dentry);
-+extern int meta_put_lists(dentry_t *dentry);
-+extern int __meta_put_lists(inode_t *inode);
-+
-+extern int meta_add_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_add_r_entry(dentry_t *dentry,
-+                          const char *old_name, int old_len,
-+                          const char *new_name, int new_len);
-+
-+extern int meta_remove_r_entry(dentry_t *dentry, const char *name, int len);
-+
-+extern int meta_check_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_check_d_entry(inode_t *inode, const char *name, int len);
-+
-+extern char* meta_check_r_entry(dentry_t *dentry, const char *name, int len);
-+extern char* __meta_check_r_entry(inode_t *inode, const char *name, int len);
-+extern int meta_is_r_entry(dentry_t *dentry, const char *name, int len);
-+extern int __meta_is_r_entry(inode_t *inode, const char *name, int len);
-+
-+/* Specific meta functions, should be called only inside meta.c */
-+extern int __meta_put_d_list(inode_t *inode);
-+extern int __meta_put_r_list(inode_t *inode);
-+
-+extern int meta_list_add_d_entry(dentry_t *dentry,
-+                               const char *name, int len);
-+extern int meta_list_add_r_entry(dentry_t *dentry,
-+                               const char *old_name, int old_len,
-+                               const char *new_name, int new_len);
-+
-+extern int meta_list_remove_r_entry(dentry_t *dentry,
-+                                  const char *name, int len);
-+
-+extern int __meta_list_remove_r_entry(inode_t *inode,
-+                                    const char *name, int len);
-+
-+extern int meta_write_d_entry(dentry_t *dentry, const char *name, int len);
-+extern int meta_write_r_entry(dentry_t *dentry,
-+                            const char *old_name, int old_len,
-+                            const char *new_name, int new_len);
-+
-+extern int meta_sync_lists(dentry_t *dentry);
-+extern int meta_sync_d_list(dentry_t *dentry, int app_flag);
-+extern int meta_sync_r_list(dentry_t *dentry, int app_flag);
-+
-+/* ndl stuff */
-+extern int ndl_add_entry(struct readdir_data *rd, const char *name, int len);
-+extern void ndl_put_list(struct readdir_data *rd);
-+extern int ndl_check_entry(struct readdir_data *rd,
-+                         const char *name, int len);
-+
-+
-+# define copy_inode_size(dst, src) \
-+    dst->i_size = src->i_size; \
-+    dst->i_blocks = src->i_blocks;
-+
-+static inline void
-+fist_copy_attr_atime(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+}
-+static inline void
-+fist_copy_attr_times(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+}
-+static inline void
-+fist_copy_attr_timesizes(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+      copy_inode_size(dest, src);
-+}
-+static inline void
-+fist_copy_attr_all(inode_t *dest, const inode_t *src)
-+{
-+      ASSERT(dest != NULL);
-+      ASSERT(src != NULL);
-+      dest->i_mode = src->i_mode;
-+      dest->i_nlink = src->i_nlink;
-+      dest->i_uid = src->i_uid;
-+      dest->i_gid = src->i_gid;
-+      dest->i_rdev = src->i_rdev;
-+      dest->i_atime = src->i_atime;
-+      dest->i_mtime = src->i_mtime;
-+      dest->i_ctime = src->i_ctime;
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
-+      dest->i_blksize = src->i_blksize;
-+#endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,12)
-+      dest->i_blkbits = src->i_blkbits;
-+# endif /* linux 2.4.12 and newer */
-+      copy_inode_size(dest, src);
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-+      dest->i_attr_flags = src->i_attr_flags;
-+#else
-+      dest->i_flags = src->i_flags;
-+#endif
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+/* copied from linux/fs.h */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      if (m1 != m2) {
-+              if ((unsigned long) m1 < (unsigned long) m2) {
-+                      struct mutex *tmp = m2;
-+                      m2 = m1; m1 = tmp;
-+              }
-+              mutex_lock(m1);
-+      }
-+      mutex_lock(m2);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+      struct mutex *m1 = &d1->d_inode->i_mutex;
-+      struct mutex *m2 = &d2->d_inode->i_mutex;
-+      mutex_unlock(m1);
-+      if (m1 != m2)
-+              mutex_unlock(m2);
-+      dput(d1);
-+      dput(d2);
-+}
-+
-+#else
-+static inline void double_down(struct semaphore *s1, struct semaphore *s2)
-+{
-+        if (s1 != s2) {
-+                if ((unsigned long) s1 < (unsigned long) s2) {
-+                        struct semaphore *tmp = s2;
-+                        s2 = s1; s1 = tmp;
-+                }
-+                down(s1);
-+        }
-+        down(s2);
-+}
-+
-+static inline void double_up(struct semaphore *s1, struct semaphore *s2)
-+{
-+        up(s1);
-+        if (s1 != s2)
-+                up(s2);
-+}
-+
-+static inline void double_lock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_down(&d1->d_inode->i_sem, &d2->d_inode->i_sem);
-+}
-+
-+static inline void double_unlock(struct dentry *d1, struct dentry *d2)
-+{
-+        double_up(&d1->d_inode->i_sem,&d2->d_inode->i_sem);
-+        dput(d1);
-+        dput(d2);
-+}
-+#endif   /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16) */
-+#endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
-+#endif /* __KERNEL__ */
-+
-+/*
-+ * Definitions for user and kernel code
-+ */
-+
-+/* ioctls */
-+
-+#endif        /* not __MINI_FO_H_ */
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-merge
-@@ -0,0 +1,180 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+BASE=
-+STO=
-+HELP=
-+DRYRUN=
-+VERBOSE=
-+TMP="/tmp/"
-+META_NAME="META_dAfFgHE39ktF3HD2sr"
-+SKIP_DEL_LIST="skip-delete-list.mini_fo-merge"
-+
-+COMMAND=
-+exec_command()
-+{
-+    if [ x$DRYRUN == "xset" ]; then
-+      echo "  would run: $COMMAND"
-+    elif ! [ x$DRYRUN == "xset" ]; then
-+      if [ x$VERBOSE == "xset" ]; then
-+          echo "  running: $COMMAND"
-+      fi
-+      eval $COMMAND
-+    fi
-+}
-+
-+usage()
-+{
-+cat <<EOF
-+
-+USAGE: $0 -b <base dir> -s <storage dir>
-+Version 0.1
-+
-+This script merges the contents of a mini_fo storage file system back
-+to the base file system.
-+
-+!!! Warning: This will modify the base filesystem and can destroy data
-+             if used wrongly.
-+
-+Options:
-+     -b <base dir>
-+          the directory of the base file system.
-+
-+     -s <storage dir>
-+          the directory of the storage file system.
-+
-+     -d   dry run, will not change anything and print the commands that
-+          would be executed.
-+
-+     -t   tmp dir for storing temporary file. default: $TMP
-+
-+     -v   show what operations are performed.
-+
-+     -h   displays this message.
-+
-+EOF
-+}
-+
-+# parse parameters
-+while getopts hdvt:b:s: OPTS
-+  do
-+  case $OPTS in
-+      h)  HELP="set";;
-+      d)  DRYRUN="set";;
-+      v)  VERBOSE="set";;
-+      b)  BASE="$OPTARG";;
-+      s)  STO="$OPTARG";;
-+      t)  TMP="$OPTARG";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+if ! [ -d "$BASE" ] || ! [ -d "$STO" ]; then
-+    echo -e "$0:\n Error, -s and/or -b argument missing. type $0 -h for help."
-+    exit -1;
-+fi
-+
-+# get full paths
-+pushd $STO; STO=`pwd`; popd
-+pushd $BASE; BASE=`pwd`; popd
-+TMP=${TMP%/}
-+
-+
-+cat<<EOF
-+###############################################################################
-+# mini_fo-merge
-+#
-+# base dir:       $BASE
-+# storage dir:    $STO
-+# meta filename:  $META_NAME
-+# dry run:        $DRYRUN
-+# verbose:        $VERBOSE
-+# tmp files:      $TMP
-+###############################################################################
-+
-+EOF
-+
-+rm $TMP/$SKIP_DEL_LIST
-+
-+# first process all renamed dirs
-+echo "Merging renamed directories..."
-+pushd $STO &> /dev/null
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^R ' | tr -s ':R' ' ' | while read ENTRY; do
-+    echo "entry: $ENTRY"
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    OLD_B_DIR=`echo $ENTRY | cut -d ' ' -f 2 | sed -e 's/\///'`
-+    NEW_NAME=`echo $ENTRY | cut -d ' ' -f 3`
-+    NEW_B_DIR=`echo $META_FILE | sed -e "s/$META_NAME/$NEW_NAME/" | sed -e 's/^\.\///'`
-+    echo "META_FILE: $META_FILE"
-+    echo "OLD_B_DIR: $OLD_B_DIR"
-+    echo "NEW_NAME: $NEW_NAME"
-+    echo  "NEW_B_DIR: $NEW_B_DIR"
-+
-+    pushd $BASE &> /dev/null
-+    # remove an existing dir in storage
-+    COMMAND="rm -rf $NEW_B_DIR"; exec_command
-+    COMMAND="cp -R $OLD_B_DIR $NEW_B_DIR"; exec_command
-+    echo ""
-+    popd &> /dev/null
-+
-+    # remember this dir to exclude it from deleting later
-+    echo $NEW_B_DIR >> $TMP/$SKIP_DEL_LIST
-+done
-+
-+# delete all whiteouted files from base
-+echo -e "\nDeleting whiteout'ed files from base file system..."
-+find . -name $META_NAME -type f -print0  | xargs -0 -e grep  -e '^D ' | sed -e 's/:D//' | while read ENTRY; do
-+    META_FILE=`echo $ENTRY | cut -d ' ' -f 1`
-+    DEL_NAME=`echo $ENTRY | cut -d ' ' -f 2`
-+    DEL_FILE=`echo $META_FILE | sed -e "s/$META_NAME/$DEL_NAME/" | sed -e 's/^\.\///'`
-+    grep -x $DEL_FILE $TMP/$SKIP_DEL_LIST &> /dev/null
-+    if [ $? -ne 0 ]; then
-+      pushd $BASE &> /dev/null
-+      COMMAND="rm -rf $DEL_FILE"; exec_command
-+      popd &> /dev/null
-+    else
-+      echo "  excluding: $DEL_FILE as in skip-del-list."
-+    fi
-+done
-+
-+# create all dirs and update permissions
-+echo -e "\nSetting up directory structures in base file system..."
-+find . -type d | sed -e 's/^\.\///' | while read DIR; do
-+    PERMS=`stat -c %a $DIR`
-+    DIR_UID=`stat -c %u $DIR`
-+    DIR_GID=`stat -c %g $DIR`
-+    pushd $BASE &> /dev/null
-+    if ! [ -d $DIR ]; then
-+      COMMAND="mkdir -p $DIR"; exec_command
-+    fi
-+    COMMAND="chmod $PERMS $DIR"; exec_command
-+    COMMAND="chown $DIR_UID:$DIR_GID $DIR"; exec_command
-+    popd &> /dev/null
-+done
-+
-+# merge all non-directory files
-+echo -e "\nMerging all non-directory files...."
-+for i in b c p f l s; do
-+    find . -type $i | sed -e 's/^\.\///' | grep -v "$META_NAME" | while read FILE; do
-+      pushd $BASE #&> /dev/null
-+      COMMAND="cp -df $STO/$FILE $BASE/$FILE"; exec_command
-+      popd &> /dev/null
-+    done
-+done
-+popd &> /dev/null
-+
-+#rm $TMP/$SKIP_DEL_LIST
-+
-+echo "Done!"
---- /dev/null
-+++ b/fs/mini_fo/mini_fo-overlay
-@@ -0,0 +1,130 @@
-+#!/bin/bash
-+#
-+# Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+# 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.
-+#
-+
-+HELP=
-+SUFF=
-+MNTP=
-+MNT_DIR="/mnt"
-+STO=
-+STO_DIR="/tmp"
-+BASE=
-+
-+usage()
-+{
-+cat <<EOF
-+
-+Usage: $0 [-s suffix] [-d sto_dir_dir] [-m mount point] base_dir
-+Version 0.1
-+
-+This script overlays the given base directory using the mini_fo file
-+system. If only the base directory base_dir is given, $0
-+will use a storage directory called "sto-<base_dir_name>" in $STO_DIR,
-+and mount point "mini_fo-<base_dir_dir>" in $MNT_DIR.
-+
-+Options:
-+     -s <suffix>
-+          add given suffix to storage directory and the mount
-+          point. This is usefull for overlaying one base directory
-+          several times and avoiding conflicts with storage directory
-+          names and mount points.
-+
-+     -d <sto_dir_dir>
-+          change the directory in which the storage directory will be
-+          created (default is currently "$STO_DIR".
-+
-+     -m <mount point>
-+          use an alternative directory to create the mini_fo
-+          mountpoint (default is currently "$MNT_DIR".
-+
-+     -h   displays this message.
-+
-+EOF
-+exit 1;
-+}
-+
-+while getopts hm:s:d: OPTS
-+  do
-+  case $OPTS in
-+      s)  SUFF="$OPTARG";;
-+      d)  STO_DIR="$OPTARG";;
-+      m)  MNT_DIR="$OPTARG";;
-+      h)  HELP="set";;
-+      ?)  usage
-+        exit 1;;
-+  esac
-+done
-+shift $(($OPTIND - 1))
-+
-+BASE="$1"
-+
-+if [ "x$HELP" == "xset" ]; then
-+    usage
-+    exit -1
-+fi
-+
-+# fix suffix
-+if [ "x$SUFF" != "x" ]; then
-+    SUFF="-$SUFF"
-+fi
-+
-+# kill trailing slashes
-+MNT_DIR=${MNT_DIR%/}
-+STO_DIR=${STO_DIR%/}
-+BASE=${BASE%/}
-+
-+
-+if ! [ -d "$BASE" ]; then
-+    echo "invalid base dir $BASE, run $0 -h for help."
-+    exit -1
-+fi
-+
-+# check opts
-+if ! [ -d "$MNT_DIR" ]; then
-+    echo "invalid mount dir $MNT_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+if ! [ -d "$STO_DIR" ]; then
-+    echo "invalid sto_dir_dir $STO_DIR, run $0 -h for help."
-+    exit -1
-+fi
-+
-+MNTP="$MNT_DIR/mini_fo-`basename $BASE`$SUFF"
-+STO="$STO_DIR/sto-`basename $BASE`$SUFF"
-+
-+# create the mount point if it doesn't exist
-+mkdir -p $MNTP
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create mount point $MNTP"
-+fi
-+
-+mkdir -p $STO
-+if [ $? -ne 0 ]; then
-+    echo "Error, failed to create storage dir $STO"
-+fi
-+
-+# check if fs is already mounted
-+mount | grep mini_fo | grep $MNTP &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, existing mini_fo mount at $MNTP."
-+    exit -1
-+fi
-+
-+mount | grep mini_fo | grep $STO &> /dev/null
-+if [ $? -eq 0 ]; then
-+    echo "Error, $STO seems to be used already."
-+    exit -1
-+fi
-+
-+# mount
-+mount -t mini_fo -o base=$BASE,sto=$STO $BASE $MNTP
-+
-+if [ $? -ne 0 ]; then
-+    echo "Error, mounting failed, maybe no permisson to mount?"
-+fi
---- /dev/null
-+++ b/fs/mini_fo/mmap.c
-@@ -0,0 +1,637 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+#ifdef FIST_COUNT_WRITES
-+/* for counting writes in the middle vs. regular writes */
-+unsigned long count_writes = 0, count_writes_middle = 0;
-+#endif /* FIST_COUNT_WRITES */
-+
-+/* forward declaration of commit write and prepare write */
-+STATIC int mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+STATIC int mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to);
-+
-+
-+/*
-+ * Function for handling creation of holes when lseek-ing past the
-+ * end of the file and then writing some data.
-+ */
-+int
-+mini_fo_fill_zeros(file_t* file, page_t *page, unsigned from)
-+{
-+      int err = 0;
-+      dentry_t *dentry = file->f_dentry;
-+      inode_t *inode = dentry->d_inode;
-+      page_t *tmp_page;
-+      int index;
-+
-+      print_entry_location();
-+
-+      for (index = inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+              tmp_page = mini_fo_get1page(file, index);
-+              if (IS_ERR(tmp_page)) {
-+                      err = PTR_ERR(tmp_page);
-+                      goto out;
-+              }
-+
-+              /*
-+               * zero out rest of the contents of the page between the appropriate
-+               * offsets.
-+               */
-+              memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+              if (! (err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+
-+              page_cache_release(tmp_page);
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+      /* zero out appropriate parts of last page */
-+
-+      /*
-+       * if the encoding type is block, then adjust the 'from' (where the
-+       * zeroing will start) offset appropriately
-+       */
-+      from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+
-+      if ((from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0) {
-+
-+              memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, from - (inode->i_size & ~PAGE_CACHE_MASK));
-+              if (! (err = mini_fo_prepare_write(file, page, 0, PAGE_CACHE_SIZE)))
-+                      err = mini_fo_commit_write(file, page, 0, PAGE_CACHE_SIZE);
-+
-+              if (err < 0)
-+                      goto out;
-+              if (current->need_resched)
-+                      schedule();
-+      }
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_writepage(page_t *page)
-+{
-+      int err = -EIO;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      char *kaddr, *hidden_kaddr;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      /*
-+       * writepage is called when shared mmap'ed files need to write
-+       * their pages, while prepare/commit_write are called from the
-+       * non-paged write() interface.  (However, in 2.3 the two interfaces
-+       * share the same cache, while in 2.2 they didn't.)
-+       *
-+       * So we pretty much have to duplicate much of what commit_write does.
-+       */
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      /* get page address, and encode it */
-+      kaddr = (char *) kmap(page);
-+      hidden_kaddr = (char*) kmap(hidden_page);
-+      mini_fo_encode_block(kaddr, hidden_kaddr, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then return error */
-+      kunmap(page);
-+      kunmap(hidden_page);
-+
-+      /* call lower writepage (expects locked page) */
-+      err = hidden_inode->i_mapping->a_ops->writepage(hidden_page);
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,4,1)
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+# endif /* kernel older than 2.4.1 */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+      if (err)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+ out:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,4,1)
-+      UnlockPage(page);
-+# endif /* kernel 2.4.1 and newer */
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * returns unlocked, up-to-date page (if ok), with increased refcnt.
-+ */
-+page_t *
-+mini_fo_get1page(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+      wait_on_page(page);
-+      if (!Page_Uptodate(page)) {
-+              lock_page(page);
-+              err = mapping->a_ops->readpage(file, page);
-+              if (err) {
-+                      page = ERR_PTR(err);
-+                      goto out;
-+              }
-+              wait_on_page(page);
-+              if (!Page_Uptodate(page)) {
-+                      page = ERR_PTR(-EIO);
-+                      goto out;
-+              }
-+      }
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * get one page from cache or lower f/s, return error otherwise.
-+ * similar to get1page, but doesn't guarantee that it will return
-+ * an unlocked page.
-+ */
-+page_t *
-+mini_fo_get1page_cached(file_t *file, int index)
-+{
-+      page_t *page;
-+      dentry_t *dentry;
-+      inode_t *inode;
-+      struct address_space *mapping;
-+      int err;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      inode = dentry->d_inode;
-+      mapping = inode->i_mapping;
-+
-+      fist_dprint(8, "%s: read page index %d pid %d\n", __FUNCTION__, index, current->pid);
-+      if (index < 0) {
-+              printk("%s BUG: index=%d\n", __FUNCTION__, index);
-+              page = ERR_PTR(-EIO);
-+              goto out;
-+      }
-+      page = read_cache_page(mapping,
-+                             index,
-+                             (filler_t *) mapping->a_ops->readpage,
-+                             (void *) file);
-+      if (IS_ERR(page))
-+              goto out;
-+
-+ out:
-+      print_exit_pointer(page);
-+      return page;
-+}
-+
-+
-+/*
-+ * readpage is called from generic_page_read and the fault handler.
-+ * If your file system uses generic_page_read for the read op, it
-+ * must implement readpage.
-+ *
-+ * Readpage expects a locked page, and must unlock it.
-+ */
-+STATIC int
-+mini_fo_do_readpage(file_t *file, page_t *page)
-+{
-+      int err = -EIO;
-+      dentry_t *dentry;
-+      file_t *hidden_file = NULL;
-+      dentry_t *hidden_dentry;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      char *page_data;
-+      page_t *hidden_page;
-+      char *hidden_page_data;
-+      int real_size;
-+
-+      print_entry_location();
-+
-+      dentry = file->f_dentry; /* CPW: Moved below print_entry_location */
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+      hidden_dentry = dtohd(dentry);
-+      inode = dentry->d_inode;
-+      hidden_inode = itohi(inode);
-+
-+      fist_dprint(7, "%s: requesting page %d from file %s\n", __FUNCTION__, page->index, dentry->d_name.name);
-+
-+      MALLOC_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      MALLOC_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGE = NULL;
-+
-+      /* find lower page (returns a locked page) */
-+      FOR_EACH_PAGE {
-+              fist_dprint(8, "%s: Current page index = %d\n", __FUNCTION__, CURRENT_HIDDEN_PAGEINDEX);
-+              CURRENT_HIDDEN_PAGE = read_cache_page(hidden_inode->i_mapping,
-+                                                    CURRENT_HIDDEN_PAGEINDEX,
-+                                                    (filler_t *) hidden_inode->i_mapping->a_ops->readpage,
-+                                                    (void *) hidden_file);
-+              if (IS_ERR(CURRENT_HIDDEN_PAGE)) {
-+                      err = PTR_ERR(CURRENT_HIDDEN_PAGE);
-+                      CURRENT_HIDDEN_PAGE = NULL;
-+                      goto out_release;
-+              }
-+      }
-+
-+      /*
-+       * wait for the page data to show up
-+       * (signaled by readpage as unlocking the page)
-+       */
-+      FOR_EACH_PAGE {
-+              wait_on_page(CURRENT_HIDDEN_PAGE);
-+              if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                      /*
-+                       * call readpage() again if we returned from wait_on_page with a
-+                       * page that's not up-to-date; that can happen when a partial
-+                       * page has a few buffers which are ok, but not the whole
-+                       * page.
-+                       */
-+                      lock_page(CURRENT_HIDDEN_PAGE);
-+                      err = hidden_inode->i_mapping->a_ops->readpage(hidden_file,
-+                                                                     CURRENT_HIDDEN_PAGE);
-+                      if (err) {
-+                              CURRENT_HIDDEN_PAGE = NULL;
-+                              goto out_release;
-+                      }
-+                      wait_on_page(CURRENT_HIDDEN_PAGE);
-+                      if (!Page_Uptodate(CURRENT_HIDDEN_PAGE)) {
-+                              err = -EIO;
-+                              goto out_release;
-+                      }
-+              }
-+      }
-+
-+      /* map pages, get their addresses */
-+      page_data = (char *) kmap(page);
-+      FOR_EACH_PAGE
-+              CURRENT_HIDDEN_PAGEDATA = (char *) kmap(CURRENT_HIDDEN_PAGE);
-+
-+      /* if decode_block could fail, then return error */
-+      err = 0;
-+      real_size = hidden_inode->i_size - (page->index << PAGE_CACHE_SHIFT);
-+      if (real_size <= 0)
-+              memset(page_data, 0, PAGE_CACHE_SIZE);
-+      else if (real_size < PAGE_CACHE_SIZE) {
-+              mini_fo_decode_block(hidden_page_data, page_data, real_size, inode, inode->i_sb, page->index);
-+              memset(page_data + real_size, 0, PAGE_CACHE_SIZE - real_size);
-+      } else
-+              mini_fo_decode_block(hidden_page_data, page_data, PAGE_CACHE_SIZE, inode, inode->i_sb, page->index);
-+
-+      FOR_EACH_PAGE
-+              kunmap(CURRENT_HIDDEN_PAGE);
-+      kunmap(page);
-+
-+ out_release:
-+      FOR_EACH_PAGE
-+              if (CURRENT_HIDDEN_PAGE)
-+                      page_cache_release(CURRENT_HIDDEN_PAGE); /* undo read_cache_page */
-+
-+      FREE_PAGE_POINTERS(hidden_pages, num_hidden_pages);
-+      FREE_PAGEDATA_POINTERS(hidden_pages_data, num_hidden_pages);
-+
-+ out:
-+      if (err == 0)
-+              SetPageUptodate(page);
-+      else
-+              ClearPageUptodate(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_readpage(file_t *file, page_t *page)
-+{
-+      int err;
-+      print_entry_location();
-+
-+      err = mini_fo_do_readpage(file, page);
-+
-+      /*
-+       * we have to unlock our page, b/c we _might_ have gotten a locked page.
-+       * but we no longer have to wakeup on our page here, b/c UnlockPage does
-+       * it
-+       */
-+      UnlockPage(page);
-+
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+STATIC int
-+mini_fo_prepare_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = 0;
-+
-+      print_entry_location();
-+
-+      /*
-+       * we call kmap(page) only here, and do the kunmap
-+       * and the actual downcalls, including unlockpage and uncache
-+       * in commit_write.
-+       */
-+      kmap(page);
-+
-+      /* fast path for whole page writes */
-+      if (from == 0 && to == PAGE_CACHE_SIZE)
-+              goto out;
-+      /* read the page to "revalidate" our data */
-+      /* call the helper function which doesn't unlock the page */
-+      if (!Page_Uptodate(page))
-+              err = mini_fo_do_readpage(file, page);
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
-+
-+
-+
-+STATIC int
-+mini_fo_commit_write(file_t *file, page_t *page, unsigned from, unsigned to)
-+{
-+      int err = -ENOMEM;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+      file_t *hidden_file = NULL;
-+      loff_t pos;
-+      unsigned bytes = to - from;
-+      unsigned hidden_from, hidden_to, hidden_bytes;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      ASSERT(file != NULL);
-+      /*
-+       * here we have a kmapped page, with data from the user copied
-+       * into it.  we need to encode_block it, and then call the lower
-+       * commit_write.  We also need to simulate same behavior of
-+       * generic_file_write, and call prepare_write on the lower f/s first.
-+       */
-+#ifdef FIST_COUNT_WRITES
-+      count_writes++;
-+# endif /* FIST_COUNT_WRITES */
-+
-+      /* this is append and/or extend -- we can't have holes so fill them in */
-+      if (page->index > (hidden_inode->i_size >> PAGE_CACHE_SHIFT)) {
-+              page_t *tmp_page;
-+              int index;
-+              for (index = hidden_inode->i_size >> PAGE_CACHE_SHIFT; index < page->index; index++) {
-+                      tmp_page = mini_fo_get1page(file, index);
-+                      if (IS_ERR(tmp_page)) {
-+                              err = PTR_ERR(tmp_page);
-+                              goto out;
-+                      }
-+                      /* zero out the contents of the page at the appropriate offsets */
-+                      memset((char*)page_address(tmp_page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, PAGE_CACHE_SIZE - (inode->i_size & ~PAGE_CACHE_MASK));
-+                      if (!(err = mini_fo_prepare_write(file, tmp_page, 0, PAGE_CACHE_SIZE)))
-+                              err = mini_fo_commit_write(file, tmp_page, 0, PAGE_CACHE_SIZE);
-+                      page_cache_release(tmp_page);
-+                      if (err < 0)
-+                              goto out;
-+                      if (current->need_resched)
-+                              schedule();
-+              }
-+      }
-+
-+      if (ftopd(file) != NULL)
-+              hidden_file = ftohf(file);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_inode->i_mutex);
-+#else
-+      down(&hidden_inode->i_sem);
-+#endif
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+#if FIST_ENCODING_BLOCKSIZE > 1
-+#  error encoding_blocksize greater than 1 is not yet supported
-+# endif /* FIST_ENCODING_BLOCKSIZE > 1 */
-+
-+      hidden_from = from & (~(FIST_ENCODING_BLOCKSIZE - 1));
-+      hidden_to = ((to + FIST_ENCODING_BLOCKSIZE - 1) & (~(FIST_ENCODING_BLOCKSIZE - 1)));
-+      if ((page->index << PAGE_CACHE_SHIFT) + to > hidden_inode->i_size) {
-+
-+              /*
-+               * if this call to commit_write had introduced holes and the code
-+               * for handling holes was invoked, then the beginning of this page
-+               * must be zeroed out
-+               * zero out bytes from 'size_of_file%pagesize' to 'from'.
-+               */
-+              if ((hidden_from - (inode->i_size & ~PAGE_CACHE_MASK)) > 0)
-+                      memset((char*)page_address(page) + (inode->i_size & ~PAGE_CACHE_MASK), 0, hidden_from - (inode->i_size & ~PAGE_CACHE_MASK));
-+
-+      }
-+      hidden_bytes = hidden_to - hidden_from;
-+
-+      /* call lower prepare_write */
-+      err = -EINVAL;
-+      if (hidden_inode->i_mapping &&
-+          hidden_inode->i_mapping->a_ops &&
-+          hidden_inode->i_mapping->a_ops->prepare_write)
-+              err = hidden_inode->i_mapping->a_ops->prepare_write(hidden_file,
-+                                                                  hidden_page,
-+                                                                  hidden_from,
-+                                                                  hidden_to);
-+      if (err)
-+              /* don't leave locked pages behind, esp. on an ENOSPC */
-+              goto out_unlock;
-+
-+      fist_dprint(8, "%s: encoding %d bytes\n", __FUNCTION__, hidden_bytes);
-+      mini_fo_encode_block((char *) page_address(page) + hidden_from, (char*) page_address(hidden_page) + hidden_from, hidden_bytes, inode, inode->i_sb, page->index);
-+      /* if encode_block could fail, then goto unlock and return error */
-+
-+      /* call lower commit_write */
-+      err = hidden_inode->i_mapping->a_ops->commit_write(hidden_file,
-+                                                         hidden_page,
-+                                                         hidden_from,
-+                                                         hidden_to);
-+
-+      if (err < 0)
-+              goto out_unlock;
-+
-+      err = bytes;    /* convert error to no. of bytes */
-+
-+      inode->i_blocks = hidden_inode->i_blocks;
-+      /* we may have to update i_size */
-+      pos = (page->index << PAGE_CACHE_SHIFT) + to;
-+      if (pos > inode->i_size)
-+              inode->i_size = pos;
-+
-+      /*
-+       * update mtime and ctime of lower level file system
-+       * mini_fo' mtime and ctime are updated by generic_file_write
-+       */
-+      hidden_inode->i_mtime = hidden_inode->i_ctime = CURRENT_TIME;
-+
-+      mark_inode_dirty_sync(inode);
-+
-+ out_unlock:
-+      UnlockPage(hidden_page);
-+      page_cache_release(hidden_page);
-+      kunmap(page);           /* kmap was done in prepare_write */
-+ out:
-+      /* we must set our page as up-to-date */
-+      if (err < 0)
-+              ClearPageUptodate(page);
-+      else
-+              SetPageUptodate(page);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_inode->i_mutex);
-+#else
-+      up(&hidden_inode->i_sem);
-+#endif
-+      print_exit_status(err);
-+      return err;                     /* assume all is ok */
-+}
-+
-+
-+STATIC int
-+mini_fo_bmap(struct address_space *mapping, long block)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+
-+      print_entry_location();
-+
-+      inode = (inode_t *) mapping->host;
-+      hidden_inode = itohi(inode);
-+
-+      if (hidden_inode->i_mapping->a_ops->bmap)
-+              err = hidden_inode->i_mapping->a_ops->bmap(hidden_inode->i_mapping, block);
-+      print_exit_location();
-+      return err;
-+}
-+
-+
-+/*
-+ * This function is copied verbatim from mm/filemap.c.
-+ * XXX: It should be simply moved to some header file instead -- bug Al about it!
-+ */
-+static inline int sync_page(struct page *page)
-+{
-+      struct address_space *mapping = page->mapping;
-+
-+      if (mapping && mapping->a_ops && mapping->a_ops->sync_page)
-+              return mapping->a_ops->sync_page(page);
-+      return 0;
-+}
-+
-+
-+/*
-+ * XXX: we may not need this function if not FIST_FILTER_DATA.
-+ * FIXME: for FIST_FILTER_SCA, get all lower pages and sync them each.
-+ */
-+STATIC int
-+mini_fo_sync_page(page_t *page)
-+{
-+      int err = 0;
-+      inode_t *inode;
-+      inode_t *hidden_inode;
-+      page_t *hidden_page;
-+
-+      print_entry_location();
-+
-+      inode = page->mapping->host; /* CPW: Moved below print_entry_location */
-+      hidden_inode = itohi(inode);
-+
-+      /* find lower page (returns a locked page) */
-+      hidden_page = grab_cache_page(hidden_inode->i_mapping, page->index);
-+      if (!hidden_page)
-+              goto out;
-+
-+      err = sync_page(hidden_page);
-+
-+      UnlockPage(hidden_page);        /* b/c grab_cache_page locked it */
-+      page_cache_release(hidden_page); /* b/c grab_cache_page increased refcnt */
-+
-+ out:
-+      print_exit_status(err);
-+      return err;
-+}
---- /dev/null
-+++ b/fs/mini_fo/README
-@@ -0,0 +1,163 @@
-+README for the mini_fo overlay file system
-+=========================================
-+
-+
-+WHAT IS MINI_FO?
-+----------------
-+
-+mini_fo is a virtual kernel file system that can make read-only
-+file systems writable. This is done by redirecting modifying operations
-+to a writeable location called "storage directory", and leaving the
-+original data in the "base directory" untouched. When reading, the
-+file system merges the modifed and original data so that only the
-+newest versions will appear. This occurs transparently to the user,
-+who can access the data like on any other read-write file system.
-+
-+Base and storage directories may be located on the same or on
-+different partitions and may be of different file system types. While
-+the storage directory obviously needs to be writable, the base may or
-+may not be writable, what doesn't matter as it will no be modified
-+anyway.
-+
-+
-+WHAT IS GOOD FOR?
-+-----------------
-+
-+The primary purpose of the mini_fo file system is to allow easy
-+software updates to embedded systems, that often store their root
-+file system in a read-only flash file system, but there are many
-+more as for example sandboxing, or for allowing live-cds to
-+permanently store information.
-+
-+
-+BUILDING
-+--------
-+This should be simple. Adjust the Makefile to point to the correct
-+kernel headers you want to build the module for. Then:
-+
-+    # make
-+
-+should build "mini_fo.o" for a 2.4 kernel or "mini_fo.ko" for a 2.6
-+kernel.
-+
-+If you are building the module for you current kernel, you can install
-+the module (as root):
-+
-+    # make install
-+
-+or uninstall with
-+
-+    # make uninstall
-+
-+
-+USING THE FILE SYSTEM
-+--------------------
-+
-+the general mount syntax is:
-+
-+   mount -t mini_fo -o base=<base directory>,sto=<storage directory>\
-+                            <base directory> <mount point>
-+
-+Example:
-+
-+You have mounted a cdrom to /mnt/cdrom and want to modifiy some files
-+on it:
-+
-+load the module (as root)
-+
-+    # insmod mini_fo.o for a 2.4 kernel or
-+
-+    # insmod mini_fo.ko for a 2.6 kernel
-+
-+
-+create a storage dir in tmp and a mountpoint for mini_fo:
-+
-+    # mkdir /tmp/sto
-+    # mkdir /mnt/mini_fo
-+
-+and mount the mini_fo file system:
-+
-+    # mount -t mini_fo -o base=/mnt/cdrom,sto=/tmp/sto /mnt/cdrom /mnt/mini_fo
-+
-+
-+Now the data stored on the cd can be accessed via the mini_fo
-+mountpoint just like any read-write file system, files can be modified
-+and deleted, new ones can be created and so on. When done unmount the
-+file system:
-+
-+    # unmount /mnt/mini_fo
-+
-+Note that if the file system is mounted again using the same storage
-+file system, of course it will appear in the modified state again. If
-+you remount it using an new empty storage directory, it will be
-+unmodified. Therefore by executing:
-+
-+    # cd /tmp/sto
-+    # rm -rf *
-+
-+you can nuke all the changes you made to the original file system. But
-+ remember NEVER do this while the mini_fo file system is mounted!
-+
-+
-+Alternatively you can use the mini_fo-overlay bash script, that
-+simplifies managing mini_fo mounts. See TOOLS Section.
-+
-+
-+TOOLS
-+-----
-+
-+mini_fo-merge (experimental):
-+
-+This is a bash script that will merge changes contained in the storage
-+directory back to the base directory. This allows mini_fo to function
-+as a cache file system by overlaying a slow (network, ...) file system
-+and using a fast (ramdisk, ...) as storage. When done, changes can be
-+merged back to the (slow) base with mini_fo-merge. See "mini_fo-merge
-+-h" for details.
-+
-+It can be usefull for merging changes back after a successfull test
-+(patches, software updates...)
-+
-+
-+mini_fo-overlay:
-+
-+This bash script simplifies managing one or more mini_fo mounts. For
-+overlaying a directory called "basedir1", you can just call:
-+
-+    # mini_fo-overlay basedir1
-+
-+This will mount mini_fo with "basedir1" as base, "/tmp/sto-basedir1/"
-+as storage to "/mnt/mini_fo-basedir1/". It has more options though,
-+type "mini_fo-overlay -h" for details.
-+
-+
-+DOCUMENTATION, REPORTING BUGS, GETTING HELP
-+-------------------------------------------
-+
-+Please visit the mini_fo project page at:
-+
-+http://www.denx.de/twiki/bin/view/Know/MiniFOHome
-+
-+
-+WARNINGS
-+--------
-+
-+Never modify the base or the storage directorys while the mini_fo
-+file system is mounted, or you might crash you system. Simply accessing
-+and reading should not cause any trouble.
-+
-+Exporting a mini_fo mount point via NFS has not been tested, and may
-+or may not work.
-+
-+Check the RELEASE_NOTES for details on bugs and features.
-+
-+
-+
-+Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+
-+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.
-+
-+
---- /dev/null
-+++ b/fs/mini_fo/RELEASE_NOTES
-@@ -0,0 +1,111 @@
-+Release:      mini_fo-0.6.1 (v0-6-1)
-+Date:         21.09.2005
-+
-+
-+Changes:
-+--------
-+v0-6-1:
-+
-+- bugfixes (see ChangeLog)
-+
-+- two helper scripts "mini_fo_merge" and "mini_fo_overlay" (see
-+  README for details).
-+
-+v0-6-0:
-+
-+- Support for 2.4 and 2.6 (see Makefile)
-+
-+- Partial hard link support (creating works as expected, but already
-+  existing links in the base file system will be treated as if they
-+  were individual files).
-+
-+- Various bugfixes and cleanups.
-+
-+
-+v0-6-0-pre1:
-+
-+- This is mini_fo-0-6-0-pre1! This release is a complete rewrite of
-+  many vital mini_fo parts such as the old whiteout list code which
-+  has been replaced by the new META subsystem.
-+
-+- Light weight directory renaming implemented. This means if a
-+  directory is renamed via the mini_fo filesystem this will no longer
-+  result in a complete copy in storage, instead only one empty
-+  directory will be created. All base filed contained in the original
-+  directory stay there until modified.
-+
-+- Special files (creating, renaming, deleting etc.) now working.
-+
-+- Many bugfixes and cleanup, mini_fo is now a lot more stable.
-+
-+
-+v0-5-10:
-+
-+- Final release of the 0-5-* versions. Next will be a complete rewrite
-+  of many features. This release contains several bugfixes related to
-+  directory renaming.
-+
-+
-+v0-5-10-pre6:
-+
-+- Lots of cleanup and several bugfixes related to directory deleting
-+
-+- Directory renaming suddenly works, what is most likely due to the
-+  fact tha that "mv" is smart: if the classic rename doesn't work it
-+  will assume that source and target file are on different fs and will
-+  copy the directory and try to remove the source directory. Until
-+  directory removing wasn't implemented, it would fail to do this and
-+  rollback.
-+  So, directory renaming works for now, but it doesn't yet do what you
-+  would expect from a overlay fs, so use with care.
-+
-+
-+v0-5-10-pre5:
-+
-+- implemented directory deleting
-+- made parsing of mount options more stable
-+- New format of mount options! (See README)
-+- I can't reproduce the unknown panic with 2.4.25 anymore, so I'll
-+  happily assume it never existed!
-+
-+
-+Implemented features:
-+---------------------
-+
-+- creating hard links (see BUGS on already existing hard links)
-+- lightweight directory renaming
-+- renaming device files, pipes, sockets, etc.
-+- creating, renaming, deleting of special files
-+- deleting directorys
-+- general directory reading (simple "ls" )
-+- creating files in existing directorys
-+- creating directorys
-+- renaming files.
-+- reading and writing files (involves opening)
-+- appending to files (creates copy in storage)
-+- deleting files
-+- llseek works too, what allows editors to work
-+- persistency (a deleted file stay deleted over remounts)
-+- use of symbolic links
-+- creating of device files
-+
-+
-+Not (yet) implemented features:
-+-------------------------------
-+
-+- full hard link support.
-+
-+
-+
-+BUGS:
-+-----
-+
-+Hard links in the base file system will be treated as individual
-+files, not as links to one inode.
-+
-+The main problem with hard links isn't allowing to create them, but
-+their pure existence. If you modify a base hard link, the changes made
-+will only show up on this link, the other link will remain in the
-+original state. I hope to fix this someday. Please note that this does
-+not effect the special hard links '.' and '..', that are handled
-+seperately by the lower fs.
---- /dev/null
-+++ b/fs/mini_fo/state.c
-@@ -0,0 +1,620 @@
-+/*
-+ * Copyright (C) 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif /* HAVE_CONFIG_H */
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+/* create the storage file, setup new states */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_reg_file(dentry_t *dentry, int mode, struct nameidata *nd)
-+#else
-+int create_sto_reg_file(dentry_t *dentry, int mode)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: wrong type or state.\n");
-+              err = -EINVAL;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode, nd);
-+#else
-+      err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                       hidden_sto_dentry,
-+                       mode);
-+#endif
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_file: ERROR creating sto file [2].\n");
-+                err = -EINVAL;
-+                goto out_lock;
-+        }
-+
-+        /* interpose the new inode */
-+        if(dtost(dentry) == DELETED) {
-+                dtost(dentry) = DEL_REWRITTEN;
-+                err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == NON_EXISTANT) {
-+                dtost(dentry) = CREATED;
-+                err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+                if(err)
-+                        goto out_lock;
-+        }
-+        else if(dtost(dentry) == UNMODIFIED) {
-+                dtost(dentry) = MODIFIED;
-+                /* interpose on new inode */
-+                if(itohi2(dentry->d_inode) != NULL) {
-+                        printk(KERN_CRIT "mini_fo: create_sto_file: invalid inode detected.\n");
-+                        err = -EINVAL;
-+                        goto out_lock;
-+                }
-+                itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+      fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* create the sto dir, setup states */
-+int create_sto_dir(dentry_t *dentry, int mode)
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+        dentry_t *hidden_sto_dir_dentry;
-+
-+      /* had to take the "!S_ISDIR(mode))" check out, because it failed */
-+      if(exists_in_storage(dentry)) {
-+                printk(KERN_CRIT "mini_fo: create_sto_dir: wrong type or state.\\
-+n");
-+                err = -EINVAL;
-+                goto out;
-+        }
-+
-+      err = get_neg_sto_dentry(dentry);
-+      if(err) {
-+              err = -EINVAL;
-+              goto out;
-+      }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mkdir(hidden_sto_dir_dentry->d_inode,
-+                      hidden_sto_dentry,
-+                      mode);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir.\n");
-+              goto out_lock;
-+      }
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_dir: ERROR creating sto dir [2].\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == NON_EXISTANT) {
-+              dtopd(dentry)->state = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtopd(dentry)->state == UNMODIFIED) {
-+              dtopd(dentry)->state = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo:  create_sto_dir: ERROR, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+      /* initalize the wol list */
-+      itopd(dentry->d_inode)->deleted_list_size = -1;
-+      itopd(dentry->d_inode)->renamed_list_size = -1;
-+      meta_build_lists(dentry);
-+
-+
-+ out_lock:
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+int create_sto_nod(dentry_t *dentry, int mode, dev_t dev)
-+#else
-+int create_sto_nod(dentry_t *dentry, int mode, int dev)
-+#endif
-+{
-+      int err = 0;
-+      inode_t *dir;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      if(exists_in_storage(dentry)) {
-+              err = -EEXIST;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+                printk(KERN_CRIT "mini_fo: create_sto_nod: ERROR getting neg. sto dentry.\n");
-+                goto out;
-+        }
-+
-+      dir = dentry->d_parent->d_inode;
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+      if (IS_ERR(hidden_sto_dir_dentry))
-+              goto out;
-+
-+      err = vfs_mknod(hidden_sto_dir_dentry->d_inode, hidden_sto_dentry, mode, dev);
-+      if(err)
-+              goto out_lock;
-+
-+      if(!dtohd2(dentry)->d_inode) {
-+              printk(KERN_CRIT "mini_fo: create_sto_nod: creating storage inode failed [1].\n");
-+              err = -EINVAL; /* return something indicating failure */
-+              goto out_lock;
-+      }
-+
-+      /* interpose the new inode */
-+      if(dtost(dentry) == DELETED) {
-+              dtost(dentry) = DEL_REWRITTEN;
-+              err = mini_fo_tri_interpose(NULL, hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == NON_EXISTANT) {
-+              dtost(dentry) = CREATED;
-+              err = mini_fo_tri_interpose(dtohd(dentry), hidden_sto_dentry, dentry, dir->i_sb, 0);
-+              if(err)
-+                      goto out_lock;
-+      }
-+      else if(dtost(dentry) == UNMODIFIED) {
-+              dtost(dentry) = MODIFIED;
-+              /* interpose on new inode */
-+              if(itohi2(dentry->d_inode) != NULL) {
-+                      printk(KERN_CRIT "mini_fo: create_sto_nod: error, invalid inode detected.\n");
-+                      err = -EINVAL;
-+                      goto out_lock;
-+              }
-+              itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+      }
-+
-+      fist_copy_attr_timesizes(dir, hidden_sto_dir_dentry->d_inode);
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+
-+/* unimplemented (and possibly not usefull):
-+
-+   nondir-del_to_del_rew
-+   nondir-non_exist_to_creat
-+
-+   dir-unmod_to_del
-+   dir-mod_to_del
-+   dir-creat_to_del
-+   dir-del_rew_to_del
-+   dir-del_to_del_rew
-+   dir-non_exist_to_creat
-+*/
-+
-+
-+/* bring a file of any type from state UNMODIFIED to MODIFIED */
-+int nondir_unmod_to_mod(dentry_t *dentry, int cp_flag)
-+{
-+      int err = 0;
-+      struct vfsmount *tgt_mnt;
-+      struct vfsmount *src_mnt;
-+      dentry_t *tgt_dentry;
-+      dentry_t *src_dentry;
-+      dentry_t *hidden_sto_dentry;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if((dtost(dentry) != UNMODIFIED) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if (err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR getting neg. sto dentry.\n");
-+              goto out;
-+      }
-+
-+      /* create sto file */
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* lock parent */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+        down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      err = PTR_ERR(hidden_sto_dir_dentry);
-+        if (IS_ERR(hidden_sto_dir_dentry))
-+                goto out;
-+
-+      /* handle different types of nondirs */
-+      if(S_ISCHR(dentry->d_inode->i_mode) ||
-+         S_ISBLK(dentry->d_inode->i_mode)) {
-+              err = vfs_mknod(hidden_sto_dir_dentry->d_inode,
-+                              hidden_sto_dentry,
-+                              dtohd(dentry)->d_inode->i_mode,
-+                              dtohd(dentry)->d_inode->i_rdev);
-+      }
-+
-+      else if(S_ISREG(dentry->d_inode->i_mode)) {
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode, NULL);
-+#else
-+              err = vfs_create(hidden_sto_dir_dentry->d_inode,
-+                               hidden_sto_dentry,
-+                               dtohd(dentry)->d_inode->i_mode);
-+#endif
-+      }
-+        if(err) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR creating sto file.\n");
-+                goto out_lock;
-+      }
-+
-+      /* interpose on new inode */
-+      if(itohi2(dentry->d_inode) != NULL) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                  ERROR, invalid inode detected.\n");
-+              err = -EINVAL;
-+              goto out_lock;
-+      }
-+
-+      itohi2(dentry->d_inode) = igrab(dtohd2(dentry)->d_inode);
-+
-+        fist_copy_attr_timesizes(dentry->d_parent->d_inode,
-+                               hidden_sto_dir_dentry->d_inode);
-+      dtost(dentry) = MODIFIED;
-+
-+      /* copy contents if regular file and cp_flag = 1 */
-+      if((cp_flag == 1) && S_ISREG(dentry->d_inode->i_mode)) {
-+
-+              /* unlock first */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+              up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+              dput(hidden_sto_dir_dentry);
-+
-+              tgt_dentry = dtohd2(dentry);
-+              tgt_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+              src_dentry = dtohd(dentry);
-+              src_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt;
-+
-+              err = mini_fo_cp_cont(tgt_dentry, tgt_mnt,
-+                                    src_dentry, src_mnt);
-+              if(err) {
-+                      printk(KERN_CRIT "mini_fo: nondir_unmod_to_mod: \
-+                                          ERROR copying contents.\n");
-+              }
-+              goto out;
-+      }
-+
-+ out_lock:
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+        dput(hidden_sto_dir_dentry);
-+ out:
-+      return err;
-+}
-+
-+/* this function is currently identical to nondir_creat_to_del */
-+int nondir_del_rew_to_del(dentry_t *dentry)
-+{
-+      return nondir_creat_to_del(dentry);
-+}
-+
-+int nondir_creat_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+      dentry_t *hidden_sto_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      /* for now this function serves for both state DEL_REWRITTEN and
-+       * CREATED */
-+      if(!(dtost(dentry) == CREATED || (dtost(dentry) == DEL_REWRITTEN)) ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del/del_rew_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was: hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry);*/
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      dtost(dentry) = NON_EXISTANT;
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_mod_to_del(dentry_t *dentry)
-+{
-+      int err;
-+      dentry_t *hidden_sto_dentry;
-+      inode_t *hidden_sto_dir_inode;
-+      dentry_t *hidden_sto_dir_dentry;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != MODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_mod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      hidden_sto_dir_inode = itohi2(dentry->d_parent->d_inode);
-+      hidden_sto_dentry = dtohd2(dentry);
-+
-+      /* was hidden_sto_dir_dentry = lock_parent(hidden_sto_dentry); */
-+      hidden_sto_dir_dentry = dget(hidden_sto_dentry->d_parent);
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      down(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+
-+      /* avoid destroying the hidden inode if the file is in use */
-+      dget(hidden_sto_dentry);
-+      err = vfs_unlink(hidden_sto_dir_inode, hidden_sto_dentry);
-+      dput(hidden_sto_dentry);
-+      if(!err)
-+              d_delete(hidden_sto_dentry);
-+
-+      /* propagate number of hard-links */
-+      dentry->d_inode->i_nlink = itohi2(dentry->d_inode)->i_nlink;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-+      /* was: unlock_dir(hidden_sto_dir_dentry); */
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-+      mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+#else
-+      up(&hidden_sto_dir_dentry->d_inode->i_sem);
-+#endif
-+      dput(hidden_sto_dir_dentry);
-+
-+ out:
-+      return err;
-+}
-+
-+int nondir_unmod_to_del(dentry_t *dentry)
-+{
-+      int err = 0;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: nondir_unmod_to_del: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+       /* next we have to get a negative dentry for the storage file */
-+      err = get_neg_sto_dentry(dentry);
-+
-+      if(err)
-+              goto out;
-+
-+      /* add deleted file to META lists */
-+      err = meta_add_d_entry(dentry->d_parent,
-+                             dentry->d_name.name,
-+                             dentry->d_name.len);
-+
-+      if(err)
-+              goto out;
-+
-+      /* dput base dentry, this will relase the inode and free the
-+       * dentry, as we will never need it again. */
-+      dput(dtohd(dentry));
-+      dtohd(dentry) = NULL;
-+      dtost(dentry) = DELETED;
-+
-+ out:
-+      return err;
-+}
-+
-+/* bring a dir from state UNMODIFIED to MODIFIED */
-+int dir_unmod_to_mod(dentry_t *dentry)
-+{
-+      int err;
-+
-+      check_mini_fo_dentry(dentry);
-+
-+      if(dtost(dentry) != UNMODIFIED ||
-+         !S_ISDIR(dentry->d_inode->i_mode)) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  wrong type or state.\n");
-+              err = -1;
-+              goto out;
-+      }
-+
-+      /* this creates our dir incl. sto. structure */
-+      err = build_sto_structure(dentry->d_parent, dentry);
-+      if(err) {
-+              printk(KERN_CRIT "mini_fo: dir_unmod_to_mod: \
-+                                  build_sto_structure failed.\n");
-+              goto out;
-+      }
-+ out:
-+      return err;
-+}
-+
---- /dev/null
-+++ b/fs/mini_fo/super.c
-@@ -0,0 +1,281 @@
-+/*
-+ * Copyright (c) 1997-2003 Erez Zadok
-+ * Copyright (c) 2001-2003 Stony Brook University
-+ *
-+ * For specific licensing information, see the COPYING file distributed with
-+ * this package, or get one from ftp://ftp.filesystems.org/pub/fist/COPYING.
-+ *
-+ * This Copyright notice must be kept intact and distributed with all
-+ * fistgen sources INCLUDING sources generated by fistgen.
-+ */
-+/*
-+ * Copyright (C) 2004, 2005 Markus Klotzbuecher <mk@creamnet.de>
-+ *
-+ * 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.
-+ */
-+
-+/*
-+ *  $Id$
-+ */
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "fist.h"
-+#include "mini_fo.h"
-+
-+
-+STATIC void
-+mini_fo_read_inode(inode_t *inode)
-+{
-+      static struct address_space_operations mini_fo_empty_aops;
-+
-+      __itopd(inode) = kmalloc(sizeof(struct mini_fo_inode_info), GFP_KERNEL);
-+      if (!itopd(inode)) {
-+              printk("<0>%s:%s:%d: No kernel memory!\n", __FILE__, __FUNCTION__, __LINE__);
-+              ASSERT(NULL);
-+      }
-+      itohi(inode) = NULL;
-+      itohi2(inode) = NULL;
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+      inode->i_version++;
-+#else
-+      inode->i_version = ++event;     /* increment inode version */
-+#endif
-+      inode->i_op = &mini_fo_main_iops;
-+      inode->i_fop = &mini_fo_main_fops;
-+#if 0
-+      /*
-+       * XXX: To export a file system via NFS, it has to have the
-+       * FS_REQUIRES_DEV flag, so turn it on.  But should we inherit it from
-+       * the lower file system, or can we allow our file system to be exported
-+       * even if the lower one cannot be natively exported.
-+       */
-+      inode->i_sb->s_type->fs_flags |= FS_REQUIRES_DEV;
-+      /*
-+       * OK, the above was a hack, which is now turned off because it may
-+       * cause a panic/oops on some systems.  The correct way to export a
-+       * "nodev" filesystem is via using nfs-utils > 1.0 and the "fsid=" export
-+       * parameter, which requires 2.4.20 or later.
-+       */
-+#endif
-+      /* I don't think ->a_ops is ever allowed to be NULL */
-+      inode->i_mapping->a_ops = &mini_fo_empty_aops;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * No need to call write_inode() on the lower inode, as it
-+ * will have been marked 'dirty' anyway. But we might need
-+ * to write some of our own stuff to disk.
-+ */
-+STATIC void
-+mini_fo_write_inode(inode_t *inode, int sync)
-+{
-+      print_entry_location();
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+STATIC void
-+mini_fo_put_inode(inode_t *inode)
-+{
-+      /*
-+       * This is really funky stuff:
-+       * Basically, if i_count == 1, iput will then decrement it and this inode will be destroyed.
-+       * It is currently holding a reference to the hidden inode.
-+       * Therefore, it needs to release that reference by calling iput on the hidden inode.
-+       * iput() _will_ do it for us (by calling our clear_inode), but _only_ if i_nlink == 0.
-+       * The problem is, NFS keeps i_nlink == 1 for silly_rename'd files.
-+       * So we must for our i_nlink to 0 here to trick iput() into calling our clear_inode.
-+       */
-+      if (atomic_read(&inode->i_count) == 1)
-+              inode->i_nlink = 0;
-+}
-+
-+
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+/*
-+ * we now define delete_inode, because there are two VFS paths that may
-+ * destroy an inode: one of them calls clear inode before doing everything
-+ * else that's needed, and the other is fine.  This way we truncate the inode
-+ * size (and its pages) and then clear our own inode, which will do an iput
-+ * on our and the lower inode.
-+ */
-+STATIC void
-+mini_fo_delete_inode(inode_t *inode)
-+{
-+      print_entry_location();
-+
-+      fist_checkinode(inode, "mini_fo_delete_inode IN");
-+      inode->i_size = 0;              /* every f/s seems to do that */
-+      clear_inode(inode);
-+
-+      print_exit_location();
-+}
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+
-+
-+/* final actions when unmounting a file system */
-+STATIC void
-+mini_fo_put_super(super_block_t *sb)
-+{
-+      if (stopd(sb)) {
-+              mntput(stopd(sb)->hidden_mnt);
-+              mntput(stopd(sb)->hidden_mnt2);
-+
-+              /* mk: no! dput(stopd(sb)->base_dir_dentry);
-+                 dput(stopd(sb)->storage_dir_dentry); */
-+
-+              kfree(stopd(sb));
-+              __stopd(sb) = NULL;
-+      }
-+}
-+
-+
-+#ifdef NOT_NEEDED
-+/*
-+ * This is called in do_umount before put_super.
-+ * The superblock lock is not held yet.
-+ * We probably do not need to define this or call write_super
-+ * on the hidden_sb, because sync_supers() will get to hidden_sb
-+ * sooner or later.  But it is also called from file_fsync()...
-+ */
-+STATIC void
-+mini_fo_write_super(super_block_t *sb)
-+{
-+      return;
-+}
-+#endif /* NOT_NEEDED */
-+
-+
-+STATIC int
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_statfs(struct dentry *d, struct kstatfs *buf)
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+mini_fo_statfs(super_block_t *sb, struct kstatfs *buf)
-+#else
-+mini_fo_statfs(super_block_t *sb, struct statfs *buf)
-+#endif
-+{
-+      int err = 0;
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+      struct dentry *hidden_d;
-+
-+      hidden_d = dtohd(d);
-+      err = vfs_statfs(hidden_d, buf);
-+#else
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+      err = vfs_statfs(hidden_sb, buf);
-+#endif
-+
-+      return err;
-+}
-+
-+
-+/*
-+ * XXX: not implemented.  This is not allowed yet.
-+ * Should we call this on the hidden_sb?  Probably not.
-+ */
-+STATIC int
-+mini_fo_remount_fs(super_block_t *sb, int *flags, char *data)
-+{
-+      //printk(KERN_CRIT "mini_fo_remount_fs: WARNING, this function is umimplemented.\n");
-+      return -ENOSYS;
-+}
-+
-+
-+/*
-+ * Called by iput() when the inode reference count reached zero
-+ * and the inode is not hashed anywhere.  Used to clear anything
-+ * that needs to be, before the inode is completely destroyed and put
-+ * on the inode free list.
-+ */
-+STATIC void
-+mini_fo_clear_inode(inode_t *inode)
-+{
-+      /*
-+       * Decrement a reference to a hidden_inode, which was incremented
-+       * by our read_inode when it was created initially.
-+       */
-+
-+      /* release the wol_list */
-+      if(S_ISDIR(inode->i_mode)) {
-+              __meta_put_lists(inode);
-+      }
-+
-+      /* mk: fan out fun */
-+      if(itohi(inode))
-+              iput(itohi(inode));
-+      if(itohi2(inode))
-+              iput(itohi2(inode));
-+
-+      // XXX: why this assertion fails?
-+      // because it doesn't like us
-+      // ASSERT((inode->i_state & I_DIRTY) == 0);
-+      kfree(itopd(inode));
-+      __itopd(inode) = NULL;
-+}
-+
-+
-+/*
-+ * Called in do_umount() if the MNT_FORCE flag was used and this
-+ * function is defined.  See comment in linux/fs/super.c:do_umount().
-+ * Used only in nfs, to kill any pending RPC tasks, so that subsequent
-+ * code can actually succeed and won't leave tasks that need handling.
-+ *
-+ * PS. I wonder if this is somehow useful to undo damage that was
-+ * left in the kernel after a user level file server (such as amd)
-+ * dies.
-+ */
-+STATIC void
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+mini_fo_umount_begin(struct vfsmount *mnt, int flags)
-+{
-+      struct vfsmount *hidden_mnt;
-+
-+      hidden_mnt = stopd(mnt->mnt_sb)->hidden_mnt;
-+
-+      if (hidden_mnt->mnt_sb->s_op->umount_begin)
-+              hidden_mnt->mnt_sb->s_op->umount_begin(hidden_mnt, flags);
-+
-+}
-+#else
-+mini_fo_umount_begin(super_block_t *sb)
-+{
-+      super_block_t *hidden_sb;
-+
-+      hidden_sb = stohs(sb);
-+
-+      if (hidden_sb->s_op->umount_begin)
-+              hidden_sb->s_op->umount_begin(hidden_sb);
-+
-+}
-+#endif
-+
-+
-+struct super_operations mini_fo_sops =
-+{
-+      read_inode:             mini_fo_read_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      write_inode:    mini_fo_write_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_inode:              mini_fo_put_inode,
-+#if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-+      delete_inode:   mini_fo_delete_inode,
-+#endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+      put_super:              mini_fo_put_super,
-+      statfs:         mini_fo_statfs,
-+      remount_fs:             mini_fo_remount_fs,
-+      clear_inode:    mini_fo_clear_inode,
-+      umount_begin:   mini_fo_umount_begin,
-+};
---- /dev/null
-+++ b/fs/mini_fo/Kconfig
-@@ -0,0 +1,3 @@
-+config MINI_FO
-+      tristate "Mini fanout overlay filesystem"
-+
diff --git a/target/linux/generic-2.6/patches-2.6.34/210-mini_fo_2.6.25_fixes.patch b/target/linux/generic-2.6/patches-2.6.34/210-mini_fo_2.6.25_fixes.patch
deleted file mode 100644 (file)
index d71e3b6..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
---- a/fs/mini_fo/main.c
-+++ b/fs/mini_fo/main.c
-@@ -79,6 +79,7 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-        * of the new inode's fields
-        */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       /*
-        * original: inode = iget(sb, hidden_inode->i_ino);
-        */
-@@ -87,6 +88,13 @@ mini_fo_tri_interpose(dentry_t *hidden_d
-               err = -EACCES;          /* should be impossible??? */
-               goto out;
-       }
-+#else
-+      inode = mini_fo_iget(sb, iunique(sb, 25));
-+      if (IS_ERR(inode)) {
-+              err = PTR_ERR(inode);
-+              goto out;
-+      }
-+#endif
-       /*
-        * interpose the inode if not already interposed
-@@ -184,9 +192,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root = nd.dentry;
--                      stopd(sb)->base_dir_dentry = nd.dentry;
--                      stopd(sb)->hidden_mnt = nd.mnt;
-+                      hidden_root = nd_get_dentry(&nd);
-+                      stopd(sb)->base_dir_dentry = nd_get_dentry(&nd);
-+                      stopd(sb)->hidden_mnt = nd_get_mnt(&nd);
-               } else if(!strncmp("sto=", options, 4)) {
-                       /* parse the storage dir */
-@@ -204,9 +212,9 @@ mini_fo_parse_options(super_block_t *sb,
-                               hidden_root2 = ERR_PTR(err);
-                               goto out;
-                       }
--                      hidden_root2 = nd2.dentry;
--                      stopd(sb)->storage_dir_dentry = nd2.dentry;
--                      stopd(sb)->hidden_mnt2 = nd2.mnt;
-+                      hidden_root2 = nd_get_dentry(&nd2);
-+                      stopd(sb)->storage_dir_dentry = nd_get_dentry(&nd2);
-+                      stopd(sb)->hidden_mnt2 = nd_get_mnt(&nd2);
-                       stohs2(sb) = hidden_root2->d_sb;
-                       /* validate storage dir, this is done in
---- a/fs/mini_fo/mini_fo.h
-+++ b/fs/mini_fo/mini_fo.h
-@@ -302,6 +302,10 @@ extern int mini_fo_tri_interpose(dentry_
- extern int mini_fo_cp_cont(dentry_t *tgt_dentry, struct vfsmount *tgt_mnt,
-                          dentry_t *src_dentry, struct vfsmount *src_mnt);
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+extern struct inode *mini_fo_iget(struct super_block *sb, unsigned long ino);
-+#endif
-+
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
- extern int mini_fo_create(inode_t *dir, dentry_t *dentry, int mode, struct nameidata *nd);
-@@ -501,6 +505,29 @@ static inline void double_unlock(struct 
- #endif  /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0) */
- #endif /* __KERNEL__ */
-+
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->path.dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->path.mnt);
-+}
-+#else
-+static inline dentry_t *nd_get_dentry(struct nameidata *nd)
-+{
-+      return (nd->dentry);
-+}
-+
-+static inline struct vfsmount *nd_get_mnt(struct nameidata *nd)
-+{
-+      return (nd->mnt);
-+}
-+#endif
-+
- /*
-  * Definitions for user and kernel code
-  */
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -262,10 +262,31 @@ mini_fo_umount_begin(super_block_t *sb)
- }
- #endif
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)
-+struct inode *
-+mini_fo_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      mini_fo_read_inode(inode);
-+
-+      unlock_new_inode(inode);
-+      return inode;
-+}
-+#endif /* if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25) */
- struct super_operations mini_fo_sops =
- {
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
-       read_inode:             mini_fo_read_inode,
-+#endif
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -164,11 +164,11 @@ dentry_t *bpath_walk(super_block_t *sb, 
-       err = vfs_path_lookup(mnt->mnt_root, mnt, bpath+1, 0, &nd);
-       /* validate */
--      if (err || !nd.dentry || !nd.dentry->d_inode) {
-+      if (err || !nd_get_dentry(&nd) || !nd_get_dentry(&nd)->d_inode) {
-               printk(KERN_CRIT "mini_fo: bpath_walk: path_walk failed.\n");
-               return NULL;
-       }
--      return nd.dentry;
-+      return nd_get_dentry(&nd);
- }
diff --git a/target/linux/generic-2.6/patches-2.6.34/211-mini_fo_2.6.25_dentry_open_war.patch b/target/linux/generic-2.6/patches-2.6.34/211-mini_fo_2.6.25_dentry_open_war.patch
deleted file mode 100644 (file)
index 48a1942..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -442,6 +442,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                          S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -535,6 +540,11 @@ int meta_write_r_entry(dentry_t *dentry,
-                          meta_dentry, S_IRUSR | S_IWUSR);
- #endif
-       }
-+
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-@@ -671,14 +681,16 @@ int meta_sync_d_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
-@@ -811,14 +823,16 @@ int meta_sync_r_list(dentry_t *dentry, i
-               }
-       }
-+      /* $%& err, is this correct? */
-+      meta_mnt = stopd(dentry->d_inode->i_sb)->hidden_mnt2;
-+      mntget(meta_mnt);
-+
-         /* open META-file for writing */
-         meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
--              /* we don't mntget so we dont't mntput (for now)
--               * mntput(meta_mnt);
--               */
-+              mntput(meta_mnt);
-               dput(meta_dentry);
-               err = -1;
-                 goto out;
diff --git a/target/linux/generic-2.6/patches-2.6.34/212-mini_fo_2.6.26_fixes.patch b/target/linux/generic-2.6/patches-2.6.34/212-mini_fo_2.6.26_fixes.patch
deleted file mode 100644 (file)
index 8bd9ba3..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
---- a/fs/mini_fo/super.c
-+++ b/fs/mini_fo/super.c
-@@ -84,6 +84,7 @@ mini_fo_write_inode(inode_t *inode, int 
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
- STATIC void
- mini_fo_put_inode(inode_t *inode)
- {
-@@ -99,6 +100,7 @@ mini_fo_put_inode(inode_t *inode)
-       if (atomic_read(&inode->i_count) == 1)
-               inode->i_nlink = 0;
- }
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) */
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-@@ -238,7 +240,7 @@ mini_fo_clear_inode(inode_t *inode)
-  * dies.
-  */
- STATIC void
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26))
- mini_fo_umount_begin(struct vfsmount *mnt, int flags)
- {
-       struct vfsmount *hidden_mnt;
-@@ -290,7 +292,9 @@ struct super_operations mini_fo_sops =
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       write_inode:    mini_fo_write_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26)
-       put_inode:              mini_fo_put_inode,
-+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(2,6,26) */
- #if defined(FIST_DEBUG) || defined(FIST_FILTER_SCA)
-       delete_inode:   mini_fo_delete_inode,
- #endif /* defined(FIST_DEBUG) || defined(FIST_FILTER_SCA) */
diff --git a/target/linux/generic-2.6/patches-2.6.34/213-mini_fo_2.6.27_fixes.patch b/target/linux/generic-2.6/patches-2.6.34/213-mini_fo_2.6.27_fixes.patch
deleted file mode 100644 (file)
index f92c18b..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
---- a/fs/mini_fo/inode.c
-+++ b/fs/mini_fo/inode.c
-@@ -439,7 +439,7 @@ mini_fo_symlink(inode_t *dir, dentry_t *
-       int err=0;
-       dentry_t *hidden_sto_dentry;
-       dentry_t *hidden_sto_dir_dentry;
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-         umode_t mode;
- #endif
-@@ -466,7 +466,7 @@ mini_fo_symlink(inode_t *dir, dentry_t *
-       down(&hidden_sto_dir_dentry->d_inode->i_sem);
- #endif
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
-       mode = S_IALLUGO;
-       err = vfs_symlink(hidden_sto_dir_dentry->d_inode,
-                         hidden_sto_dentry, symname, mode);
-@@ -1128,7 +1128,7 @@ void mini_fo_put_link(struct dentry *den
- #endif
- STATIC int
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,27))
- mini_fo_permission(inode_t *inode, int mask, struct nameidata *nd)
- #else
- mini_fo_permission(inode_t *inode, int mask)
-@@ -1150,8 +1150,9 @@ mini_fo_permission(inode_t *inode, int m
-        *      if (err)
-        *              goto out;
-        */
--
--#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,27)
-+      err = inode_permission(hidden_inode, mask);
-+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-       err = permission(hidden_inode, mask, nd);
- #else
-       err = permission(hidden_inode, mask);
diff --git a/target/linux/generic-2.6/patches-2.6.34/214-mini_fo_2.6.29.patch b/target/linux/generic-2.6/patches-2.6.34/214-mini_fo_2.6.29.patch
deleted file mode 100644 (file)
index 63d704b..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -236,7 +236,7 @@ int mini_fo_cp_cont(dentry_t *tgt_dentry
-       mntget(src_mnt);
-       /* open file write only */
--      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1);
-+      tgt_file = dentry_open(tgt_dentry, tgt_mnt, 0x1, current_cred());
-       if(!tgt_file || IS_ERR(tgt_file)) {
-               printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening target file.\n");
-               err = PTR_ERR(tgt_file);
-@@ -244,7 +244,7 @@ int mini_fo_cp_cont(dentry_t *tgt_dentry
-       }
-       /* open file read only */
--      src_file = dentry_open(src_dentry, src_mnt, 0x0);
-+      src_file = dentry_open(src_dentry, src_mnt, 0x0, current_cred());
-       if(!src_file || IS_ERR(src_file)) {
-               printk(KERN_CRIT "mini_fo_cp_cont: ERROR opening source file.\n");
-               err = PTR_ERR(src_file);
---- a/fs/mini_fo/file.c
-+++ b/fs/mini_fo/file.c
-@@ -437,7 +437,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-                       mntget(stopd(inode->i_sb)->hidden_mnt);
-                       hidden_file = dentry_open(hidden_dentry,
-                                                 stopd(inode->i_sb)->hidden_mnt,
--                                                hidden_flags);
-+                                                hidden_flags, file->f_cred);
-                       if (IS_ERR(hidden_file)) {
-                               err = PTR_ERR(hidden_file);
-                               dput(hidden_dentry);
-@@ -479,7 +479,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-                       mntget(stopd(inode->i_sb)->hidden_mnt);
-                       hidden_file = dentry_open(hidden_dentry,
-                                                 stopd(inode->i_sb)->hidden_mnt,
--                                                hidden_flags);
-+                                                hidden_flags, file->f_cred);
-                       if (IS_ERR(hidden_file)) {
-                               err = PTR_ERR(hidden_file);
-                               dput(hidden_dentry);
-@@ -512,7 +512,7 @@ mini_fo_open(inode_t *inode, file_t *fil
-       mntget(stopd(inode->i_sb)->hidden_mnt2);
-       hidden_sto_file = dentry_open(hidden_sto_dentry,
-                                     stopd(inode->i_sb)->hidden_mnt2,
--                                    hidden_flags);
-+                                    hidden_flags, file->f_cred);
-       /* dentry_open dputs the dentry if it fails */
-       if (IS_ERR(hidden_sto_file)) {
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -56,7 +56,7 @@ int meta_build_lists(dentry_t *dentry)
-               /* open META-file for reading */
--              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0);
-+              meta_file = dentry_open(meta_dentry, meta_mnt, 0x0, current_cred());
-               if(!meta_file || IS_ERR(meta_file)) {
-                       printk(KERN_CRIT "mini_fo: meta_build_lists: \
-                                           ERROR opening META file.\n");
-@@ -448,7 +448,7 @@ int meta_write_d_entry(dentry_t *dentry,
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_write_d_entry: \
-                                   ERROR opening meta file.\n");
-@@ -546,7 +546,7 @@ int meta_write_r_entry(dentry_t *dentry,
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_write_r_entry: \
-                                   ERROR opening meta file.\n");
-@@ -686,7 +686,7 @@ int meta_sync_d_list(dentry_t *dentry, i
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_d_list: \
-                                   ERROR opening meta file.\n");
-@@ -828,7 +828,7 @@ int meta_sync_r_list(dentry_t *dentry, i
-       mntget(meta_mnt);
-         /* open META-file for writing */
--        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1);
-+        meta_file = dentry_open(meta_dentry, meta_mnt, 0x1, current_cred());
-         if(!meta_file || IS_ERR(meta_file)) {
-                 printk(KERN_CRIT "mini_fo: meta_sync_r_list: \
-                                   ERROR opening meta file.\n");
diff --git a/target/linux/generic-2.6/patches-2.6.34/215-mini_fo_2.6.30.patch b/target/linux/generic-2.6/patches-2.6.34/215-mini_fo_2.6.30.patch
deleted file mode 100644 (file)
index 2d20920..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
---- a/fs/mini_fo/aux.c
-+++ b/fs/mini_fo/aux.c
-@@ -86,8 +86,10 @@ int get_neg_sto_dentry(dentry_t *dentry)
-       len = dentry->d_name.len;
-       name = dentry->d_name.name;
-+      mutex_lock(&dtohd2(dentry->d_parent)->d_inode->i_mutex);
-       dtohd2(dentry) =
-               lookup_one_len(name, dtohd2(dentry->d_parent), len);
-+      mutex_unlock(&dtohd2(dentry->d_parent)->d_inode->i_mutex);
-  out:
-       return err;
-@@ -426,7 +428,9 @@ int build_sto_structure(dentry_t *dir, d
-               const unsigned char *name;
-               len = dtohd(dentry)->d_name.len;
-               name = dtohd(dentry)->d_name.name;
-+              mutex_lock(&dtohd2(dir)->d_inode->i_mutex);
-               hidden_sto_dentry = lookup_one_len(name, dtohd2(dir), len);
-+              mutex_unlock(&dtohd2(dir)->d_inode->i_mutex);
-               dtohd2(dentry) = hidden_sto_dentry;
-       }
---- a/fs/mini_fo/inode.c
-+++ b/fs/mini_fo/inode.c
-@@ -113,17 +113,23 @@ mini_fo_lookup(inode_t *dir, dentry_t *d
-               hidden_dir_dentry = hidden_dentry->d_parent;
-               kfree(bpath);
-       }
--      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode)
-+      else if(hidden_dir_dentry && hidden_dir_dentry->d_inode) {
-+              mutex_lock(&hidden_dir_dentry->d_inode->i_mutex);
-               hidden_dentry =
-                       lookup_one_len(name, hidden_dir_dentry, namelen);
--      else
-+              mutex_unlock(&hidden_dir_dentry->d_inode->i_mutex);
-+      } else {
-               hidden_dentry = NULL;
-+      }
--      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode)
-+      if(hidden_sto_dir_dentry && hidden_sto_dir_dentry->d_inode) {
-+              mutex_lock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-               hidden_sto_dentry =
-                       lookup_one_len(name, hidden_sto_dir_dentry, namelen);
--      else
-+              mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
-+      } else {
-               hidden_sto_dentry =  NULL;
-+      }
-       /* catch error in lookup */
-       if (IS_ERR(hidden_dentry) || IS_ERR(hidden_sto_dentry)) {
-@@ -553,9 +559,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       err = vfs_unlink(hidden_sto_dentry->d_inode, meta_dentry);
-                       dput(meta_dentry);
-@@ -643,9 +651,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       /* is this necessary? dget(meta_dentry); */
-                       err = vfs_unlink(hidden_sto_dentry->d_inode,
-@@ -688,9 +698,11 @@ mini_fo_rmdir(inode_t *dir, dentry_t *de
- #endif
-               /* Delete an old WOL file contained in the storage dir */
-+              mutex_lock(&hidden_sto_dentry->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            hidden_sto_dentry,
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&hidden_sto_dentry->d_inode->i_mutex);
-               if(meta_dentry->d_inode) {
-                       /* is this necessary? dget(meta_dentry); */
-                       err = vfs_unlink(hidden_sto_dentry->d_inode,
---- a/fs/mini_fo/meta.c
-+++ b/fs/mini_fo/meta.c
-@@ -43,9 +43,11 @@ int meta_build_lists(dentry_t *dentry)
-       /* might there be a META-file? */
-       if(dtohd2(dentry) && dtohd2(dentry)->d_inode) {
-+              mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-               meta_dentry = lookup_one_len(META_FILENAME,
-                                            dtohd2(dentry),
-                                            strlen(META_FILENAME));
-+              mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-               if(!meta_dentry->d_inode) {
-                       dput(meta_dentry);
-                       goto out_ok;
-@@ -426,8 +428,11 @@ int meta_write_d_entry(dentry_t *dentry,
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry), strlen (META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-       /* We need to create a META-file */
-         if(!meta_dentry->d_inode) {
-@@ -527,9 +532,13 @@ int meta_write_r_entry(dentry_t *dentry,
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen (META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-@@ -641,9 +650,13 @@ int meta_sync_d_list(dentry_t *dentry, i
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen(META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
-@@ -784,9 +797,13 @@ int meta_sync_r_list(dentry_t *dentry, i
-                       goto out;
-                 }
-         }
-+
-+      mutex_lock(&dtohd2(dentry)->d_inode->i_mutex);
-       meta_dentry = lookup_one_len(META_FILENAME,
-                                    dtohd2(dentry),
-                                    strlen(META_FILENAME));
-+      mutex_unlock(&dtohd2(dentry)->d_inode->i_mutex);
-+
-         if(!meta_dentry->d_inode) {
-                 /* We need to create a META-file */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)
diff --git a/target/linux/generic-2.6/patches-2.6.34/216-mini_fo_locking.patch b/target/linux/generic-2.6/patches-2.6.34/216-mini_fo_locking.patch
deleted file mode 100644 (file)
index 4f07592..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/fs/mini_fo/state.c
-+++ b/fs/mini_fo/state.c
-@@ -537,17 +537,17 @@ int nondir_mod_to_del(dentry_t *dentry)
-       dtohd(dentry) = NULL;
-       dtost(dentry) = DELETED;
--      /* add deleted file to META-file */
--      meta_add_d_entry(dentry->d_parent,
--                       dentry->d_name.name,
--                       dentry->d_name.len);
--
-       /* was: unlock_dir(hidden_sto_dir_dentry); */
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,16)
-       mutex_unlock(&hidden_sto_dir_dentry->d_inode->i_mutex);
- #else
-       up(&hidden_sto_dir_dentry->d_inode->i_sem);
- #endif
-+      /* add deleted file to META-file */
-+      meta_add_d_entry(dentry->d_parent,
-+                       dentry->d_name.name,
-+                       dentry->d_name.len);
-+
-       dput(hidden_sto_dir_dentry);
-  out:
diff --git a/target/linux/generic-2.6/patches-2.6.34/219-kobject_uevent.patch b/target/linux/generic-2.6/patches-2.6.34/219-kobject_uevent.patch
deleted file mode 100644 (file)
index 7e00b22..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
---- a/lib/kobject_uevent.c
-+++ b/lib/kobject_uevent.c
-@@ -29,7 +29,8 @@ u64 uevent_seqnum;
- char uevent_helper[UEVENT_HELPER_PATH_LEN] = CONFIG_UEVENT_HELPER_PATH;
- static DEFINE_SPINLOCK(sequence_lock);
- #if defined(CONFIG_NET)
--static struct sock *uevent_sock;
-+struct sock *uevent_sock = NULL;
-+EXPORT_SYMBOL_GPL(uevent_sock);
- #endif
- /* the strings here must match the enum in include/linux/kobject.h */
-@@ -42,6 +43,18 @@ static const char *kobject_actions[] = {
-       [KOBJ_OFFLINE] =        "offline",
- };
-+u64 uevent_next_seqnum(void)
-+{
-+      u64 seq;
-+
-+      spin_lock(&sequence_lock);
-+      seq = ++uevent_seqnum;
-+      spin_unlock(&sequence_lock);
-+
-+      return seq;
-+}
-+EXPORT_SYMBOL_GPL(uevent_next_seqnum);
-+
- /**
-  * kobject_action_type - translate action string to numeric type
-  *
-@@ -201,9 +214,7 @@ int kobject_uevent_env(struct kobject *k
-               kobj->state_remove_uevent_sent = 1;
-       /* we will send an event, so request a new sequence number */
--      spin_lock(&sequence_lock);
--      seq = ++uevent_seqnum;
--      spin_unlock(&sequence_lock);
-+      seq = uevent_next_seqnum();
-       retval = add_uevent_var(env, "SEQNUM=%llu", (unsigned long long)seq);
-       if (retval)
-               goto exit;
diff --git a/target/linux/generic-2.6/patches-2.6.34/220-sound_kconfig.patch b/target/linux/generic-2.6/patches-2.6.34/220-sound_kconfig.patch
deleted file mode 100644 (file)
index fb3df25..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/sound/core/Kconfig
-+++ b/sound/core/Kconfig
-@@ -8,7 +8,7 @@ config SND_PCM
-       select GCD
- config SND_HWDEP
--      tristate
-+      tristate "Sound hardware support"
- config SND_RAWMIDI
-       tristate
diff --git a/target/linux/generic-2.6/patches-2.6.34/221-binfmt_elf_gcc4.1.patch b/target/linux/generic-2.6/patches-2.6.34/221-binfmt_elf_gcc4.1.patch
deleted file mode 100644 (file)
index aefbe18..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/fs/binfmt_elf.c
-+++ b/fs/binfmt_elf.c
-@@ -1165,7 +1165,7 @@ static unsigned long vma_dump_size(struc
-       if (FILTER(ELF_HEADERS) &&
-           vma->vm_pgoff == 0 && (vma->vm_flags & VM_READ)) {
-               u32 __user *header = (u32 __user *) vma->vm_start;
--              u32 word;
-+              u32 word = 0;
-               mm_segment_t fs = get_fs();
-               /*
-                * Doing it this way gets the constant folded by GCC.
diff --git a/target/linux/generic-2.6/patches-2.6.34/222-partial_eraseblock_write.patch b/target/linux/generic-2.6/patches-2.6.34/222-partial_eraseblock_write.patch
deleted file mode 100644 (file)
index 0c7672e..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
---- a/drivers/mtd/mtdpart.c
-+++ b/drivers/mtd/mtdpart.c
-@@ -21,6 +21,8 @@
- #include <linux/root_dev.h>
- #include <linux/magic.h>
-+#define MTD_ERASE_PARTIAL     0x8000 /* partition only covers parts of an erase block */
-+
- /* Our partition linked list */
- static LIST_HEAD(mtd_partitions);
-@@ -226,13 +228,60 @@ static int part_erase(struct mtd_info *m
-               return -EROFS;
-       if (instr->addr >= mtd->size)
-               return -EINVAL;
-+
-+      instr->partial_start = false;
-+      if (mtd->flags & MTD_ERASE_PARTIAL) {
-+              size_t readlen = 0;
-+              u64 mtd_ofs;
-+
-+              instr->erase_buf = kmalloc(part->master->erasesize, GFP_ATOMIC);
-+              if (!instr->erase_buf)
-+                      return -ENOMEM;
-+
-+              mtd_ofs = part->offset + instr->addr;
-+              instr->erase_buf_ofs = do_div(mtd_ofs, part->master->erasesize);
-+
-+              if (instr->erase_buf_ofs > 0) {
-+                      instr->addr -= instr->erase_buf_ofs;
-+                      ret = part->master->read(part->master,
-+                              instr->addr + part->offset,
-+                              part->master->erasesize,
-+                              &readlen, instr->erase_buf);
-+
-+                      instr->partial_start = true;
-+              } else {
-+                      mtd_ofs = part->offset + part->mtd.size;
-+                      instr->erase_buf_ofs = part->master->erasesize -
-+                              do_div(mtd_ofs, part->master->erasesize);
-+
-+                      if (instr->erase_buf_ofs > 0) {
-+                              instr->len += instr->erase_buf_ofs;
-+                              ret = part->master->read(part->master,
-+                                      part->offset + instr->addr +
-+                                      instr->len - part->master->erasesize,
-+                                      part->master->erasesize, &readlen,
-+                                      instr->erase_buf);
-+                      } else {
-+                              ret = 0;
-+                      }
-+              }
-+              if (ret < 0) {
-+                      kfree(instr->erase_buf);
-+                      return ret;
-+              }
-+
-+      }
-+
-       instr->addr += part->offset;
-       ret = part->master->erase(part->master, instr);
-       if (ret) {
-               if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
-                       instr->fail_addr -= part->offset;
-               instr->addr -= part->offset;
-+              if (mtd->flags & MTD_ERASE_PARTIAL)
-+                      kfree(instr->erase_buf);
-       }
-+
-       return ret;
- }
-@@ -240,7 +289,25 @@ void mtd_erase_callback(struct erase_inf
- {
-       if (instr->mtd->erase == part_erase) {
-               struct mtd_part *part = PART(instr->mtd);
-+              size_t wrlen = 0;
-+              if (instr->mtd->flags & MTD_ERASE_PARTIAL) {
-+                      if (instr->partial_start) {
-+                              part->master->write(part->master,
-+                                      instr->addr, instr->erase_buf_ofs,
-+                                      &wrlen, instr->erase_buf);
-+                              instr->addr += instr->erase_buf_ofs;
-+                      } else {
-+                              instr->len -= instr->erase_buf_ofs;
-+                              part->master->write(part->master,
-+                                      instr->addr + instr->len,
-+                                      instr->erase_buf_ofs, &wrlen,
-+                                      instr->erase_buf +
-+                                      part->master->erasesize -
-+                                      instr->erase_buf_ofs);
-+                      }
-+                      kfree(instr->erase_buf);
-+              }
-               if (instr->fail_addr != MTD_FAIL_ADDR_UNKNOWN)
-                       instr->fail_addr -= part->offset;
-               instr->addr -= part->offset;
-@@ -473,18 +540,24 @@ static struct mtd_part *add_one_partitio
-       if ((slave->mtd.flags & MTD_WRITEABLE) &&
-           mtd_mod_by_eb(slave->offset, &slave->mtd)) {
-               /* Doesn't start on a boundary of major erase size */
--              /* FIXME: Let it be writable if it is on a boundary of
--               * _minor_ erase size though */
--              slave->mtd.flags &= ~MTD_WRITEABLE;
--              printk(KERN_WARNING"mtd: partition \"%s\" doesn't start on an erase block boundary -- force read-only\n",
--                      part->name);
-+              slave->mtd.flags |= MTD_ERASE_PARTIAL;
-+              if (((u32) slave->mtd.size) > master->erasesize)
-+                      slave->mtd.flags &= ~MTD_WRITEABLE;
-+              else
-+                      slave->mtd.erasesize = slave->mtd.size;
-       }
-       if ((slave->mtd.flags & MTD_WRITEABLE) &&
--          mtd_mod_by_eb(slave->mtd.size, &slave->mtd)) {
--              slave->mtd.flags &= ~MTD_WRITEABLE;
--              printk(KERN_WARNING"mtd: partition \"%s\" doesn't end on an erase block -- force read-only\n",
--                      part->name);
--      }
-+          mtd_mod_by_eb(slave->offset + slave->mtd.size, &slave->mtd)) {
-+              slave->mtd.flags |= MTD_ERASE_PARTIAL;
-+
-+              if ((u32) slave->mtd.size > master->erasesize)
-+                      slave->mtd.flags &= ~MTD_WRITEABLE;
-+              else
-+                      slave->mtd.erasesize = slave->mtd.size;
-+      }
-+      if ((slave->mtd.flags & (MTD_ERASE_PARTIAL|MTD_WRITEABLE)) == MTD_ERASE_PARTIAL)
-+              printk(KERN_WARNING"mtd: partition \"%s\" must either start or end on erase block boundary or be smaller than an erase block -- forcing read-only\n",
-+                              part->name);
-       slave->mtd.ecclayout = master->ecclayout;
-       if (master->block_isbad) {
---- a/include/linux/mtd/mtd.h
-+++ b/include/linux/mtd/mtd.h
-@@ -46,6 +46,10 @@ struct erase_info {
-       u_long priv;
-       u_char state;
-       struct erase_info *next;
-+
-+      u8 *erase_buf;
-+      u32 erase_buf_ofs;
-+      bool partial_start;
- };
- struct mtd_erase_region_info {
diff --git a/target/linux/generic-2.6/patches-2.6.34/240-packet_socket_type.patch b/target/linux/generic-2.6/patches-2.6.34/240-packet_socket_type.patch
deleted file mode 100644 (file)
index bf00f7a..0000000
+++ /dev/null
@@ -1,133 +0,0 @@
-This patch allows the user to specify desired packet types (outgoing,
-broadcast, unicast, etc.) on packet sockets via setsockopt.
-This can reduce the load in situations where only a limited number
-of packet types are necessary
-
-Signed-off-by: Felix Fietkau <nbd@openwrt.org>
-
---- a/include/linux/if_packet.h
-+++ b/include/linux/if_packet.h
-@@ -29,6 +29,8 @@
- /* These ones are invisible by user level */
- #define PACKET_LOOPBACK               5               /* MC/BRD frame looped back */
- #define PACKET_FASTROUTE      6               /* Fastrouted frame     */
-+#define PACKET_MASK_ANY               0xffffffff      /* mask for packet type bits */
-+
- /* Packet socket options */
-@@ -47,6 +49,8 @@
- #define PACKET_TX_RING                        13
- #define PACKET_LOSS                   14
- #define PACKET_VNET_HDR                       15
-+#define PACKET_RECV_TYPE              16
-+
- struct tpacket_stats {
-       unsigned int    tp_packets;
---- a/net/packet/af_packet.c
-+++ b/net/packet/af_packet.c
-@@ -201,6 +201,7 @@
-       unsigned int            tp_reserve;
-       unsigned int            tp_loss:1;
-       struct packet_type      prot_hook ____cacheline_aligned_in_smp;
-+      __u8                    pkt_type:3;
- };
- struct packet_skb_cb {
-@@ -335,6 +336,7 @@
- {
-       struct sock *sk;
-       struct sockaddr_pkt *spkt;
-+      struct packet_sock *po;
-       /*
-        *      When we registered the protocol we saved the socket in the data
-@@ -342,6 +344,7 @@
-        */
-       sk = pt->af_packet_priv;
-+      po = pkt_sk(sk);
-       /*
-        *      Yank back the headers [hope the device set this
-@@ -354,7 +357,7 @@
-        *      so that this procedure is noop.
-        */
--      if (skb->pkt_type == PACKET_LOOPBACK)
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-               goto out;
-       if (!net_eq(dev_net(dev), sock_net(sk)))
-@@ -530,12 +533,12 @@
-       int skb_len = skb->len;
-       unsigned int snaplen, res;
--      if (skb->pkt_type == PACKET_LOOPBACK)
--              goto drop;
--
-       sk = pt->af_packet_priv;
-       po = pkt_sk(sk);
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-+              goto drop;
-+
-       if (!net_eq(dev_net(dev), sock_net(sk)))
-               goto drop;
-@@ -650,12 +653,12 @@
-       struct timeval tv;
-       struct timespec ts;
--      if (skb->pkt_type == PACKET_LOOPBACK)
--              goto drop;
--
-       sk = pt->af_packet_priv;
-       po = pkt_sk(sk);
-+      if (!(po->pkt_type & (1 << skb->pkt_type)))
-+              goto drop;
-+
-       if (!net_eq(dev_net(dev), sock_net(sk)))
-               goto drop;
-@@ -1463,6 +1466,7 @@
-       spin_lock_init(&po->bind_lock);
-       mutex_init(&po->pg_vec_lock);
-       po->prot_hook.func = packet_rcv;
-+      po->pkt_type = PACKET_MASK_ANY & ~(1 << PACKET_LOOPBACK);
-       if (sock->type == SOCK_PACKET)
-               po->prot_hook.func = packet_rcv_spkt;
-@@ -1963,6 +1967,16 @@
-               po->has_vnet_hdr = !!val;
-               return 0;
-       }
-+        case PACKET_RECV_TYPE:
-+        {
-+                unsigned int val;
-+                if (optlen != sizeof(val))
-+                        return -EINVAL;
-+                if (copy_from_user(&val, optval, sizeof(val)))
-+                        return -EFAULT;
-+                po->pkt_type = val & ~PACKET_LOOPBACK;
-+                return 0;
-+        }
-       default:
-               return -ENOPROTOOPT;
-       }
-@@ -2020,6 +2034,13 @@
-               data = &val;
-               break;
-+      case PACKET_RECV_TYPE:
-+              if (len > sizeof(unsigned int))
-+                      len = sizeof(unsigned int);
-+              val = po->pkt_type;
-+
-+              data = &val;
-+              break;
-       case PACKET_VERSION:
-               if (len > sizeof(int))
-                       len = sizeof(int);
diff --git a/target/linux/generic-2.6/patches-2.6.34/250-pppoe_header_pad.patch b/target/linux/generic-2.6/patches-2.6.34/250-pppoe_header_pad.patch
deleted file mode 100644 (file)
index a2535db..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/drivers/net/pppoe.c
-+++ b/drivers/net/pppoe.c
-@@ -862,7 +862,7 @@ static int pppoe_sendmsg(struct kiocb *i
-               goto end;
--      skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32,
-+      skb = sock_wmalloc(sk, total_len + dev->hard_header_len + 32 + NET_SKB_PAD,
-                          0, GFP_KERNEL);
-       if (!skb) {
-               error = -ENOMEM;
-@@ -870,7 +870,7 @@ static int pppoe_sendmsg(struct kiocb *i
-       }
-       /* Reserve space for headers. */
--      skb_reserve(skb, dev->hard_header_len);
-+      skb_reserve(skb, dev->hard_header_len + NET_SKB_PAD);
-       skb_reset_network_header(skb);
-       skb->dev = dev;
diff --git a/target/linux/generic-2.6/patches-2.6.34/260-crypto_optional_tests.patch b/target/linux/generic-2.6/patches-2.6.34/260-crypto_optional_tests.patch
deleted file mode 100644 (file)
index 3b28502..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -96,6 +96,10 @@ config CRYPTO_MANAGER2
-       select CRYPTO_BLKCIPHER2
-       select CRYPTO_PCOMP
-+config CRYPTO_MANAGER_NO_TESTS
-+      bool "Disable internal testsuite to save space"
-+      depends on CRYPTO_MANAGER
-+
- config CRYPTO_GF128MUL
-       tristate "GF(2^128) multiplication functions (EXPERIMENTAL)"
-       depends on EXPERIMENTAL
---- a/crypto/testmgr.c
-+++ b/crypto/testmgr.c
-@@ -47,6 +47,8 @@
- #define ENCRYPT 1
- #define DECRYPT 0
-+#ifndef CONFIG_CRYPTO_MANAGER_NO_TESTS
-+
- struct tcrypt_result {
-       struct completion completion;
-       int err;
-@@ -2359,8 +2361,11 @@ static int alg_find_test(const char *alg
-       return -1;
- }
-+#endif /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
-+
- int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
- {
-+#ifndef CONFIG_CRYPTO_MANAGER_NO_TESTS
-       int i;
-       int j;
-       int rc;
-@@ -2415,5 +2420,8 @@ notest:
-       return 0;
- non_fips_alg:
-       return -EINVAL;
-+#else /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
-+      return 0;
-+#endif /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
- }
- EXPORT_SYMBOL_GPL(alg_test);
---- a/crypto/testmgr.h
-+++ b/crypto/testmgr.h
-@@ -20,6 +20,8 @@
- #include <crypto/compress.h>
-+#ifndef CONFIG_CRYPTO_MANAGER_NO_TESTS
-+
- #define MAX_DIGEST_SIZE               64
- #define MAX_TAP                       8
-@@ -9552,4 +9554,6 @@ static struct hash_testvec crc32c_tv_tem
-       },
- };
-+#endif /* CONFIG_CRYPTO_MANAGER_NO_TESTS */
-+
- #endif        /* _CRYPTO_TESTMGR_H */
diff --git a/target/linux/generic-2.6/patches-2.6.34/400-ledtrig_morse.patch b/target/linux/generic-2.6/patches-2.6.34/400-ledtrig_morse.patch
deleted file mode 100644 (file)
index 855b3de..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -337,4 +337,8 @@ config LEDS_TRIGGER_DEFAULT_ON
- comment "iptables trigger is under Netfilter config (LED target)"
-       depends on LEDS_TRIGGERS
-+config LEDS_TRIGGER_MORSE
-+      tristate "LED Morse Trigger"
-+      depends on LEDS_TRIGGERS
-+
- endif # NEW_LEDS
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -44,3 +44,4 @@ obj-$(CONFIG_LEDS_TRIGGER_HEARTBEAT) += 
- 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_MORSE)      += ledtrig-morse.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/402-ledtrig_netdev.patch b/target/linux/generic-2.6/patches-2.6.34/402-ledtrig_netdev.patch
deleted file mode 100644 (file)
index d4ac25e..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/drivers/leds/Kconfig
-+++ b/drivers/leds/Kconfig
-@@ -341,4 +341,11 @@ config LEDS_TRIGGER_MORSE
-       tristate "LED Morse Trigger"
-       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
---- a/drivers/leds/Makefile
-+++ b/drivers/leds/Makefile
-@@ -45,3 +45,4 @@ obj-$(CONFIG_LEDS_TRIGGER_BACKLIGHT) += 
- obj-$(CONFIG_LEDS_TRIGGER_GPIO)               += ledtrig-gpio.o
- obj-$(CONFIG_LEDS_TRIGGER_DEFAULT_ON) += ledtrig-default-on.o
- obj-$(CONFIG_LEDS_TRIGGER_MORSE)      += ledtrig-morse.o
-+obj-$(CONFIG_LEDS_TRIGGER_NETDEV)      += ledtrig-netdev.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/410-gpio_buttons.patch b/target/linux/generic-2.6/patches-2.6.34/410-gpio_buttons.patch
deleted file mode 100644 (file)
index b762dde..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
---- a/drivers/input/misc/Kconfig
-+++ b/drivers/input/misc/Kconfig
-@@ -319,4 +319,20 @@ config INPUT_PCAP
-         To compile this driver as a module, choose M here: the
-         module will be called pcap_keys.
-+config INPUT_GPIO_BUTTONS
-+      tristate "Polled GPIO buttons interface"
-+      depends on GENERIC_GPIO
-+      select INPUT_POLLDEV
-+      help
-+        This driver implements support for buttons connected
-+        to GPIO pins of various CPUs (and some other chips).
-+
-+        Say Y here if your device has buttons connected
-+        directly to such GPIO pins.  Your board-specific
-+        setup logic must also provide a platform device,
-+        with configuration data saying which GPIOs are used.
-+
-+        To compile this driver as a module, choose M here: the
-+        module will be called gpio-buttons.
-+
- endif
---- a/drivers/input/misc/Makefile
-+++ b/drivers/input/misc/Makefile
-@@ -30,4 +30,5 @@ obj-$(CONFIG_INPUT_WINBOND_CIR)              += winb
- obj-$(CONFIG_INPUT_WISTRON_BTNS)      += wistron_btns.o
- obj-$(CONFIG_INPUT_WM831X_ON)         += wm831x-on.o
- obj-$(CONFIG_INPUT_YEALINK)           += yealink.o
-+obj-$(CONFIG_INPUT_GPIO_BUTTONS)      += gpio_buttons.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/420-gpiodev.patch b/target/linux/generic-2.6/patches-2.6.34/420-gpiodev.patch
deleted file mode 100644 (file)
index ebc430f..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -1016,6 +1016,14 @@ config CS5535_GPIO
-         If compiled as a module, it will be called cs5535_gpio.
-+config GPIO_DEVICE
-+      tristate "GPIO device support"
-+      depends on GENERIC_GPIO
-+      help
-+        Say Y to enable Linux GPIO device support.  This allows control of
-+        GPIO pins using a character device
-+
-+
- config RAW_DRIVER
-       tristate "RAW driver (/dev/raw/rawN)"
-       depends on BLOCK
---- a/drivers/char/Makefile
-+++ b/drivers/char/Makefile
-@@ -95,6 +95,7 @@ obj-$(CONFIG_SCx200_GPIO)    += scx200_gpio
- obj-$(CONFIG_PC8736x_GPIO)    += pc8736x_gpio.o
- obj-$(CONFIG_NSC_GPIO)                += nsc_gpio.o
- obj-$(CONFIG_CS5535_GPIO)     += cs5535_gpio.o
-+obj-$(CONFIG_GPIO_DEVICE)     += gpio_dev.o
- obj-$(CONFIG_GPIO_TB0219)     += tb0219.o
- obj-$(CONFIG_TELCLOCK)                += tlclk.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/430-scsi_header_fix.patch b/target/linux/generic-2.6/patches-2.6.34/430-scsi_header_fix.patch
deleted file mode 100644 (file)
index 59e4333..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/scsi/scsi.h
-+++ b/include/scsi/scsi.h
-@@ -149,10 +149,10 @@ struct scsi_cmnd;
- /* defined in T10 SCSI Primary Commands-2 (SPC2) */
- struct scsi_varlen_cdb_hdr {
--      u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
--      u8 control;
--      u8 misc[5];
--      u8 additional_cdb_length;         /* total cdb length - 8 */
-+      __u8 opcode;        /* opcode always == VARIABLE_LENGTH_CMD */
-+      __u8 control;
-+      __u8 misc[5];
-+      __u8 additional_cdb_length;         /* total cdb length - 8 */
-       __be16 service_action;
-       /* service specific data follows */
- };
diff --git a/target/linux/generic-2.6/patches-2.6.34/510-yaffs_support.patch b/target/linux/generic-2.6/patches-2.6.34/510-yaffs_support.patch
deleted file mode 100644 (file)
index b14de59..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
---- a/fs/Kconfig
-+++ b/fs/Kconfig
-@@ -44,6 +44,7 @@ source "fs/gfs2/Kconfig"
- source "fs/ocfs2/Kconfig"
- source "fs/btrfs/Kconfig"
- source "fs/nilfs2/Kconfig"
-+source "fs/yaffs2/Kconfig"
- endif # BLOCK
---- a/fs/Makefile
-+++ b/fs/Makefile
-@@ -127,3 +127,5 @@
- obj-$(CONFIG_GFS2_FS)           += gfs2/
- obj-$(CONFIG_EXOFS_FS)          += exofs/
- obj-$(CONFIG_CEPH_FS)         += ceph/
-+obj-$(CONFIG_YAFFS_FS)                += yaffs2/
-+
diff --git a/target/linux/generic-2.6/patches-2.6.34/511-yaffs-cvs-2009-04-24.patch b/target/linux/generic-2.6/patches-2.6.34/511-yaffs-cvs-2009-04-24.patch
deleted file mode 100644 (file)
index 5c70e79..0000000
+++ /dev/null
@@ -1,12344 +0,0 @@
---- a/fs/yaffs2/devextras.h
-+++ b/fs/yaffs2/devextras.h
-@@ -14,194 +14,135 @@
-  */
- /*
-- * This file is just holds extra declarations used during development.
-- * Most of these are from kernel includes placed here so we can use them in
-- * applications.
-+ * This file is just holds extra declarations of macros that would normally
-+ * be providesd in the Linux kernel. These macros have been written from
-+ * scratch but are functionally equivalent to the Linux ones.
-  *
-  */
- #ifndef __EXTRAS_H__
- #define __EXTRAS_H__
--#if defined WIN32
--#define __inline__ __inline
--#define new newHack
--#endif
--
--#if !(defined __KERNEL__) || (defined WIN32)
--/* User space defines */
-+#if !(defined __KERNEL__)
-+/* Definition of types */
- typedef unsigned char __u8;
- typedef unsigned short __u16;
- typedef unsigned __u32;
-+#endif
-+
- /*
-- * Simple doubly linked list implementation.
-- *
-- * Some of the internal functions ("__xxx") are useful when
-- * manipulating whole lists rather than single entries, as
-- * sometimes we already know the next/prev entries and we can
-- * generate better code by using them directly rather than
-- * using the generic single-entry routines.
-+ * This is a simple doubly linked list implementation that matches the
-+ * way the Linux kernel doubly linked list implementation works.
-  */
--#define prefetch(x) 1
--
--struct list_head {
--      struct list_head *next, *prev;
-+struct ylist_head {
-+      struct ylist_head *next; /* next in chain */
-+      struct ylist_head *prev; /* previous in chain */
- };
--#define LIST_HEAD_INIT(name) { &(name), &(name) }
--#define LIST_HEAD(name) \
--      struct list_head name = LIST_HEAD_INIT(name)
-+/* Initialise a static list */
-+#define YLIST_HEAD(name) \
-+struct ylist_head name = { &(name), &(name)}
-+
--#define INIT_LIST_HEAD(ptr) do { \
--      (ptr)->next = (ptr); (ptr)->prev = (ptr); \
-+
-+/* Initialise a list head to an empty list */
-+#define YINIT_LIST_HEAD(p) \
-+do { \
-+      (p)->next = (p);\
-+      (p)->prev = (p); \
- } while (0)
--/*
-- * Insert a new entry between two known consecutive entries.
-- *
-- * This is only for internal list manipulation where we know
-- * the prev/next entries already!
-- */
--static __inline__ void __list_add(struct list_head *new,
--                                struct list_head *prev,
--                                struct list_head *next)
--{
--      next->prev = new;
--      new->next = next;
--      new->prev = prev;
--      prev->next = new;
--}
--/**
-- * list_add - add a new entry
-- * @new: new entry to be added
-- * @head: list head to add it after
-- *
-- * Insert a new entry after the specified head.
-- * This is good for implementing stacks.
-- */
--static __inline__ void list_add(struct list_head *new, struct list_head *head)
-+/* Add an element to a list */
-+static __inline__ void ylist_add(struct ylist_head *newEntry,
-+                              struct ylist_head *list)
- {
--      __list_add(new, head, head->next);
--}
-+      struct ylist_head *listNext = list->next;
-+
-+      list->next = newEntry;
-+      newEntry->prev = list;
-+      newEntry->next = listNext;
-+      listNext->prev = newEntry;
--/**
-- * list_add_tail - add a new entry
-- * @new: new entry to be added
-- * @head: list head to add it before
-- *
-- * Insert a new entry before the specified head.
-- * This is useful for implementing queues.
-- */
--static __inline__ void list_add_tail(struct list_head *new,
--                                   struct list_head *head)
--{
--      __list_add(new, head->prev, head);
- }
--/*
-- * Delete a list entry by making the prev/next entries
-- * point to each other.
-- *
-- * This is only for internal list manipulation where we know
-- * the prev/next entries already!
-- */
--static __inline__ void __list_del(struct list_head *prev,
--                                struct list_head *next)
-+static __inline__ void ylist_add_tail(struct ylist_head *newEntry,
-+                               struct ylist_head *list)
- {
--      next->prev = prev;
--      prev->next = next;
-+      struct ylist_head *listPrev = list->prev;
-+
-+      list->prev = newEntry;
-+      newEntry->next = list;
-+      newEntry->prev = listPrev;
-+      listPrev->next = newEntry;
-+
- }
--/**
-- * list_del - deletes entry from list.
-- * @entry: the element to delete from the list.
-- * Note: list_empty on entry does not return true after this, the entry is
-- * in an undefined state.
-- */
--static __inline__ void list_del(struct list_head *entry)
-+
-+/* Take an element out of its current list, with or without
-+ * reinitialising the links.of the entry*/
-+static __inline__ void ylist_del(struct ylist_head *entry)
- {
--      __list_del(entry->prev, entry->next);
-+      struct ylist_head *listNext = entry->next;
-+      struct ylist_head *listPrev = entry->prev;
-+
-+      listNext->prev = listPrev;
-+      listPrev->next = listNext;
-+
- }
--/**
-- * list_del_init - deletes entry from list and reinitialize it.
-- * @entry: the element to delete from the list.
-- */
--static __inline__ void list_del_init(struct list_head *entry)
-+static __inline__ void ylist_del_init(struct ylist_head *entry)
- {
--      __list_del(entry->prev, entry->next);
--      INIT_LIST_HEAD(entry);
-+      ylist_del(entry);
-+      entry->next = entry->prev = entry;
- }
--/**
-- * list_empty - tests whether a list is empty
-- * @head: the list to test.
-- */
--static __inline__ int list_empty(struct list_head *head)
-+
-+/* Test if the list is empty */
-+static __inline__ int ylist_empty(struct ylist_head *entry)
- {
--      return head->next == head;
-+      return (entry->next == entry);
- }
--/**
-- * list_splice - join two lists
-- * @list: the new list to add.
-- * @head: the place to add it in the first list.
-+
-+/* ylist_entry takes a pointer to a list entry and offsets it to that
-+ * we can find a pointer to the object it is embedded in.
-  */
--static __inline__ void list_splice(struct list_head *list,
--                                 struct list_head *head)
--{
--      struct list_head *first = list->next;
--      if (first != list) {
--              struct list_head *last = list->prev;
--              struct list_head *at = head->next;
--
--              first->prev = head;
--              head->next = first;
--
--              last->next = at;
--              at->prev = last;
--      }
--}
--/**
-- * list_entry - get the struct for this entry
-- * @ptr:      the &struct list_head pointer.
-- * @type:     the type of the struct this is embedded in.
-- * @member:   the name of the list_struct within the struct.
-- */
--#define list_entry(ptr, type, member) \
--      ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
--
--/**
-- * list_for_each      -       iterate over a list
-- * @pos:      the &struct list_head to use as a loop counter.
-- * @head:     the head for your list.
-- */
--#define list_for_each(pos, head) \
--      for (pos = (head)->next, prefetch(pos->next); pos != (head); \
--              pos = pos->next, prefetch(pos->next))
--
--/**
-- * list_for_each_safe -       iterate over a list safe against removal
-- *                              of list entry
-- * @pos:      the &struct list_head to use as a loop counter.
-- * @n:                another &struct list_head to use as temporary storage
-- * @head:     the head for your list.
-- */
--#define list_for_each_safe(pos, n, head) \
--      for (pos = (head)->next, n = pos->next; pos != (head); \
--              pos = n, n = pos->next)
-+#define ylist_entry(entry, type, member) \
-+      ((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))
--/*
-- * File types
-+
-+/* ylist_for_each and list_for_each_safe  iterate over lists.
-+ * ylist_for_each_safe uses temporary storage to make the list delete safe
-  */
-+
-+#define ylist_for_each(itervar, list) \
-+      for (itervar = (list)->next; itervar != (list); itervar = itervar->next)
-+
-+#define ylist_for_each_safe(itervar, saveVar, list) \
-+      for (itervar = (list)->next, saveVar = (list)->next->next; \
-+              itervar != (list); itervar = saveVar, saveVar = saveVar->next)
-+
-+
-+#if !(defined __KERNEL__)
-+
-+
-+#ifndef WIN32
-+#include <sys/stat.h>
-+#endif
-+
-+
-+#ifdef CONFIG_YAFFS_PROVIDE_DEFS
-+/* File types */
-+
-+
- #define DT_UNKNOWN    0
- #define DT_FIFO               1
- #define DT_CHR                2
-@@ -212,6 +153,7 @@ static __inline__ void list_splice(struc
- #define DT_SOCK               12
- #define DT_WHT                14
-+
- #ifndef WIN32
- #include <sys/stat.h>
- #endif
-@@ -227,10 +169,6 @@ static __inline__ void list_splice(struc
- #define ATTR_ATIME    16
- #define ATTR_MTIME    32
- #define ATTR_CTIME    64
--#define ATTR_ATIME_SET        128
--#define ATTR_MTIME_SET        256
--#define ATTR_FORCE    512     /* Not a change, but a change it */
--#define ATTR_ATTR_FLAG        1024
- struct iattr {
-       unsigned int ia_valid;
-@@ -244,21 +182,15 @@ struct iattr {
-       unsigned int ia_attr_flags;
- };
--#define KERN_DEBUG
-+#endif
- #else
--#ifndef WIN32
- #include <linux/types.h>
--#include <linux/list.h>
- #include <linux/fs.h>
- #include <linux/stat.h>
--#endif
- #endif
--#if defined WIN32
--#undef new
--#endif
- #endif
---- a/fs/yaffs2/Kconfig
-+++ b/fs/yaffs2/Kconfig
-@@ -5,7 +5,7 @@
- config YAFFS_FS
-       tristate "YAFFS2 file system support"
-       default n
--      depends on MTD
-+      depends on MTD_BLOCK
-       select YAFFS_YAFFS1
-       select YAFFS_YAFFS2
-       help
-@@ -43,7 +43,8 @@ config YAFFS_9BYTE_TAGS
-         format that you need to continue to support.  New data written
-         also uses the older-style format.  Note: Use of this option
-         generally requires that MTD's oob layout be adjusted to use the
--        older-style format.  See notes on tags formats and MTD versions.
-+        older-style format.  See notes on tags formats and MTD versions
-+        in yaffs_mtdif1.c.
-         If unsure, say N.
-@@ -109,26 +110,6 @@ config YAFFS_DISABLE_LAZY_LOAD
-         If unsure, say N.
--config YAFFS_CHECKPOINT_RESERVED_BLOCKS
--      int "Reserved blocks for checkpointing"
--      depends on YAFFS_YAFFS2
--      default 10
--      help
--          Give the number of Blocks to reserve for checkpointing.
--        Checkpointing saves the state at unmount so that mounting is
--        much faster as a scan of all the flash to regenerate this state
--        is not needed.  These Blocks are reserved per partition, so if
--        you have very small partitions the default (10) may be a mess
--        for you.  You can set this value to 0, but that does not mean
--        checkpointing is disabled at all. There only won't be any
--        specially reserved blocks for checkpointing, so if there is
--        enough free space on the filesystem, it will be used for
--        checkpointing.
--
--        If unsure, leave at default (10), but don't wonder if there are
--        always 2MB used on your large page device partition (10 x 2k
--        pagesize). When using small partitions or when being very small
--        on space, you probably want to set this to zero.
- config YAFFS_DISABLE_WIDE_TNODES
-       bool "Turn off wide tnodes"
---- a/fs/yaffs2/Makefile
-+++ b/fs/yaffs2/Makefile
-@@ -5,7 +5,6 @@
- obj-$(CONFIG_YAFFS_FS) += yaffs.o
- yaffs-y := yaffs_ecc.o yaffs_fs.o yaffs_guts.o yaffs_checkptrw.o
--yaffs-y += yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
-+yaffs-y += yaffs_packedtags1.o yaffs_packedtags2.o yaffs_nand.o yaffs_qsort.o
- yaffs-y += yaffs_tagscompat.o yaffs_tagsvalidity.o
--yaffs-y += yaffs_mtdif1.o yaffs_packedtags1.o
--yaffs-y += yaffs_mtdif.o yaffs_mtdif2.o
-+yaffs-y += yaffs_mtdif.o yaffs_mtdif1.o yaffs_mtdif2.o
---- a/fs/yaffs2/moduleconfig.h
-+++ b/fs/yaffs2/moduleconfig.h
-@@ -27,12 +27,12 @@
- /* Default: Not selected */
- /* Meaning: Yaffs does its own ECC, rather than using MTD ECC */
--//#define CONFIG_YAFFS_DOES_ECC
-+/* #define CONFIG_YAFFS_DOES_ECC */
- /* Default: Not selected */
- /* Meaning: ECC byte order is 'wrong'.  Only meaningful if */
- /*          CONFIG_YAFFS_DOES_ECC is set */
--//#define CONFIG_YAFFS_ECC_WRONG_ORDER
-+/* #define CONFIG_YAFFS_ECC_WRONG_ORDER */
- /* Default: Selected */
- /* Meaning: Disables testing whether chunks are erased before writing to them*/
-@@ -54,11 +54,11 @@ that you need to continue to support.  N
- older-style format.
- Note: Use of this option generally requires that MTD's oob layout be
- adjusted to use the older-style format.  See notes on tags formats and
--MTD versions.
-+MTD versions in yaffs_mtdif1.c.
- */
- /* Default: Not selected */
- /* Meaning: Use older-style on-NAND data format with pageStatus byte */
--#define CONFIG_YAFFS_9BYTE_TAGS
-+/* #define CONFIG_YAFFS_9BYTE_TAGS */
- #endif /* YAFFS_OUT_OF_TREE */
---- a/fs/yaffs2/yaffs_checkptrw.c
-+++ b/fs/yaffs2/yaffs_checkptrw.c
-@@ -12,48 +12,43 @@
-  */
- const char *yaffs_checkptrw_c_version =
--    "$Id: yaffs_checkptrw.c,v 1.14 2007-05-15 20:07:40 charles Exp $";
-+      "$Id: yaffs_checkptrw.c,v 1.18 2009-03-06 17:20:49 wookey Exp $";
- #include "yaffs_checkptrw.h"
--
-+#include "yaffs_getblockinfo.h"
- static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
- {
--
-       int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-       T(YAFFS_TRACE_CHECKPOINT,
-               (TSTR("checkpt blocks available = %d" TENDSTR),
-               blocksAvailable));
--
-       return (blocksAvailable <= 0) ? 0 : 1;
- }
- static int yaffs_CheckpointErase(yaffs_Device *dev)
- {
--
-       int i;
--
--      if(!dev->eraseBlockInNAND)
-+      if (!dev->eraseBlockInNAND)
-               return 0;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
--              dev->internalStartBlock,dev->internalEndBlock));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checking blocks %d to %d"TENDSTR),
-+              dev->internalStartBlock, dev->internalEndBlock));
--      for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--              if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
--                      if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
-+      for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+              if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("erasing checkpt block %d"TENDSTR), i));
-+                      if (dev->eraseBlockInNAND(dev, i - dev->blockOffset /* realign */)) {
-                               bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
-                               dev->nErasedBlocks++;
-                               dev->nFreeChunks += dev->nChunksPerBlock;
--                      }
--                      else {
--                              dev->markNANDBlockBad(dev,i);
-+                      } else {
-+                              dev->markNANDBlockBad(dev, i);
-                               bi->blockState = YAFFS_BLOCK_STATE_DEAD;
-                       }
-               }
-@@ -71,23 +66,23 @@ static void yaffs_CheckpointFindNextEras
-       int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
-       T(YAFFS_TRACE_CHECKPOINT,
-               (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
--              dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
-+              dev->nErasedBlocks, dev->nReservedBlocks, blocksAvailable, dev->checkpointNextBlock));
--      if(dev->checkpointNextBlock >= 0 &&
--         dev->checkpointNextBlock <= dev->internalEndBlock &&
--         blocksAvailable > 0){
--
--              for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
--                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--                      if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
-+      if (dev->checkpointNextBlock >= 0 &&
-+                      dev->checkpointNextBlock <= dev->internalEndBlock &&
-+                      blocksAvailable > 0) {
-+
-+              for (i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++) {
-+                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+                      if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
-                               dev->checkpointNextBlock = i + 1;
-                               dev->checkpointCurrentBlock = i;
--                              T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
-+                              T(YAFFS_TRACE_CHECKPOINT, (TSTR("allocating checkpt block %d"TENDSTR), i));
-                               return;
-                       }
-               }
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("out of checkpt blocks"TENDSTR)));
-       dev->checkpointNextBlock = -1;
-       dev->checkpointCurrentBlock = -1;
-@@ -98,30 +93,31 @@ static void yaffs_CheckpointFindNextChec
-       int  i;
-       yaffs_ExtendedTags tags;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start:  blocks %d next %d" TENDSTR),
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("find next checkpt block: start:  blocks %d next %d" TENDSTR),
-               dev->blocksInCheckpoint, dev->checkpointNextBlock));
--      if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
--              for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
-+      if (dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
-+              for (i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++) {
-                       int chunk = i * dev->nChunksPerBlock;
-                       int realignedChunk = chunk - dev->chunkOffset;
--                      dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
--                              i, tags.objectId,tags.sequenceNumber,tags.eccResult));
-+                      dev->readChunkWithTagsFromNAND(dev, realignedChunk,
-+                                      NULL, &tags);
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
-+                              i, tags.objectId, tags.sequenceNumber, tags.eccResult));
--                      if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
-+                      if (tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA) {
-                               /* Right kind of block */
-                               dev->checkpointNextBlock = tags.objectId;
-                               dev->checkpointCurrentBlock = i;
-                               dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
-                               dev->blocksInCheckpoint++;
--                              T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
-+                              T(YAFFS_TRACE_CHECKPOINT, (TSTR("found checkpt block %d"TENDSTR), i));
-                               return;
-                       }
-               }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("found no more checkpt blocks"TENDSTR)));
-       dev->checkpointNextBlock = -1;
-       dev->checkpointCurrentBlock = -1;
-@@ -133,17 +129,17 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-       /* Got the functions we need? */
-       if (!dev->writeChunkWithTagsToNAND ||
--          !dev->readChunkWithTagsFromNAND ||
--          !dev->eraseBlockInNAND ||
--          !dev->markNANDBlockBad)
-+                      !dev->readChunkWithTagsFromNAND ||
-+                      !dev->eraseBlockInNAND ||
-+                      !dev->markNANDBlockBad)
-               return 0;
--      if(forWriting && !yaffs_CheckpointSpaceOk(dev))
-+      if (forWriting && !yaffs_CheckpointSpaceOk(dev))
-               return 0;
--      if(!dev->checkpointBuffer)
--              dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-+              dev->checkpointBuffer = YMALLOC_DMA(dev->totalBytesPerChunk);
-+      if (!dev->checkpointBuffer)
-               return 0;
-@@ -159,12 +155,10 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-       dev->checkpointNextBlock = dev->internalStartBlock;
-       /* Erase all the blocks in the checkpoint area */
--      if(forWriting){
--              memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-+      if (forWriting) {
-+              memset(dev->checkpointBuffer, 0, dev->nDataBytesPerChunk);
-               dev->checkpointByteOffset = 0;
-               return yaffs_CheckpointErase(dev);
--
--
-       } else {
-               int i;
-               /* Set to a value that will kick off a read */
-@@ -174,7 +168,7 @@ int yaffs_CheckpointOpen(yaffs_Device *d
-               dev->blocksInCheckpoint = 0;
-               dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
-               dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
--              for(i = 0; i < dev->checkpointMaxBlocks; i++)
-+              for (i = 0; i < dev->checkpointMaxBlocks; i++)
-                       dev->checkpointBlockList[i] = -1;
-       }
-@@ -191,18 +185,17 @@ int yaffs_GetCheckpointSum(yaffs_Device 
- static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
- {
--
-       int chunk;
-       int realignedChunk;
-       yaffs_ExtendedTags tags;
--      if(dev->checkpointCurrentBlock < 0){
-+      if (dev->checkpointCurrentBlock < 0) {
-               yaffs_CheckpointFindNextErasedBlock(dev);
-               dev->checkpointCurrentChunk = 0;
-       }
--      if(dev->checkpointCurrentBlock < 0)
-+      if (dev->checkpointCurrentBlock < 0)
-               return 0;
-       tags.chunkDeleted = 0;
-@@ -210,10 +203,10 @@ static int yaffs_CheckpointFlushBuffer(y
-       tags.chunkId = dev->checkpointPageSequence + 1;
-       tags.sequenceNumber =  YAFFS_SEQUENCE_CHECKPOINT_DATA;
-       tags.byteCount = dev->nDataBytesPerChunk;
--      if(dev->checkpointCurrentChunk == 0){
-+      if (dev->checkpointCurrentChunk == 0) {
-               /* First chunk we write for the block? Set block state to
-                  checkpoint */
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointCurrentBlock);
-               bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
-               dev->blocksInCheckpoint++;
-       }
-@@ -221,28 +214,29 @@ static int yaffs_CheckpointFlushBuffer(y
-       chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
--              chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
-+              chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk, tags.objectId, tags.chunkId));
-       realignedChunk = chunk - dev->chunkOffset;
--      dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
-+      dev->writeChunkWithTagsToNAND(dev, realignedChunk,
-+                      dev->checkpointBuffer, &tags);
-       dev->checkpointByteOffset = 0;
-       dev->checkpointPageSequence++;
-       dev->checkpointCurrentChunk++;
--      if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
-+      if (dev->checkpointCurrentChunk >= dev->nChunksPerBlock) {
-               dev->checkpointCurrentChunk = 0;
-               dev->checkpointCurrentBlock = -1;
-       }
--      memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
-+      memset(dev->checkpointBuffer, 0, dev->nDataBytesPerChunk);
-       return 1;
- }
--int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
-+int yaffs_CheckpointWrite(yaffs_Device *dev, const void *data, int nBytes)
- {
--      int i=0;
-+      int i = 0;
-       int ok = 1;
-@@ -250,17 +244,14 @@ int yaffs_CheckpointWrite(yaffs_Device *
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-               return 0;
--      if(!dev->checkpointOpenForWrite)
-+      if (!dev->checkpointOpenForWrite)
-               return -1;
--      while(i < nBytes && ok) {
--
--
--
--              dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
-+      while (i < nBytes && ok) {
-+              dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes;
-               dev->checkpointSum += *dataBytes;
-               dev->checkpointXor ^= *dataBytes;
-@@ -270,18 +261,17 @@ int yaffs_CheckpointWrite(yaffs_Device *
-               dev->checkpointByteCount++;
--              if(dev->checkpointByteOffset < 0 ||
-+              if (dev->checkpointByteOffset < 0 ||
-                  dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
-                       ok = yaffs_CheckpointFlushBuffer(dev);
--
-       }
--      return  i;
-+      return i;
- }
- int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
- {
--      int i=0;
-+      int i = 0;
-       int ok = 1;
-       yaffs_ExtendedTags tags;
-@@ -291,52 +281,54 @@ int yaffs_CheckpointRead(yaffs_Device *d
-       __u8 *dataBytes = (__u8 *)data;
--      if(!dev->checkpointBuffer)
-+      if (!dev->checkpointBuffer)
-               return 0;
--      if(dev->checkpointOpenForWrite)
-+      if (dev->checkpointOpenForWrite)
-               return -1;
--      while(i < nBytes && ok) {
-+      while (i < nBytes && ok) {
--              if(dev->checkpointByteOffset < 0 ||
--                 dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
-+              if (dev->checkpointByteOffset < 0 ||
-+                      dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
--                      if(dev->checkpointCurrentBlock < 0){
-+                      if (dev->checkpointCurrentBlock < 0) {
-                               yaffs_CheckpointFindNextCheckpointBlock(dev);
-                               dev->checkpointCurrentChunk = 0;
-                       }
--                      if(dev->checkpointCurrentBlock < 0)
-+                      if (dev->checkpointCurrentBlock < 0)
-                               ok = 0;
-                       else {
--
--                              chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
--                                        dev->checkpointCurrentChunk;
-+                              chunk = dev->checkpointCurrentBlock *
-+                                      dev->nChunksPerBlock +
-+                                      dev->checkpointCurrentChunk;
-                               realignedChunk = chunk - dev->chunkOffset;
--                              /* read in the next chunk */
--                              /* printf("read checkpoint page %d\n",dev->checkpointPage); */
--                              dev->readChunkWithTagsFromNAND(dev, realignedChunk,
--                                                             dev->checkpointBuffer,
--                                                            &tags);
--
--                              if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
--                                 tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
--                                 ok = 0;
-+                              /* read in the next chunk */
-+                              /* printf("read checkpoint page %d\n",dev->checkpointPage); */
-+                              dev->readChunkWithTagsFromNAND(dev,
-+                                              realignedChunk,
-+                                              dev->checkpointBuffer,
-+                                              &tags);
-+
-+                              if (tags.chunkId != (dev->checkpointPageSequence + 1) ||
-+                                      tags.eccResult > YAFFS_ECC_RESULT_FIXED ||
-+                                      tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
-+                                      ok = 0;
-                               dev->checkpointByteOffset = 0;
-                               dev->checkpointPageSequence++;
-                               dev->checkpointCurrentChunk++;
--                              if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
-+                              if (dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
-                                       dev->checkpointCurrentBlock = -1;
-                       }
-               }
--              if(ok){
-+              if (ok) {
-                       *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
-                       dev->checkpointSum += *dataBytes;
-                       dev->checkpointXor ^= *dataBytes;
-@@ -353,17 +345,17 @@ int yaffs_CheckpointRead(yaffs_Device *d
- int yaffs_CheckpointClose(yaffs_Device *dev)
- {
--      if(dev->checkpointOpenForWrite){
--              if(dev->checkpointByteOffset != 0)
-+      if (dev->checkpointOpenForWrite) {
-+              if (dev->checkpointByteOffset != 0)
-                       yaffs_CheckpointFlushBuffer(dev);
-       } else {
-               int i;
--              for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
--                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
--                      if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
-+              for (i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++) {
-+                      yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, dev->checkpointBlockList[i]);
-+                      if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
-                               bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
-                       else {
--                              // Todo this looks odd...
-+                              /* Todo this looks odd... */
-                       }
-               }
-               YFREE(dev->checkpointBlockList);
-@@ -374,27 +366,25 @@ int yaffs_CheckpointClose(yaffs_Device *
-       dev->nErasedBlocks -= dev->blocksInCheckpoint;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint byte count %d" TENDSTR),
-                       dev->checkpointByteCount));
--      if(dev->checkpointBuffer){
-+      if (dev->checkpointBuffer) {
-               /* free the buffer */
-               YFREE(dev->checkpointBuffer);
-               dev->checkpointBuffer = NULL;
-               return 1;
--      }
--      else
-+      } else
-               return 0;
--
- }
- int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
- {
-       /* Erase the first checksum block */
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("checkpoint invalidate"TENDSTR)));
--      if(!yaffs_CheckpointSpaceOk(dev))
-+      if (!yaffs_CheckpointSpaceOk(dev))
-               return 0;
-       return yaffs_CheckpointErase(dev);
---- a/fs/yaffs2/yaffs_checkptrw.h
-+++ b/fs/yaffs2/yaffs_checkptrw.h
-@@ -20,9 +20,9 @@
- int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting);
--int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes);
-+int yaffs_CheckpointWrite(yaffs_Device *dev, const void *data, int nBytes);
--int yaffs_CheckpointRead(yaffs_Device *dev,void *data, int nBytes);
-+int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes);
- int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum);
---- a/fs/yaffs2/yaffs_ecc.c
-+++ b/fs/yaffs2/yaffs_ecc.c
-@@ -29,7 +29,7 @@
-  */
- const char *yaffs_ecc_c_version =
--    "$Id: yaffs_ecc.c,v 1.9 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_ecc.c,v 1.11 2009-03-06 17:20:50 wookey Exp $";
- #include "yportenv.h"
-@@ -109,12 +109,10 @@ void yaffs_ECCCalculate(const unsigned c
-               b = column_parity_table[*data++];
-               col_parity ^= b;
--              if (b & 0x01)   // odd number of bits in the byte
--              {
-+              if (b & 0x01) {         /* odd number of bits in the byte */
-                       line_parity ^= i;
-                       line_parity_prime ^= ~i;
-               }
--
-       }
-       ecc[2] = (~col_parity) | 0x03;
-@@ -158,7 +156,7 @@ void yaffs_ECCCalculate(const unsigned c
-       ecc[0] = ~t;
- #ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
--      // Swap the bytes into the wrong order
-+      /* Swap the bytes into the wrong order */
-       t = ecc[0];
-       ecc[0] = ecc[1];
-       ecc[1] = t;
-@@ -189,7 +187,7 @@ int yaffs_ECCCorrect(unsigned char *data
-               unsigned bit;
- #ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
--              // swap the bytes to correct for the wrong order
-+              /* swap the bytes to correct for the wrong order */
-               unsigned char t;
-               t = d0;
-@@ -251,7 +249,7 @@ int yaffs_ECCCorrect(unsigned char *data
-  * ECCxxxOther does ECC calcs on arbitrary n bytes of data
-  */
- void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
--                           yaffs_ECCOther * eccOther)
-+                              yaffs_ECCOther *eccOther)
- {
-       unsigned int i;
-@@ -278,8 +276,8 @@ void yaffs_ECCCalculateOther(const unsig
- }
- int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
--                        yaffs_ECCOther * read_ecc,
--                        const yaffs_ECCOther * test_ecc)
-+                      yaffs_ECCOther *read_ecc,
-+                      const yaffs_ECCOther *test_ecc)
- {
-       unsigned char cDelta;   /* column parity delta */
-       unsigned lDelta;        /* line parity delta */
-@@ -294,8 +292,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-               return 0; /* no error */
-       if (lDelta == ~lDeltaPrime &&
--          (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
--      {
-+          (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15)) {
-               /* Single bit (recoverable) error in data */
-               bit = 0;
-@@ -307,7 +304,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-               if (cDelta & 0x02)
-                       bit |= 0x01;
--              if(lDelta >= nBytes)
-+              if (lDelta >= nBytes)
-                       return -1;
-               data[lDelta] ^= (1 << bit);
-@@ -316,7 +313,7 @@ int yaffs_ECCCorrectOther(unsigned char 
-       }
-       if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
--           yaffs_CountBits(cDelta)) == 1) {
-+                      yaffs_CountBits(cDelta)) == 1) {
-               /* Reccoverable error in ecc */
-               *read_ecc = *test_ecc;
-@@ -326,6 +323,4 @@ int yaffs_ECCCorrectOther(unsigned char 
-       /* Unrecoverable error */
-       return -1;
--
- }
--
---- a/fs/yaffs2/yaffs_ecc.h
-+++ b/fs/yaffs2/yaffs_ecc.h
-@@ -13,15 +13,15 @@
-  * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-  */
-- /*
--  * This code implements the ECC algorithm used in SmartMedia.
--  *
--  * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
--  * The two unused bit are set to 1.
--  * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
--  * blocks are used on a 512-byte NAND page.
--  *
--  */
-+/*
-+ * This code implements the ECC algorithm used in SmartMedia.
-+ *
-+ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
-+ * The two unused bit are set to 1.
-+ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
-+ * blocks are used on a 512-byte NAND page.
-+ *
-+ */
- #ifndef __YAFFS_ECC_H__
- #define __YAFFS_ECC_H__
-@@ -34,11 +34,11 @@ typedef struct {
- void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc);
- int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
--                   const unsigned char *test_ecc);
-+              const unsigned char *test_ecc);
- void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
--                           yaffs_ECCOther * ecc);
-+                      yaffs_ECCOther *ecc);
- int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
--                        yaffs_ECCOther * read_ecc,
--                        const yaffs_ECCOther * test_ecc);
-+                      yaffs_ECCOther *read_ecc,
-+                      const yaffs_ECCOther *test_ecc);
- #endif
---- a/fs/yaffs2/yaffs_fs.c
-+++ b/fs/yaffs2/yaffs_fs.c
-@@ -1,7 +1,7 @@
- /*
-  * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
-  *
-- * Copyright (C) 2002-2007 Aleph One Ltd.
-+ * Copyright (C) 2002-2009 Aleph One Ltd.
-  *   for Toby Churchill Ltd and Brightstar Engineering
-  *
-  * Created by Charles Manning <charles@aleph1.co.uk>
-@@ -32,18 +32,17 @@
-  */
- const char *yaffs_fs_c_version =
--    "$Id: yaffs_fs.c,v 1.63 2007-09-19 20:35:40 imcd Exp $";
-+    "$Id: yaffs_fs.c,v 1.79 2009-03-17 01:12:00 wookey Exp $";
- extern const char *yaffs_guts_c_version;
- #include <linux/version.h>
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
- #include <linux/config.h>
- #endif
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/slab.h>
- #include <linux/init.h>
--#include <linux/list.h>
- #include <linux/fs.h>
- #include <linux/proc_fs.h>
- #include <linux/smp_lock.h>
-@@ -53,10 +52,12 @@ extern const char *yaffs_guts_c_version;
- #include <linux/string.h>
- #include <linux/ctype.h>
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#include "asm/div64.h"
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #include <linux/statfs.h>     /* Added NCB 15-8-2003 */
--#include <asm/statfs.h>
-+#include <linux/statfs.h>
- #define UnlockPage(p) unlock_page(p)
- #define Page_Uptodate(page)   test_bit(PG_uptodate, &(page)->flags)
-@@ -69,22 +70,45 @@ extern const char *yaffs_guts_c_version;
- #define       BDEVNAME_SIZE           0
- #define       yaffs_devname(sb, buf)  kdevname(sb->s_dev)
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 5, 0))
- /* added NCB 26/5/2006 for 2.4.25-vrs2-tcl1 kernel */
- #define __user
- #endif
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 26))
-+#define YPROC_ROOT  (&proc_root)
-+#else
-+#define YPROC_ROOT  NULL
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- #define WRITE_SIZE_STR "writesize"
--#define WRITE_SIZE(mtd) (mtd)->writesize
-+#define WRITE_SIZE(mtd) ((mtd)->writesize)
- #else
- #define WRITE_SIZE_STR "oobblock"
--#define WRITE_SIZE(mtd) (mtd)->oobblock
-+#define WRITE_SIZE(mtd) ((mtd)->oobblock)
- #endif
--#include <asm/uaccess.h>
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 27))
-+#define YAFFS_USE_WRITE_BEGIN_END 1
-+#else
-+#define YAFFS_USE_WRITE_BEGIN_END 0
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28))
-+static uint32_t YCALCBLOCKS(uint64_t partition_size, uint32_t block_size)
-+{
-+      uint64_t result = partition_size;
-+      do_div(result, block_size);
-+      return (uint32_t)result;
-+}
-+#else
-+#define YCALCBLOCKS(s, b) ((s)/(b))
-+#endif
-+
-+#include <linux/uaccess.h>
- #include "yportenv.h"
- #include "yaffs_guts.h"
-@@ -96,28 +120,44 @@ extern const char *yaffs_guts_c_version;
- unsigned int yaffs_traceMask = YAFFS_TRACE_BAD_BLOCKS;
- unsigned int yaffs_wr_attempts = YAFFS_WR_ATTEMPTS;
-+unsigned int yaffs_auto_checkpoint = 1;
- /* Module Parameters */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
--module_param(yaffs_traceMask,uint,0644);
--module_param(yaffs_wr_attempts,uint,0644);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-+module_param(yaffs_traceMask, uint, 0644);
-+module_param(yaffs_wr_attempts, uint, 0644);
-+module_param(yaffs_auto_checkpoint, uint, 0644);
-+#else
-+MODULE_PARM(yaffs_traceMask, "i");
-+MODULE_PARM(yaffs_wr_attempts, "i");
-+MODULE_PARM(yaffs_auto_checkpoint, "i");
-+#endif
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 25))
-+/* use iget and read_inode */
-+#define Y_IGET(sb, inum) iget((sb), (inum))
-+static void yaffs_read_inode(struct inode *inode);
-+
- #else
--MODULE_PARM(yaffs_traceMask,"i");
--MODULE_PARM(yaffs_wr_attempts,"i");
-+/* Call local equivalent */
-+#define YAFFS_USE_OWN_IGET
-+#define Y_IGET(sb, inum) yaffs_iget((sb), (inum))
-+
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino);
- #endif
- /*#define T(x) printk x */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
--#define yaffs_InodeToObjectLV(iptr) (iptr)->i_private
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18))
-+#define yaffs_InodeToObjectLV(iptr) ((iptr)->i_private)
- #else
--#define yaffs_InodeToObjectLV(iptr) (iptr)->u.generic_ip
-+#define yaffs_InodeToObjectLV(iptr) ((iptr)->u.generic_ip)
- #endif
- #define yaffs_InodeToObject(iptr) ((yaffs_Object *)(yaffs_InodeToObjectLV(iptr)))
- #define yaffs_DentryToObject(dptr) yaffs_InodeToObject((dptr)->d_inode)
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #define yaffs_SuperToDevice(sb)       ((yaffs_Device *)sb->s_fs_info)
- #else
- #define yaffs_SuperToDevice(sb)       ((yaffs_Device *)sb->u.generic_sbp)
-@@ -126,47 +166,49 @@ MODULE_PARM(yaffs_wr_attempts,"i");
- static void yaffs_put_super(struct super_block *sb);
- static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
--                              loff_t * pos);
-+                              loff_t *pos);
-+static ssize_t yaffs_hold_space(struct file *f);
-+static void yaffs_release_space(struct file *f);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_file_flush(struct file *file, fl_owner_t id);
- #else
- static int yaffs_file_flush(struct file *file);
- #endif
- static int yaffs_sync_object(struct file *file, struct dentry *dentry,
--                           int datasync);
-+                              int datasync);
- static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
-                       struct nameidata *n);
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
--                                 struct nameidata *n);
-+                                      struct nameidata *n);
- #else
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode);
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry);
- #endif
- static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
--                    struct dentry *dentry);
-+                      struct dentry *dentry);
- static int yaffs_unlink(struct inode *dir, struct dentry *dentry);
- static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
--                       const char *symname);
-+                      const char *symname);
- static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     dev_t dev);
-+                      dev_t dev);
- #else
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     int dev);
-+                      int dev);
- #endif
- static int yaffs_rename(struct inode *old_dir, struct dentry *old_dentry,
-                       struct inode *new_dir, struct dentry *new_dentry);
- static int yaffs_setattr(struct dentry *dentry, struct iattr *attr);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_sync_fs(struct super_block *sb, int wait);
- static void yaffs_write_super(struct super_block *sb);
- #else
-@@ -174,33 +216,47 @@ static int yaffs_sync_fs(struct super_bl
- static int yaffs_write_super(struct super_block *sb);
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf);
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf);
- #else
- static int yaffs_statfs(struct super_block *sb, struct statfs *buf);
- #endif
--static void yaffs_read_inode(struct inode *inode);
-+#ifdef YAFFS_HAS_PUT_INODE
- static void yaffs_put_inode(struct inode *inode);
-+#endif
-+
- static void yaffs_delete_inode(struct inode *);
- static void yaffs_clear_inode(struct inode *);
- static int yaffs_readpage(struct file *file, struct page *page);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_writepage(struct page *page, struct writeback_control *wbc);
- #else
- static int yaffs_writepage(struct page *page);
- #endif
-+
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END != 0)
-+static int yaffs_write_begin(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned flags,
-+                              struct page **pagep, void **fsdata);
-+static int yaffs_write_end(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned copied,
-+                              struct page *pg, void *fsdadata);
-+#else
- static int yaffs_prepare_write(struct file *f, struct page *pg,
--                             unsigned offset, unsigned to);
-+                              unsigned offset, unsigned to);
- static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
--                            unsigned to);
-+                              unsigned to);
--static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
--                        int buflen);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
-+#endif
-+
-+static int yaffs_readlink(struct dentry *dentry, char __user *buffer,
-+                              int buflen);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
- static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
- #else
- static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd);
-@@ -209,12 +265,17 @@ static int yaffs_follow_link(struct dent
- static struct address_space_operations yaffs_file_address_operations = {
-       .readpage = yaffs_readpage,
-       .writepage = yaffs_writepage,
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+      .write_begin = yaffs_write_begin,
-+      .write_end = yaffs_write_end,
-+#else
-       .prepare_write = yaffs_prepare_write,
-       .commit_write = yaffs_commit_write,
-+#endif
- };
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,22))
--static struct file_operations yaffs_file_operations = {
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))
-+static const struct file_operations yaffs_file_operations = {
-       .read = do_sync_read,
-       .write = do_sync_write,
-       .aio_read = generic_file_aio_read,
-@@ -224,11 +285,12 @@ static struct file_operations yaffs_file
-       .fsync = yaffs_sync_object,
-       .splice_read = generic_file_splice_read,
-       .splice_write = generic_file_splice_write,
-+      .llseek = generic_file_llseek,
- };
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 18))
--static struct file_operations yaffs_file_operations = {
-+static const struct file_operations yaffs_file_operations = {
-       .read = do_sync_read,
-       .write = do_sync_write,
-       .aio_read = generic_file_aio_read,
-@@ -241,29 +303,29 @@ static struct file_operations yaffs_file
- #else
--static struct file_operations yaffs_file_operations = {
-+static const struct file_operations yaffs_file_operations = {
-       .read = generic_file_read,
-       .write = generic_file_write,
-       .mmap = generic_file_mmap,
-       .flush = yaffs_file_flush,
-       .fsync = yaffs_sync_object,
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       .sendfile = generic_file_sendfile,
- #endif
- };
- #endif
--static struct inode_operations yaffs_file_inode_operations = {
-+static const struct inode_operations yaffs_file_inode_operations = {
-       .setattr = yaffs_setattr,
- };
--static struct inode_operations yaffs_symlink_inode_operations = {
-+static const struct inode_operations yaffs_symlink_inode_operations = {
-       .readlink = yaffs_readlink,
-       .follow_link = yaffs_follow_link,
-       .setattr = yaffs_setattr,
- };
--static struct inode_operations yaffs_dir_inode_operations = {
-+static const struct inode_operations yaffs_dir_inode_operations = {
-       .create = yaffs_create,
-       .lookup = yaffs_lookup,
-       .link = yaffs_link,
-@@ -276,16 +338,21 @@ static struct inode_operations yaffs_dir
-       .setattr = yaffs_setattr,
- };
--static struct file_operations yaffs_dir_operations = {
-+static const struct file_operations yaffs_dir_operations = {
-       .read = generic_read_dir,
-       .readdir = yaffs_readdir,
-       .fsync = yaffs_sync_object,
- };
--static struct super_operations yaffs_super_ops = {
-+static const struct super_operations yaffs_super_ops = {
-       .statfs = yaffs_statfs,
-+
-+#ifndef YAFFS_USE_OWN_IGET
-       .read_inode = yaffs_read_inode,
-+#endif
-+#ifdef YAFFS_HAS_PUT_INODE
-       .put_inode = yaffs_put_inode,
-+#endif
-       .put_super = yaffs_put_super,
-       .delete_inode = yaffs_delete_inode,
-       .clear_inode = yaffs_clear_inode,
-@@ -293,22 +360,21 @@ static struct super_operations yaffs_sup
-       .write_super = yaffs_write_super,
- };
--static void yaffs_GrossLock(yaffs_Device * dev)
-+static void yaffs_GrossLock(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs locking\n"));
--
-+      T(YAFFS_TRACE_OS, ("yaffs locking %p\n", current));
-       down(&dev->grossLock);
-+      T(YAFFS_TRACE_OS, ("yaffs locked %p\n", current));
- }
--static void yaffs_GrossUnlock(yaffs_Device * dev)
-+static void yaffs_GrossUnlock(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs unlocking\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs unlocking %p\n", current));
-       up(&dev->grossLock);
--
- }
--static int yaffs_readlink(struct dentry *dentry, char __user * buffer,
--                        int buflen)
-+static int yaffs_readlink(struct dentry *dentry, char __user *buffer,
-+                      int buflen)
- {
-       unsigned char *alias;
-       int ret;
-@@ -329,7 +395,7 @@ static int yaffs_readlink(struct dentry 
-       return ret;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
- static void *yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
- #else
- static int yaffs_follow_link(struct dentry *dentry, struct nameidata *nd)
-@@ -345,32 +411,31 @@ static int yaffs_follow_link(struct dent
-       yaffs_GrossUnlock(dev);
--      if (!alias)
--        {
-+      if (!alias) {
-               ret = -ENOMEM;
-               goto out;
--        }
-+      }
-       ret = vfs_follow_link(nd, alias);
-       kfree(alias);
- out:
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
--      return ERR_PTR (ret);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
-+      return ERR_PTR(ret);
- #else
-       return ret;
- #endif
- }
- struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
--                            yaffs_Object * obj);
-+                              yaffs_Object *obj);
- /*
-  * Lookup is used to find objects in the fs
-  */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry,
--                                 struct nameidata *n)
-+                              struct nameidata *n)
- #else
- static struct dentry *yaffs_lookup(struct inode *dir, struct dentry *dentry)
- #endif
-@@ -383,12 +448,11 @@ static struct dentry *yaffs_lookup(struc
-       yaffs_GrossLock(dev);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_lookup for %d:%s\n",
--         yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
-+              ("yaffs_lookup for %d:%s\n",
-+              yaffs_InodeToObject(dir)->objectId, dentry->d_name.name));
--      obj =
--          yaffs_FindObjectByName(yaffs_InodeToObject(dir),
--                                 dentry->d_name.name);
-+      obj = yaffs_FindObjectByName(yaffs_InodeToObject(dir),
-+                                      dentry->d_name.name);
-       obj = yaffs_GetEquivalentObject(obj);   /* in case it was a hardlink */
-@@ -397,13 +461,13 @@ static struct dentry *yaffs_lookup(struc
-       if (obj) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_lookup found %d\n", obj->objectId));
-+                      ("yaffs_lookup found %d\n", obj->objectId));
-               inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
-               if (inode) {
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG "yaffs_loookup dentry \n"));
-+                              ("yaffs_loookup dentry \n"));
- /* #if 0 asserted by NCB for 2.5/6 compatability - falls through to
-  * d_add even if NULL inode */
- #if 0
-@@ -416,7 +480,7 @@ static struct dentry *yaffs_lookup(struc
-               }
-       } else {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_lookup not found\n"));
-+              T(YAFFS_TRACE_OS, ("yaffs_lookup not found\n"));
-       }
-@@ -425,20 +489,22 @@ static struct dentry *yaffs_lookup(struc
-       d_add(dentry, inode);
-       return NULL;
--      /*      return (ERR_PTR(-EIO)); */
--
- }
-+
-+#ifdef YAFFS_HAS_PUT_INODE
-+
- /* For now put inode is just for debugging
-  * Put inode is called when the inode **structure** is put.
-  */
- static void yaffs_put_inode(struct inode *inode)
- {
-       T(YAFFS_TRACE_OS,
--        ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count)));
-+              ("yaffs_put_inode: ino %d, count %d\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count)));
- }
-+#endif
- /* clear is called to tell the fs to release any per-inode data it holds */
- static void yaffs_clear_inode(struct inode *inode)
-@@ -449,9 +515,9 @@ static void yaffs_clear_inode(struct ino
-       obj = yaffs_InodeToObject(inode);
-       T(YAFFS_TRACE_OS,
--        ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count),
--         obj ? "object exists" : "null object"));
-+              ("yaffs_clear_inode: ino %d, count %d %s\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count),
-+              obj ? "object exists" : "null object"));
-       if (obj) {
-               dev = obj->myDev;
-@@ -486,23 +552,23 @@ static void yaffs_delete_inode(struct in
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
--         atomic_read(&inode->i_count),
--         obj ? "object exists" : "null object"));
-+              ("yaffs_delete_inode: ino %d, count %d %s\n", (int)inode->i_ino,
-+              atomic_read(&inode->i_count),
-+              obj ? "object exists" : "null object"));
-       if (obj) {
-               dev = obj->myDev;
-               yaffs_GrossLock(dev);
--              yaffs_DeleteFile(obj);
-+              yaffs_DeleteObject(obj);
-               yaffs_GrossUnlock(dev);
-       }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,13))
--        truncate_inode_pages (&inode->i_data, 0);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 13))
-+      truncate_inode_pages(&inode->i_data, 0);
- #endif
-       clear_inode(inode);
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_file_flush(struct file *file, fl_owner_t id)
- #else
- static int yaffs_file_flush(struct file *file)
-@@ -513,8 +579,8 @@ static int yaffs_file_flush(struct file 
-       yaffs_Device *dev = obj->myDev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_file_flush object %d (%s)\n", obj->objectId,
--         obj->dirty ? "dirty" : "clean"));
-+              ("yaffs_file_flush object %d (%s)\n", obj->objectId,
-+              obj->dirty ? "dirty" : "clean"));
-       yaffs_GrossLock(dev);
-@@ -535,15 +601,15 @@ static int yaffs_readpage_nolock(struct 
-       yaffs_Device *dev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage at %08x, size %08x\n",
--                         (unsigned)(pg->index << PAGE_CACHE_SHIFT),
--                         (unsigned)PAGE_CACHE_SIZE));
-+      T(YAFFS_TRACE_OS, ("yaffs_readpage at %08x, size %08x\n",
-+                      (unsigned)(pg->index << PAGE_CACHE_SHIFT),
-+                      (unsigned)PAGE_CACHE_SIZE));
-       obj = yaffs_DentryToObject(f->f_dentry);
-       dev = obj->myDev;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       BUG_ON(!PageLocked(pg));
- #else
-       if (!PageLocked(pg))
-@@ -555,9 +621,9 @@ static int yaffs_readpage_nolock(struct 
-       yaffs_GrossLock(dev);
--      ret =
--          yaffs_ReadDataFromFile(obj, pg_buf, pg->index << PAGE_CACHE_SHIFT,
--                                 PAGE_CACHE_SIZE);
-+      ret = yaffs_ReadDataFromFile(obj, pg_buf,
-+                              pg->index << PAGE_CACHE_SHIFT,
-+                              PAGE_CACHE_SIZE);
-       yaffs_GrossUnlock(dev);
-@@ -575,7 +641,7 @@ static int yaffs_readpage_nolock(struct 
-       flush_dcache_page(pg);
-       kunmap(pg);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_readpage done\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_readpage done\n"));
-       return ret;
- }
-@@ -593,7 +659,7 @@ static int yaffs_readpage(struct file *f
- /* writepage inspired by/stolen from smbfs */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_writepage(struct page *page, struct writeback_control *wbc)
- #else
- static int yaffs_writepage(struct page *page)
-@@ -616,12 +682,11 @@ static int yaffs_writepage(struct page *
-       if (offset > inode->i_size) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_writepage at %08x, inode size = %08x!!!\n",
--                 (unsigned)(page->index << PAGE_CACHE_SHIFT),
--                 (unsigned)inode->i_size));
-+                      ("yaffs_writepage at %08x, inode size = %08x!!!\n",
-+                      (unsigned)(page->index << PAGE_CACHE_SHIFT),
-+                      (unsigned)inode->i_size));
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "                -> don't care!!\n"));
-+                      ("                -> don't care!!\n"));
-               unlock_page(page);
-               return 0;
-       }
-@@ -629,11 +694,10 @@ static int yaffs_writepage(struct page *
-       end_index = inode->i_size >> PAGE_CACHE_SHIFT;
-       /* easy case */
--      if (page->index < end_index) {
-+      if (page->index < end_index)
-               nBytes = PAGE_CACHE_SIZE;
--      } else {
-+      else
-               nBytes = inode->i_size & (PAGE_CACHE_SIZE - 1);
--      }
-       get_page(page);
-@@ -643,19 +707,18 @@ static int yaffs_writepage(struct page *
-       yaffs_GrossLock(obj->myDev);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_writepage at %08x, size %08x\n",
--         (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
-+              ("yaffs_writepage at %08x, size %08x\n",
-+              (unsigned)(page->index << PAGE_CACHE_SHIFT), nBytes));
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "writepag0: obj = %05x, ino = %05x\n",
--         (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-+              ("writepag0: obj = %05x, ino = %05x\n",
-+              (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
--      nWritten =
--          yaffs_WriteDataToFile(obj, buffer, page->index << PAGE_CACHE_SHIFT,
--                                nBytes, 0);
-+      nWritten = yaffs_WriteDataToFile(obj, buffer,
-+                      page->index << PAGE_CACHE_SHIFT, nBytes, 0);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "writepag1: obj = %05x, ino = %05x\n",
--         (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-+              ("writepag1: obj = %05x, ino = %05x\n",
-+              (int)obj->variant.fileVariant.fileSize, (int)inode->i_size));
-       yaffs_GrossUnlock(obj->myDev);
-@@ -667,100 +730,207 @@ static int yaffs_writepage(struct page *
-       return (nWritten == nBytes) ? 0 : -ENOSPC;
- }
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+static int yaffs_write_begin(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned flags,
-+                              struct page **pagep, void **fsdata)
-+{
-+      struct page *pg = NULL;
-+      pgoff_t index = pos >> PAGE_CACHE_SHIFT;
-+      uint32_t offset = pos & (PAGE_CACHE_SIZE - 1);
-+      uint32_t to = offset + len;
-+
-+      int ret = 0;
-+      int space_held = 0;
-+
-+      T(YAFFS_TRACE_OS, ("start yaffs_write_begin\n"));
-+      /* Get a page */
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 28)
-+      pg = grab_cache_page_write_begin(mapping, index, flags);
-+#else
-+      pg = __grab_cache_page(mapping, index);
-+#endif
-+
-+      *pagep = pg;
-+      if (!pg) {
-+              ret =  -ENOMEM;
-+              goto out;
-+      }
-+      /* Get fs space */
-+      space_held = yaffs_hold_space(filp);
-+
-+      if (!space_held) {
-+              ret = -ENOSPC;
-+              goto out;
-+      }
-+
-+      /* Update page if required */
-+
-+      if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
-+              ret = yaffs_readpage_nolock(filp, pg);
-+
-+      if (ret)
-+              goto out;
-+
-+      /* Happy path return */
-+      T(YAFFS_TRACE_OS, ("end yaffs_write_begin - ok\n"));
-+
-+      return 0;
-+
-+out:
-+      T(YAFFS_TRACE_OS, ("end yaffs_write_begin fail returning %d\n", ret));
-+      if (space_held)
-+              yaffs_release_space(filp);
-+      if (pg) {
-+              unlock_page(pg);
-+              page_cache_release(pg);
-+      }
-+      return ret;
-+}
-+
-+#else
-+
- static int yaffs_prepare_write(struct file *f, struct page *pg,
--                             unsigned offset, unsigned to)
-+                              unsigned offset, unsigned to)
- {
-+      T(YAFFS_TRACE_OS, ("yaffs_prepair_write\n"));
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_prepair_write\n"));
-       if (!Page_Uptodate(pg) && (offset || to < PAGE_CACHE_SIZE))
-               return yaffs_readpage_nolock(f, pg);
--
-       return 0;
-+}
-+#endif
-+
-+#if (YAFFS_USE_WRITE_BEGIN_END > 0)
-+static int yaffs_write_end(struct file *filp, struct address_space *mapping,
-+                              loff_t pos, unsigned len, unsigned copied,
-+                              struct page *pg, void *fsdadata)
-+{
-+      int ret = 0;
-+      void *addr, *kva;
-+      uint32_t offset_into_page = pos & (PAGE_CACHE_SIZE - 1);
-+
-+      kva = kmap(pg);
-+      addr = kva + offset_into_page;
-+
-+      T(YAFFS_TRACE_OS,
-+              ("yaffs_write_end addr %x pos %x nBytes %d\n",
-+              (unsigned) addr,
-+              (int)pos, copied));
-+
-+      ret = yaffs_file_write(filp, addr, copied, &pos);
-+
-+      if (ret != copied) {
-+              T(YAFFS_TRACE_OS,
-+                      ("yaffs_write_end not same size ret %d  copied %d\n",
-+                      ret, copied));
-+              SetPageError(pg);
-+              ClearPageUptodate(pg);
-+      } else {
-+              SetPageUptodate(pg);
-+      }
-+
-+      kunmap(pg);
-+      yaffs_release_space(filp);
-+      unlock_page(pg);
-+      page_cache_release(pg);
-+      return ret;
- }
-+#else
- static int yaffs_commit_write(struct file *f, struct page *pg, unsigned offset,
--                            unsigned to)
-+                              unsigned to)
- {
-+      void *addr, *kva;
--      void *addr = page_address(pg) + offset;
-       loff_t pos = (((loff_t) pg->index) << PAGE_CACHE_SHIFT) + offset;
-       int nBytes = to - offset;
-       int nWritten;
-       unsigned spos = pos;
--      unsigned saddr = (unsigned)addr;
-+      unsigned saddr;
-+
-+      kva = kmap(pg);
-+      addr = kva + offset;
-+
-+      saddr = (unsigned) addr;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_commit_write addr %x pos %x nBytes %d\n", saddr,
--         spos, nBytes));
-+              ("yaffs_commit_write addr %x pos %x nBytes %d\n",
-+              saddr, spos, nBytes));
-       nWritten = yaffs_file_write(f, addr, nBytes, &pos);
-       if (nWritten != nBytes) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_commit_write not same size nWritten %d  nBytes %d\n",
--                 nWritten, nBytes));
-+                      ("yaffs_commit_write not same size nWritten %d  nBytes %d\n",
-+                      nWritten, nBytes));
-               SetPageError(pg);
-               ClearPageUptodate(pg);
-       } else {
-               SetPageUptodate(pg);
-       }
-+      kunmap(pg);
-+
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_commit_write returning %d\n",
--         nWritten == nBytes ? 0 : nWritten));
-+              ("yaffs_commit_write returning %d\n",
-+              nWritten == nBytes ? 0 : nWritten));
-       return nWritten == nBytes ? 0 : nWritten;
--
- }
-+#endif
-+
--static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object * obj)
-+static void yaffs_FillInodeFromObject(struct inode *inode, yaffs_Object *obj)
- {
-       if (inode && obj) {
-               /* Check mode against the variant type and attempt to repair if broken. */
--              __u32 mode = obj->yst_mode;
--              switch( obj->variantType ){
--              case YAFFS_OBJECT_TYPE_FILE :
--                      if( ! S_ISREG(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFREG;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_SYMLINK :
--                      if( ! S_ISLNK(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFLNK;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_DIRECTORY :
--                      if( ! S_ISDIR(mode) ){
--                              obj->yst_mode &= ~S_IFMT;
--                              obj->yst_mode |= S_IFDIR;
--                      }
--
--                      break;
--              case YAFFS_OBJECT_TYPE_UNKNOWN :
--              case YAFFS_OBJECT_TYPE_HARDLINK :
--              case YAFFS_OBJECT_TYPE_SPECIAL :
--              default:
--                      /* TODO? */
--                      break;
--              }
-+              __u32 mode = obj->yst_mode;
-+              switch (obj->variantType) {
-+              case YAFFS_OBJECT_TYPE_FILE:
-+                      if (!S_ISREG(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFREG;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_SYMLINK:
-+                      if (!S_ISLNK(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFLNK;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_DIRECTORY:
-+                      if (!S_ISDIR(mode)) {
-+                              obj->yst_mode &= ~S_IFMT;
-+                              obj->yst_mode |= S_IFDIR;
-+                      }
-+
-+                      break;
-+              case YAFFS_OBJECT_TYPE_UNKNOWN:
-+              case YAFFS_OBJECT_TYPE_HARDLINK:
-+              case YAFFS_OBJECT_TYPE_SPECIAL:
-+              default:
-+                      /* TODO? */
-+                      break;
-+              }
-+
-+              inode->i_flags |= S_NOATIME;
-               inode->i_ino = obj->objectId;
-               inode->i_mode = obj->yst_mode;
-               inode->i_uid = obj->yst_uid;
-               inode->i_gid = obj->yst_gid;
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
-               inode->i_blksize = inode->i_sb->s_blocksize;
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-               inode->i_rdev = old_decode_dev(obj->yst_rdev);
-               inode->i_atime.tv_sec = (time_t) (obj->yst_atime);
-@@ -781,26 +951,25 @@ static void yaffs_FillInodeFromObject(st
-               inode->i_nlink = yaffs_GetObjectLinkCount(obj);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
--                 inode->i_mode, inode->i_uid, inode->i_gid,
--                 (int)inode->i_size, atomic_read(&inode->i_count)));
-+                      ("yaffs_FillInode mode %x uid %d gid %d size %d count %d\n",
-+                      inode->i_mode, inode->i_uid, inode->i_gid,
-+                      (int)inode->i_size, atomic_read(&inode->i_count)));
-               switch (obj->yst_mode & S_IFMT) {
-               default:        /* fifo, device or socket */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-                       init_special_inode(inode, obj->yst_mode,
--                                         old_decode_dev(obj->yst_rdev));
-+                                      old_decode_dev(obj->yst_rdev));
- #else
-                       init_special_inode(inode, obj->yst_mode,
--                                         (dev_t) (obj->yst_rdev));
-+                                      (dev_t) (obj->yst_rdev));
- #endif
-                       break;
-               case S_IFREG:   /* file */
-                       inode->i_op = &yaffs_file_inode_operations;
-                       inode->i_fop = &yaffs_file_operations;
-                       inode->i_mapping->a_ops =
--                          &yaffs_file_address_operations;
-+                              &yaffs_file_address_operations;
-                       break;
-               case S_IFDIR:   /* directory */
-                       inode->i_op = &yaffs_dir_inode_operations;
-@@ -817,34 +986,36 @@ static void yaffs_FillInodeFromObject(st
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_FileInode invalid parameters\n"));
-+                      ("yaffs_FileInode invalid parameters\n"));
-       }
- }
- struct inode *yaffs_get_inode(struct super_block *sb, int mode, int dev,
--                            yaffs_Object * obj)
-+                              yaffs_Object *obj)
- {
-       struct inode *inode;
-       if (!sb) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_get_inode for NULL super_block!!\n"));
-+                      ("yaffs_get_inode for NULL super_block!!\n"));
-               return NULL;
-       }
-       if (!obj) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_get_inode for NULL object!!\n"));
-+                      ("yaffs_get_inode for NULL object!!\n"));
-               return NULL;
-       }
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_get_inode for object %d\n", obj->objectId));
-+              ("yaffs_get_inode for object %d\n", obj->objectId));
--      inode = iget(sb, obj->objectId);
-+      inode = Y_IGET(sb, obj->objectId);
-+      if (IS_ERR(inode))
-+              return NULL;
-       /* NB Side effect: iget calls back to yaffs_read_inode(). */
-       /* iget also increments the inode's i_count */
-@@ -854,7 +1025,7 @@ struct inode *yaffs_get_inode(struct sup
- }
- static ssize_t yaffs_file_write(struct file *f, const char *buf, size_t n,
--                              loff_t * pos)
-+                              loff_t *pos)
- {
-       yaffs_Object *obj;
-       int nWritten, ipos;
-@@ -869,28 +1040,26 @@ static ssize_t yaffs_file_write(struct f
-       inode = f->f_dentry->d_inode;
--      if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND) {
-+      if (!S_ISBLK(inode->i_mode) && f->f_flags & O_APPEND)
-               ipos = inode->i_size;
--      } else {
-+      else
-               ipos = *pos;
--      }
--      if (!obj) {
-+      if (!obj)
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_file_write: hey obj is null!\n"));
--      } else {
-+                      ("yaffs_file_write: hey obj is null!\n"));
-+      else
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG
--                 "yaffs_file_write about to write writing %d bytes"
--                 "to object %d at %d\n",
--                 n, obj->objectId, ipos));
--      }
-+                      ("yaffs_file_write about to write writing %zu bytes"
-+                      "to object %d at %d\n",
-+                      n, obj->objectId, ipos));
-       nWritten = yaffs_WriteDataToFile(obj, buf, ipos, n, 0);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_file_write writing %d bytes, %d written at %d\n",
--         n, nWritten, ipos));
-+              ("yaffs_file_write writing %zu bytes, %d written at %d\n",
-+              n, nWritten, ipos));
-+
-       if (nWritten > 0) {
-               ipos += nWritten;
-               *pos = ipos;
-@@ -899,10 +1068,9 @@ static ssize_t yaffs_file_write(struct f
-                       inode->i_blocks = (ipos + 511) >> 9;
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG
--                         "yaffs_file_write size updated to %d bytes, "
--                         "%d blocks\n",
--                         ipos, (int)(inode->i_blocks)));
-+                              ("yaffs_file_write size updated to %d bytes, "
-+                              "%d blocks\n",
-+                              ipos, (int)(inode->i_blocks)));
-               }
-       }
-@@ -910,13 +1078,54 @@ static ssize_t yaffs_file_write(struct f
-       return nWritten == 0 ? -ENOSPC : nWritten;
- }
-+/* Space holding and freeing is done to ensure we have space available for write_begin/end */
-+/* For now we just assume few parallel writes and check against a small number. */
-+/* Todo: need to do this with a counter to handle parallel reads better */
-+
-+static ssize_t yaffs_hold_space(struct file *f)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev;
-+
-+      int nFreeChunks;
-+
-+
-+      obj = yaffs_DentryToObject(f->f_dentry);
-+
-+      dev = obj->myDev;
-+
-+      yaffs_GrossLock(dev);
-+
-+      nFreeChunks = yaffs_GetNumberOfFreeChunks(dev);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      return (nFreeChunks > 20) ? 1 : 0;
-+}
-+
-+static void yaffs_release_space(struct file *f)
-+{
-+      yaffs_Object *obj;
-+      yaffs_Device *dev;
-+
-+
-+      obj = yaffs_DentryToObject(f->f_dentry);
-+
-+      dev = obj->myDev;
-+
-+      yaffs_GrossLock(dev);
-+
-+
-+      yaffs_GrossUnlock(dev);
-+}
-+
- static int yaffs_readdir(struct file *f, void *dirent, filldir_t filldir)
- {
-       yaffs_Object *obj;
-       yaffs_Device *dev;
-       struct inode *inode = f->f_dentry->d_inode;
-       unsigned long offset, curoffs;
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *l;
-       char name[YAFFS_MAX_NAME_LENGTH + 1];
-@@ -932,24 +1141,20 @@ static int yaffs_readdir(struct file *f,
-       if (offset == 0) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_readdir: entry . ino %d \n",
--                 (int)inode->i_ino));
--              if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR)
--                  < 0) {
-+                      ("yaffs_readdir: entry . ino %d \n",
-+                      (int)inode->i_ino));
-+              if (filldir(dirent, ".", 1, offset, inode->i_ino, DT_DIR) < 0)
-                       goto out;
--              }
-               offset++;
-               f->f_pos++;
-       }
-       if (offset == 1) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_readdir: entry .. ino %d \n",
--                 (int)f->f_dentry->d_parent->d_inode->i_ino));
--              if (filldir
--                  (dirent, "..", 2, offset,
--                   f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0) {
-+                      ("yaffs_readdir: entry .. ino %d \n",
-+                      (int)f->f_dentry->d_parent->d_inode->i_ino));
-+              if (filldir(dirent, "..", 2, offset,
-+                      f->f_dentry->d_parent->d_inode->i_ino, DT_DIR) < 0)
-                       goto out;
--              }
-               offset++;
-               f->f_pos++;
-       }
-@@ -965,35 +1170,32 @@ static int yaffs_readdir(struct file *f,
-               f->f_version = inode->i_version;
-       }
--      list_for_each(i, &obj->variant.directoryVariant.children) {
-+      ylist_for_each(i, &obj->variant.directoryVariant.children) {
-               curoffs++;
-               if (curoffs >= offset) {
--                      l = list_entry(i, yaffs_Object, siblings);
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-                       yaffs_GetObjectName(l, name,
-                                           YAFFS_MAX_NAME_LENGTH + 1);
-                       T(YAFFS_TRACE_OS,
--                        (KERN_DEBUG "yaffs_readdir: %s inode %d\n", name,
-+                        ("yaffs_readdir: %s inode %d\n", name,
-                          yaffs_GetObjectInode(l)));
-                       if (filldir(dirent,
--                                  name,
--                                  strlen(name),
--                                  offset,
--                                  yaffs_GetObjectInode(l),
--                                  yaffs_GetObjectType(l))
--                          < 0) {
-+                                      name,
-+                                      strlen(name),
-+                                      offset,
-+                                      yaffs_GetObjectInode(l),
-+                                      yaffs_GetObjectType(l)) < 0)
-                               goto up_and_out;
--                      }
-                       offset++;
-                       f->f_pos++;
-               }
-       }
--      up_and_out:
--      out:
--
-+up_and_out:
-+out:
-       yaffs_GrossUnlock(dev);
-       return 0;
-@@ -1002,12 +1204,19 @@ static int yaffs_readdir(struct file *f,
- /*
-  * File creation. Allocate an inode, and we're done..
-  */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
-+#define YCRED(x) x
-+#else
-+#define YCRED(x) (x->cred)
-+#endif
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     dev_t rdev)
-+                      dev_t rdev)
- #else
- static int yaffs_mknod(struct inode *dir, struct dentry *dentry, int mode,
--                     int rdev)
-+                      int rdev)
- #endif
- {
-       struct inode *inode;
-@@ -1018,25 +1227,25 @@ static int yaffs_mknod(struct inode *dir
-       yaffs_Object *parent = yaffs_InodeToObject(dir);
-       int error = -ENOSPC;
--      uid_t uid = current->fsuid;
--      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
-+      uid_t uid = YCRED(current)->fsuid;
-+      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
--      if((dir->i_mode & S_ISGID) && S_ISDIR(mode))
-+      if ((dir->i_mode & S_ISGID) && S_ISDIR(mode))
-               mode |= S_ISGID;
-       if (parent) {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: parent object %d type %d\n",
--                 parent->objectId, parent->variantType));
-+                      ("yaffs_mknod: parent object %d type %d\n",
-+                      parent->objectId, parent->variantType));
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: could not get parent object\n"));
-+                      ("yaffs_mknod: could not get parent object\n"));
-               return -EPERM;
-       }
-       T(YAFFS_TRACE_OS, ("yaffs_mknod: making oject for %s, "
--                         "mode %x dev %x\n",
--                         dentry->d_name.name, mode, rdev));
-+                      "mode %x dev %x\n",
-+                      dentry->d_name.name, mode, rdev));
-       dev = parent->myDev;
-@@ -1045,33 +1254,28 @@ static int yaffs_mknod(struct inode *dir
-       switch (mode & S_IFMT) {
-       default:
-               /* Special (socket, fifo, device...) */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG
--                                 "yaffs_mknod: making special\n"));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
--              obj =
--                  yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
--                                     gid, old_encode_dev(rdev));
--#else
--              obj =
--                  yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
--                                     gid, rdev);
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making special\n"));
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-+              obj = yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
-+                              gid, old_encode_dev(rdev));
-+#else
-+              obj = yaffs_MknodSpecial(parent, dentry->d_name.name, mode, uid,
-+                              gid, rdev);
- #endif
-               break;
-       case S_IFREG:           /* file          */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
--              obj =
--                  yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
--                                  gid);
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making file\n"));
-+              obj = yaffs_MknodFile(parent, dentry->d_name.name, mode, uid,
-+                              gid);
-               break;
-       case S_IFDIR:           /* directory */
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod: making directory\n"));
--              obj =
--                  yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
--                                       uid, gid);
-+                      ("yaffs_mknod: making directory\n"));
-+              obj = yaffs_MknodDirectory(parent, dentry->d_name.name, mode,
-+                                      uid, gid);
-               break;
-       case S_IFLNK:           /* symlink */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mknod: making file\n"));
-+              T(YAFFS_TRACE_OS, ("yaffs_mknod: making symlink\n"));
-               obj = NULL;     /* Do we ever get here? */
-               break;
-       }
-@@ -1083,12 +1287,12 @@ static int yaffs_mknod(struct inode *dir
-               inode = yaffs_get_inode(dir->i_sb, mode, rdev, obj);
-               d_instantiate(dentry, inode);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod created object %d count = %d\n",
--                 obj->objectId, atomic_read(&inode->i_count)));
-+                      ("yaffs_mknod created object %d count = %d\n",
-+                      obj->objectId, atomic_read(&inode->i_count)));
-               error = 0;
-       } else {
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_mknod failed making object\n"));
-+                      ("yaffs_mknod failed making object\n"));
-               error = -ENOMEM;
-       }
-@@ -1098,25 +1302,19 @@ static int yaffs_mknod(struct inode *dir
- static int yaffs_mkdir(struct inode *dir, struct dentry *dentry, int mode)
- {
-       int retVal;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_mkdir\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_mkdir\n"));
-       retVal = yaffs_mknod(dir, dentry, mode | S_IFDIR, 0);
--#if 0
--      /* attempt to fix dir bug - didn't work */
--      if (!retVal) {
--              dget(dentry);
--      }
--#endif
-       return retVal;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode,
-                       struct nameidata *n)
- #else
- static int yaffs_create(struct inode *dir, struct dentry *dentry, int mode)
- #endif
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_create\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_create\n"));
-       return yaffs_mknod(dir, dentry, mode | S_IFREG, 0);
- }
-@@ -1127,8 +1325,8 @@ static int yaffs_unlink(struct inode *di
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_unlink %d:%s\n", (int)(dir->i_ino),
--         dentry->d_name.name));
-+              ("yaffs_unlink %d:%s\n", (int)(dir->i_ino),
-+              dentry->d_name.name));
-       dev = yaffs_InodeToObject(dir)->myDev;
-@@ -1151,82 +1349,74 @@ static int yaffs_unlink(struct inode *di
-  * Create a link...
-  */
- static int yaffs_link(struct dentry *old_dentry, struct inode *dir,
--                    struct dentry *dentry)
-+                      struct dentry *dentry)
- {
-       struct inode *inode = old_dentry->d_inode;
-       yaffs_Object *obj = NULL;
-       yaffs_Object *link = NULL;
-       yaffs_Device *dev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_link\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_link\n"));
-       obj = yaffs_InodeToObject(inode);
-       dev = obj->myDev;
-       yaffs_GrossLock(dev);
--      if (!S_ISDIR(inode->i_mode))    /* Don't link directories */
--      {
--              link =
--                  yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
--                             obj);
--      }
-+      if (!S_ISDIR(inode->i_mode))            /* Don't link directories */
-+              link = yaffs_Link(yaffs_InodeToObject(dir), dentry->d_name.name,
-+                      obj);
-       if (link) {
-               old_dentry->d_inode->i_nlink = yaffs_GetObjectLinkCount(obj);
-               d_instantiate(dentry, old_dentry->d_inode);
-               atomic_inc(&old_dentry->d_inode->i_count);
-               T(YAFFS_TRACE_OS,
--                (KERN_DEBUG "yaffs_link link count %d i_count %d\n",
--                 old_dentry->d_inode->i_nlink,
--                 atomic_read(&old_dentry->d_inode->i_count)));
--
-+                      ("yaffs_link link count %d i_count %d\n",
-+                      old_dentry->d_inode->i_nlink,
-+                      atomic_read(&old_dentry->d_inode->i_count)));
-       }
-       yaffs_GrossUnlock(dev);
--      if (link) {
--
-+      if (link)
-               return 0;
--      }
-       return -EPERM;
- }
- static int yaffs_symlink(struct inode *dir, struct dentry *dentry,
--                       const char *symname)
-+                              const char *symname)
- {
-       yaffs_Object *obj;
-       yaffs_Device *dev;
--      uid_t uid = current->fsuid;
--      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : current->fsgid;
-+      uid_t uid = YCRED(current)->fsuid;
-+      gid_t gid = (dir->i_mode & S_ISGID) ? dir->i_gid : YCRED(current)->fsgid;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_symlink\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_symlink\n"));
-       dev = yaffs_InodeToObject(dir)->myDev;
-       yaffs_GrossLock(dev);
-       obj = yaffs_MknodSymLink(yaffs_InodeToObject(dir), dentry->d_name.name,
--                               S_IFLNK | S_IRWXUGO, uid, gid, symname);
-+                              S_IFLNK | S_IRWXUGO, uid, gid, symname);
-       yaffs_GrossUnlock(dev);
-       if (obj) {
--
-               struct inode *inode;
-               inode = yaffs_get_inode(dir->i_sb, obj->yst_mode, 0, obj);
-               d_instantiate(dentry, inode);
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink created OK\n"));
-+              T(YAFFS_TRACE_OS, ("symlink created OK\n"));
-               return 0;
-       } else {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "symlink not created\n"));
--
-+              T(YAFFS_TRACE_OS, ("symlink not created\n"));
-       }
-       return -ENOMEM;
- }
- static int yaffs_sync_object(struct file *file, struct dentry *dentry,
--                           int datasync)
-+                              int datasync)
- {
-       yaffs_Object *obj;
-@@ -1236,7 +1426,7 @@ static int yaffs_sync_object(struct file
-       dev = obj->myDev;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_object\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_sync_object\n"));
-       yaffs_GrossLock(dev);
-       yaffs_FlushFile(obj, 1);
-       yaffs_GrossUnlock(dev);
-@@ -1255,41 +1445,36 @@ static int yaffs_rename(struct inode *ol
-       int retVal = YAFFS_FAIL;
-       yaffs_Object *target;
--        T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_rename\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_rename\n"));
-       dev = yaffs_InodeToObject(old_dir)->myDev;
-       yaffs_GrossLock(dev);
-       /* Check if the target is an existing directory that is not empty. */
--      target =
--          yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
--                                 new_dentry->d_name.name);
-+      target = yaffs_FindObjectByName(yaffs_InodeToObject(new_dir),
-+                              new_dentry->d_name.name);
--      if (target &&
--          target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
--          !list_empty(&target->variant.directoryVariant.children)) {
-+      if (target && target->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-+              !ylist_empty(&target->variant.directoryVariant.children)) {
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "target is non-empty dir\n"));
-+              T(YAFFS_TRACE_OS, ("target is non-empty dir\n"));
-               retVal = YAFFS_FAIL;
-       } else {
--
-               /* Now does unlinking internally using shadowing mechanism */
--              T(YAFFS_TRACE_OS, (KERN_DEBUG "calling yaffs_RenameObject\n"));
--
--              retVal =
--                  yaffs_RenameObject(yaffs_InodeToObject(old_dir),
--                                     old_dentry->d_name.name,
--                                     yaffs_InodeToObject(new_dir),
--                                     new_dentry->d_name.name);
-+              T(YAFFS_TRACE_OS, ("calling yaffs_RenameObject\n"));
-+              retVal = yaffs_RenameObject(yaffs_InodeToObject(old_dir),
-+                              old_dentry->d_name.name,
-+                              yaffs_InodeToObject(new_dir),
-+                              new_dentry->d_name.name);
-       }
-       yaffs_GrossUnlock(dev);
-       if (retVal == YAFFS_OK) {
--              if(target) {
-+              if (target) {
-                       new_dentry->d_inode->i_nlink--;
-                       mark_inode_dirty(new_dentry->d_inode);
-               }
-@@ -1298,7 +1483,6 @@ static int yaffs_rename(struct inode *ol
-       } else {
-               return -ENOTEMPTY;
-       }
--
- }
- static int yaffs_setattr(struct dentry *dentry, struct iattr *attr)
-@@ -1308,15 +1492,15 @@ static int yaffs_setattr(struct dentry *
-       yaffs_Device *dev;
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_setattr of object %d\n",
--         yaffs_InodeToObject(inode)->objectId));
--
--      if ((error = inode_change_ok(inode, attr)) == 0) {
-+              ("yaffs_setattr of object %d\n",
-+              yaffs_InodeToObject(inode)->objectId));
-+      error = inode_change_ok(inode, attr);
-+      if (error == 0) {
-               dev = yaffs_InodeToObject(inode)->myDev;
-               yaffs_GrossLock(dev);
-               if (yaffs_SetAttributes(yaffs_InodeToObject(inode), attr) ==
--                  YAFFS_OK) {
-+                              YAFFS_OK) {
-                       error = 0;
-               } else {
-                       error = -EPERM;
-@@ -1328,12 +1512,12 @@ static int yaffs_setattr(struct dentry *
-       return error;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_statfs(struct dentry *dentry, struct kstatfs *buf)
- {
-       yaffs_Device *dev = yaffs_DentryToObject(dentry)->myDev;
-       struct super_block *sb = dentry->d_sb;
--#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#elif (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_statfs(struct super_block *sb, struct kstatfs *buf)
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
-@@ -1343,32 +1527,53 @@ static int yaffs_statfs(struct super_blo
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
- #endif
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_statfs\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_statfs\n"));
-       yaffs_GrossLock(dev);
-       buf->f_type = YAFFS_MAGIC;
-       buf->f_bsize = sb->s_blocksize;
-       buf->f_namelen = 255;
--      if (sb->s_blocksize > dev->nDataBytesPerChunk) {
-+
-+      if (dev->nDataBytesPerChunk & (dev->nDataBytesPerChunk - 1)) {
-+              /* Do this if chunk size is not a power of 2 */
-+
-+              uint64_t bytesInDev;
-+              uint64_t bytesFree;
-+
-+              bytesInDev = ((uint64_t)((dev->endBlock - dev->startBlock + 1))) *
-+                      ((uint64_t)(dev->nChunksPerBlock * dev->nDataBytesPerChunk));
-+
-+              do_div(bytesInDev, sb->s_blocksize); /* bytesInDev becomes the number of blocks */
-+              buf->f_blocks = bytesInDev;
-+
-+              bytesFree  = ((uint64_t)(yaffs_GetNumberOfFreeChunks(dev))) *
-+                      ((uint64_t)(dev->nDataBytesPerChunk));
-+
-+              do_div(bytesFree, sb->s_blocksize);
-+
-+              buf->f_bfree = bytesFree;
-+
-+      } else if (sb->s_blocksize > dev->nDataBytesPerChunk) {
-               buf->f_blocks =
--                  (dev->endBlock - dev->startBlock +
--                   1) * dev->nChunksPerBlock / (sb->s_blocksize /
--                                                dev->nDataBytesPerChunk);
-+                      (dev->endBlock - dev->startBlock + 1) *
-+                      dev->nChunksPerBlock /
-+                      (sb->s_blocksize / dev->nDataBytesPerChunk);
-               buf->f_bfree =
--                  yaffs_GetNumberOfFreeChunks(dev) / (sb->s_blocksize /
--                                                      dev->nDataBytesPerChunk);
-+                      yaffs_GetNumberOfFreeChunks(dev) /
-+                      (sb->s_blocksize / dev->nDataBytesPerChunk);
-       } else {
--
-               buf->f_blocks =
--                  (dev->endBlock - dev->startBlock +
--                   1) * dev->nChunksPerBlock * (dev->nDataBytesPerChunk /
--                                                sb->s_blocksize);
-+                      (dev->endBlock - dev->startBlock + 1) *
-+                      dev->nChunksPerBlock *
-+                      (dev->nDataBytesPerChunk / sb->s_blocksize);
-+
-               buf->f_bfree =
--                  yaffs_GetNumberOfFreeChunks(dev) * (dev->nDataBytesPerChunk /
--                                                      sb->s_blocksize);
-+                      yaffs_GetNumberOfFreeChunks(dev) *
-+                      (dev->nDataBytesPerChunk / sb->s_blocksize);
-       }
-+
-       buf->f_files = 0;
-       buf->f_ffree = 0;
-       buf->f_bavail = buf->f_bfree;
-@@ -1378,18 +1583,19 @@ static int yaffs_statfs(struct super_blo
- }
--/**
- static int yaffs_do_sync_fs(struct super_block *sb)
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_do_sync_fs\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_do_sync_fs\n"));
--      if(sb->s_dirt) {
-+      if (sb->s_dirt) {
-               yaffs_GrossLock(dev);
--              if(dev)
-+              if (dev) {
-+                      yaffs_FlushEntireDeviceCache(dev);
-                       yaffs_CheckpointSave(dev);
-+              }
-               yaffs_GrossUnlock(dev);
-@@ -1397,35 +1603,73 @@ static int yaffs_do_sync_fs(struct super
-       }
-       return 0;
- }
--**/
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static void yaffs_write_super(struct super_block *sb)
- #else
- static int yaffs_write_super(struct super_block *sb)
- #endif
- {
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_write_super\n"));
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
--      return 0; /* yaffs_do_sync_fs(sb);*/
-+      T(YAFFS_TRACE_OS, ("yaffs_write_super\n"));
-+      if (yaffs_auto_checkpoint >= 2)
-+              yaffs_do_sync_fs(sb);
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 18))
-+      return 0;
- #endif
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_sync_fs(struct super_block *sb, int wait)
- #else
- static int yaffs_sync_fs(struct super_block *sb)
- #endif
- {
-+      T(YAFFS_TRACE_OS, ("yaffs_sync_fs\n"));
-+
-+      if (yaffs_auto_checkpoint >= 1)
-+              yaffs_do_sync_fs(sb);
-+
-+      return 0;
-+}
-+
-+#ifdef YAFFS_USE_OWN_IGET
-+
-+static struct inode *yaffs_iget(struct super_block *sb, unsigned long ino)
-+{
-+      struct inode *inode;
-+      yaffs_Object *obj;
-+      yaffs_Device *dev = yaffs_SuperToDevice(sb);
-+
-+      T(YAFFS_TRACE_OS,
-+              ("yaffs_iget for %lu\n", ino));
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_sync_fs\n"));
-+      inode = iget_locked(sb, ino);
-+      if (!inode)
-+              return ERR_PTR(-ENOMEM);
-+      if (!(inode->i_state & I_NEW))
-+              return inode;
-+
-+      /* NB This is called as a side effect of other functions, but
-+       * we had to release the lock to prevent deadlocks, so
-+       * need to lock again.
-+       */
--      return 0; /* yaffs_do_sync_fs(sb);*/
-+      yaffs_GrossLock(dev);
-+      obj = yaffs_FindObjectByNumber(dev, inode->i_ino);
-+
-+      yaffs_FillInodeFromObject(inode, obj);
-+
-+      yaffs_GrossUnlock(dev);
-+
-+      unlock_new_inode(inode);
-+      return inode;
- }
-+#else
- static void yaffs_read_inode(struct inode *inode)
- {
-@@ -1438,7 +1682,7 @@ static void yaffs_read_inode(struct inod
-       yaffs_Device *dev = yaffs_SuperToDevice(inode->i_sb);
-       T(YAFFS_TRACE_OS,
--        (KERN_DEBUG "yaffs_read_inode for %d\n", (int)inode->i_ino));
-+              ("yaffs_read_inode for %d\n", (int)inode->i_ino));
-       yaffs_GrossLock(dev);
-@@ -1449,18 +1693,20 @@ static void yaffs_read_inode(struct inod
-       yaffs_GrossUnlock(dev);
- }
--static LIST_HEAD(yaffs_dev_list);
-+#endif
-+
-+static YLIST_HEAD(yaffs_dev_list);
--#if 0 // not used
-+#if 0 /* not used */
- static int yaffs_remount_fs(struct super_block *sb, int *flags, char *data)
- {
-       yaffs_Device    *dev = yaffs_SuperToDevice(sb);
--      if( *flags & MS_RDONLY ) {
-+      if (*flags & MS_RDONLY) {
-               struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
-               T(YAFFS_TRACE_OS,
--                      (KERN_DEBUG "yaffs_remount_fs: %s: RO\n", dev->name ));
-+                      ("yaffs_remount_fs: %s: RO\n", dev->name));
-               yaffs_GrossLock(dev);
-@@ -1472,10 +1718,9 @@ static int yaffs_remount_fs(struct super
-                       mtd->sync(mtd);
-               yaffs_GrossUnlock(dev);
--      }
--      else {
-+      } else {
-               T(YAFFS_TRACE_OS,
--                      (KERN_DEBUG "yaffs_remount_fs: %s: RW\n", dev->name ));
-+                      ("yaffs_remount_fs: %s: RW\n", dev->name));
-       }
-       return 0;
-@@ -1486,7 +1731,7 @@ static void yaffs_put_super(struct super
- {
-       yaffs_Device *dev = yaffs_SuperToDevice(sb);
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_put_super\n"));
-+      T(YAFFS_TRACE_OS, ("yaffs_put_super\n"));
-       yaffs_GrossLock(dev);
-@@ -1494,18 +1739,17 @@ static void yaffs_put_super(struct super
-       yaffs_CheckpointSave(dev);
--      if (dev->putSuperFunc) {
-+      if (dev->putSuperFunc)
-               dev->putSuperFunc(sb);
--      }
-       yaffs_Deinitialise(dev);
-       yaffs_GrossUnlock(dev);
-       /* we assume this is protected by lock_kernel() in mount/umount */
--      list_del(&dev->devList);
-+      ylist_del(&dev->devList);
--      if(dev->spareBuffer){
-+      if (dev->spareBuffer) {
-               YFREE(dev->spareBuffer);
-               dev->spareBuffer = NULL;
-       }
-@@ -1516,12 +1760,10 @@ static void yaffs_put_super(struct super
- static void yaffs_MTDPutSuper(struct super_block *sb)
- {
--
-       struct mtd_info *mtd = yaffs_SuperToDevice(sb)->genericDevice;
--      if (mtd->sync) {
-+      if (mtd->sync)
-               mtd->sync(mtd);
--      }
-       put_mtd_device(mtd);
- }
-@@ -1531,9 +1773,9 @@ static void yaffs_MarkSuperBlockDirty(vo
- {
-       struct super_block *sb = (struct super_block *)vsb;
--      T(YAFFS_TRACE_OS, (KERN_DEBUG "yaffs_MarkSuperBlockDirty() sb = %p\n",sb));
--//    if(sb)
--//            sb->s_dirt = 1;
-+      T(YAFFS_TRACE_OS, ("yaffs_MarkSuperBlockDirty() sb = %p\n", sb));
-+      if (sb)
-+              sb->s_dirt = 1;
- }
- typedef struct {
-@@ -1546,48 +1788,48 @@ typedef struct {
- #define MAX_OPT_LEN 20
- static int yaffs_parse_options(yaffs_options *options, const char *options_str)
- {
--      char cur_opt[MAX_OPT_LEN+1];
-+      char cur_opt[MAX_OPT_LEN + 1];
-       int p;
-       int error = 0;
-       /* Parse through the options which is a comma seperated list */
--      while(options_str && *options_str && !error){
--              memset(cur_opt,0,MAX_OPT_LEN+1);
-+      while (options_str && *options_str && !error) {
-+              memset(cur_opt, 0, MAX_OPT_LEN + 1);
-               p = 0;
--              while(*options_str && *options_str != ','){
--                      if(p < MAX_OPT_LEN){
-+              while (*options_str && *options_str != ',') {
-+                      if (p < MAX_OPT_LEN) {
-                               cur_opt[p] = *options_str;
-                               p++;
-                       }
-                       options_str++;
-               }
--              if(!strcmp(cur_opt,"inband-tags"))
-+              if (!strcmp(cur_opt, "inband-tags"))
-                       options->inband_tags = 1;
--              else if(!strcmp(cur_opt,"no-cache"))
-+              else if (!strcmp(cur_opt, "no-cache"))
-                       options->no_cache = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint-read"))
-+              else if (!strcmp(cur_opt, "no-checkpoint-read"))
-                       options->skip_checkpoint_read = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint-write"))
-+              else if (!strcmp(cur_opt, "no-checkpoint-write"))
-                       options->skip_checkpoint_write = 1;
--              else if(!strcmp(cur_opt,"no-checkpoint")){
-+              else if (!strcmp(cur_opt, "no-checkpoint")) {
-                       options->skip_checkpoint_read = 1;
-                       options->skip_checkpoint_write = 1;
-               } else {
--                      printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",cur_opt);
-+                      printk(KERN_INFO "yaffs: Bad mount option \"%s\"\n",
-+                                      cur_opt);
-                       error = 1;
-               }
--
-       }
-       return error;
- }
- static struct super_block *yaffs_internal_read_super(int yaffsVersion,
--                                                   struct super_block *sb,
--                                                   void *data, int silent)
-+                                              struct super_block *sb,
-+                                              void *data, int silent)
- {
-       int nBlocks;
-       struct inode *inode = NULL;
-@@ -1602,6 +1844,7 @@ static struct super_block *yaffs_interna
-       sb->s_magic = YAFFS_MAGIC;
-       sb->s_op = &yaffs_super_ops;
-+      sb->s_flags |= MS_NOATIME;
-       if (!sb)
-               printk(KERN_INFO "yaffs: sb is NULL\n");
-@@ -1614,14 +1857,14 @@ static struct super_block *yaffs_interna
-                      sb->s_dev,
-                      yaffs_devname(sb, devname_buf));
--      if(!data_str)
-+      if (!data_str)
-               data_str = "";
--      printk(KERN_INFO "yaffs: passed flags \"%s\"\n",data_str);
-+      printk(KERN_INFO "yaffs: passed flags \"%s\"\n", data_str);
--      memset(&options,0,sizeof(options));
-+      memset(&options, 0, sizeof(options));
--      if(yaffs_parse_options(&options,data_str)){
-+      if (yaffs_parse_options(&options, data_str)) {
-               /* Option parsing failed */
-               return NULL;
-       }
-@@ -1645,9 +1888,9 @@ static struct super_block *yaffs_interna
-                              yaffs_devname(sb, devname_buf)));
-       /* Check it's an mtd device..... */
--      if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR) {
-+      if (MAJOR(sb->s_dev) != MTD_BLOCK_MAJOR)
-               return NULL;    /* This isn't an mtd device */
--      }
-+
-       /* Get the device */
-       mtd = get_mtd_device(NULL, MINOR(sb->s_dev));
-       if (!mtd) {
-@@ -1673,29 +1916,23 @@ static struct super_block *yaffs_interna
-       T(YAFFS_TRACE_OS, (" %s %d\n", WRITE_SIZE_STR, WRITE_SIZE(mtd)));
-       T(YAFFS_TRACE_OS, (" oobsize %d\n", mtd->oobsize));
-       T(YAFFS_TRACE_OS, (" erasesize %d\n", mtd->erasesize));
--      T(YAFFS_TRACE_OS, (" size %d\n", mtd->size));
-+#if LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 29)
-+      T(YAFFS_TRACE_OS, (" size %u\n", mtd->size));
-+#else
-+      T(YAFFS_TRACE_OS, (" size %lld\n", mtd->size));
-+#endif
- #ifdef CONFIG_YAFFS_AUTO_YAFFS2
--      if (yaffsVersion == 1 &&
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--          mtd->writesize >= 2048) {
--#else
--          mtd->oobblock >= 2048) {
--#endif
--          T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs2\n"));
--          yaffsVersion = 2;
-+      if (yaffsVersion == 1 && WRITE_SIZE(mtd) >= 2048) {
-+              T(YAFFS_TRACE_ALWAYS, ("yaffs: auto selecting yaffs2\n"));
-+              yaffsVersion = 2;
-       }
-       /* Added NCB 26/5/2006 for completeness */
--      if (yaffsVersion == 2 &&
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--          mtd->writesize == 512) {
--#else
--          mtd->oobblock == 512) {
--#endif
--          T(YAFFS_TRACE_ALWAYS,("yaffs: auto selecting yaffs1\n"));
--          yaffsVersion = 1;
-+      if (yaffsVersion == 2 && !options.inband_tags && WRITE_SIZE(mtd) == 512) {
-+              T(YAFFS_TRACE_ALWAYS, ("yaffs: auto selecting yaffs1\n"));
-+              yaffsVersion = 1;
-       }
- #endif
-@@ -1707,7 +1944,7 @@ static struct super_block *yaffs_interna
-                   !mtd->block_markbad ||
-                   !mtd->read ||
-                   !mtd->write ||
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-                   !mtd->read_oob || !mtd->write_oob) {
- #else
-                   !mtd->write_ecc ||
-@@ -1719,12 +1956,9 @@ static struct super_block *yaffs_interna
-                       return NULL;
-               }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--              if (mtd->writesize < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
--#else
--              if (mtd->oobblock < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
--#endif
--                  mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) {
-+              if ((WRITE_SIZE(mtd) < YAFFS_MIN_YAFFS2_CHUNK_SIZE ||
-+                  mtd->oobsize < YAFFS_MIN_YAFFS2_SPARE_SIZE) &&
-+                  !options.inband_tags) {
-                       T(YAFFS_TRACE_ALWAYS,
-                         ("yaffs: MTD device does not have the "
-                          "right page sizes\n"));
-@@ -1735,7 +1969,7 @@ static struct super_block *yaffs_interna
-               if (!mtd->erase ||
-                   !mtd->read ||
-                   !mtd->write ||
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-                   !mtd->read_oob || !mtd->write_oob) {
- #else
-                   !mtd->write_ecc ||
-@@ -1761,7 +1995,7 @@ static struct super_block *yaffs_interna
-        * Set the yaffs_Device up for mtd
-        */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
-       sb->s_fs_info = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
- #else
-       sb->u.generic_sbp = dev = kmalloc(sizeof(yaffs_Device), GFP_KERNEL);
-@@ -1780,13 +2014,15 @@ static struct super_block *yaffs_interna
-       /* Set up the memory size parameters.... */
--      nBlocks = mtd->size / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
-+      nBlocks = YCALCBLOCKS(mtd->size, (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK));
-+
-       dev->startBlock = 0;
-       dev->endBlock = nBlocks - 1;
-       dev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
--      dev->nDataBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-+      dev->totalBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
-       dev->nReservedBlocks = 5;
-       dev->nShortOpCaches = (options.no_cache) ? 0 : 10;
-+      dev->inbandTags = options.inband_tags;
-       /* ... and the functions. */
-       if (yaffsVersion == 2) {
-@@ -1798,20 +2034,19 @@ static struct super_block *yaffs_interna
-               dev->queryNANDBlock = nandmtd2_QueryNANDBlock;
-               dev->spareBuffer = YMALLOC(mtd->oobsize);
-               dev->isYaffs2 = 1;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--              dev->nDataBytesPerChunk = mtd->writesize;
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+              dev->totalBytesPerChunk = mtd->writesize;
-               dev->nChunksPerBlock = mtd->erasesize / mtd->writesize;
- #else
--              dev->nDataBytesPerChunk = mtd->oobblock;
-+              dev->totalBytesPerChunk = mtd->oobblock;
-               dev->nChunksPerBlock = mtd->erasesize / mtd->oobblock;
- #endif
--              nBlocks = mtd->size / mtd->erasesize;
-+              nBlocks = YCALCBLOCKS(mtd->size, mtd->erasesize);
--              dev->nCheckpointReservedBlocks = CONFIG_YAFFS_CHECKPOINT_RESERVED_BLOCKS;
-               dev->startBlock = 0;
-               dev->endBlock = nBlocks - 1;
-       } else {
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-               /* use the MTD interface in yaffs_mtdif1.c */
-               dev->writeChunkWithTagsToNAND =
-                       nandmtd1_WriteChunkWithTagsToNAND;
-@@ -1847,7 +2082,7 @@ static struct super_block *yaffs_interna
-       dev->skipCheckpointWrite = options.skip_checkpoint_write;
-       /* we assume this is protected by lock_kernel() in mount/umount */
--      list_add_tail(&dev->devList, &yaffs_dev_list);
-+      ylist_add_tail(&dev->devList, &yaffs_dev_list);
-       init_MUTEX(&dev->grossLock);
-@@ -1884,20 +2119,23 @@ static struct super_block *yaffs_interna
-               return NULL;
-       }
-       sb->s_root = root;
-+      sb->s_dirt = !dev->isCheckpointed;
-+      T(YAFFS_TRACE_ALWAYS,
-+        ("yaffs_read_super: isCheckpointed %d\n", dev->isCheckpointed));
-       T(YAFFS_TRACE_OS, ("yaffs_read_super: done\n"));
-       return sb;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs_internal_read_super_mtd(struct super_block *sb, void *data,
-                                        int silent)
- {
-       return yaffs_internal_read_super(1, sb, data, silent) ? 0 : -EINVAL;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs_read_super(struct file_system_type *fs,
-                           int flags, const char *dev_name,
-                           void *data, struct vfsmount *mnt)
-@@ -1938,14 +2176,14 @@ static DECLARE_FSTYPE(yaffs_fs_type, "ya
- #ifdef CONFIG_YAFFS_YAFFS2
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- static int yaffs2_internal_read_super_mtd(struct super_block *sb, void *data,
-                                         int silent)
- {
-       return yaffs_internal_read_super(2, sb, data, silent) ? 0 : -EINVAL;
- }
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
- static int yaffs2_read_super(struct file_system_type *fs,
-                       int flags, const char *dev_name, void *data,
-                       struct vfsmount *mnt)
-@@ -1990,12 +2228,12 @@ static char *yaffs_dump_dev(char *buf, y
- {
-       buf += sprintf(buf, "startBlock......... %d\n", dev->startBlock);
-       buf += sprintf(buf, "endBlock........... %d\n", dev->endBlock);
-+      buf += sprintf(buf, "totalBytesPerChunk. %d\n", dev->totalBytesPerChunk);
-       buf += sprintf(buf, "nDataBytesPerChunk. %d\n", dev->nDataBytesPerChunk);
-       buf += sprintf(buf, "chunkGroupBits..... %d\n", dev->chunkGroupBits);
-       buf += sprintf(buf, "chunkGroupSize..... %d\n", dev->chunkGroupSize);
-       buf += sprintf(buf, "nErasedBlocks...... %d\n", dev->nErasedBlocks);
-       buf += sprintf(buf, "nReservedBlocks.... %d\n", dev->nReservedBlocks);
--      buf += sprintf(buf, "nCheckptResBlocks.. %d\n", dev->nCheckpointReservedBlocks);
-       buf += sprintf(buf, "blocksInCheckpoint. %d\n", dev->blocksInCheckpoint);
-       buf += sprintf(buf, "nTnodesCreated..... %d\n", dev->nTnodesCreated);
-       buf += sprintf(buf, "nFreeTnodes........ %d\n", dev->nFreeTnodes);
-@@ -2006,10 +2244,8 @@ static char *yaffs_dump_dev(char *buf, y
-       buf += sprintf(buf, "nPageReads......... %d\n", dev->nPageReads);
-       buf += sprintf(buf, "nBlockErasures..... %d\n", dev->nBlockErasures);
-       buf += sprintf(buf, "nGCCopies.......... %d\n", dev->nGCCopies);
--      buf +=
--          sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
--      buf +=
--          sprintf(buf, "passiveGCs......... %d\n",
-+      buf += sprintf(buf, "garbageCollections. %d\n", dev->garbageCollections);
-+      buf += sprintf(buf, "passiveGCs......... %d\n",
-                   dev->passiveGarbageCollections);
-       buf += sprintf(buf, "nRetriedWrites..... %d\n", dev->nRetriedWrites);
-       buf += sprintf(buf, "nShortOpCaches..... %d\n", dev->nShortOpCaches);
-@@ -2025,6 +2261,7 @@ static char *yaffs_dump_dev(char *buf, y
-           sprintf(buf, "nBackgroudDeletions %d\n", dev->nBackgroundDeletions);
-       buf += sprintf(buf, "useNANDECC......... %d\n", dev->useNANDECC);
-       buf += sprintf(buf, "isYaffs2........... %d\n", dev->isYaffs2);
-+      buf += sprintf(buf, "inbandTags......... %d\n", dev->inbandTags);
-       return buf;
- }
-@@ -2033,7 +2270,7 @@ static int yaffs_proc_read(char *page,
-                          char **start,
-                          off_t offset, int count, int *eof, void *data)
- {
--      struct list_head *item;
-+      struct ylist_head *item;
-       char *buf = page;
-       int step = offset;
-       int n = 0;
-@@ -2057,8 +2294,8 @@ static int yaffs_proc_read(char *page,
-       lock_kernel();
-       /* Locate and print the Nth entry.  Order N-squared but N is small. */
--      list_for_each(item, &yaffs_dev_list) {
--              yaffs_Device *dev = list_entry(item, yaffs_Device, devList);
-+      ylist_for_each(item, &yaffs_dev_list) {
-+              yaffs_Device *dev = ylist_entry(item, yaffs_Device, devList);
-               if (n < step) {
-                       n++;
-                       continue;
-@@ -2119,7 +2356,7 @@ static int yaffs_proc_write(struct file 
-       char *end;
-       char *mask_name;
-       const char *x;
--      char substring[MAX_MASK_NAME_LENGTH+1];
-+      char substring[MAX_MASK_NAME_LENGTH + 1];
-       int i;
-       int done = 0;
-       int add, len = 0;
-@@ -2129,9 +2366,8 @@ static int yaffs_proc_write(struct file 
-       while (!done && (pos < count)) {
-               done = 1;
--              while ((pos < count) && isspace(buf[pos])) {
-+              while ((pos < count) && isspace(buf[pos]))
-                       pos++;
--              }
-               switch (buf[pos]) {
-               case '+':
-@@ -2148,20 +2384,21 @@ static int yaffs_proc_write(struct file 
-               mask_name = NULL;
-               mask_bitfield = simple_strtoul(buf + pos, &end, 0);
-+
-               if (end > buf + pos) {
-                       mask_name = "numeral";
-                       len = end - (buf + pos);
-                       pos += len;
-                       done = 0;
-               } else {
--                      for(x = buf + pos, i = 0;
--                          (*x == '_' || (*x >='a' && *x <= 'z')) &&
--                          i <MAX_MASK_NAME_LENGTH; x++, i++, pos++)
--                          substring[i] = *x;
-+                      for (x = buf + pos, i = 0;
-+                          (*x == '_' || (*x >= 'a' && *x <= 'z')) &&
-+                          i < MAX_MASK_NAME_LENGTH; x++, i++, pos++)
-+                              substring[i] = *x;
-                       substring[i] = '\0';
-                       for (i = 0; mask_flags[i].mask_name != NULL; i++) {
--                              if(strcmp(substring,mask_flags[i].mask_name) == 0){
-+                              if (strcmp(substring, mask_flags[i].mask_name) == 0) {
-                                       mask_name = mask_flags[i].mask_name;
-                                       mask_bitfield = mask_flags[i].mask_bitfield;
-                                       done = 0;
-@@ -2172,7 +2409,7 @@ static int yaffs_proc_write(struct file 
-               if (mask_name != NULL) {
-                       done = 0;
--                      switch(add) {
-+                      switch (add) {
-                       case '-':
-                               rg &= ~mask_bitfield;
-                               break;
-@@ -2191,13 +2428,13 @@ static int yaffs_proc_write(struct file 
-       yaffs_traceMask = rg | YAFFS_TRACE_ALWAYS;
--      printk("new trace = 0x%08X\n",yaffs_traceMask);
-+      printk(KERN_DEBUG "new trace = 0x%08X\n", yaffs_traceMask);
-       if (rg & YAFFS_TRACE_ALWAYS) {
-               for (i = 0; mask_flags[i].mask_name != NULL; i++) {
-                       char flag;
-                       flag = ((rg & mask_flags[i].mask_bitfield) == mask_flags[i].mask_bitfield) ? '+' : '-';
--                      printk("%c%s\n", flag, mask_flags[i].mask_name);
-+                      printk(KERN_DEBUG "%c%s\n", flag, mask_flags[i].mask_name);
-               }
-       }
-@@ -2211,12 +2448,8 @@ struct file_system_to_install {
- };
- static struct file_system_to_install fs_to_install[] = {
--//#ifdef CONFIG_YAFFS_YAFFS1
-       {&yaffs_fs_type, 0},
--//#endif
--//#ifdef CONFIG_YAFFS_YAFFS2
-       {&yaffs2_fs_type, 0},
--//#endif
-       {NULL, 0}
- };
-@@ -2231,15 +2464,14 @@ static int __init init_yaffs_fs(void)
-       /* Install the proc_fs entry */
-       my_proc_entry = create_proc_entry("yaffs",
-                                              S_IRUGO | S_IFREG,
--                                             &proc_root);
-+                                             YPROC_ROOT);
-       if (my_proc_entry) {
-               my_proc_entry->write_proc = yaffs_proc_write;
-               my_proc_entry->read_proc = yaffs_proc_read;
-               my_proc_entry->data = NULL;
--      } else {
-+      } else
-               return -ENOMEM;
--      }
-       /* Now add the file system entries */
-@@ -2247,9 +2479,8 @@ static int __init init_yaffs_fs(void)
-       while (fsinst->fst && !error) {
-               error = register_filesystem(fsinst->fst);
--              if (!error) {
-+              if (!error)
-                       fsinst->installed = 1;
--              }
-               fsinst++;
-       }
-@@ -2277,7 +2508,7 @@ static void __exit exit_yaffs_fs(void)
-       T(YAFFS_TRACE_ALWAYS, ("yaffs " __DATE__ " " __TIME__
-                              " removing. \n"));
--      remove_proc_entry("yaffs", &proc_root);
-+      remove_proc_entry("yaffs", YPROC_ROOT);
-       fsinst = fs_to_install;
-@@ -2288,7 +2519,6 @@ static void __exit exit_yaffs_fs(void)
-               }
-               fsinst++;
-       }
--
- }
- module_init(init_yaffs_fs)
---- /dev/null
-+++ b/fs/yaffs2/yaffs_getblockinfo.h
-@@ -0,0 +1,34 @@
-+/*
-+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
-+ *
-+ * Copyright (C) 2002-2007 Aleph One Ltd.
-+ *   for Toby Churchill Ltd and Brightstar Engineering
-+ *
-+ * Created by Charles Manning <charles@aleph1.co.uk>
-+ *
-+ * This program is free software; you can redistribute it and/or modify
-+ * it under the terms of the GNU Lesser General Public License version 2.1 as
-+ * published by the Free Software Foundation.
-+ *
-+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
-+ */
-+
-+#ifndef __YAFFS_GETBLOCKINFO_H__
-+#define __YAFFS_GETBLOCKINFO_H__
-+
-+#include "yaffs_guts.h"
-+
-+/* Function to manipulate block info */
-+static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
-+{
-+      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
-+              T(YAFFS_TRACE_ERROR,
-+                (TSTR
-+                 ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
-+                 blk));
-+              YBUG();
-+      }
-+      return &dev->blockInfo[blk - dev->internalStartBlock];
-+}
-+
-+#endif
---- a/fs/yaffs2/yaffs_guts.c
-+++ b/fs/yaffs2/yaffs_guts.c
-@@ -12,16 +12,17 @@
-  */
- const char *yaffs_guts_c_version =
--    "$Id: yaffs_guts.c,v 1.49 2007-05-15 20:07:40 charles Exp $";
-+    "$Id: yaffs_guts.c,v 1.82 2009-03-09 04:24:17 charles Exp $";
- #include "yportenv.h"
- #include "yaffsinterface.h"
- #include "yaffs_guts.h"
- #include "yaffs_tagsvalidity.h"
-+#include "yaffs_getblockinfo.h"
- #include "yaffs_tagscompat.h"
--#ifndef  CONFIG_YAFFS_USE_OWN_SORT
-+#ifndef CONFIG_YAFFS_USE_OWN_SORT
- #include "yaffs_qsort.h"
- #endif
- #include "yaffs_nand.h"
-@@ -32,116 +33,116 @@ const char *yaffs_guts_c_version =
- #include "yaffs_packedtags2.h"
--#ifdef CONFIG_YAFFS_WINCE
--void yfsd_LockYAFFS(BOOL fsLockOnly);
--void yfsd_UnlockYAFFS(BOOL fsLockOnly);
--#endif
--
- #define YAFFS_PASSIVE_GC_CHUNKS 2
- #include "yaffs_ecc.h"
- /* Robustification (if it ever comes about...) */
--static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_ExtendedTags * tags);
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_ExtendedTags * tags);
-+static void yaffs_RetireBlock(yaffs_Device *dev, int blockInNAND);
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND,
-+              int erasedOk);
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags);
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                              const yaffs_ExtendedTags *tags);
- /* Other local prototypes */
--static int yaffs_UnlinkObject( yaffs_Object *obj);
-+static int yaffs_UnlinkObject(yaffs_Object *obj);
- static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
- static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
--static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
--                                           const __u8 * buffer,
--                                           yaffs_ExtendedTags * tags,
--                                           int useReserve);
--static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
--                                int chunkInNAND, int inScan);
--
--static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
--                                         yaffs_ObjectType type);
--static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
--                                     yaffs_Object * obj);
--static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
--                                  int force, int isShrink, int shadows);
--static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
-+static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device *dev,
-+                                      const __u8 *buffer,
-+                                      yaffs_ExtendedTags *tags,
-+                                      int useReserve);
-+static int yaffs_PutChunkIntoFile(yaffs_Object *in, int chunkInInode,
-+                              int chunkInNAND, int inScan);
-+
-+static yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
-+                                      yaffs_ObjectType type);
-+static void yaffs_AddObjectToDirectory(yaffs_Object *directory,
-+                              yaffs_Object *obj);
-+static int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name,
-+                              int force, int isShrink, int shadows);
-+static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj);
- static int yaffs_CheckStructures(void);
--static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
--                            int chunkOffset, int *limit);
--static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
--
--static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
--
--static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
--static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
--                                  int lineNo);
-+static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level,
-+                      int chunkOffset, int *limit);
-+static int yaffs_DoGenericObjectDeletion(yaffs_Object *in);
-+
-+static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device *dev, int blockNo);
--static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND);
--static int yaffs_UnlinkWorker(yaffs_Object * obj);
--static void yaffs_DestroyObject(yaffs_Object * obj);
-+static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
-+                              int chunkInNAND);
--static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
--                         int chunkInObject);
-+static int yaffs_UnlinkWorker(yaffs_Object *obj);
--loff_t yaffs_GetFileSize(yaffs_Object * obj);
-+static int yaffs_TagsMatch(const yaffs_ExtendedTags *tags, int objectId,
-+                      int chunkInObject);
--static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
-+static int yaffs_AllocateChunk(yaffs_Device *dev, int useReserve,
-+                              yaffs_BlockInfo **blockUsedPtr);
--static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
-+static void yaffs_VerifyFreeChunks(yaffs_Device *dev);
- static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in);
-+static void yaffs_VerifyDirectory(yaffs_Object *directory);
- #ifdef YAFFS_PARANOID
--static int yaffs_CheckFileSanity(yaffs_Object * in);
-+static int yaffs_CheckFileSanity(yaffs_Object *in);
- #else
- #define yaffs_CheckFileSanity(in)
- #endif
--static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
--static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
-+static void yaffs_InvalidateWholeChunkCache(yaffs_Object *in);
-+static void yaffs_InvalidateChunkCache(yaffs_Object *object, int chunkId);
- static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
--static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
--                               yaffs_ExtendedTags * tags);
-+static int yaffs_FindChunkInFile(yaffs_Object *in, int chunkInInode,
-+                              yaffs_ExtendedTags *tags);
--static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos);
--static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
--                                        yaffs_FileStructure * fStruct,
--                                        __u32 chunkId);
-+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn,
-+              unsigned pos);
-+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId);
- /* Function to calculate chunk and offset */
--static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
-+static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, int *chunkOut,
-+              __u32 *offsetOut)
- {
--      if(dev->chunkShift){
--              /* Easy-peasy power of 2 case */
--              *chunk  = (__u32)(addr >> dev->chunkShift);
--              *offset = (__u32)(addr & dev->chunkMask);
--      }
--      else if(dev->crumbsPerChunk)
--      {
--              /* Case where we're using "crumbs" */
--              *offset = (__u32)(addr & dev->crumbMask);
--              addr >>= dev->crumbShift;
--              *chunk = ((__u32)addr)/dev->crumbsPerChunk;
--              *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
-+      int chunk;
-+      __u32 offset;
-+
-+      chunk  = (__u32)(addr >> dev->chunkShift);
-+
-+      if (dev->chunkDiv == 1) {
-+              /* easy power of 2 case */
-+              offset = (__u32)(addr & dev->chunkMask);
-+      } else {
-+              /* Non power-of-2 case */
-+
-+              loff_t chunkBase;
-+
-+              chunk /= dev->chunkDiv;
-+
-+              chunkBase = ((loff_t)chunk) * dev->nDataBytesPerChunk;
-+              offset = (__u32)(addr - chunkBase);
-       }
--      else
--              YBUG();
-+
-+      *chunkOut = chunk;
-+      *offsetOut = offset;
- }
--/* Function to return the number of shifts for a power of 2 greater than or equal
-- * to the given number
-+/* Function to return the number of shifts for a power of 2 greater than or
-+ * equal to the given number
-  * Note we don't try to cater for all possible numbers and this does not have to
-  * be hellishly efficient.
-  */
-@@ -153,13 +154,14 @@ static __u32 ShiftsGE(__u32 x)
-       nShifts = extraBits = 0;
--      while(x>1){
--              if(x & 1) extraBits++;
--              x>>=1;
-+      while (x > 1) {
-+              if (x & 1)
-+                      extraBits++;
-+              x >>= 1;
-               nShifts++;
-       }
--      if(extraBits)
-+      if (extraBits)
-               nShifts++;
-       return nShifts;
-@@ -168,16 +170,17 @@ static __u32 ShiftsGE(__u32 x)
- /* Function to return the number of shifts to get a 1 in bit 0
-  */
--static __u32 ShiftDiv(__u32 x)
-+static __u32 Shifts(__u32 x)
- {
-       int nShifts;
-       nShifts =  0;
--      if(!x) return 0;
-+      if (!x)
-+              return 0;
--      while( !(x&1)){
--              x>>=1;
-+      while (!(x&1)) {
-+              x >>= 1;
-               nShifts++;
-       }
-@@ -195,21 +198,25 @@ static int yaffs_InitialiseTempBuffers(y
-       int i;
-       __u8 *buf = (__u8 *)1;
--      memset(dev->tempBuffer,0,sizeof(dev->tempBuffer));
-+      memset(dev->tempBuffer, 0, sizeof(dev->tempBuffer));
-       for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
-               dev->tempBuffer[i].line = 0;    /* not in use */
-               dev->tempBuffer[i].buffer = buf =
--                  YMALLOC_DMA(dev->nDataBytesPerChunk);
-+                  YMALLOC_DMA(dev->totalBytesPerChunk);
-       }
-       return buf ? YAFFS_OK : YAFFS_FAIL;
--
- }
--static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
-+__u8 *yaffs_GetTempBuffer(yaffs_Device *dev, int lineNo)
- {
-       int i, j;
-+
-+      dev->tempInUse++;
-+      if (dev->tempInUse > dev->maxTemp)
-+              dev->maxTemp = dev->tempInUse;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].line == 0) {
-                       dev->tempBuffer[i].line = lineNo;
-@@ -227,9 +234,9 @@ static __u8 *yaffs_GetTempBuffer(yaffs_D
-       T(YAFFS_TRACE_BUFFERS,
-         (TSTR("Out of temp buffers at line %d, other held by lines:"),
-          lineNo));
--      for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-+      for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
-               T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
--      }
-+
-       T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
-       /*
-@@ -242,10 +249,13 @@ static __u8 *yaffs_GetTempBuffer(yaffs_D
- }
--static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
-+void yaffs_ReleaseTempBuffer(yaffs_Device *dev, __u8 *buffer,
-                                   int lineNo)
- {
-       int i;
-+
-+      dev->tempInUse--;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].buffer == buffer) {
-                       dev->tempBuffer[i].line = 0;
-@@ -267,27 +277,26 @@ static void yaffs_ReleaseTempBuffer(yaff
- /*
-  * Determine if we have a managed buffer.
-  */
--int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
-+int yaffs_IsManagedTempBuffer(yaffs_Device *dev, const __u8 *buffer)
- {
-       int i;
-+
-       for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-               if (dev->tempBuffer[i].buffer == buffer)
-                       return 1;
-+      }
-+      for (i = 0; i < dev->nShortOpCaches; i++) {
-+              if (dev->srCache[i].data == buffer)
-+                      return 1;
-       }
--    for (i = 0; i < dev->nShortOpCaches; i++) {
--        if( dev->srCache[i].data == buffer )
--            return 1;
--
--    }
--
--    if (buffer == dev->checkpointBuffer)
--      return 1;
--
--    T(YAFFS_TRACE_ALWAYS,
--        (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
--    return 0;
-+      if (buffer == dev->checkpointBuffer)
-+              return 1;
-+
-+      T(YAFFS_TRACE_ALWAYS,
-+              (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
-+      return 0;
- }
-@@ -296,62 +305,63 @@ int yaffs_IsManagedTempBuffer(yaffs_Devi
-  * Chunk bitmap manipulations
-  */
--static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
-+static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device *dev, int blk)
- {
-       if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
--                 blk));
-+                      (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
-+                      blk));
-               YBUG();
-       }
-       return dev->chunkBits +
--          (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
-+              (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
- }
- static Y_INLINE void yaffs_VerifyChunkBitId(yaffs_Device *dev, int blk, int chunk)
- {
--      if(blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
--         chunk < 0 || chunk >= dev->nChunksPerBlock) {
--         T(YAFFS_TRACE_ERROR,
--          (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),blk,chunk));
--          YBUG();
-+      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
-+                      chunk < 0 || chunk >= dev->nChunksPerBlock) {
-+              T(YAFFS_TRACE_ERROR,
-+              (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),
-+                      blk, chunk));
-+              YBUG();
-       }
- }
--static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
-+static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       memset(blkBits, 0, dev->chunkBitmapStride);
- }
--static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       blkBits[chunk / 8] &= ~(1 << (chunk & 7));
- }
--static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE void yaffs_SetChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       blkBits[chunk / 8] |= (1 << (chunk & 7));
- }
--static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
-+static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device *dev, int blk, int chunk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
--      yaffs_VerifyChunkBitId(dev,blk,chunk);
-+      yaffs_VerifyChunkBitId(dev, blk, chunk);
-       return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
- }
--static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
-+static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       int i;
-@@ -363,17 +373,17 @@ static Y_INLINE int yaffs_StillSomeChunk
-       return 0;
- }
--static int yaffs_CountChunkBits(yaffs_Device * dev, int blk)
-+static int yaffs_CountChunkBits(yaffs_Device *dev, int blk)
- {
-       __u8 *blkBits = yaffs_BlockBits(dev, blk);
-       int i;
-       int n = 0;
-       for (i = 0; i < dev->chunkBitmapStride; i++) {
-               __u8 x = *blkBits;
--              while(x){
--                      if(x & 1)
-+              while (x) {
-+                      if (x & 1)
-                               n++;
--                      x >>=1;
-+                      x >>= 1;
-               }
-               blkBits++;
-@@ -400,7 +410,7 @@ static int yaffs_SkipNANDVerification(ya
-       return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_NAND));
- }
--static const char * blockStateName[] = {
-+static const char *blockStateName[] = {
- "Unknown",
- "Needs scanning",
- "Scanning",
-@@ -413,64 +423,65 @@ static const char * blockStateName[] = {
- "Dead"
- };
--static void yaffs_VerifyBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-+static void yaffs_VerifyBlock(yaffs_Device *dev, yaffs_BlockInfo *bi, int n)
- {
-       int actuallyUsed;
-       int inUse;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Report illegal runtime states */
--      if(bi->blockState <0 || bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has undefined state %d"TENDSTR),n,bi->blockState));
-+      if (bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has undefined state %d"TENDSTR), n, bi->blockState));
--      switch(bi->blockState){
--       case YAFFS_BLOCK_STATE_UNKNOWN:
--       case YAFFS_BLOCK_STATE_SCANNING:
--       case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has bad run-state %s"TENDSTR),
--              n,blockStateName[bi->blockState]));
-+      switch (bi->blockState) {
-+      case YAFFS_BLOCK_STATE_UNKNOWN:
-+      case YAFFS_BLOCK_STATE_SCANNING:
-+      case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has bad run-state %s"TENDSTR),
-+              n, blockStateName[bi->blockState]));
-       }
-       /* Check pages in use and soft deletions are legal */
-       actuallyUsed = bi->pagesInUse - bi->softDeletions;
--      if(bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
-+      if (bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
-          bi->softDeletions < 0 || bi->softDeletions > dev->nChunksPerBlock ||
-          actuallyUsed < 0 || actuallyUsed > dev->nChunksPerBlock)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
--              n,bi->pagesInUse,bi->softDeletions));
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
-+              n, bi->pagesInUse, bi->softDeletions));
-       /* Check chunk bitmap legal */
--      inUse = yaffs_CountChunkBits(dev,n);
--      if(inUse != bi->pagesInUse)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
--                      n,bi->pagesInUse,inUse));
-+      inUse = yaffs_CountChunkBits(dev, n);
-+      if (inUse != bi->pagesInUse)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
-+                      n, bi->pagesInUse, inUse));
-       /* Check that the sequence number is valid.
-        * Ten million is legal, but is very unlikely
-        */
--      if(dev->isYaffs2 &&
-+      if (dev->isYaffs2 &&
-          (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
--         (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000 ))
--              T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has suspect sequence number of %d"TENDSTR),
--              n,bi->sequenceNumber));
--
-+         (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000))
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Block %d has suspect sequence number of %d"TENDSTR),
-+              n, bi->sequenceNumber));
- }
--static void yaffs_VerifyCollectedBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
-+static void yaffs_VerifyCollectedBlock(yaffs_Device *dev, yaffs_BlockInfo *bi,
-+              int n)
- {
--      yaffs_VerifyBlock(dev,bi,n);
-+      yaffs_VerifyBlock(dev, bi, n);
-       /* After collection the block should be in the erased state */
--      /* TODO: This will need to change if we do partial gc */
-+      /* This will need to change if we do partial gc */
--      if(bi->blockState != YAFFS_BLOCK_STATE_EMPTY){
--              T(YAFFS_TRACE_ERROR,(TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
--                      n,bi->blockState));
-+      if (bi->blockState != YAFFS_BLOCK_STATE_COLLECTING &&
-+                      bi->blockState != YAFFS_BLOCK_STATE_EMPTY) {
-+              T(YAFFS_TRACE_ERROR, (TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
-+                      n, bi->blockState));
-       }
- }
-@@ -480,52 +491,49 @@ static void yaffs_VerifyBlocks(yaffs_Dev
-       int nBlocksPerState[YAFFS_NUMBER_OF_BLOCK_STATES];
-       int nIllegalBlockStates = 0;
--
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
--      memset(nBlocksPerState,0,sizeof(nBlocksPerState));
--
-+      memset(nBlocksPerState, 0, sizeof(nBlocksPerState));
--      for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++){
--              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
--              yaffs_VerifyBlock(dev,bi,i);
-+      for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
-+              yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, i);
-+              yaffs_VerifyBlock(dev, bi, i);
--              if(bi->blockState >=0 && bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
-+              if (bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
-                       nBlocksPerState[bi->blockState]++;
-               else
-                       nIllegalBlockStates++;
--
-       }
--      T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
--      T(YAFFS_TRACE_VERIFY,(TSTR("Block summary"TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR(""TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR("Block summary"TENDSTR)));
--      T(YAFFS_TRACE_VERIFY,(TSTR("%d blocks have illegal states"TENDSTR),nIllegalBlockStates));
--      if(nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
--              T(YAFFS_TRACE_VERIFY,(TSTR("Too many allocating blocks"TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR("%d blocks have illegal states"TENDSTR), nIllegalBlockStates));
-+      if (nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
-+              T(YAFFS_TRACE_VERIFY, (TSTR("Too many allocating blocks"TENDSTR)));
--      for(i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
-+      for (i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
-               T(YAFFS_TRACE_VERIFY,
-                 (TSTR("%s %d blocks"TENDSTR),
--                blockStateName[i],nBlocksPerState[i]));
-+                blockStateName[i], nBlocksPerState[i]));
--      if(dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
-+      if (dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Checkpoint block count wrong dev %d count %d"TENDSTR),
-                dev->blocksInCheckpoint, nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT]));
--      if(dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
-+      if (dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Erased block count wrong dev %d count %d"TENDSTR),
-                dev->nErasedBlocks, nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY]));
--      if(nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
-+      if (nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
-               T(YAFFS_TRACE_VERIFY,
-                (TSTR("Too many collecting blocks %d (max is 1)"TENDSTR),
-                nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING]));
--      T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
-+      T(YAFFS_TRACE_VERIFY, (TSTR(""TENDSTR)));
- }
-@@ -535,26 +543,26 @@ static void yaffs_VerifyBlocks(yaffs_Dev
-  */
- static void yaffs_VerifyObjectHeader(yaffs_Object *obj, yaffs_ObjectHeader *oh, yaffs_ExtendedTags *tags, int parentCheck)
- {
--      if(yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
--      if(!(tags && obj && oh)){
--              T(YAFFS_TRACE_VERIFY,
--                              (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
--                              (__u32)tags,(__u32)obj,(__u32)oh));
-+      if (!(tags && obj && oh)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                              (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
-+                              (__u32)tags, (__u32)obj, (__u32)oh));
-               return;
-       }
--      if(oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
--         oh->type > YAFFS_OBJECT_TYPE_MAX)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
--               tags->objectId, oh->type));
--
--      if(tags->objectId != obj->objectId)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
--               tags->objectId, obj->objectId));
-+      if (oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
-+                      oh->type > YAFFS_OBJECT_TYPE_MAX)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
-+                      tags->objectId, oh->type));
-+
-+      if (tags->objectId != obj->objectId)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
-+                      tags->objectId, obj->objectId));
-       /*
-@@ -563,46 +571,43 @@ static void yaffs_VerifyObjectHeader(yaf
-        * Tests do not apply to the root object.
-        */
--      if(parentCheck && tags->objectId > 1 && !obj->parent)
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
--               tags->objectId, oh->parentObjectId));
--
--
--      if(parentCheck && obj->parent &&
--         oh->parentObjectId != obj->parent->objectId &&
--         (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
--          obj->parent->objectId != YAFFS_OBJECTID_DELETED))
--              T(YAFFS_TRACE_VERIFY,
--               (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
--               tags->objectId, oh->parentObjectId, obj->parent->objectId));
-+      if (parentCheck && tags->objectId > 1 && !obj->parent)
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
-+                      tags->objectId, oh->parentObjectId));
-+      if (parentCheck && obj->parent &&
-+                      oh->parentObjectId != obj->parent->objectId &&
-+                      (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
-+                      obj->parent->objectId != YAFFS_OBJECTID_DELETED))
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
-+                      tags->objectId, oh->parentObjectId, obj->parent->objectId));
--      if(tags->objectId > 1 && oh->name[0] == 0) /* Null name */
-+      if (tags->objectId > 1 && oh->name[0] == 0) /* Null name */
-               T(YAFFS_TRACE_VERIFY,
--              (TSTR("Obj %d header name is NULL"TENDSTR),
--               obj->objectId));
-+                      (TSTR("Obj %d header name is NULL"TENDSTR),
-+                      obj->objectId));
--      if(tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
-+      if (tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
-               T(YAFFS_TRACE_VERIFY,
--              (TSTR("Obj %d header name is 0xFF"TENDSTR),
--               obj->objectId));
-+                      (TSTR("Obj %d header name is 0xFF"TENDSTR),
-+                      obj->objectId));
- }
--static int yaffs_VerifyTnodeWorker(yaffs_Object * obj, yaffs_Tnode * tn,
--                                      __u32 level, int chunkOffset)
-+static int yaffs_VerifyTnodeWorker(yaffs_Object *obj, yaffs_Tnode *tn,
-+                                      __u32 level, int chunkOffset)
- {
-       int i;
-       yaffs_Device *dev = obj->myDev;
-       int ok = 1;
--      int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-       if (tn) {
-               if (level > 0) {
--                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
-+                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
-                               if (tn->internal[i]) {
-                                       ok = yaffs_VerifyTnodeWorker(obj,
-                                                       tn->internal[i],
-@@ -611,20 +616,19 @@ static int yaffs_VerifyTnodeWorker(yaffs
-                               }
-                       }
-               } else if (level == 0) {
--                      int i;
-                       yaffs_ExtendedTags tags;
-                       __u32 objectId = obj->objectId;
-                       chunkOffset <<=  YAFFS_TNODES_LEVEL0_BITS;
--                      for(i = 0; i < YAFFS_NTNODES_LEVEL0; i++){
--                              __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                      for (i = 0; i < YAFFS_NTNODES_LEVEL0; i++) {
-+                              __u32 theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
--                              if(theChunk > 0){
-+                              if (theChunk > 0) {
-                                       /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),tags.objectId,tags.chunkId,theChunk)); */
--                                      yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
--                                      if(tags.objectId != objectId || tags.chunkId != chunkOffset){
--                                              T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-+                                      yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, &tags);
-+                                      if (tags.objectId != objectId || tags.chunkId != chunkOffset) {
-+                                              T(~0, (TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-                                                       objectId, chunkOffset, theChunk,
-                                                       tags.objectId, tags.chunkId));
-                                       }
-@@ -646,13 +650,15 @@ static void yaffs_VerifyFile(yaffs_Objec
-       __u32 lastChunk;
-       __u32 x;
-       __u32 i;
--      int ok;
-       yaffs_Device *dev;
-       yaffs_ExtendedTags tags;
-       yaffs_Tnode *tn;
-       __u32 objectId;
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (!obj)
-+              return;
-+
-+      if (yaffs_SkipVerification(obj->myDev))
-               return;
-       dev = obj->myDev;
-@@ -662,17 +668,17 @@ static void yaffs_VerifyFile(yaffs_Objec
-       lastChunk =  obj->variant.fileVariant.fileSize / dev->nDataBytesPerChunk + 1;
-       x = lastChunk >> YAFFS_TNODES_LEVEL0_BITS;
-       requiredTallness = 0;
--      while (x> 0) {
-+      while (x > 0) {
-               x >>= YAFFS_TNODES_INTERNAL_BITS;
-               requiredTallness++;
-       }
-       actualTallness = obj->variant.fileVariant.topLevel;
--      if(requiredTallness > actualTallness )
-+      if (requiredTallness > actualTallness)
-               T(YAFFS_TRACE_VERIFY,
-               (TSTR("Obj %d had tnode tallness %d, needs to be %d"TENDSTR),
--               obj->objectId,actualTallness, requiredTallness));
-+               obj->objectId, actualTallness, requiredTallness));
-       /* Check that the chunks in the tnode tree are all correct.
-@@ -680,39 +686,31 @@ static void yaffs_VerifyFile(yaffs_Objec
-        * checking the tags for every chunk match.
-        */
--      if(yaffs_SkipNANDVerification(dev))
-+      if (yaffs_SkipNANDVerification(dev))
-               return;
--      for(i = 1; i <= lastChunk; i++){
--              tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant,i);
-+      for (i = 1; i <= lastChunk; i++) {
-+              tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant, i);
-               if (tn) {
--                      __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
--                      if(theChunk > 0){
-+                      __u32 theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-+                      if (theChunk > 0) {
-                               /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),objectId,i,theChunk)); */
--                              yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
--                              if(tags.objectId != objectId || tags.chunkId != i){
--                                      T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-+                              yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL, &tags);
-+                              if (tags.objectId != objectId || tags.chunkId != i) {
-+                                      T(~0, (TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
-                                               objectId, i, theChunk,
-                                               tags.objectId, tags.chunkId));
-                               }
-                       }
-               }
--
-       }
--
- }
--static void yaffs_VerifyDirectory(yaffs_Object *obj)
--{
--      if(obj && yaffs_SkipVerification(obj->myDev))
--              return;
--
--}
- static void yaffs_VerifyHardLink(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
-       /* Verify sane equivalent object */
-@@ -720,7 +718,7 @@ static void yaffs_VerifyHardLink(yaffs_O
- static void yaffs_VerifySymlink(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
-       /* Verify symlink string */
-@@ -728,7 +726,7 @@ static void yaffs_VerifySymlink(yaffs_Ob
- static void yaffs_VerifySpecial(yaffs_Object *obj)
- {
--      if(obj && yaffs_SkipVerification(obj->myDev))
-+      if (obj && yaffs_SkipVerification(obj->myDev))
-               return;
- }
-@@ -740,14 +738,19 @@ static void yaffs_VerifyObject(yaffs_Obj
-       __u32 chunkMax;
-       __u32 chunkIdOk;
--      __u32 chunkIsLive;
-+      __u32 chunkInRange;
-+      __u32 chunkShouldNotBeDeleted;
-+      __u32 chunkValid;
-+
-+      if (!obj)
-+              return;
--      if(!obj)
-+      if (obj->beingCreated)
-               return;
-       dev = obj->myDev;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Check sane object header chunk */
-@@ -755,50 +758,54 @@ static void yaffs_VerifyObject(yaffs_Obj
-       chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
-       chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
--      chunkIdOk = (obj->chunkId >= chunkMin && obj->chunkId <= chunkMax);
--      chunkIsLive = chunkIdOk &&
-+      chunkInRange = (((unsigned)(obj->hdrChunk)) >= chunkMin && ((unsigned)(obj->hdrChunk)) <= chunkMax);
-+      chunkIdOk = chunkInRange || obj->hdrChunk == 0;
-+      chunkValid = chunkInRange &&
-                       yaffs_CheckChunkBit(dev,
--                                          obj->chunkId / dev->nChunksPerBlock,
--                                          obj->chunkId % dev->nChunksPerBlock);
--      if(!obj->fake &&
--          (!chunkIdOk || !chunkIsLive)) {
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
--         obj->objectId,obj->chunkId,
--         chunkIdOk ? "" : ",out of range",
--         chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
-+                                      obj->hdrChunk / dev->nChunksPerBlock,
-+                                      obj->hdrChunk % dev->nChunksPerBlock);
-+      chunkShouldNotBeDeleted = chunkInRange && !chunkValid;
-+
-+      if (!obj->fake &&
-+                      (!chunkIdOk || chunkShouldNotBeDeleted)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
-+                      obj->objectId, obj->hdrChunk,
-+                      chunkIdOk ? "" : ",out of range",
-+                      chunkShouldNotBeDeleted ? ",marked as deleted" : ""));
-       }
--      if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
-+      if (chunkValid && !yaffs_SkipNANDVerification(dev)) {
-               yaffs_ExtendedTags tags;
-               yaffs_ObjectHeader *oh;
--              __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
-+              __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-               oh = (yaffs_ObjectHeader *)buffer;
--              yaffs_ReadChunkWithTagsFromNAND(dev, obj->chunkId,buffer, &tags);
-+              yaffs_ReadChunkWithTagsFromNAND(dev, obj->hdrChunk, buffer,
-+                              &tags);
--              yaffs_VerifyObjectHeader(obj,oh,&tags,1);
-+              yaffs_VerifyObjectHeader(obj, oh, &tags, 1);
--              yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
-+              yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-       }
-       /* Verify it has a parent */
--      if(obj && !obj->fake &&
--         (!obj->parent || obj->parent->myDev != dev)){
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
--         obj->objectId,obj->parent));
-+      if (obj && !obj->fake &&
-+                      (!obj->parent || obj->parent->myDev != dev)) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
-+                      obj->objectId, obj->parent));
-       }
-       /* Verify parent is a directory */
--      if(obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY){
--         T(YAFFS_TRACE_VERIFY,
--         (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
--         obj->objectId,obj->parent->variantType));
-+      if (obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_VERIFY,
-+                      (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
-+                      obj->objectId, obj->parent->variantType));
-       }
--      switch(obj->variantType){
-+      switch (obj->variantType) {
-       case YAFFS_OBJECT_TYPE_FILE:
-               yaffs_VerifyFile(obj);
-               break;
-@@ -818,33 +825,30 @@ static void yaffs_VerifyObject(yaffs_Obj
-       default:
-               T(YAFFS_TRACE_VERIFY,
-               (TSTR("Obj %d has illegaltype %d"TENDSTR),
--              obj->objectId,obj->variantType));
-+              obj->objectId, obj->variantType));
-               break;
-       }
--
--
- }
- static void yaffs_VerifyObjects(yaffs_Device *dev)
- {
-       yaffs_Object *obj;
-       int i;
--      struct list_head *lh;
-+      struct ylist_head *lh;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       /* Iterate through the objects in each hash entry */
--       for(i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++){
--              list_for_each(lh, &dev->objectBucket[i].list) {
-+      for (i = 0; i <  YAFFS_NOBJECT_BUCKETS; i++) {
-+              ylist_for_each(lh, &dev->objectBucket[i].list) {
-                       if (lh) {
--                              obj = list_entry(lh, yaffs_Object, hashLink);
-+                              obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               yaffs_VerifyObject(obj);
-                       }
-               }
--       }
--
-+      }
- }
-@@ -855,19 +859,20 @@ static void yaffs_VerifyObjects(yaffs_De
- static Y_INLINE int yaffs_HashFunction(int n)
- {
-       n = abs(n);
--      return (n % YAFFS_NOBJECT_BUCKETS);
-+      return n % YAFFS_NOBJECT_BUCKETS;
- }
- /*
-- * Access functions to useful fake objects
-+ * Access functions to useful fake objects.
-+ * Note that root might have a presence in NAND if permissions are set.
-  */
--yaffs_Object *yaffs_Root(yaffs_Device * dev)
-+yaffs_Object *yaffs_Root(yaffs_Device *dev)
- {
-       return dev->rootDir;
- }
--yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
-+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev)
- {
-       return dev->lostNFoundDir;
- }
-@@ -877,7 +882,7 @@ yaffs_Object *yaffs_LostNFound(yaffs_Dev
-  *  Erased NAND checking functions
-  */
--int yaffs_CheckFF(__u8 * buffer, int nBytes)
-+int yaffs_CheckFF(__u8 *buffer, int nBytes)
- {
-       /* Horrible, slow implementation */
-       while (nBytes--) {
-@@ -889,9 +894,8 @@ int yaffs_CheckFF(__u8 * buffer, int nBy
- }
- static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND)
-+                              int chunkInNAND)
- {
--
-       int retval = YAFFS_OK;
-       __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
-       yaffs_ExtendedTags tags;
-@@ -899,10 +903,9 @@ static int yaffs_CheckChunkErased(struct
-       result = yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
--      if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
-+      if (tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
-               retval = YAFFS_FAIL;
--
-       if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
-               T(YAFFS_TRACE_NANDACCESS,
-                 (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
-@@ -915,11 +918,10 @@ static int yaffs_CheckChunkErased(struct
- }
--
- static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
--                                           const __u8 * data,
--                                           yaffs_ExtendedTags * tags,
--                                           int useReserve)
-+                                      const __u8 *data,
-+                                      yaffs_ExtendedTags *tags,
-+                                      int useReserve)
- {
-       int attempts = 0;
-       int writeOk = 0;
-@@ -972,7 +974,7 @@ static int yaffs_WriteNewChunkWithTagsTo
-                       erasedOk = yaffs_CheckChunkErased(dev, chunk);
-                       if (erasedOk != YAFFS_OK) {
-                               T(YAFFS_TRACE_ERROR,
--                              (TSTR ("**>> yaffs chunk %d was not erased"
-+                              (TSTR("**>> yaffs chunk %d was not erased"
-                               TENDSTR), chunk));
-                               /* try another chunk */
-@@ -992,7 +994,11 @@ static int yaffs_WriteNewChunkWithTagsTo
-               /* Copy the data into the robustification buffer */
-               yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
--      } while (writeOk != YAFFS_OK && attempts < yaffs_wr_attempts);
-+      } while (writeOk != YAFFS_OK &&
-+              (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
-+
-+      if (!writeOk)
-+              chunk = -1;
-       if (attempts > 1) {
-               T(YAFFS_TRACE_ERROR,
-@@ -1009,13 +1015,35 @@ static int yaffs_WriteNewChunkWithTagsTo
-  * Block retiring for handling a broken block.
-  */
--static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
-+static void yaffs_RetireBlock(yaffs_Device *dev, int blockInNAND)
- {
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
-       yaffs_InvalidateCheckpoint(dev);
--      yaffs_MarkBlockBad(dev, blockInNAND);
-+      if (yaffs_MarkBlockBad(dev, blockInNAND) != YAFFS_OK) {
-+              if (yaffs_EraseBlockInNAND(dev, blockInNAND) != YAFFS_OK) {
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR(
-+                              "yaffs: Failed to mark bad and erase block %d"
-+                              TENDSTR), blockInNAND));
-+              } else {
-+                      yaffs_ExtendedTags tags;
-+                      int chunkId = blockInNAND * dev->nChunksPerBlock;
-+
-+                      __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-+
-+                      memset(buffer, 0xff, dev->nDataBytesPerChunk);
-+                      yaffs_InitialiseTags(&tags);
-+                      tags.sequenceNumber = YAFFS_SEQUENCE_BAD_BLOCK;
-+                      if (dev->writeChunkWithTagsToNAND(dev, chunkId -
-+                              dev->chunkOffset, buffer, &tags) != YAFFS_OK)
-+                              T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Failed to "
-+                                      TCONT("write bad block marker to block %d")
-+                                      TENDSTR), blockInNAND));
-+
-+                      yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
-+              }
-+      }
-       bi->blockState = YAFFS_BLOCK_STATE_DEAD;
-       bi->gcPrioritise = 0;
-@@ -1029,49 +1057,45 @@ static void yaffs_RetireBlock(yaffs_Devi
-  *
-  */
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_ExtendedTags * tags)
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags)
- {
- }
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_ExtendedTags * tags)
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                              const yaffs_ExtendedTags *tags)
- {
- }
- void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
- {
--      if(!bi->gcPrioritise){
-+      if (!bi->gcPrioritise) {
-               bi->gcPrioritise = 1;
-               dev->hasPendingPrioritisedGCs = 1;
--              bi->chunkErrorStrikes ++;
-+              bi->chunkErrorStrikes++;
--              if(bi->chunkErrorStrikes > 3){
-+              if (bi->chunkErrorStrikes > 3) {
-                       bi->needsRetiring = 1; /* Too many stikes, so retire this */
-                       T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
-               }
--
-       }
- }
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND,
-+              int erasedOk)
- {
--
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
--      yaffs_HandleChunkError(dev,bi);
-+      yaffs_HandleChunkError(dev, bi);
--
--      if(erasedOk ) {
-+      if (erasedOk) {
-               /* Was an actual write failure, so mark the block for retirement  */
-               bi->needsRetiring = 1;
-               T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
-                 (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
--
--
-       }
-       /* Delete the chunk */
-@@ -1081,12 +1105,12 @@ static void yaffs_HandleWriteChunkError(
- /*---------------- Name handling functions ------------*/
--static __u16 yaffs_CalcNameSum(const YCHAR * name)
-+static __u16 yaffs_CalcNameSum(const YCHAR *name)
- {
-       __u16 sum = 0;
-       __u16 i = 1;
--      YUCHAR *bname = (YUCHAR *) name;
-+      const YUCHAR *bname = (const YUCHAR *) name;
-       if (bname) {
-               while ((*bname) && (i < (YAFFS_MAX_NAME_LENGTH/2))) {
-@@ -1102,14 +1126,14 @@ static __u16 yaffs_CalcNameSum(const YCH
-       return sum;
- }
--static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
-+static void yaffs_SetObjectName(yaffs_Object *obj, const YCHAR *name)
- {
- #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
--      if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
-+      memset(obj->shortName, 0, sizeof(YCHAR) * (YAFFS_SHORT_NAME_LENGTH+1));
-+      if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH)
-               yaffs_strcpy(obj->shortName, name);
--      } else {
-+      else
-               obj->shortName[0] = _Y('\0');
--      }
- #endif
-       obj->sum = yaffs_CalcNameSum(name);
- }
-@@ -1126,7 +1150,7 @@ static void yaffs_SetObjectName(yaffs_Ob
-  * Don't use this function directly
-  */
--static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
-+static int yaffs_CreateTnodes(yaffs_Device *dev, int nTnodes)
- {
-       int i;
-       int tnodeSize;
-@@ -1143,6 +1167,9 @@ static int yaffs_CreateTnodes(yaffs_Devi
-        * Must be a multiple of 32-bits  */
-       tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-       /* make these things */
-       newTnodes = YMALLOC(nTnodes * tnodeSize);
-@@ -1150,7 +1177,7 @@ static int yaffs_CreateTnodes(yaffs_Devi
-       if (!newTnodes) {
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
-+                      (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
-               return YAFFS_FAIL;
-       }
-@@ -1170,7 +1197,7 @@ static int yaffs_CreateTnodes(yaffs_Devi
-       dev->freeTnodes = newTnodes;
- #else
-       /* New hookup for wide tnodes */
--      for(i = 0; i < nTnodes -1; i++) {
-+      for (i = 0; i < nTnodes - 1; i++) {
-               curr = (yaffs_Tnode *) &mem[i * tnodeSize];
-               next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
-               curr->internal[0] = next;
-@@ -1197,7 +1224,6 @@ static int yaffs_CreateTnodes(yaffs_Devi
-                 (TSTR
-                  ("yaffs: Could not add tnodes to management list" TENDSTR)));
-                  return YAFFS_FAIL;
--
-       } else {
-               tnl->tnodes = newTnodes;
-               tnl->next = dev->allocatedTnodeList;
-@@ -1211,14 +1237,13 @@ static int yaffs_CreateTnodes(yaffs_Devi
- /* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
--static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
-+static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device *dev)
- {
-       yaffs_Tnode *tn = NULL;
-       /* If there are none left make more */
--      if (!dev->freeTnodes) {
-+      if (!dev->freeTnodes)
-               yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
--      }
-       if (dev->freeTnodes) {
-               tn = dev->freeTnodes;
-@@ -1233,21 +1258,27 @@ static yaffs_Tnode *yaffs_GetTnodeRaw(ya
-               dev->nFreeTnodes--;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
-+
-       return tn;
- }
--static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
-+static yaffs_Tnode *yaffs_GetTnode(yaffs_Device *dev)
- {
-       yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
--      if(tn)
--              memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-+      if (tn)
-+              memset(tn, 0, tnodeSize);
-       return tn;
- }
- /* FreeTnode frees up a tnode and puts it back on the free list */
--static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
-+static void yaffs_FreeTnode(yaffs_Device *dev, yaffs_Tnode *tn)
- {
-       if (tn) {
- #ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
-@@ -1262,9 +1293,10 @@ static void yaffs_FreeTnode(yaffs_Device
-               dev->freeTnodes = tn;
-               dev->nFreeTnodes++;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
- }
--static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
-+static void yaffs_DeinitialiseTnodes(yaffs_Device *dev)
- {
-       /* Free the list of allocated tnodes */
-       yaffs_TnodeList *tmp;
-@@ -1282,71 +1314,72 @@ static void yaffs_DeinitialiseTnodes(yaf
-       dev->nFreeTnodes = 0;
- }
--static void yaffs_InitialiseTnodes(yaffs_Device * dev)
-+static void yaffs_InitialiseTnodes(yaffs_Device *dev)
- {
-       dev->allocatedTnodeList = NULL;
-       dev->freeTnodes = NULL;
-       dev->nFreeTnodes = 0;
-       dev->nTnodesCreated = 0;
--
- }
--void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
-+void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos,
-+              unsigned val)
- {
--  __u32 *map = (__u32 *)tn;
--  __u32 bitInMap;
--  __u32 bitInWord;
--  __u32 wordInMap;
--  __u32 mask;
-+      __u32 *map = (__u32 *)tn;
-+      __u32 bitInMap;
-+      __u32 bitInWord;
-+      __u32 wordInMap;
-+      __u32 mask;
--  pos &= YAFFS_TNODES_LEVEL0_MASK;
--  val >>= dev->chunkGroupBits;
-+      pos &= YAFFS_TNODES_LEVEL0_MASK;
-+      val >>= dev->chunkGroupBits;
--  bitInMap = pos * dev->tnodeWidth;
--  wordInMap = bitInMap /32;
--  bitInWord = bitInMap & (32 -1);
-+      bitInMap = pos * dev->tnodeWidth;
-+      wordInMap = bitInMap / 32;
-+      bitInWord = bitInMap & (32 - 1);
--  mask = dev->tnodeMask << bitInWord;
-+      mask = dev->tnodeMask << bitInWord;
--  map[wordInMap] &= ~mask;
--  map[wordInMap] |= (mask & (val << bitInWord));
-+      map[wordInMap] &= ~mask;
-+      map[wordInMap] |= (mask & (val << bitInWord));
--  if(dev->tnodeWidth > (32-bitInWord)) {
--    bitInWord = (32 - bitInWord);
--    wordInMap++;;
--    mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
--    map[wordInMap] &= ~mask;
--    map[wordInMap] |= (mask & (val >> bitInWord));
--  }
-+      if (dev->tnodeWidth > (32 - bitInWord)) {
-+              bitInWord = (32 - bitInWord);
-+              wordInMap++;;
-+              mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
-+              map[wordInMap] &= ~mask;
-+              map[wordInMap] |= (mask & (val >> bitInWord));
-+      }
- }
--static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
-+static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn,
-+              unsigned pos)
- {
--  __u32 *map = (__u32 *)tn;
--  __u32 bitInMap;
--  __u32 bitInWord;
--  __u32 wordInMap;
--  __u32 val;
-+      __u32 *map = (__u32 *)tn;
-+      __u32 bitInMap;
-+      __u32 bitInWord;
-+      __u32 wordInMap;
-+      __u32 val;
--  pos &= YAFFS_TNODES_LEVEL0_MASK;
-+      pos &= YAFFS_TNODES_LEVEL0_MASK;
--  bitInMap = pos * dev->tnodeWidth;
--  wordInMap = bitInMap /32;
--  bitInWord = bitInMap & (32 -1);
-+      bitInMap = pos * dev->tnodeWidth;
-+      wordInMap = bitInMap / 32;
-+      bitInWord = bitInMap & (32 - 1);
--  val = map[wordInMap] >> bitInWord;
-+      val = map[wordInMap] >> bitInWord;
--  if(dev->tnodeWidth > (32-bitInWord)) {
--    bitInWord = (32 - bitInWord);
--    wordInMap++;;
--    val |= (map[wordInMap] << bitInWord);
--  }
-+      if      (dev->tnodeWidth > (32 - bitInWord)) {
-+              bitInWord = (32 - bitInWord);
-+              wordInMap++;;
-+              val |= (map[wordInMap] << bitInWord);
-+      }
--  val &= dev->tnodeMask;
--  val <<= dev->chunkGroupBits;
-+      val &= dev->tnodeMask;
-+      val <<= dev->chunkGroupBits;
--  return val;
-+      return val;
- }
- /* ------------------- End of individual tnode manipulation -----------------*/
-@@ -1357,24 +1390,21 @@ static __u32 yaffs_GetChunkGroupBase(yaf
-  */
- /* FindLevel0Tnode finds the level 0 tnode, if one exists. */
--static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
--                                        yaffs_FileStructure * fStruct,
--                                        __u32 chunkId)
-+static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId)
- {
--
-       yaffs_Tnode *tn = fStruct->top;
-       __u32 i;
-       int requiredTallness;
-       int level = fStruct->topLevel;
-       /* Check sane level and chunk Id */
--      if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
-+      if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL)
-               return NULL;
--      }
--      if (chunkId > YAFFS_MAX_CHUNK_ID) {
-+      if (chunkId > YAFFS_MAX_CHUNK_ID)
-               return NULL;
--      }
-       /* First check we're tall enough (ie enough topLevel) */
-@@ -1385,22 +1415,17 @@ static yaffs_Tnode *yaffs_FindLevel0Tnod
-               requiredTallness++;
-       }
--      if (requiredTallness > fStruct->topLevel) {
--              /* Not tall enough, so we can't find it, return NULL. */
--              return NULL;
--      }
-+      if (requiredTallness > fStruct->topLevel)
-+              return NULL; /* Not tall enough, so we can't find it */
-       /* Traverse down to level 0 */
-       while (level > 0 && tn) {
--              tn = tn->
--                  internal[(chunkId >>
--                             ( YAFFS_TNODES_LEVEL0_BITS +
--                               (level - 1) *
--                               YAFFS_TNODES_INTERNAL_BITS)
--                            ) &
--                           YAFFS_TNODES_INTERNAL_MASK];
-+              tn = tn->internal[(chunkId >>
-+                      (YAFFS_TNODES_LEVEL0_BITS +
-+                              (level - 1) *
-+                              YAFFS_TNODES_INTERNAL_BITS)) &
-+                      YAFFS_TNODES_INTERNAL_MASK];
-               level--;
--
-       }
-       return tn;
-@@ -1417,12 +1442,11 @@ static yaffs_Tnode *yaffs_FindLevel0Tnod
-  *  be plugged into the ttree.
-  */
--static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
--                                             yaffs_FileStructure * fStruct,
--                                             __u32 chunkId,
--                                             yaffs_Tnode *passedTn)
-+static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device *dev,
-+                                      yaffs_FileStructure *fStruct,
-+                                      __u32 chunkId,
-+                                      yaffs_Tnode *passedTn)
- {
--
-       int requiredTallness;
-       int i;
-       int l;
-@@ -1432,13 +1456,11 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       /* Check sane level and page Id */
--      if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
-+      if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL)
-               return NULL;
--      }
--      if (chunkId > YAFFS_MAX_CHUNK_ID) {
-+      if (chunkId > YAFFS_MAX_CHUNK_ID)
-               return NULL;
--      }
-       /* First check we're tall enough (ie enough topLevel) */
-@@ -1451,7 +1473,7 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       if (requiredTallness > fStruct->topLevel) {
--              /* Not tall enough,gotta make the tree taller */
-+              /* Not tall enough, gotta make the tree taller */
-               for (i = fStruct->topLevel; i < requiredTallness; i++) {
-                       tn = yaffs_GetTnode(dev);
-@@ -1473,27 +1495,27 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-       l = fStruct->topLevel;
-       tn = fStruct->top;
--      if(l > 0) {
-+      if (l > 0) {
-               while (l > 0 && tn) {
-                       x = (chunkId >>
--                           ( YAFFS_TNODES_LEVEL0_BITS +
-+                           (YAFFS_TNODES_LEVEL0_BITS +
-                             (l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
-                           YAFFS_TNODES_INTERNAL_MASK;
--                      if((l>1) && !tn->internal[x]){
-+                      if ((l > 1) && !tn->internal[x]) {
-                               /* Add missing non-level-zero tnode */
-                               tn->internal[x] = yaffs_GetTnode(dev);
--                      } else if(l == 1) {
-+                      } else if (l == 1) {
-                               /* Looking from level 1 at level 0 */
--                              if (passedTn) {
-+                              if (passedTn) {
-                                       /* If we already have one, then release it.*/
--                                      if(tn->internal[x])
--                                              yaffs_FreeTnode(dev,tn->internal[x]);
-+                                      if (tn->internal[x])
-+                                              yaffs_FreeTnode(dev, tn->internal[x]);
-                                       tn->internal[x] = passedTn;
--                              } else if(!tn->internal[x]) {
-+                              } else if (!tn->internal[x]) {
-                                       /* Don't have one, none passed in */
-                                       tn->internal[x] = yaffs_GetTnode(dev);
-                               }
-@@ -1504,31 +1526,29 @@ static yaffs_Tnode *yaffs_AddOrFindLevel
-               }
-       } else {
-               /* top is level 0 */
--              if(passedTn) {
--                      memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
--                      yaffs_FreeTnode(dev,passedTn);
-+              if (passedTn) {
-+                      memcpy(tn, passedTn, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+                      yaffs_FreeTnode(dev, passedTn);
-               }
-       }
-       return tn;
- }
--static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
--                                yaffs_ExtendedTags * tags, int objectId,
--                                int chunkInInode)
-+static int yaffs_FindChunkInGroup(yaffs_Device *dev, int theChunk,
-+                              yaffs_ExtendedTags *tags, int objectId,
-+                              int chunkInInode)
- {
-       int j;
-       for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
--              if (yaffs_CheckChunkBit
--                  (dev, theChunk / dev->nChunksPerBlock,
--                   theChunk % dev->nChunksPerBlock)) {
-+              if (yaffs_CheckChunkBit(dev, theChunk / dev->nChunksPerBlock,
-+                              theChunk % dev->nChunksPerBlock)) {
-                       yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
-                                                       tags);
-                       if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
-                               /* found it; */
-                               return theChunk;
--
-                       }
-               }
-               theChunk++;
-@@ -1543,7 +1563,7 @@ static int yaffs_FindChunkInGroup(yaffs_
-  * Returns 0 if it stopped early due to hitting the limit and the delete is incomplete.
-  */
--static int yaffs_DeleteWorker(yaffs_Object * in, yaffs_Tnode * tn, __u32 level,
-+static int yaffs_DeleteWorker(yaffs_Object *in, yaffs_Tnode *tn, __u32 level,
-                             int chunkOffset, int *limit)
- {
-       int i;
-@@ -1557,7 +1577,6 @@ static int yaffs_DeleteWorker(yaffs_Obje
-       if (tn) {
-               if (level > 0) {
--
-                       for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
-                            i--) {
-                               if (tn->internal[i]) {
-@@ -1565,17 +1584,17 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               allDone = 0;
-                                       } else {
-                                               allDone =
--                                                  yaffs_DeleteWorker(in,
--                                                                     tn->
--                                                                     internal
--                                                                     [i],
--                                                                     level -
--                                                                     1,
--                                                                     (chunkOffset
-+                                                      yaffs_DeleteWorker(in,
-+                                                              tn->
-+                                                              internal
-+                                                              [i],
-+                                                              level -
-+                                                              1,
-+                                                              (chunkOffset
-                                                                       <<
-                                                                       YAFFS_TNODES_INTERNAL_BITS)
--                                                                     + i,
--                                                                     limit);
-+                                                              + i,
-+                                                              limit);
-                                       }
-                                       if (allDone) {
-                                               yaffs_FreeTnode(dev,
-@@ -1584,27 +1603,25 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               tn->internal[i] = NULL;
-                                       }
-                               }
--
-                       }
-                       return (allDone) ? 1 : 0;
-               } else if (level == 0) {
-                       int hitLimit = 0;
-                       for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0 && !hitLimit;
--                           i--) {
--                              theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                                      i--) {
-+                              theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-                               if (theChunk) {
--                                      chunkInInode =
--                                          (chunkOffset <<
--                                           YAFFS_TNODES_LEVEL0_BITS) + i;
-+                                      chunkInInode = (chunkOffset <<
-+                                              YAFFS_TNODES_LEVEL0_BITS) + i;
-                                       foundChunk =
--                                          yaffs_FindChunkInGroup(dev,
--                                                                 theChunk,
--                                                                 &tags,
--                                                                 in->objectId,
--                                                                 chunkInInode);
-+                                              yaffs_FindChunkInGroup(dev,
-+                                                              theChunk,
-+                                                              &tags,
-+                                                              in->objectId,
-+                                                              chunkInInode);
-                                       if (foundChunk > 0) {
-                                               yaffs_DeleteChunk(dev,
-@@ -1613,14 +1630,13 @@ static int yaffs_DeleteWorker(yaffs_Obje
-                                               in->nDataChunks--;
-                                               if (limit) {
-                                                       *limit = *limit - 1;
--                                                      if (*limit <= 0) {
-+                                                      if (*limit <= 0)
-                                                               hitLimit = 1;
--                                                      }
-                                               }
-                                       }
--                                      yaffs_PutLevel0Tnode(dev,tn,i,0);
-+                                      yaffs_PutLevel0Tnode(dev, tn, i, 0);
-                               }
-                       }
-@@ -1634,9 +1650,8 @@ static int yaffs_DeleteWorker(yaffs_Obje
- }
--static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
-+static void yaffs_SoftDeleteChunk(yaffs_Device *dev, int chunk)
- {
--
-       yaffs_BlockInfo *theBlock;
-       T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
-@@ -1654,7 +1669,7 @@ static void yaffs_SoftDeleteChunk(yaffs_
-  * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
-  */
--static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
-+static int yaffs_SoftDeleteWorker(yaffs_Object *in, yaffs_Tnode *tn,
-                                 __u32 level, int chunkOffset)
- {
-       int i;
-@@ -1691,14 +1706,14 @@ static int yaffs_SoftDeleteWorker(yaffs_
-               } else if (level == 0) {
-                       for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
--                              theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
-+                              theChunk = yaffs_GetChunkGroupBase(dev, tn, i);
-                               if (theChunk) {
-                                       /* Note this does not find the real chunk, only the chunk group.
-                                        * We make an assumption that a chunk group is not larger than
-                                        * a block.
-                                        */
-                                       yaffs_SoftDeleteChunk(dev, theChunk);
--                                      yaffs_PutLevel0Tnode(dev,tn,i,0);
-+                                      yaffs_PutLevel0Tnode(dev, tn, i, 0);
-                               }
-                       }
-@@ -1712,7 +1727,7 @@ static int yaffs_SoftDeleteWorker(yaffs_
- }
--static void yaffs_SoftDeleteFile(yaffs_Object * obj)
-+static void yaffs_SoftDeleteFile(yaffs_Object *obj)
- {
-       if (obj->deleted &&
-           obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
-@@ -1746,8 +1761,8 @@ static void yaffs_SoftDeleteFile(yaffs_O
-  * by a special case.
-  */
--static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
--                                    __u32 level, int del0)
-+static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device *dev, yaffs_Tnode *tn,
-+                              __u32 level, int del0)
- {
-       int i;
-       int hasData;
-@@ -1763,9 +1778,8 @@ static yaffs_Tnode *yaffs_PruneWorker(ya
-                                                     (i == 0) ? del0 : 1);
-                       }
--                      if (tn->internal[i]) {
-+                      if (tn->internal[i])
-                               hasData++;
--                      }
-               }
-               if (hasData == 0 && del0) {
-@@ -1781,8 +1795,8 @@ static yaffs_Tnode *yaffs_PruneWorker(ya
- }
--static int yaffs_PruneFileStructure(yaffs_Device * dev,
--                                  yaffs_FileStructure * fStruct)
-+static int yaffs_PruneFileStructure(yaffs_Device *dev,
-+                              yaffs_FileStructure *fStruct)
- {
-       int i;
-       int hasData;
-@@ -1805,9 +1819,8 @@ static int yaffs_PruneFileStructure(yaff
-                       hasData = 0;
-                       for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
--                              if (tn->internal[i]) {
-+                              if (tn->internal[i])
-                                       hasData++;
--                              }
-                       }
-                       if (!hasData) {
-@@ -1828,7 +1841,7 @@ static int yaffs_PruneFileStructure(yaff
- /* yaffs_CreateFreeObjects creates a bunch more objects and
-  * adds them to the object free list.
-  */
--static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
-+static int yaffs_CreateFreeObjects(yaffs_Device *dev, int nObjects)
- {
-       int i;
-       yaffs_Object *newObjects;
-@@ -1842,9 +1855,9 @@ static int yaffs_CreateFreeObjects(yaffs
-       list = YMALLOC(sizeof(yaffs_ObjectList));
-       if (!newObjects || !list) {
--              if(newObjects)
-+              if (newObjects)
-                       YFREE(newObjects);
--              if(list)
-+              if (list)
-                       YFREE(list);
-               T(YAFFS_TRACE_ALLOCATE,
-                 (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
-@@ -1854,7 +1867,7 @@ static int yaffs_CreateFreeObjects(yaffs
-       /* Hook them into the free list */
-       for (i = 0; i < nObjects - 1; i++) {
-               newObjects[i].siblings.next =
--                  (struct list_head *)(&newObjects[i + 1]);
-+                              (struct ylist_head *)(&newObjects[i + 1]);
-       }
-       newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
-@@ -1873,85 +1886,109 @@ static int yaffs_CreateFreeObjects(yaffs
- /* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
--static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
-+static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device *dev)
- {
-       yaffs_Object *tn = NULL;
-+#ifdef VALGRIND_TEST
-+      tn = YMALLOC(sizeof(yaffs_Object));
-+#else
-       /* If there are none left make more */
--      if (!dev->freeObjects) {
-+      if (!dev->freeObjects)
-               yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
--      }
-       if (dev->freeObjects) {
-               tn = dev->freeObjects;
-               dev->freeObjects =
--                  (yaffs_Object *) (dev->freeObjects->siblings.next);
-+                      (yaffs_Object *) (dev->freeObjects->siblings.next);
-               dev->nFreeObjects--;
--
-+      }
-+#endif
-+      if (tn) {
-               /* Now sweeten it up... */
-               memset(tn, 0, sizeof(yaffs_Object));
-+              tn->beingCreated = 1;
-+
-               tn->myDev = dev;
--              tn->chunkId = -1;
-+              tn->hdrChunk = 0;
-               tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
--              INIT_LIST_HEAD(&(tn->hardLinks));
--              INIT_LIST_HEAD(&(tn->hashLink));
--              INIT_LIST_HEAD(&tn->siblings);
-+              YINIT_LIST_HEAD(&(tn->hardLinks));
-+              YINIT_LIST_HEAD(&(tn->hashLink));
-+              YINIT_LIST_HEAD(&tn->siblings);
-+
-+
-+              /* Now make the directory sane */
-+              if (dev->rootDir) {
-+                      tn->parent = dev->rootDir;
-+                      ylist_add(&(tn->siblings), &dev->rootDir->variant.directoryVariant.children);
-+              }
-               /* Add it to the lost and found directory.
-                * NB Can't put root or lostNFound in lostNFound so
-                * check if lostNFound exists first
-                */
--              if (dev->lostNFoundDir) {
-+              if (dev->lostNFoundDir)
-                       yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
--              }
-+
-+              tn->beingCreated = 0;
-       }
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
-+
-       return tn;
- }
--static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
-+static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device *dev, int number,
-                                              __u32 mode)
- {
-       yaffs_Object *obj =
-           yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
-       if (obj) {
--              obj->fake = 1;          /* it is fake so it has no NAND presence... */
-+              obj->fake = 1;          /* it is fake so it might have no NAND presence... */
-               obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
-               obj->unlinkAllowed = 0; /* ... or unlink it */
-               obj->deleted = 0;
-               obj->unlinked = 0;
-               obj->yst_mode = mode;
-               obj->myDev = dev;
--              obj->chunkId = 0;       /* Not a valid chunk. */
-+              obj->hdrChunk = 0;      /* Not a valid chunk. */
-       }
-       return obj;
- }
--static void yaffs_UnhashObject(yaffs_Object * tn)
-+static void yaffs_UnhashObject(yaffs_Object *tn)
- {
-       int bucket;
-       yaffs_Device *dev = tn->myDev;
-       /* If it is still linked into the bucket list, free from the list */
--      if (!list_empty(&tn->hashLink)) {
--              list_del_init(&tn->hashLink);
-+      if (!ylist_empty(&tn->hashLink)) {
-+              ylist_del_init(&tn->hashLink);
-               bucket = yaffs_HashFunction(tn->objectId);
-               dev->objectBucket[bucket].count--;
-       }
--
- }
- /*  FreeObject frees up a Object and puts it back on the free list */
--static void yaffs_FreeObject(yaffs_Object * tn)
-+static void yaffs_FreeObject(yaffs_Object *tn)
- {
--
-       yaffs_Device *dev = tn->myDev;
--#ifdef  __KERNEL__
-+#ifdef __KERNEL__
-+      T(YAFFS_TRACE_OS, (TSTR("FreeObject %p inode %p"TENDSTR), tn, tn->myInode));
-+#endif
-+
-+      if (tn->parent)
-+              YBUG();
-+      if (!ylist_empty(&tn->siblings))
-+              YBUG();
-+
-+
-+#ifdef __KERNEL__
-       if (tn->myInode) {
-               /* We're still hooked up to a cached inode.
-                * Don't delete now, but mark for later deletion
-@@ -1963,24 +2000,28 @@ static void yaffs_FreeObject(yaffs_Objec
-       yaffs_UnhashObject(tn);
-+#ifdef VALGRIND_TEST
-+      YFREE(tn);
-+#else
-       /* Link into the free list. */
--      tn->siblings.next = (struct list_head *)(dev->freeObjects);
-+      tn->siblings.next = (struct ylist_head *)(dev->freeObjects);
-       dev->freeObjects = tn;
-       dev->nFreeObjects++;
-+#endif
-+      dev->nCheckpointBlocksRequired = 0; /* force recalculation*/
- }
- #ifdef __KERNEL__
--void yaffs_HandleDeferedFree(yaffs_Object * obj)
-+void yaffs_HandleDeferedFree(yaffs_Object *obj)
- {
--      if (obj->deferedFree) {
-+      if (obj->deferedFree)
-               yaffs_FreeObject(obj);
--      }
- }
- #endif
--static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
-+static void yaffs_DeinitialiseObjects(yaffs_Device *dev)
- {
-       /* Free the list of allocated Objects */
-@@ -1998,7 +2039,7 @@ static void yaffs_DeinitialiseObjects(ya
-       dev->nFreeObjects = 0;
- }
--static void yaffs_InitialiseObjects(yaffs_Device * dev)
-+static void yaffs_InitialiseObjects(yaffs_Device *dev)
- {
-       int i;
-@@ -2007,15 +2048,14 @@ static void yaffs_InitialiseObjects(yaff
-       dev->nFreeObjects = 0;
-       for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
--              INIT_LIST_HEAD(&dev->objectBucket[i].list);
-+              YINIT_LIST_HEAD(&dev->objectBucket[i].list);
-               dev->objectBucket[i].count = 0;
-       }
--
- }
--static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
-+static int yaffs_FindNiceObjectBucket(yaffs_Device *dev)
- {
--      static int x = 0;
-+      static int x;
-       int i;
-       int l = 999;
-       int lowest = 999999;
-@@ -2049,7 +2089,7 @@ static int yaffs_FindNiceObjectBucket(ya
-       return l;
- }
--static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
-+static int yaffs_CreateNewObjectNumber(yaffs_Device *dev)
- {
-       int bucket = yaffs_FindNiceObjectBucket(dev);
-@@ -2058,7 +2098,7 @@ static int yaffs_CreateNewObjectNumber(y
-        */
-       int found = 0;
--      struct list_head *i;
-+      struct ylist_head *i;
-       __u32 n = (__u32) bucket;
-@@ -2068,41 +2108,38 @@ static int yaffs_CreateNewObjectNumber(y
-               found = 1;
-               n += YAFFS_NOBJECT_BUCKETS;
-               if (1 || dev->objectBucket[bucket].count > 0) {
--                      list_for_each(i, &dev->objectBucket[bucket].list) {
-+                      ylist_for_each(i, &dev->objectBucket[bucket].list) {
-                               /* If there is already one in the list */
--                              if (i
--                                  && list_entry(i, yaffs_Object,
--                                                hashLink)->objectId == n) {
-+                              if (i && ylist_entry(i, yaffs_Object,
-+                                              hashLink)->objectId == n) {
-                                       found = 0;
-                               }
-                       }
-               }
-       }
--
-       return n;
- }
--static void yaffs_HashObject(yaffs_Object * in)
-+static void yaffs_HashObject(yaffs_Object *in)
- {
-       int bucket = yaffs_HashFunction(in->objectId);
-       yaffs_Device *dev = in->myDev;
--      list_add(&in->hashLink, &dev->objectBucket[bucket].list);
-+      ylist_add(&in->hashLink, &dev->objectBucket[bucket].list);
-       dev->objectBucket[bucket].count++;
--
- }
--yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
-+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev, __u32 number)
- {
-       int bucket = yaffs_HashFunction(number);
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *in;
--      list_for_each(i, &dev->objectBucket[bucket].list) {
-+      ylist_for_each(i, &dev->objectBucket[bucket].list) {
-               /* Look if it is in the list */
-               if (i) {
--                      in = list_entry(i, yaffs_Object, hashLink);
-+                      in = ylist_entry(i, yaffs_Object, hashLink);
-                       if (in->objectId == number) {
- #ifdef __KERNEL__
-                               /* Don't tell the VFS about this one if it is defered free */
-@@ -2118,31 +2155,27 @@ yaffs_Object *yaffs_FindObjectByNumber(y
-       return NULL;
- }
--yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
-+yaffs_Object *yaffs_CreateNewObject(yaffs_Device *dev, int number,
-                                   yaffs_ObjectType type)
- {
--
-       yaffs_Object *theObject;
--      yaffs_Tnode *tn;
-+      yaffs_Tnode *tn = NULL;
--      if (number < 0) {
-+      if (number < 0)
-               number = yaffs_CreateNewObjectNumber(dev);
--      }
-       theObject = yaffs_AllocateEmptyObject(dev);
--      if(!theObject)
-+      if (!theObject)
-               return NULL;
--      if(type == YAFFS_OBJECT_TYPE_FILE){
-+      if (type == YAFFS_OBJECT_TYPE_FILE) {
-               tn = yaffs_GetTnode(dev);
--              if(!tn){
-+              if (!tn) {
-                       yaffs_FreeObject(theObject);
-                       return NULL;
-               }
-       }
--
--
-       if (theObject) {
-               theObject->fake = 0;
-               theObject->renameAllowed = 1;
-@@ -2171,8 +2204,8 @@ yaffs_Object *yaffs_CreateNewObject(yaff
-                       theObject->variant.fileVariant.top = tn;
-                       break;
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
--                      INIT_LIST_HEAD(&theObject->variant.directoryVariant.
--                                     children);
-+                      YINIT_LIST_HEAD(&theObject->variant.directoryVariant.
-+                                      children);
-                       break;
-               case YAFFS_OBJECT_TYPE_SYMLINK:
-               case YAFFS_OBJECT_TYPE_HARDLINK:
-@@ -2188,32 +2221,30 @@ yaffs_Object *yaffs_CreateNewObject(yaff
-       return theObject;
- }
--static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
-+static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device *dev,
-                                                     int number,
-                                                     yaffs_ObjectType type)
- {
-       yaffs_Object *theObject = NULL;
--      if (number > 0) {
-+      if (number > 0)
-               theObject = yaffs_FindObjectByNumber(dev, number);
--      }
--      if (!theObject) {
-+      if (!theObject)
-               theObject = yaffs_CreateNewObject(dev, number, type);
--      }
-       return theObject;
- }
--static YCHAR *yaffs_CloneString(const YCHAR * str)
-+static YCHAR *yaffs_CloneString(const YCHAR *str)
- {
-       YCHAR *newStr = NULL;
-       if (str && *str) {
-               newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
--              if(newStr)
-+              if (newStr)
-                       yaffs_strcpy(newStr, str);
-       }
-@@ -2229,29 +2260,31 @@ static YCHAR *yaffs_CloneString(const YC
-  */
- static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
--                                     yaffs_Object * parent,
--                                     const YCHAR * name,
-+                                     yaffs_Object *parent,
-+                                     const YCHAR *name,
-                                      __u32 mode,
-                                      __u32 uid,
-                                      __u32 gid,
--                                     yaffs_Object * equivalentObject,
--                                     const YCHAR * aliasString, __u32 rdev)
-+                                     yaffs_Object *equivalentObject,
-+                                     const YCHAR *aliasString, __u32 rdev)
- {
-       yaffs_Object *in;
--      YCHAR *str;
-+      YCHAR *str = NULL;
-       yaffs_Device *dev = parent->myDev;
-       /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
--      if (yaffs_FindObjectByName(parent, name)) {
-+      if (yaffs_FindObjectByName(parent, name))
-               return NULL;
--      }
-       in = yaffs_CreateNewObject(dev, -1, type);
--      if(type == YAFFS_OBJECT_TYPE_SYMLINK){
-+      if (!in)
-+              return YAFFS_FAIL;
-+
-+      if (type == YAFFS_OBJECT_TYPE_SYMLINK) {
-               str = yaffs_CloneString(aliasString);
--              if(!str){
-+              if (!str) {
-                       yaffs_FreeObject(in);
-                       return NULL;
-               }
-@@ -2260,7 +2293,7 @@ static yaffs_Object *yaffs_MknodObject(y
-       if (in) {
--              in->chunkId = -1;
-+              in->hdrChunk = 0;
-               in->valid = 1;
-               in->variantType = type;
-@@ -2293,10 +2326,10 @@ static yaffs_Object *yaffs_MknodObject(y
-                       break;
-               case YAFFS_OBJECT_TYPE_HARDLINK:
-                       in->variant.hardLinkVariant.equivalentObject =
--                          equivalentObject;
-+                              equivalentObject;
-                       in->variant.hardLinkVariant.equivalentObjectId =
--                          equivalentObject->objectId;
--                      list_add(&in->hardLinks, &equivalentObject->hardLinks);
-+                              equivalentObject->objectId;
-+                      ylist_add(&in->hardLinks, &equivalentObject->hardLinks);
-                       break;
-               case YAFFS_OBJECT_TYPE_FILE:
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -2308,7 +2341,7 @@ static yaffs_Object *yaffs_MknodObject(y
-               if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
-                       /* Could not create the object header, fail the creation */
--                      yaffs_DestroyObject(in);
-+                      yaffs_DeleteObject(in);
-                       in = NULL;
-               }
-@@ -2317,38 +2350,38 @@ static yaffs_Object *yaffs_MknodObject(y
-       return in;
- }
--yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
--                            __u32 mode, __u32 uid, __u32 gid)
-+yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name,
-+                      __u32 mode, __u32 uid, __u32 gid)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
--                               uid, gid, NULL, NULL, 0);
-+                              uid, gid, NULL, NULL, 0);
- }
--yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
--                                 __u32 mode, __u32 uid, __u32 gid)
-+yaffs_Object *yaffs_MknodDirectory(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
-                                mode, uid, gid, NULL, NULL, 0);
- }
--yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
--                               __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
-+yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
-                                uid, gid, NULL, NULL, rdev);
- }
--yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
--                               __u32 mode, __u32 uid, __u32 gid,
--                               const YCHAR * alias)
-+yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid,
-+                              const YCHAR *alias)
- {
-       return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
--                               uid, gid, NULL, alias, 0);
-+                              uid, gid, NULL, alias, 0);
- }
- /* yaffs_Link returns the object id of the equivalent object.*/
--yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
--                       yaffs_Object * equivalentObject)
-+yaffs_Object *yaffs_Link(yaffs_Object *parent, const YCHAR *name,
-+                      yaffs_Object *equivalentObject)
- {
-       /* Get the real object in case we were fed a hard link as an equivalent object */
-       equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
-@@ -2363,33 +2396,31 @@ yaffs_Object *yaffs_Link(yaffs_Object * 
- }
--static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
--                                const YCHAR * newName, int force, int shadows)
-+static int yaffs_ChangeObjectName(yaffs_Object *obj, yaffs_Object *newDir,
-+                              const YCHAR *newName, int force, int shadows)
- {
-       int unlinkOp;
-       int deleteOp;
-       yaffs_Object *existingTarget;
--      if (newDir == NULL) {
-+      if (newDir == NULL)
-               newDir = obj->parent;   /* use the old directory */
--      }
-       if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
--                 ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
-+                 ("tragedy: yaffs_ChangeObjectName: newDir is not a directory"
-                   TENDSTR)));
-               YBUG();
-       }
-       /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
--      if (obj->myDev->isYaffs2) {
-+      if (obj->myDev->isYaffs2)
-               unlinkOp = (newDir == obj->myDev->unlinkedDir);
--      } else {
-+      else
-               unlinkOp = (newDir == obj->myDev->unlinkedDir
-                           && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
--      }
-       deleteOp = (newDir == obj->myDev->deletedDir);
-@@ -2415,40 +2446,40 @@ static int yaffs_ChangeObjectName(yaffs_
-                       obj->unlinked = 1;
-               /* If it is a deletion then we mark it as a shrink for gc purposes. */
--              if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
-+              if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows) >= 0)
-                       return YAFFS_OK;
-       }
-       return YAFFS_FAIL;
- }
--int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
--                     yaffs_Object * newDir, const YCHAR * newName)
-+int yaffs_RenameObject(yaffs_Object *oldDir, const YCHAR *oldName,
-+              yaffs_Object *newDir, const YCHAR *newName)
- {
--      yaffs_Object *obj;
--      yaffs_Object *existingTarget;
-+      yaffs_Object *obj = NULL;
-+      yaffs_Object *existingTarget = NULL;
-       int force = 0;
-+
-+      if (!oldDir || oldDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-+              YBUG();
-+      if (!newDir || newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
-+              YBUG();
-+
- #ifdef CONFIG_YAFFS_CASE_INSENSITIVE
-       /* Special case for case insemsitive systems (eg. WinCE).
-        * While look-up is case insensitive, the name isn't.
-        * Therefore we might want to change x.txt to X.txt
-       */
--      if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
-+      if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0)
-               force = 1;
--      }
- #endif
-+      else if (yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
-+              /* ENAMETOOLONG */
-+              return YAFFS_FAIL;
-+
-       obj = yaffs_FindObjectByName(oldDir, oldName);
--      /* Check new name to long. */
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
--          yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
--        /* ENAMETOOLONG */
--        return YAFFS_FAIL;
--      else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
--               yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
--        /* ENAMETOOLONG */
--        return YAFFS_FAIL;
-       if (obj && obj->renameAllowed) {
-@@ -2456,8 +2487,8 @@ int yaffs_RenameObject(yaffs_Object * ol
-               existingTarget = yaffs_FindObjectByName(newDir, newName);
-               if (existingTarget &&
--                  existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
--                  !list_empty(&existingTarget->variant.directoryVariant.children)) {
-+                      existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
-+                      !ylist_empty(&existingTarget->variant.directoryVariant.children)) {
-                       /* There is a target that is a non-empty directory, so we fail */
-                       return YAFFS_FAIL;      /* EEXIST or ENOTEMPTY */
-               } else if (existingTarget && existingTarget != obj) {
-@@ -2465,7 +2496,7 @@ int yaffs_RenameObject(yaffs_Object * ol
-                        * but only if it isn't the same object
-                        */
-                       yaffs_ChangeObjectName(obj, newDir, newName, force,
--                                             existingTarget->objectId);
-+                                              existingTarget->objectId);
-                       yaffs_UnlinkObject(existingTarget);
-               }
-@@ -2476,7 +2507,7 @@ int yaffs_RenameObject(yaffs_Object * ol
- /*------------------------- Block Management and Page Allocation ----------------*/
--static int yaffs_InitialiseBlocks(yaffs_Device * dev)
-+static int yaffs_InitialiseBlocks(yaffs_Device *dev)
- {
-       int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-@@ -2487,23 +2518,20 @@ static int yaffs_InitialiseBlocks(yaffs_
-       /* If the first allocation strategy fails, thry the alternate one */
-       dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
--      if(!dev->blockInfo){
-+      if (!dev->blockInfo) {
-               dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
-               dev->blockInfoAlt = 1;
--      }
--      else
-+      } else
-               dev->blockInfoAlt = 0;
--      if(dev->blockInfo){
--
-+      if (dev->blockInfo) {
-               /* Set up dynamic blockinfo stuff. */
-               dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
-               dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
--              if(!dev->chunkBits){
-+              if (!dev->chunkBits) {
-                       dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
-                       dev->chunkBitsAlt = 1;
--              }
--              else
-+              } else
-                       dev->chunkBitsAlt = 0;
-       }
-@@ -2514,30 +2542,29 @@ static int yaffs_InitialiseBlocks(yaffs_
-       }
-       return YAFFS_FAIL;
--
- }
--static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
-+static void yaffs_DeinitialiseBlocks(yaffs_Device *dev)
- {
--      if(dev->blockInfoAlt && dev->blockInfo)
-+      if (dev->blockInfoAlt && dev->blockInfo)
-               YFREE_ALT(dev->blockInfo);
--      else if(dev->blockInfo)
-+      else if (dev->blockInfo)
-               YFREE(dev->blockInfo);
-       dev->blockInfoAlt = 0;
-       dev->blockInfo = NULL;
--      if(dev->chunkBitsAlt && dev->chunkBits)
-+      if (dev->chunkBitsAlt && dev->chunkBits)
-               YFREE_ALT(dev->chunkBits);
--      else if(dev->chunkBits)
-+      else if (dev->chunkBits)
-               YFREE(dev->chunkBits);
-       dev->chunkBitsAlt = 0;
-       dev->chunkBits = NULL;
- }
--static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
--                                          yaffs_BlockInfo * bi)
-+static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device *dev,
-+                                      yaffs_BlockInfo *bi)
- {
-       int i;
-       __u32 seq;
-@@ -2556,7 +2583,7 @@ static int yaffs_BlockNotDisqualifiedFro
-               seq = dev->sequenceNumber;
-               for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
--                   i++) {
-+                              i++) {
-                       b = yaffs_GetBlockInfo(dev, i);
-                       if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
-                           (b->pagesInUse - b->softDeletions) <
-@@ -2571,38 +2598,36 @@ static int yaffs_BlockNotDisqualifiedFro
-        * discarded pages.
-        */
-       return (bi->sequenceNumber <= dev->oldestDirtySequence);
--
- }
- /* FindDiretiestBlock is used to select the dirtiest block (or close enough)
-  * for garbage collection.
-  */
--static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
--                                             int aggressive)
-+static int yaffs_FindBlockForGarbageCollection(yaffs_Device *dev,
-+                                      int aggressive)
- {
--
-       int b = dev->currentDirtyChecker;
-       int i;
-       int iterations;
-       int dirtiest = -1;
-       int pagesInUse = 0;
--      int prioritised=0;
-+      int prioritised = 0;
-       yaffs_BlockInfo *bi;
-       int pendingPrioritisedExist = 0;
-       /* First let's see if we need to grab a prioritised block */
--      if(dev->hasPendingPrioritisedGCs){
--              for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
-+      if (dev->hasPendingPrioritisedGCs) {
-+              for (i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++) {
-                       bi = yaffs_GetBlockInfo(dev, i);
--                      //yaffs_VerifyBlock(dev,bi,i);
-+                      /* yaffs_VerifyBlock(dev,bi,i); */
--                      if(bi->gcPrioritise) {
-+                      if (bi->gcPrioritise) {
-                               pendingPrioritisedExist = 1;
--                              if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
--                                 yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
-+                              if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
-+                                 yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-                                       pagesInUse = (bi->pagesInUse - bi->softDeletions);
-                                       dirtiest = i;
-                                       prioritised = 1;
-@@ -2611,7 +2636,7 @@ static int yaffs_FindBlockForGarbageColl
-                       }
-               }
--              if(!pendingPrioritisedExist) /* None found, so we can clear this */
-+              if (!pendingPrioritisedExist) /* None found, so we can clear this */
-                       dev->hasPendingPrioritisedGCs = 0;
-       }
-@@ -2623,31 +2648,28 @@ static int yaffs_FindBlockForGarbageColl
-       dev->nonAggressiveSkip--;
--      if (!aggressive && (dev->nonAggressiveSkip > 0)) {
-+      if (!aggressive && (dev->nonAggressiveSkip > 0))
-               return -1;
--      }
--      if(!prioritised)
-+      if (!prioritised)
-               pagesInUse =
--                      (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
-+                      (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
--      if (aggressive) {
-+      if (aggressive)
-               iterations =
-                   dev->internalEndBlock - dev->internalStartBlock + 1;
--      } else {
-+      else {
-               iterations =
-                   dev->internalEndBlock - dev->internalStartBlock + 1;
-               iterations = iterations / 16;
--              if (iterations > 200) {
-+              if (iterations > 200)
-                       iterations = 200;
--              }
-       }
-       for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
-               b++;
--              if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
-+              if (b < dev->internalStartBlock || b > dev->internalEndBlock)
-                       b = dev->internalStartBlock;
--              }
-               if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
-                       T(YAFFS_TRACE_ERROR,
-@@ -2657,17 +2679,9 @@ static int yaffs_FindBlockForGarbageColl
-               bi = yaffs_GetBlockInfo(dev, b);
--#if 0
--              if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
--                      dirtiest = b;
--                      pagesInUse = 0;
--              }
--              else
--#endif
--
-               if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
--                     (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
--                      yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-+                      (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
-+                              yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
-                       dirtiest = b;
-                       pagesInUse = (bi->pagesInUse - bi->softDeletions);
-               }
-@@ -2678,19 +2692,18 @@ static int yaffs_FindBlockForGarbageColl
-       if (dirtiest > 0) {
-               T(YAFFS_TRACE_GC,
-                 (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
--                 dev->nChunksPerBlock - pagesInUse,prioritised));
-+                 dev->nChunksPerBlock - pagesInUse, prioritised));
-       }
-       dev->oldestDirtySequence = 0;
--      if (dirtiest > 0) {
-+      if (dirtiest > 0)
-               dev->nonAggressiveSkip = 4;
--      }
-       return dirtiest;
- }
--static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
-+static void yaffs_BlockBecameDirty(yaffs_Device *dev, int blockNo)
- {
-       yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
-@@ -2752,7 +2765,7 @@ static void yaffs_BlockBecameDirty(yaffs
-       }
- }
--static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
-+static int yaffs_FindBlockForAllocation(yaffs_Device *dev)
- {
-       int i;
-@@ -2763,7 +2776,7 @@ static int yaffs_FindBlockForAllocation(
-                * Can't get space to gc
-                */
-               T(YAFFS_TRACE_ERROR,
--                (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
-+                (TSTR("yaffs tragedy: no more erased blocks" TENDSTR)));
-               return -1;
-       }
-@@ -2794,31 +2807,74 @@ static int yaffs_FindBlockForAllocation(
-       T(YAFFS_TRACE_ALWAYS,
-         (TSTR
--         ("yaffs tragedy: no more eraased blocks, but there should have been %d"
-+         ("yaffs tragedy: no more erased blocks, but there should have been %d"
-           TENDSTR), dev->nErasedBlocks));
-       return -1;
- }
--// Check if there's space to allocate...
--// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
--static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
-+
-+static int yaffs_CalcCheckpointBlocksRequired(yaffs_Device *dev)
-+{
-+      if (!dev->nCheckpointBlocksRequired &&
-+         dev->isYaffs2) {
-+              /* Not a valid value so recalculate */
-+              int nBytes = 0;
-+              int nBlocks;
-+              int devBlocks = (dev->endBlock - dev->startBlock + 1);
-+              int tnodeSize;
-+
-+              tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+
-+              if (tnodeSize < sizeof(yaffs_Tnode))
-+                      tnodeSize = sizeof(yaffs_Tnode);
-+
-+              nBytes += sizeof(yaffs_CheckpointValidity);
-+              nBytes += sizeof(yaffs_CheckpointDevice);
-+              nBytes += devBlocks * sizeof(yaffs_BlockInfo);
-+              nBytes += devBlocks * dev->chunkBitmapStride;
-+              nBytes += (sizeof(yaffs_CheckpointObject) + sizeof(__u32)) * (dev->nObjectsCreated - dev->nFreeObjects);
-+              nBytes += (tnodeSize + sizeof(__u32)) * (dev->nTnodesCreated - dev->nFreeTnodes);
-+              nBytes += sizeof(yaffs_CheckpointValidity);
-+              nBytes += sizeof(__u32); /* checksum*/
-+
-+              /* Round up and add 2 blocks to allow for some bad blocks, so add 3 */
-+
-+              nBlocks = (nBytes/(dev->nDataBytesPerChunk * dev->nChunksPerBlock)) + 3;
-+
-+              dev->nCheckpointBlocksRequired = nBlocks;
-+      }
-+
-+      return dev->nCheckpointBlocksRequired;
-+}
-+
-+/*
-+ * Check if there's space to allocate...
-+ * Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
-+ */
-+static int yaffs_CheckSpaceForAllocation(yaffs_Device *dev)
- {
-       int reservedChunks;
-       int reservedBlocks = dev->nReservedBlocks;
-       int checkpointBlocks;
--      checkpointBlocks =  dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
--      if(checkpointBlocks < 0)
-+      if (dev->isYaffs2) {
-+              checkpointBlocks =  yaffs_CalcCheckpointBlocksRequired(dev) -
-+                                  dev->blocksInCheckpoint;
-+              if (checkpointBlocks < 0)
-+                      checkpointBlocks = 0;
-+      } else {
-               checkpointBlocks = 0;
-+      }
-       reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
-       return (dev->nFreeChunks > reservedChunks);
- }
--static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
-+static int yaffs_AllocateChunk(yaffs_Device *dev, int useReserve,
-+              yaffs_BlockInfo **blockUsedPtr)
- {
-       int retVal;
-       yaffs_BlockInfo *bi;
-@@ -2835,7 +2891,7 @@ static int yaffs_AllocateChunk(yaffs_Dev
-       }
-       if (dev->nErasedBlocks < dev->nReservedBlocks
--          && dev->allocationPage == 0) {
-+                      && dev->allocationPage == 0) {
-               T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
-       }
-@@ -2844,10 +2900,10 @@ static int yaffs_AllocateChunk(yaffs_Dev
-               bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
-               retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
--                  dev->allocationPage;
-+                      dev->allocationPage;
-               bi->pagesInUse++;
-               yaffs_SetChunkBit(dev, dev->allocationBlock,
--                                dev->allocationPage);
-+                              dev->allocationPage);
-               dev->allocationPage++;
-@@ -2859,43 +2915,43 @@ static int yaffs_AllocateChunk(yaffs_Dev
-                       dev->allocationBlock = -1;
-               }
--              if(blockUsedPtr)
-+              if (blockUsedPtr)
-                       *blockUsedPtr = bi;
-               return retVal;
-       }
-       T(YAFFS_TRACE_ERROR,
--        (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-+                      (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
-       return -1;
- }
--static int yaffs_GetErasedChunks(yaffs_Device * dev)
-+static int yaffs_GetErasedChunks(yaffs_Device *dev)
- {
-       int n;
-       n = dev->nErasedBlocks * dev->nChunksPerBlock;
--      if (dev->allocationBlock > 0) {
-+      if (dev->allocationBlock > 0)
-               n += (dev->nChunksPerBlock - dev->allocationPage);
--      }
-       return n;
- }
--static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
-+static int yaffs_GarbageCollectBlock(yaffs_Device *dev, int block,
-+              int wholeBlock)
- {
-       int oldChunk;
-       int newChunk;
--      int chunkInBlock;
-       int markNAND;
-       int retVal = YAFFS_OK;
-       int cleanups = 0;
-       int i;
-       int isCheckpointBlock;
-       int matchingChunk;
-+      int maxCopies;
-       int chunksBefore = yaffs_GetErasedChunks(dev);
-       int chunksAfter;
-@@ -2911,8 +2967,11 @@ static int yaffs_GarbageCollectBlock(yaf
-       bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
-       T(YAFFS_TRACE_TRACING,
--        (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
--         bi->pagesInUse, bi->hasShrinkHeader));
-+                      (TSTR("Collecting block %d, in use %d, shrink %d, wholeBlock %d" TENDSTR),
-+                       block,
-+                       bi->pagesInUse,
-+                       bi->hasShrinkHeader,
-+                       wholeBlock));
-       /*yaffs_VerifyFreeChunks(dev); */
-@@ -2926,26 +2985,33 @@ static int yaffs_GarbageCollectBlock(yaf
-       dev->isDoingGC = 1;
-       if (isCheckpointBlock ||
--          !yaffs_StillSomeChunkBits(dev, block)) {
-+                      !yaffs_StillSomeChunkBits(dev, block)) {
-               T(YAFFS_TRACE_TRACING,
--                (TSTR
--                 ("Collecting block %d that has no chunks in use" TENDSTR),
--                 block));
-+                              (TSTR
-+                               ("Collecting block %d that has no chunks in use" TENDSTR),
-+                               block));
-               yaffs_BlockBecameDirty(dev, block);
-       } else {
-               __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
--              yaffs_VerifyBlock(dev,bi,block);
-+              yaffs_VerifyBlock(dev, bi, block);
--              for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
--                   chunkInBlock < dev->nChunksPerBlock
--                   && yaffs_StillSomeChunkBits(dev, block);
--                   chunkInBlock++, oldChunk++) {
--                      if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
-+              maxCopies = (wholeBlock) ? dev->nChunksPerBlock : 10;
-+              oldChunk = block * dev->nChunksPerBlock + dev->gcChunk;
-+
-+              for (/* init already done */;
-+                   retVal == YAFFS_OK &&
-+                   dev->gcChunk < dev->nChunksPerBlock &&
-+                   (bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) &&
-+                   maxCopies > 0;
-+                   dev->gcChunk++, oldChunk++) {
-+                      if (yaffs_CheckChunkBit(dev, block, dev->gcChunk)) {
-                               /* This page is in use and might need to be copied off */
-+                              maxCopies--;
-+
-                               markNAND = 1;
-                               yaffs_InitialiseTags(&tags);
-@@ -2959,22 +3025,22 @@ static int yaffs_GarbageCollectBlock(yaf
-                               T(YAFFS_TRACE_GC_DETAIL,
-                                 (TSTR
--                                 ("Collecting page %d, %d %d %d " TENDSTR),
--                                 chunkInBlock, tags.objectId, tags.chunkId,
-+                                 ("Collecting chunk in block %d, %d %d %d " TENDSTR),
-+                                 dev->gcChunk, tags.objectId, tags.chunkId,
-                                  tags.byteCount));
--                              if(object && !yaffs_SkipVerification(dev)){
--                                      if(tags.chunkId == 0)
--                                              matchingChunk = object->chunkId;
--                                      else if(object->softDeleted)
-+                              if (object && !yaffs_SkipVerification(dev)) {
-+                                      if (tags.chunkId == 0)
-+                                              matchingChunk = object->hdrChunk;
-+                                      else if (object->softDeleted)
-                                               matchingChunk = oldChunk; /* Defeat the test */
-                                       else
--                                              matchingChunk = yaffs_FindChunkInFile(object,tags.chunkId,NULL);
-+                                              matchingChunk = yaffs_FindChunkInFile(object, tags.chunkId, NULL);
--                                      if(oldChunk != matchingChunk)
-+                                      if (oldChunk != matchingChunk)
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR("gc: page in gc mismatch: %d %d %d %d"TENDSTR),
--                                                oldChunk,matchingChunk,tags.objectId, tags.chunkId));
-+                                                oldChunk, matchingChunk, tags.objectId, tags.chunkId));
-                               }
-@@ -2986,9 +3052,11 @@ static int yaffs_GarbageCollectBlock(yaf
-                                           tags.objectId, tags.chunkId, tags.byteCount));
-                               }
--                              if (object && object->deleted
--                                  && tags.chunkId != 0) {
--                                      /* Data chunk in a deleted file, throw it away
-+                              if (object &&
-+                                  object->deleted &&
-+                                  object->softDeleted &&
-+                                  tags.chunkId != 0) {
-+                                      /* Data chunk in a soft deleted file, throw it away
-                                        * It's a soft deleted data chunk,
-                                        * No need to copy this, just forget about it and
-                                        * fix up the object.
-@@ -3003,13 +3071,12 @@ static int yaffs_GarbageCollectBlock(yaf
-                                               cleanups++;
-                                       }
-                                       markNAND = 0;
--                              } else if (0
--                                         /* Todo object && object->deleted && object->nDataChunks == 0 */
--                                         ) {
-+                              } else if (0) {
-+                                      /* Todo object && object->deleted && object->nDataChunks == 0 */
-                                       /* Deleted object header with no data chunks.
-                                        * Can be discarded and the file deleted.
-                                        */
--                                      object->chunkId = 0;
-+                                      object->hdrChunk = 0;
-                                       yaffs_FreeTnode(object->myDev,
-                                                       object->variant.
-                                                       fileVariant.top);
-@@ -3031,17 +3098,14 @@ static int yaffs_GarbageCollectBlock(yaf
-                                                * We need to nuke the shrinkheader flags first
-                                                * We no longer want the shrinkHeader flag since its work is done
-                                                * and if it is left in place it will mess up scanning.
--                                               * Also, clear out any shadowing stuff
-                                                */
-                                               yaffs_ObjectHeader *oh;
-                                               oh = (yaffs_ObjectHeader *)buffer;
-                                               oh->isShrink = 0;
--                                              oh->shadowsObject = -1;
--                                              tags.extraShadows = 0;
-                                               tags.extraIsShrinkHeader = 0;
--                                              yaffs_VerifyObjectHeader(object,oh,&tags,1);
-+                                              yaffs_VerifyObjectHeader(object, oh, &tags, 1);
-                                       }
-                                       newChunk =
-@@ -3055,7 +3119,7 @@ static int yaffs_GarbageCollectBlock(yaf
-                                               if (tags.chunkId == 0) {
-                                                       /* It's a header */
--                                                      object->chunkId =  newChunk;
-+                                                      object->hdrChunk =  newChunk;
-                                                       object->serial =   tags.serialNumber;
-                                               } else {
-                                                       /* It's a data chunk */
-@@ -3067,7 +3131,8 @@ static int yaffs_GarbageCollectBlock(yaf
-                                       }
-                               }
--                              yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-+                              if (retVal == YAFFS_OK)
-+                                      yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-                       }
-               }
-@@ -3098,18 +3163,25 @@ static int yaffs_GarbageCollectBlock(yaf
-       }
--      yaffs_VerifyCollectedBlock(dev,bi,block);
-+      yaffs_VerifyCollectedBlock(dev, bi, block);
--      if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
-+      chunksAfter = yaffs_GetErasedChunks(dev);
-+      if (chunksBefore >= chunksAfter) {
-               T(YAFFS_TRACE_GC,
-                 (TSTR
-                  ("gc did not increase free chunks before %d after %d"
-                   TENDSTR), chunksBefore, chunksAfter));
-       }
-+      /* If the gc completed then clear the current gcBlock so that we find another. */
-+      if (bi->blockState != YAFFS_BLOCK_STATE_COLLECTING) {
-+              dev->gcBlock = -1;
-+              dev->gcChunk = 0;
-+      }
-+
-       dev->isDoingGC = 0;
--      return YAFFS_OK;
-+      return retVal;
- }
- /* New garbage collector
-@@ -3121,7 +3193,7 @@ static int yaffs_GarbageCollectBlock(yaf
-  * The idea is to help clear out space in a more spread-out manner.
-  * Dunno if it really does anything useful.
-  */
--static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
-+static int yaffs_CheckGarbageCollection(yaffs_Device *dev)
- {
-       int block;
-       int aggressive;
-@@ -3142,8 +3214,8 @@ static int yaffs_CheckGarbageCollection(
-       do {
-               maxTries++;
--              checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
--              if(checkpointBlockAdjust < 0)
-+              checkpointBlockAdjust = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
-+              if (checkpointBlockAdjust < 0)
-                       checkpointBlockAdjust = 0;
-               if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust + 2)) {
-@@ -3154,20 +3226,24 @@ static int yaffs_CheckGarbageCollection(
-                       aggressive = 0;
-               }
--              block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-+              if (dev->gcBlock <= 0) {
-+                      dev->gcBlock = yaffs_FindBlockForGarbageCollection(dev, aggressive);
-+                      dev->gcChunk = 0;
-+              }
-+
-+              block = dev->gcBlock;
-               if (block > 0) {
-                       dev->garbageCollections++;
--                      if (!aggressive) {
-+                      if (!aggressive)
-                               dev->passiveGarbageCollections++;
--                      }
-                       T(YAFFS_TRACE_GC,
-                         (TSTR
-                          ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
-                          dev->nErasedBlocks, aggressive));
--                      gcOk = yaffs_GarbageCollectBlock(dev, block);
-+                      gcOk = yaffs_GarbageCollectBlock(dev, block, aggressive);
-               }
-               if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
-@@ -3176,15 +3252,16 @@ static int yaffs_CheckGarbageCollection(
-                          ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
-                           TENDSTR), dev->nErasedBlocks, maxTries, block));
-               }
--      } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
--               && (maxTries < 2));
-+      } while ((dev->nErasedBlocks < dev->nReservedBlocks) &&
-+               (block > 0) &&
-+               (maxTries < 2));
-       return aggressive ? gcOk : YAFFS_OK;
- }
- /*-------------------------  TAGS --------------------------------*/
--static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
-+static int yaffs_TagsMatch(const yaffs_ExtendedTags *tags, int objectId,
-                          int chunkInObject)
- {
-       return (tags->chunkId == chunkInObject &&
-@@ -3195,8 +3272,8 @@ static int yaffs_TagsMatch(const yaffs_E
- /*-------------------- Data file manipulation -----------------*/
--static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
--                               yaffs_ExtendedTags * tags)
-+static int yaffs_FindChunkInFile(yaffs_Object *in, int chunkInInode,
-+                               yaffs_ExtendedTags *tags)
- {
-       /*Get the Tnode, then get the level 0 offset chunk offset */
-       yaffs_Tnode *tn;
-@@ -3214,7 +3291,7 @@ static int yaffs_FindChunkInFile(yaffs_O
-       tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
-       if (tn) {
--              theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+              theChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-               retVal =
-                   yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
-@@ -3223,8 +3300,8 @@ static int yaffs_FindChunkInFile(yaffs_O
-       return retVal;
- }
--static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
--                                        yaffs_ExtendedTags * tags)
-+static int yaffs_FindAndDeleteChunkInFile(yaffs_Object *in, int chunkInInode,
-+                                        yaffs_ExtendedTags *tags)
- {
-       /* Get the Tnode, then get the level 0 offset chunk offset */
-       yaffs_Tnode *tn;
-@@ -3243,29 +3320,23 @@ static int yaffs_FindAndDeleteChunkInFil
-       if (tn) {
--              theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+              theChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-               retVal =
-                   yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
-                                          chunkInInode);
-               /* Delete the entry in the filestructure (if found) */
--              if (retVal != -1) {
--                      yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
--              }
--      } else {
--              /*T(("No level 0 found for %d\n", chunkInInode)); */
-+              if (retVal != -1)
-+                      yaffs_PutLevel0Tnode(dev, tn, chunkInInode, 0);
-       }
--      if (retVal == -1) {
--              /* T(("Could not find %d to delete\n",chunkInInode)); */
--      }
-       return retVal;
- }
- #ifdef YAFFS_PARANOID
--static int yaffs_CheckFileSanity(yaffs_Object * in)
-+static int yaffs_CheckFileSanity(yaffs_Object *in)
- {
-       int chunk;
-       int nChunks;
-@@ -3278,10 +3349,8 @@ static int yaffs_CheckFileSanity(yaffs_O
-       int theChunk;
-       int chunkDeleted;
--      if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
--              /* T(("Object not a file\n")); */
-+      if (in->variantType != YAFFS_OBJECT_TYPE_FILE)
-               return YAFFS_FAIL;
--      }
-       objId = in->objectId;
-       fSize = in->variant.fileVariant.fileSize;
-@@ -3294,7 +3363,7 @@ static int yaffs_CheckFileSanity(yaffs_O
-               if (tn) {
--                      theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
-+                      theChunk = yaffs_GetChunkGroupBase(dev, tn, chunk);
-                       if (yaffs_CheckChunkBits
-                           (dev, theChunk / dev->nChunksPerBlock,
-@@ -3323,7 +3392,7 @@ static int yaffs_CheckFileSanity(yaffs_O
- #endif
--static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
-+static int yaffs_PutChunkIntoFile(yaffs_Object *in, int chunkInInode,
-                                 int chunkInNAND, int inScan)
- {
-       /* NB inScan is zero unless scanning.
-@@ -3358,11 +3427,10 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                                       &in->variant.fileVariant,
-                                       chunkInInode,
-                                       NULL);
--      if (!tn) {
-+      if (!tn)
-               return YAFFS_FAIL;
--      }
--      existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-+      existingChunk = yaffs_GetChunkGroupBase(dev, tn, chunkInInode);
-       if (inScan != 0) {
-               /* If we're scanning then we need to test for duplicates
-@@ -3374,7 +3442,7 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
-                */
--              if (existingChunk != 0) {
-+              if (existingChunk > 0) {
-                       /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
-                        *    thus we have to do a FindChunkInFile to get the real chunk id.
-                        *
-@@ -3411,8 +3479,10 @@ static int yaffs_PutChunkIntoFile(yaffs_
-                        * not be loaded during a scan
-                        */
--                      newSerial = newTags.serialNumber;
--                      existingSerial = existingTags.serialNumber;
-+                      if (inScan > 0) {
-+                              newSerial = newTags.serialNumber;
-+                              existingSerial = existingTags.serialNumber;
-+                      }
-                       if ((inScan > 0) &&
-                           (in->myDev->isYaffs2 ||
-@@ -3437,24 +3507,23 @@ static int yaffs_PutChunkIntoFile(yaffs_
-       }
--      if (existingChunk == 0) {
-+      if (existingChunk == 0)
-               in->nDataChunks++;
--      }
--      yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
-+      yaffs_PutLevel0Tnode(dev, tn, chunkInInode, chunkInNAND);
-       return YAFFS_OK;
- }
--static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
--                                       __u8 * buffer)
-+static int yaffs_ReadChunkDataFromObject(yaffs_Object *in, int chunkInInode,
-+                                      __u8 *buffer)
- {
-       int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
--      if (chunkInNAND >= 0) {
-+      if (chunkInNAND >= 0)
-               return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
--                                                     buffer,NULL);
--      } else {
-+                                              buffer, NULL);
-+      else {
-               T(YAFFS_TRACE_NANDACCESS,
-                 (TSTR("Chunk %d not found zero instead" TENDSTR),
-                  chunkInNAND));
-@@ -3465,7 +3534,7 @@ static int yaffs_ReadChunkDataFromObject
- }
--void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
-+void yaffs_DeleteChunk(yaffs_Device *dev, int chunkId, int markNAND, int lyn)
- {
-       int block;
-       int page;
-@@ -3475,16 +3544,15 @@ void yaffs_DeleteChunk(yaffs_Device * de
-       if (chunkId <= 0)
-               return;
--
-       dev->nDeletions++;
-       block = chunkId / dev->nChunksPerBlock;
-       page = chunkId % dev->nChunksPerBlock;
--      if(!yaffs_CheckChunkBit(dev,block,page))
-+      if (!yaffs_CheckChunkBit(dev, block, page))
-               T(YAFFS_TRACE_VERIFY,
--                      (TSTR("Deleting invalid chunk %d"TENDSTR),
--                       chunkId));
-+                      (TSTR("Deleting invalid chunk %d"TENDSTR),
-+                       chunkId));
-       bi = yaffs_GetBlockInfo(dev, block);
-@@ -3524,14 +3592,12 @@ void yaffs_DeleteChunk(yaffs_Device * de
-                       yaffs_BlockBecameDirty(dev, block);
-               }
--      } else {
--              /* T(("Bad news deleting chunk %d\n",chunkId)); */
-       }
- }
--static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
--                                      const __u8 * buffer, int nBytes,
-+static int yaffs_WriteChunkDataToObject(yaffs_Object *in, int chunkInInode,
-+                                      const __u8 *buffer, int nBytes,
-                                       int useReserve)
- {
-       /* Find old chunk Need to do this to get serial number
-@@ -3561,6 +3627,12 @@ static int yaffs_WriteChunkDataToObject(
-           (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
-       newTags.byteCount = nBytes;
-+      if (nBytes < 1 || nBytes > dev->totalBytesPerChunk) {
-+              T(YAFFS_TRACE_ERROR,
-+              (TSTR("Writing %d bytes to chunk!!!!!!!!!" TENDSTR), nBytes));
-+              YBUG();
-+      }
-+
-       newChunkId =
-           yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
-                                             useReserve);
-@@ -3568,11 +3640,9 @@ static int yaffs_WriteChunkDataToObject(
-       if (newChunkId >= 0) {
-               yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
--              if (prevChunkId >= 0) {
-+              if (prevChunkId >= 0)
-                       yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
--              }
--
-               yaffs_CheckFileSanity(in);
-       }
-       return newChunkId;
-@@ -3582,7 +3652,7 @@ static int yaffs_WriteChunkDataToObject(
- /* UpdateObjectHeader updates the header on NAND for an object.
-  * If name is not NULL, then that new name is used.
-  */
--int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
-+int yaffs_UpdateObjectHeader(yaffs_Object *in, const YCHAR *name, int force,
-                            int isShrink, int shadows)
- {
-@@ -3603,9 +3673,12 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-       yaffs_ObjectHeader *oh = NULL;
--      yaffs_strcpy(oldName,"silly old name");
-+      yaffs_strcpy(oldName, _Y("silly old name"));
--      if (!in->fake || force) {
-+
-+      if (!in->fake ||
-+              in == dev->rootDir || /* The rootDir should also be saved */
-+              force) {
-               yaffs_CheckGarbageCollection(dev);
-               yaffs_CheckObjectDetailsLoaded(in);
-@@ -3613,13 +3686,13 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
-               oh = (yaffs_ObjectHeader *) buffer;
--              prevChunkId = in->chunkId;
-+              prevChunkId = in->hdrChunk;
--              if (prevChunkId >= 0) {
-+              if (prevChunkId > 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
-                                                       buffer, &oldTags);
--                      yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
-+                      yaffs_VerifyObjectHeader(in, oh, &oldTags, 0);
-                       memcpy(oldName, oh->name, sizeof(oh->name));
-               }
-@@ -3628,7 +3701,7 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               oh->type = in->variantType;
-               oh->yst_mode = in->yst_mode;
--              oh->shadowsObject = shadows;
-+              oh->shadowsObject = oh->inbandShadowsObject = shadows;
- #ifdef CONFIG_YAFFS_WINCE
-               oh->win_atime[0] = in->win_atime[0];
-@@ -3645,20 +3718,18 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               oh->yst_ctime = in->yst_ctime;
-               oh->yst_rdev = in->yst_rdev;
- #endif
--              if (in->parent) {
-+              if (in->parent)
-                       oh->parentObjectId = in->parent->objectId;
--              } else {
-+              else
-                       oh->parentObjectId = 0;
--              }
-               if (name && *name) {
-                       memset(oh->name, 0, sizeof(oh->name));
-                       yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
--              } else if (prevChunkId>=0) {
-+              } else if (prevChunkId >= 0)
-                       memcpy(oh->name, oldName, sizeof(oh->name));
--              } else {
-+              else
-                       memset(oh->name, 0, sizeof(oh->name));
--              }
-               oh->isShrink = isShrink;
-@@ -3708,7 +3779,7 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
-               newTags.extraObjectType = in->variantType;
--              yaffs_VerifyObjectHeader(in,oh,&newTags,1);
-+              yaffs_VerifyObjectHeader(in, oh, &newTags, 1);
-               /* Create new chunk in NAND */
-               newChunkId =
-@@ -3717,20 +3788,20 @@ int yaffs_UpdateObjectHeader(yaffs_Objec
-               if (newChunkId >= 0) {
--                      in->chunkId = newChunkId;
-+                      in->hdrChunk = newChunkId;
-                       if (prevChunkId >= 0) {
-                               yaffs_DeleteChunk(dev, prevChunkId, 1,
-                                                 __LINE__);
-                       }
--                      if(!yaffs_ObjectHasCachedWriteData(in))
-+                      if (!yaffs_ObjectHasCachedWriteData(in))
-                               in->dirty = 0;
-                       /* If this was a shrink, then mark the block that the chunk lives on */
-                       if (isShrink) {
-                               bi = yaffs_GetBlockInfo(in->myDev,
--                                                      newChunkId /in->myDev-> nChunksPerBlock);
-+                                      newChunkId / in->myDev->nChunksPerBlock);
-                               bi->hasShrinkHeader = 1;
-                       }
-@@ -3766,7 +3837,7 @@ static int yaffs_ObjectHasCachedWriteDat
-       yaffs_ChunkCache *cache;
-       int nCaches = obj->myDev->nShortOpCaches;
--      for(i = 0; i < nCaches; i++){
-+      for (i = 0; i < nCaches; i++) {
-               cache = &dev->srCache[i];
-               if (cache->object == obj &&
-                   cache->dirty)
-@@ -3777,7 +3848,7 @@ static int yaffs_ObjectHasCachedWriteDat
- }
--static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
-+static void yaffs_FlushFilesChunkCache(yaffs_Object *obj)
- {
-       yaffs_Device *dev = obj->myDev;
-       int lowest = -99;       /* Stop compiler whining. */
-@@ -3844,16 +3915,16 @@ void yaffs_FlushEntireDeviceCache(yaffs_
-        */
-       do {
-               obj = NULL;
--              for( i = 0; i < nCaches && !obj; i++) {
-+              for (i = 0; i < nCaches && !obj; i++) {
-                       if (dev->srCache[i].object &&
-                           dev->srCache[i].dirty)
-                               obj = dev->srCache[i].object;
-               }
--              if(obj)
-+              if (obj)
-                       yaffs_FlushFilesChunkCache(obj);
--      } while(obj);
-+      } while (obj);
- }
-@@ -3863,41 +3934,21 @@ void yaffs_FlushEntireDeviceCache(yaffs_
-  * Then look for the least recently used non-dirty one.
-  * Then look for the least recently used dirty one...., flush and look again.
-  */
--static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
-+static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device *dev)
- {
-       int i;
--      int usage;
--      int theOne;
-       if (dev->nShortOpCaches > 0) {
-               for (i = 0; i < dev->nShortOpCaches; i++) {
-                       if (!dev->srCache[i].object)
-                               return &dev->srCache[i];
-               }
-+      }
--              return NULL;
-+      return NULL;
-+}
--              theOne = -1;
--              usage = 0;      /* just to stop the compiler grizzling */
--
--              for (i = 0; i < dev->nShortOpCaches; i++) {
--                      if (!dev->srCache[i].dirty &&
--                          ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
--                           theOne < 0)) {
--                              usage = dev->srCache[i].lastUse;
--                              theOne = i;
--                      }
--              }
--
--
--              return theOne >= 0 ? &dev->srCache[theOne] : NULL;
--      } else {
--              return NULL;
--      }
--
--}
--
--static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
-+static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device *dev)
- {
-       yaffs_ChunkCache *cache;
-       yaffs_Object *theObj;
-@@ -3927,8 +3978,7 @@ static yaffs_ChunkCache *yaffs_GrabChunk
-                       for (i = 0; i < dev->nShortOpCaches; i++) {
-                               if (dev->srCache[i].object &&
-                                   !dev->srCache[i].locked &&
--                                  (dev->srCache[i].lastUse < usage || !cache))
--                              {
-+                                  (dev->srCache[i].lastUse < usage || !cache)) {
-                                       usage = dev->srCache[i].lastUse;
-                                       theObj = dev->srCache[i].object;
-                                       cache = &dev->srCache[i];
-@@ -3950,7 +4000,7 @@ static yaffs_ChunkCache *yaffs_GrabChunk
- }
- /* Find a cached chunk */
--static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
-+static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object *obj,
-                                             int chunkId)
- {
-       yaffs_Device *dev = obj->myDev;
-@@ -3969,7 +4019,7 @@ static yaffs_ChunkCache *yaffs_FindChunk
- }
- /* Mark the chunk for the least recently used algorithym */
--static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
-+static void yaffs_UseChunkCache(yaffs_Device *dev, yaffs_ChunkCache *cache,
-                               int isAWrite)
- {
-@@ -3977,9 +4027,9 @@ static void yaffs_UseChunkCache(yaffs_De
-               if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
-                       /* Reset the cache usages */
-                       int i;
--                      for (i = 1; i < dev->nShortOpCaches; i++) {
-+                      for (i = 1; i < dev->nShortOpCaches; i++)
-                               dev->srCache[i].lastUse = 0;
--                      }
-+
-                       dev->srLastUse = 0;
-               }
-@@ -3987,9 +4037,8 @@ static void yaffs_UseChunkCache(yaffs_De
-               cache->lastUse = dev->srLastUse;
--              if (isAWrite) {
-+              if (isAWrite)
-                       cache->dirty = 1;
--              }
-       }
- }
-@@ -3997,21 +4046,20 @@ static void yaffs_UseChunkCache(yaffs_De
-  * Do this when a whole page gets written,
-  * ie the short cache for this page is no longer valid.
-  */
--static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
-+static void yaffs_InvalidateChunkCache(yaffs_Object *object, int chunkId)
- {
-       if (object->myDev->nShortOpCaches > 0) {
-               yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
--              if (cache) {
-+              if (cache)
-                       cache->object = NULL;
--              }
-       }
- }
- /* Invalidate all the cache pages associated with this object
-  * Do this whenever ther file is deleted or resized.
-  */
--static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
-+static void yaffs_InvalidateWholeChunkCache(yaffs_Object *in)
- {
-       int i;
-       yaffs_Device *dev = in->myDev;
-@@ -4019,9 +4067,8 @@ static void yaffs_InvalidateWholeChunkCa
-       if (dev->nShortOpCaches > 0) {
-               /* Invalidate it. */
-               for (i = 0; i < dev->nShortOpCaches; i++) {
--                      if (dev->srCache[i].object == in) {
-+                      if (dev->srCache[i].object == in)
-                               dev->srCache[i].object = NULL;
--                      }
-               }
-       }
- }
-@@ -4029,18 +4076,18 @@ static void yaffs_InvalidateWholeChunkCa
- /*--------------------- Checkpointing --------------------*/
--static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
-+static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev, int head)
- {
-       yaffs_CheckpointValidity cp;
--      memset(&cp,0,sizeof(cp));
-+      memset(&cp, 0, sizeof(cp));
-       cp.structType = sizeof(cp);
-       cp.magic = YAFFS_MAGIC;
-       cp.version = YAFFS_CHECKPOINT_VERSION;
-       cp.head = (head) ? 1 : 0;
--      return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
-+      return (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp)) ?
-               1 : 0;
- }
-@@ -4049,9 +4096,9 @@ static int yaffs_ReadCheckpointValidityM
-       yaffs_CheckpointValidity cp;
-       int ok;
--      ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
--      if(ok)
-+      if (ok)
-               ok = (cp.structType == sizeof(cp)) &&
-                    (cp.magic == YAFFS_MAGIC) &&
-                    (cp.version == YAFFS_CHECKPOINT_VERSION) &&
-@@ -4100,21 +4147,21 @@ static int yaffs_WriteCheckpointDevice(y
-       int ok;
-       /* Write device runtime values*/
--      yaffs_DeviceToCheckpointDevice(&cp,dev);
-+      yaffs_DeviceToCheckpointDevice(&cp, dev);
-       cp.structType = sizeof(cp);
--      ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
-       /* Write block info */
--      if(ok) {
-+      if (ok) {
-               nBytes = nBlocks * sizeof(yaffs_BlockInfo);
--              ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
-+              ok = (yaffs_CheckpointWrite(dev, dev->blockInfo, nBytes) == nBytes);
-       }
-       /* Write chunk bits */
--      if(ok) {
-+      if (ok) {
-               nBytes = nBlocks * dev->chunkBitmapStride;
--              ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
-+              ok = (yaffs_CheckpointWrite(dev, dev->chunkBits, nBytes) == nBytes);
-       }
-       return   ok ? 1 : 0;
-@@ -4128,25 +4175,25 @@ static int yaffs_ReadCheckpointDevice(ya
-       int ok;
--      ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
--      if(!ok)
-+      ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
-+      if (!ok)
-               return 0;
--      if(cp.structType != sizeof(cp))
-+      if (cp.structType != sizeof(cp))
-               return 0;
--      yaffs_CheckpointDeviceToDevice(dev,&cp);
-+      yaffs_CheckpointDeviceToDevice(dev, &cp);
-       nBytes = nBlocks * sizeof(yaffs_BlockInfo);
--      ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
-+      ok = (yaffs_CheckpointRead(dev, dev->blockInfo, nBytes) == nBytes);
--      if(!ok)
-+      if (!ok)
-               return 0;
-       nBytes = nBlocks * dev->chunkBitmapStride;
--      ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
-+      ok = (yaffs_CheckpointRead(dev, dev->chunkBits, nBytes) == nBytes);
-       return ok ? 1 : 0;
- }
-@@ -4157,7 +4204,7 @@ static void yaffs_ObjectToCheckpointObje
-       cp->objectId = obj->objectId;
-       cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
--      cp->chunkId = obj->chunkId;
-+      cp->hdrChunk = obj->hdrChunk;
-       cp->variantType = obj->variantType;
-       cp->deleted = obj->deleted;
-       cp->softDeleted = obj->softDeleted;
-@@ -4168,20 +4215,28 @@ static void yaffs_ObjectToCheckpointObje
-       cp->serial = obj->serial;
-       cp->nDataChunks = obj->nDataChunks;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
--      else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-+      else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-               cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
- }
--static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
-+static int yaffs_CheckpointObjectToObject(yaffs_Object *obj, yaffs_CheckpointObject *cp)
- {
-       yaffs_Object *parent;
-+      if (obj->variantType != cp->variantType) {
-+              T(YAFFS_TRACE_ERROR, (TSTR("Checkpoint read object %d type %d "
-+                      TCONT("chunk %d does not match existing object type %d")
-+                      TENDSTR), cp->objectId, cp->variantType, cp->hdrChunk,
-+                      obj->variantType));
-+              return 0;
-+      }
-+
-       obj->objectId = cp->objectId;
--      if(cp->parentId)
-+      if (cp->parentId)
-               parent = yaffs_FindOrCreateObjectByNumber(
-                                       obj->myDev,
-                                       cp->parentId,
-@@ -4189,10 +4244,19 @@ static void yaffs_CheckpointObjectToObje
-       else
-               parent = NULL;
--      if(parent)
-+      if (parent) {
-+              if (parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR("Checkpoint read object %d parent %d type %d"
-+                              TCONT(" chunk %d Parent type, %d, not directory")
-+                              TENDSTR),
-+                              cp->objectId, cp->parentId, cp->variantType,
-+                              cp->hdrChunk, parent->variantType));
-+                      return 0;
-+              }
-               yaffs_AddObjectToDirectory(parent, obj);
-+      }
--      obj->chunkId = cp->chunkId;
-+      obj->hdrChunk = cp->hdrChunk;
-       obj->variantType = cp->variantType;
-       obj->deleted = cp->deleted;
-       obj->softDeleted = cp->softDeleted;
-@@ -4203,29 +4267,34 @@ static void yaffs_CheckpointObjectToObje
-       obj->serial = cp->serial;
-       obj->nDataChunks = cp->nDataChunks;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
--      else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-+      else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
-               obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
--      if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
-+      if (obj->hdrChunk > 0)
-               obj->lazyLoaded = 1;
-+      return 1;
- }
--static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
--                                      __u32 level, int chunkOffset)
-+static int yaffs_CheckpointTnodeWorker(yaffs_Object *in, yaffs_Tnode *tn,
-+                                      __u32 level, int chunkOffset)
- {
-       int i;
-       yaffs_Device *dev = in->myDev;
-       int ok = 1;
--      int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-+
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
-+
-       if (tn) {
-               if (level > 0) {
--                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
-+                      for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
-                               if (tn->internal[i]) {
-                                       ok = yaffs_CheckpointTnodeWorker(in,
-                                                       tn->internal[i],
-@@ -4235,10 +4304,9 @@ static int yaffs_CheckpointTnodeWorker(y
-                       }
-               } else if (level == 0) {
-                       __u32 baseOffset = chunkOffset <<  YAFFS_TNODES_LEVEL0_BITS;
--                      /* printf("write tnode at %d\n",baseOffset); */
--                      ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
--                      if(ok)
--                              ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
-+                      ok = (yaffs_CheckpointWrite(dev, &baseOffset, sizeof(baseOffset)) == sizeof(baseOffset));
-+                      if (ok)
-+                              ok = (yaffs_CheckpointWrite(dev, tn, tnodeSize) == tnodeSize);
-               }
-       }
-@@ -4251,13 +4319,13 @@ static int yaffs_WriteCheckpointTnodes(y
-       __u32 endMarker = ~0;
-       int ok = 1;
--      if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-               ok = yaffs_CheckpointTnodeWorker(obj,
-                                           obj->variant.fileVariant.top,
-                                           obj->variant.fileVariant.topLevel,
-                                           0);
--              if(ok)
--                      ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
-+              if (ok)
-+                      ok = (yaffs_CheckpointWrite(obj->myDev, &endMarker, sizeof(endMarker)) ==
-                               sizeof(endMarker));
-       }
-@@ -4272,38 +4340,38 @@ static int yaffs_ReadCheckpointTnodes(ya
-       yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
-       yaffs_Tnode *tn;
-       int nread = 0;
-+      int tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
--      ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-+      if (tnodeSize < sizeof(yaffs_Tnode))
-+              tnodeSize = sizeof(yaffs_Tnode);
--      while(ok && (~baseChunk)){
-+      ok = (yaffs_CheckpointRead(dev, &baseChunk, sizeof(baseChunk)) == sizeof(baseChunk));
-+
-+      while (ok && (~baseChunk)) {
-               nread++;
-               /* Read level 0 tnode */
--              /* printf("read  tnode at %d\n",baseChunk); */
-               tn = yaffs_GetTnodeRaw(dev);
--              if(tn)
--                      ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
--                            (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
-+              if (tn)
-+                      ok = (yaffs_CheckpointRead(dev, tn, tnodeSize) == tnodeSize);
-               else
-                       ok = 0;
--              if(tn && ok){
-+              if (tn && ok)
-                       ok = yaffs_AddOrFindLevel0Tnode(dev,
--                                                      fileStructPtr,
--                                                      baseChunk,
--                                                      tn) ? 1 : 0;
-+                                                      fileStructPtr,
-+                                                      baseChunk,
-+                                                      tn) ? 1 : 0;
--              }
--
--              if(ok)
--                      ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-+              if (ok)
-+                      ok = (yaffs_CheckpointRead(dev, &baseChunk, sizeof(baseChunk)) == sizeof(baseChunk));
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(
-+      T(YAFFS_TRACE_CHECKPOINT, (
-               TSTR("Checkpoint read tnodes %d records, last %d. ok %d" TENDSTR),
--              nread,baseChunk,ok));
-+              nread, baseChunk, ok));
-       return ok ? 1 : 0;
- }
-@@ -4315,41 +4383,40 @@ static int yaffs_WriteCheckpointObjects(
-       yaffs_CheckpointObject cp;
-       int i;
-       int ok = 1;
--      struct list_head *lh;
-+      struct ylist_head *lh;
-       /* Iterate through the objects in each hash entry,
-        * dumping them to the checkpointing stream.
-        */
--       for(i = 0; ok &&  i <  YAFFS_NOBJECT_BUCKETS; i++){
--              list_for_each(lh, &dev->objectBucket[i].list) {
-+      for (i = 0; ok &&  i <  YAFFS_NOBJECT_BUCKETS; i++) {
-+              ylist_for_each(lh, &dev->objectBucket[i].list) {
-                       if (lh) {
--                              obj = list_entry(lh, yaffs_Object, hashLink);
-+                              obj = ylist_entry(lh, yaffs_Object, hashLink);
-                               if (!obj->deferedFree) {
--                                      yaffs_ObjectToCheckpointObject(&cp,obj);
-+                                      yaffs_ObjectToCheckpointObject(&cp, obj);
-                                       cp.structType = sizeof(cp);
--                                      T(YAFFS_TRACE_CHECKPOINT,(
-+                                      T(YAFFS_TRACE_CHECKPOINT, (
-                                               TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
--                                              cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
-+                                              cp.objectId, cp.parentId, cp.variantType, cp.hdrChunk, (unsigned) obj));
--                                      ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+                                      ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
--                                      if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
-+                                      if (ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-                                               ok = yaffs_WriteCheckpointTnodes(obj);
--                                      }
-                               }
-                       }
-               }
--       }
-+      }
--       /* Dump end of list */
--      memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
-+      /* Dump end of list */
-+      memset(&cp, 0xFF, sizeof(yaffs_CheckpointObject));
-       cp.structType = sizeof(cp);
--      if(ok)
--              ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-+      if (ok)
-+              ok = (yaffs_CheckpointWrite(dev, &cp, sizeof(cp)) == sizeof(cp));
-       return ok ? 1 : 0;
- }
-@@ -4362,38 +4429,39 @@ static int yaffs_ReadCheckpointObjects(y
-       int done = 0;
-       yaffs_Object *hardList = NULL;
--      while(ok && !done) {
--              ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
--              if(cp.structType != sizeof(cp)) {
--                      T(YAFFS_TRACE_CHECKPOINT,(TSTR("struct size %d instead of %d ok %d"TENDSTR),
--                              cp.structType,sizeof(cp),ok));
-+      while (ok && !done) {
-+              ok = (yaffs_CheckpointRead(dev, &cp, sizeof(cp)) == sizeof(cp));
-+              if (cp.structType != sizeof(cp)) {
-+                      T(YAFFS_TRACE_CHECKPOINT, (TSTR("struct size %d instead of %d ok %d"TENDSTR),
-+                              cp.structType, sizeof(cp), ok));
-                       ok = 0;
-               }
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
--                      cp.objectId,cp.parentId,cp.variantType,cp.chunkId));
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
-+                      cp.objectId, cp.parentId, cp.variantType, cp.hdrChunk));
--              if(ok && cp.objectId == ~0)
-+              if (ok && cp.objectId == ~0)
-                       done = 1;
--              else if(ok){
--                      obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
--                      if(obj) {
--                              yaffs_CheckpointObjectToObject(obj,&cp);
--                              if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-+              else if (ok) {
-+                      obj = yaffs_FindOrCreateObjectByNumber(dev, cp.objectId, cp.variantType);
-+                      if (obj) {
-+                              ok = yaffs_CheckpointObjectToObject(obj, &cp);
-+                              if (!ok)
-+                                      break;
-+                              if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-                                       ok = yaffs_ReadCheckpointTnodes(obj);
--                              } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-+                              } else if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-                                       obj->hardLinks.next =
--                                                  (struct list_head *)
--                                                  hardList;
-+                                              (struct ylist_head *) hardList;
-                                       hardList = obj;
-                               }
--
--                      }
-+                      } else
-+                              ok = 0;
-               }
-       }
--      if(ok)
--              yaffs_HardlinkFixup(dev,hardList);
-+      if (ok)
-+              yaffs_HardlinkFixup(dev, hardList);
-       return ok ? 1 : 0;
- }
-@@ -4403,11 +4471,11 @@ static int yaffs_WriteCheckpointSum(yaff
-       __u32 checkpointSum;
-       int ok;
--      yaffs_GetCheckpointSum(dev,&checkpointSum);
-+      yaffs_GetCheckpointSum(dev, &checkpointSum);
--      ok = (yaffs_CheckpointWrite(dev,&checkpointSum,sizeof(checkpointSum)) == sizeof(checkpointSum));
-+      ok = (yaffs_CheckpointWrite(dev, &checkpointSum, sizeof(checkpointSum)) == sizeof(checkpointSum));
--      if(!ok)
-+      if (!ok)
-               return 0;
-       return 1;
-@@ -4419,14 +4487,14 @@ static int yaffs_ReadCheckpointSum(yaffs
-       __u32 checkpointSum1;
-       int ok;
--      yaffs_GetCheckpointSum(dev,&checkpointSum0);
-+      yaffs_GetCheckpointSum(dev, &checkpointSum0);
--      ok = (yaffs_CheckpointRead(dev,&checkpointSum1,sizeof(checkpointSum1)) == sizeof(checkpointSum1));
-+      ok = (yaffs_CheckpointRead(dev, &checkpointSum1, sizeof(checkpointSum1)) == sizeof(checkpointSum1));
--      if(!ok)
-+      if (!ok)
-               return 0;
--      if(checkpointSum0 != checkpointSum1)
-+      if (checkpointSum0 != checkpointSum1)
-               return 0;
-       return 1;
-@@ -4435,46 +4503,43 @@ static int yaffs_ReadCheckpointSum(yaffs
- static int yaffs_WriteCheckpointData(yaffs_Device *dev)
- {
--
-       int ok = 1;
--      if(dev->skipCheckpointWrite || !dev->isYaffs2){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint write" TENDSTR)));
-+      if (dev->skipCheckpointWrite || !dev->isYaffs2) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("skipping checkpoint write" TENDSTR)));
-               ok = 0;
-       }
--      if(ok)
--              ok = yaffs_CheckpointOpen(dev,1);
-+      if (ok)
-+              ok = yaffs_CheckpointOpen(dev, 1);
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
--              ok = yaffs_WriteCheckpointValidityMarker(dev,1);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint validity" TENDSTR)));
-+              ok = yaffs_WriteCheckpointValidityMarker(dev, 1);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint device" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint device" TENDSTR)));
-               ok = yaffs_WriteCheckpointDevice(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint objects" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint objects" TENDSTR)));
-               ok = yaffs_WriteCheckpointObjects(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
--              ok = yaffs_WriteCheckpointValidityMarker(dev,0);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("write checkpoint validity" TENDSTR)));
-+              ok = yaffs_WriteCheckpointValidityMarker(dev, 0);
-       }
--      if(ok){
-+      if (ok)
-               ok = yaffs_WriteCheckpointSum(dev);
--      }
--
--      if(!yaffs_CheckpointClose(dev))
--               ok = 0;
-+      if (!yaffs_CheckpointClose(dev))
-+              ok = 0;
--      if(ok)
--              dev->isCheckpointed = 1;
--       else
--              dev->isCheckpointed = 0;
-+      if (ok)
-+              dev->isCheckpointed = 1;
-+      else
-+              dev->isCheckpointed = 0;
-       return dev->isCheckpointed;
- }
-@@ -4483,43 +4548,43 @@ static int yaffs_ReadCheckpointData(yaff
- {
-       int ok = 1;
--      if(dev->skipCheckpointRead || !dev->isYaffs2){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint read" TENDSTR)));
-+      if (dev->skipCheckpointRead || !dev->isYaffs2) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("skipping checkpoint read" TENDSTR)));
-               ok = 0;
-       }
--      if(ok)
--              ok = yaffs_CheckpointOpen(dev,0); /* open for read */
-+      if (ok)
-+              ok = yaffs_CheckpointOpen(dev, 0); /* open for read */
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
--              ok = yaffs_ReadCheckpointValidityMarker(dev,1);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint validity" TENDSTR)));
-+              ok = yaffs_ReadCheckpointValidityMarker(dev, 1);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint device" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint device" TENDSTR)));
-               ok = yaffs_ReadCheckpointDevice(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint objects" TENDSTR)));
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint objects" TENDSTR)));
-               ok = yaffs_ReadCheckpointObjects(dev);
-       }
--      if(ok){
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
--              ok = yaffs_ReadCheckpointValidityMarker(dev,0);
-+      if (ok) {
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint validity" TENDSTR)));
-+              ok = yaffs_ReadCheckpointValidityMarker(dev, 0);
-       }
--      if(ok){
-+      if (ok) {
-               ok = yaffs_ReadCheckpointSum(dev);
--              T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint checksum %d" TENDSTR),ok));
-+              T(YAFFS_TRACE_CHECKPOINT, (TSTR("read checkpoint checksum %d" TENDSTR), ok));
-       }
--      if(!yaffs_CheckpointClose(dev))
-+      if (!yaffs_CheckpointClose(dev))
-               ok = 0;
--      if(ok)
--              dev->isCheckpointed = 1;
--       else
--              dev->isCheckpointed = 0;
-+      if (ok)
-+              dev->isCheckpointed = 1;
-+      else
-+              dev->isCheckpointed = 0;
-       return ok ? 1 : 0;
-@@ -4527,11 +4592,11 @@ static int yaffs_ReadCheckpointData(yaff
- static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
- {
--      if(dev->isCheckpointed ||
--         dev->blocksInCheckpoint > 0){
-+      if (dev->isCheckpointed ||
-+                      dev->blocksInCheckpoint > 0) {
-               dev->isCheckpointed = 0;
-               yaffs_CheckpointInvalidateStream(dev);
--              if(dev->superBlock && dev->markSuperBlockDirty)
-+              if (dev->superBlock && dev->markSuperBlockDirty)
-                       dev->markSuperBlockDirty(dev->superBlock);
-       }
- }
-@@ -4540,18 +4605,18 @@ static void yaffs_InvalidateCheckpoint(y
- int yaffs_CheckpointSave(yaffs_Device *dev)
- {
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("save entry: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       yaffs_VerifyObjects(dev);
-       yaffs_VerifyBlocks(dev);
-       yaffs_VerifyFreeChunks(dev);
--      if(!dev->isCheckpointed) {
-+      if (!dev->isCheckpointed) {
-               yaffs_InvalidateCheckpoint(dev);
-               yaffs_WriteCheckpointData(dev);
-       }
--      T(YAFFS_TRACE_ALWAYS,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_ALWAYS, (TSTR("save exit: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       return dev->isCheckpointed;
- }
-@@ -4559,17 +4624,17 @@ int yaffs_CheckpointSave(yaffs_Device *d
- int yaffs_CheckpointRestore(yaffs_Device *dev)
- {
-       int retval;
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("restore entry: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       retval = yaffs_ReadCheckpointData(dev);
--      if(dev->isCheckpointed){
-+      if (dev->isCheckpointed) {
-               yaffs_VerifyObjects(dev);
-               yaffs_VerifyBlocks(dev);
-               yaffs_VerifyFreeChunks(dev);
-       }
--      T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
-+      T(YAFFS_TRACE_CHECKPOINT, (TSTR("restore exit: isCheckpointed %d"TENDSTR), dev->isCheckpointed));
-       return retval;
- }
-@@ -4584,12 +4649,12 @@ int yaffs_CheckpointRestore(yaffs_Device
-  * Curve-balls: the first chunk might also be the last chunk.
-  */
--int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
--                         int nBytes)
-+int yaffs_ReadDataFromFile(yaffs_Object *in, __u8 *buffer, loff_t offset,
-+                      int nBytes)
- {
-       int chunk;
--      int start;
-+      __u32 start;
-       int nToCopy;
-       int n = nBytes;
-       int nDone = 0;
-@@ -4600,27 +4665,26 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-       dev = in->myDev;
-       while (n > 0) {
--              //chunk = offset / dev->nDataBytesPerChunk + 1;
--              //start = offset % dev->nDataBytesPerChunk;
--              yaffs_AddrToChunk(dev,offset,&chunk,&start);
-+              /* chunk = offset / dev->nDataBytesPerChunk + 1; */
-+              /* start = offset % dev->nDataBytesPerChunk; */
-+              yaffs_AddrToChunk(dev, offset, &chunk, &start);
-               chunk++;
-               /* OK now check for the curveball where the start and end are in
-                * the same chunk.
-                */
--              if ((start + n) < dev->nDataBytesPerChunk) {
-+              if ((start + n) < dev->nDataBytesPerChunk)
-                       nToCopy = n;
--              } else {
-+              else
-                       nToCopy = dev->nDataBytesPerChunk - start;
--              }
-               cache = yaffs_FindChunkCache(in, chunk);
-               /* If the chunk is already in the cache or it is less than a whole chunk
--               * then use the cache (if there is caching)
-+               * or we're using inband tags then use the cache (if there is caching)
-                * else bypass the cache.
-                */
--              if (cache || nToCopy != dev->nDataBytesPerChunk) {
-+              if (cache || nToCopy != dev->nDataBytesPerChunk || dev->inbandTags) {
-                       if (dev->nShortOpCaches > 0) {
-                               /* If we can't find the data in the cache, then load it up. */
-@@ -4641,14 +4705,9 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-                               cache->locked = 1;
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(buffer, &cache->data[start], nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-                               cache->locked = 0;
-                       } else {
-                               /* Read into the local buffer then copy..*/
-@@ -4657,41 +4716,19 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-                                   yaffs_GetTempBuffer(dev, __LINE__);
-                               yaffs_ReadChunkDataFromObject(in, chunk,
-                                                             localBuffer);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(buffer, &localBuffer[start], nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-+
-                               yaffs_ReleaseTempBuffer(dev, localBuffer,
-                                                       __LINE__);
-                       }
-               } else {
--#ifdef CONFIG_YAFFS_WINCE
--                      __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
--
--                      /* Under WinCE can't do direct transfer. Need to use a local buffer.
--                       * This is because we otherwise screw up WinCE's memory mapper
--                       */
--                      yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
--
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_UnlockYAFFS(TRUE);
--#endif
--                      memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_LockYAFFS(TRUE);
--                      yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
--#endif
--
--#else
-                       /* A full chunk. Read directly into the supplied buffer. */
-                       yaffs_ReadChunkDataFromObject(in, chunk, buffer);
--#endif
-+
-               }
-               n -= nToCopy;
-@@ -4704,28 +4741,37 @@ int yaffs_ReadDataFromFile(yaffs_Object 
-       return nDone;
- }
--int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
--                        int nBytes, int writeThrough)
-+int yaffs_WriteDataToFile(yaffs_Object *in, const __u8 *buffer, loff_t offset,
-+                      int nBytes, int writeThrough)
- {
-       int chunk;
--      int start;
-+      __u32 start;
-       int nToCopy;
-       int n = nBytes;
-       int nDone = 0;
-       int nToWriteBack;
-       int startOfWrite = offset;
-       int chunkWritten = 0;
--      int nBytesRead;
-+      __u32 nBytesRead;
-+      __u32 chunkStart;
-       yaffs_Device *dev;
-       dev = in->myDev;
-       while (n > 0 && chunkWritten >= 0) {
--              //chunk = offset / dev->nDataBytesPerChunk + 1;
--              //start = offset % dev->nDataBytesPerChunk;
--              yaffs_AddrToChunk(dev,offset,&chunk,&start);
-+              /* chunk = offset / dev->nDataBytesPerChunk + 1; */
-+              /* start = offset % dev->nDataBytesPerChunk; */
-+              yaffs_AddrToChunk(dev, offset, &chunk, &start);
-+
-+              if (chunk * dev->nDataBytesPerChunk + start != offset ||
-+                              start >= dev->nDataBytesPerChunk) {
-+                      T(YAFFS_TRACE_ERROR, (
-+                         TSTR("AddrToChunk of offset %d gives chunk %d start %d"
-+                         TENDSTR),
-+                         (int)offset, chunk, start));
-+              }
-               chunk++;
-               /* OK now check for the curveball where the start and end are in
-@@ -4740,25 +4786,32 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                        * we need to write back as much as was there before.
-                        */
--                      nBytesRead =
--                          in->variant.fileVariant.fileSize -
--                          ((chunk - 1) * dev->nDataBytesPerChunk);
-+                      chunkStart = ((chunk - 1) * dev->nDataBytesPerChunk);
-+
-+                      if (chunkStart > in->variant.fileVariant.fileSize)
-+                              nBytesRead = 0; /* Past end of file */
-+                      else
-+                              nBytesRead = in->variant.fileVariant.fileSize - chunkStart;
--                      if (nBytesRead > dev->nDataBytesPerChunk) {
-+                      if (nBytesRead > dev->nDataBytesPerChunk)
-                               nBytesRead = dev->nDataBytesPerChunk;
--                      }
-                       nToWriteBack =
-                           (nBytesRead >
-                            (start + n)) ? nBytesRead : (start + n);
-+                      if (nToWriteBack < 0 || nToWriteBack > dev->nDataBytesPerChunk)
-+                              YBUG();
-+
-               } else {
-                       nToCopy = dev->nDataBytesPerChunk - start;
-                       nToWriteBack = dev->nDataBytesPerChunk;
-               }
--              if (nToCopy != dev->nDataBytesPerChunk) {
--                      /* An incomplete start or end chunk (or maybe both start and end chunk) */
-+              if (nToCopy != dev->nDataBytesPerChunk || dev->inbandTags) {
-+                      /* An incomplete start or end chunk (or maybe both start and end chunk),
-+                       * or we're using inband tags, so we want to use the cache buffers.
-+                       */
-                       if (dev->nShortOpCaches > 0) {
-                               yaffs_ChunkCache *cache;
-                               /* If we can't find the data in the cache, then load the cache */
-@@ -4775,10 +4828,9 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                                       yaffs_ReadChunkDataFromObject(in, chunk,
-                                                                     cache->
-                                                                     data);
--                              }
--                              else if(cache &&
--                                      !cache->dirty &&
--                                      !yaffs_CheckSpaceForAllocation(in->myDev)){
-+                              } else if (cache &&
-+                                      !cache->dirty &&
-+                                      !yaffs_CheckSpaceForAllocation(in->myDev)) {
-                                       /* Drop the cache if it was a read cache item and
-                                        * no space check has been made for it.
-                                        */
-@@ -4788,16 +4840,12 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                               if (cache) {
-                                       yaffs_UseChunkCache(dev, cache, 1);
-                                       cache->locked = 1;
--#ifdef CONFIG_YAFFS_WINCE
--                                      yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                                       memcpy(&cache->data[start], buffer,
-                                              nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                                      yfsd_LockYAFFS(TRUE);
--#endif
-+
-                                       cache->locked = 0;
-                                       cache->nBytes = nToWriteBack;
-@@ -4825,15 +4873,10 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                               yaffs_ReadChunkDataFromObject(in, chunk,
-                                                             localBuffer);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_UnlockYAFFS(TRUE);
--#endif
-+
-                               memcpy(&localBuffer[start], buffer, nToCopy);
--#ifdef CONFIG_YAFFS_WINCE
--                              yfsd_LockYAFFS(TRUE);
--#endif
-                               chunkWritten =
-                                   yaffs_WriteChunkDataToObject(in, chunk,
-                                                                localBuffer,
-@@ -4846,31 +4889,15 @@ int yaffs_WriteDataToFile(yaffs_Object *
-                       }
-               } else {
--
--#ifdef CONFIG_YAFFS_WINCE
--                      /* Under WinCE can't do direct transfer. Need to use a local buffer.
--                       * This is because we otherwise screw up WinCE's memory mapper
--                       */
--                      __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_UnlockYAFFS(TRUE);
--#endif
--                      memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
--#ifdef CONFIG_YAFFS_WINCE
--                      yfsd_LockYAFFS(TRUE);
--#endif
--                      chunkWritten =
--                          yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
--                                                       dev->nDataBytesPerChunk,
--                                                       0);
--                      yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
--#else
-                       /* A full chunk. Write directly from the supplied buffer. */
-+
-+
-+
-                       chunkWritten =
-                           yaffs_WriteChunkDataToObject(in, chunk, buffer,
-                                                        dev->nDataBytesPerChunk,
-                                                        0);
--#endif
-+
-                       /* Since we've overwritten the cached data, we better invalidate it. */
-                       yaffs_InvalidateChunkCache(in, chunk);
-               }
-@@ -4886,9 +4913,8 @@ int yaffs_WriteDataToFile(yaffs_Object *
-       /* Update file object */
--      if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
-+      if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize)
-               in->variant.fileVariant.fileSize = (startOfWrite + nDone);
--      }
-       in->dirty = 1;
-@@ -4898,7 +4924,7 @@ int yaffs_WriteDataToFile(yaffs_Object *
- /* ---------------------- File resizing stuff ------------------ */
--static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
-+static void yaffs_PruneResizedChunks(yaffs_Object *in, int newSize)
- {
-       yaffs_Device *dev = in->myDev;
-@@ -4939,11 +4965,11 @@ static void yaffs_PruneResizedChunks(yaf
- }
--int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
-+int yaffs_ResizeFile(yaffs_Object *in, loff_t newSize)
- {
-       int oldFileSize = in->variant.fileVariant.fileSize;
--      int newSizeOfPartialChunk;
-+      __u32 newSizeOfPartialChunk;
-       int newFullChunks;
-       yaffs_Device *dev = in->myDev;
-@@ -4955,13 +4981,11 @@ int yaffs_ResizeFile(yaffs_Object * in, 
-       yaffs_CheckGarbageCollection(dev);
--      if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
--              return yaffs_GetFileSize(in);
--      }
-+      if (in->variantType != YAFFS_OBJECT_TYPE_FILE)
-+              return YAFFS_FAIL;
--      if (newSize == oldFileSize) {
--              return oldFileSize;
--      }
-+      if (newSize == oldFileSize)
-+              return YAFFS_OK;
-       if (newSize < oldFileSize) {
-@@ -4994,21 +5018,20 @@ int yaffs_ResizeFile(yaffs_Object * in, 
-       }
--
-       /* Write a new object header.
-        * show we've shrunk the file, if need be
-        * Do this only if the file is not in the deleted directories.
-        */
--      if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
--          in->parent->objectId != YAFFS_OBJECTID_DELETED) {
-+      if (in->parent &&
-+          in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
-+          in->parent->objectId != YAFFS_OBJECTID_DELETED)
-               yaffs_UpdateObjectHeader(in, NULL, 0,
-                                        (newSize < oldFileSize) ? 1 : 0, 0);
--      }
--      return newSize;
-+      return YAFFS_OK;
- }
--loff_t yaffs_GetFileSize(yaffs_Object * obj)
-+loff_t yaffs_GetFileSize(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-@@ -5024,7 +5047,7 @@ loff_t yaffs_GetFileSize(yaffs_Object * 
--int yaffs_FlushFile(yaffs_Object * in, int updateTime)
-+int yaffs_FlushFile(yaffs_Object *in, int updateTime)
- {
-       int retVal;
-       if (in->dirty) {
-@@ -5039,9 +5062,8 @@ int yaffs_FlushFile(yaffs_Object * in, i
- #endif
-               }
--              retVal =
--                  (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
--                   0) ? YAFFS_OK : YAFFS_FAIL;
-+              retVal = (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
-+                      0) ? YAFFS_OK : YAFFS_FAIL;
-       } else {
-               retVal = YAFFS_OK;
-       }
-@@ -5050,7 +5072,7 @@ int yaffs_FlushFile(yaffs_Object * in, i
- }
--static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
-+static int yaffs_DoGenericObjectDeletion(yaffs_Object *in)
- {
-       /* First off, invalidate the file's data in the cache, without flushing. */
-@@ -5058,13 +5080,13 @@ static int yaffs_DoGenericObjectDeletion
-       if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
-               /* Move to the unlinked directory so we have a record that it was deleted. */
--              yaffs_ChangeObjectName(in, in->myDev->deletedDir,"deleted", 0, 0);
-+              yaffs_ChangeObjectName(in, in->myDev->deletedDir, _Y("deleted"), 0, 0);
-       }
-       yaffs_RemoveObjectFromDirectory(in);
--      yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
--      in->chunkId = -1;
-+      yaffs_DeleteChunk(in->myDev, in->hdrChunk, 1, __LINE__);
-+      in->hdrChunk = 0;
-       yaffs_FreeObject(in);
-       return YAFFS_OK;
-@@ -5075,62 +5097,63 @@ static int yaffs_DoGenericObjectDeletion
-  * and the inode associated with the file.
-  * It does not delete the links associated with the file.
-  */
--static int yaffs_UnlinkFile(yaffs_Object * in)
-+static int yaffs_UnlinkFileIfNeeded(yaffs_Object *in)
- {
-       int retVal;
-       int immediateDeletion = 0;
--      if (1) {
- #ifdef __KERNEL__
--              if (!in->myInode) {
--                      immediateDeletion = 1;
--
--              }
-+      if (!in->myInode)
-+              immediateDeletion = 1;
- #else
--              if (in->inUse <= 0) {
--                      immediateDeletion = 1;
--
--              }
-+      if (in->inUse <= 0)
-+              immediateDeletion = 1;
- #endif
--              if (immediateDeletion) {
--                      retVal =
--                          yaffs_ChangeObjectName(in, in->myDev->deletedDir,
--                                                 "deleted", 0, 0);
--                      T(YAFFS_TRACE_TRACING,
--                        (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
--                         in->objectId));
--                      in->deleted = 1;
--                      in->myDev->nDeletedFiles++;
--                      if (0 && in->myDev->isYaffs2) {
--                              yaffs_ResizeFile(in, 0);
--                      }
--                      yaffs_SoftDeleteFile(in);
--              } else {
--                      retVal =
--                          yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
--                                                 "unlinked", 0, 0);
--              }
-+      if (immediateDeletion) {
-+              retVal =
-+                  yaffs_ChangeObjectName(in, in->myDev->deletedDir,
-+                                         _Y("deleted"), 0, 0);
-+              T(YAFFS_TRACE_TRACING,
-+                (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
-+                 in->objectId));
-+              in->deleted = 1;
-+              in->myDev->nDeletedFiles++;
-+              if (1 || in->myDev->isYaffs2)
-+                      yaffs_ResizeFile(in, 0);
-+              yaffs_SoftDeleteFile(in);
-+      } else {
-+              retVal =
-+                  yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
-+                                         _Y("unlinked"), 0, 0);
-       }
-+
-+
-       return retVal;
- }
--int yaffs_DeleteFile(yaffs_Object * in)
-+int yaffs_DeleteFile(yaffs_Object *in)
- {
-       int retVal = YAFFS_OK;
-+      int deleted = in->deleted;
-+
-+      yaffs_ResizeFile(in, 0);
-       if (in->nDataChunks > 0) {
--              /* Use soft deletion if there is data in the file */
--              if (!in->unlinked) {
--                      retVal = yaffs_UnlinkFile(in);
--              }
-+              /* Use soft deletion if there is data in the file.
-+               * That won't be the case if it has been resized to zero.
-+               */
-+              if (!in->unlinked)
-+                      retVal = yaffs_UnlinkFileIfNeeded(in);
-+
-               if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
-                       in->deleted = 1;
-+                      deleted = 1;
-                       in->myDev->nDeletedFiles++;
-                       yaffs_SoftDeleteFile(in);
-               }
--              return in->deleted ? YAFFS_OK : YAFFS_FAIL;
-+              return deleted ? YAFFS_OK : YAFFS_FAIL;
-       } else {
-               /* The file has no data chunks so we toss it immediately */
-               yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
-@@ -5141,62 +5164,75 @@ int yaffs_DeleteFile(yaffs_Object * in)
-       }
- }
--static int yaffs_DeleteDirectory(yaffs_Object * in)
-+static int yaffs_DeleteDirectory(yaffs_Object *in)
- {
-       /* First check that the directory is empty. */
--      if (list_empty(&in->variant.directoryVariant.children)) {
-+      if (ylist_empty(&in->variant.directoryVariant.children))
-               return yaffs_DoGenericObjectDeletion(in);
--      }
-       return YAFFS_FAIL;
- }
--static int yaffs_DeleteSymLink(yaffs_Object * in)
-+static int yaffs_DeleteSymLink(yaffs_Object *in)
- {
-       YFREE(in->variant.symLinkVariant.alias);
-       return yaffs_DoGenericObjectDeletion(in);
- }
--static int yaffs_DeleteHardLink(yaffs_Object * in)
-+static int yaffs_DeleteHardLink(yaffs_Object *in)
- {
-       /* remove this hardlink from the list assocaited with the equivalent
-        * object
-        */
--      list_del(&in->hardLinks);
-+      ylist_del_init(&in->hardLinks);
-       return yaffs_DoGenericObjectDeletion(in);
- }
--static void yaffs_DestroyObject(yaffs_Object * obj)
-+int yaffs_DeleteObject(yaffs_Object *obj)
- {
-+int retVal = -1;
-       switch (obj->variantType) {
-       case YAFFS_OBJECT_TYPE_FILE:
--              yaffs_DeleteFile(obj);
-+              retVal = yaffs_DeleteFile(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_DIRECTORY:
--              yaffs_DeleteDirectory(obj);
-+              return yaffs_DeleteDirectory(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_SYMLINK:
--              yaffs_DeleteSymLink(obj);
-+              retVal = yaffs_DeleteSymLink(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_HARDLINK:
--              yaffs_DeleteHardLink(obj);
-+              retVal = yaffs_DeleteHardLink(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_SPECIAL:
--              yaffs_DoGenericObjectDeletion(obj);
-+              retVal = yaffs_DoGenericObjectDeletion(obj);
-               break;
-       case YAFFS_OBJECT_TYPE_UNKNOWN:
-+              retVal = 0;
-               break;          /* should not happen. */
-       }
-+
-+      return retVal;
- }
--static int yaffs_UnlinkWorker(yaffs_Object * obj)
-+static int yaffs_UnlinkWorker(yaffs_Object *obj)
- {
-+      int immediateDeletion = 0;
-+
-+#ifdef __KERNEL__
-+      if (!obj->myInode)
-+              immediateDeletion = 1;
-+#else
-+      if (obj->inUse <= 0)
-+              immediateDeletion = 1;
-+#endif
-+
-       if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-               return yaffs_DeleteHardLink(obj);
--      } else if (!list_empty(&obj->hardLinks)) {
-+      } else if (!ylist_empty(&obj->hardLinks)) {
-               /* Curve ball: We're unlinking an object that has a hardlink.
-                *
-                * This problem arises because we are not strictly following
-@@ -5215,24 +5251,24 @@ static int yaffs_UnlinkWorker(yaffs_Obje
-               int retVal;
-               YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
--              hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
-+              hl = ylist_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
--              list_del_init(&hl->hardLinks);
--              list_del_init(&hl->siblings);
-+              ylist_del_init(&hl->hardLinks);
-+              ylist_del_init(&hl->siblings);
-               yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
-               retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
--              if (retVal == YAFFS_OK) {
-+              if (retVal == YAFFS_OK)
-                       retVal = yaffs_DoGenericObjectDeletion(hl);
--              }
-+
-               return retVal;
--      } else {
-+      } else if (immediateDeletion) {
-               switch (obj->variantType) {
-               case YAFFS_OBJECT_TYPE_FILE:
--                      return yaffs_UnlinkFile(obj);
-+                      return yaffs_DeleteFile(obj);
-                       break;
-               case YAFFS_OBJECT_TYPE_DIRECTORY:
-                       return yaffs_DeleteDirectory(obj);
-@@ -5248,21 +5284,22 @@ static int yaffs_UnlinkWorker(yaffs_Obje
-               default:
-                       return YAFFS_FAIL;
-               }
--      }
-+      } else
-+              return yaffs_ChangeObjectName(obj, obj->myDev->unlinkedDir,
-+                                         _Y("unlinked"), 0, 0);
- }
--static int yaffs_UnlinkObject( yaffs_Object *obj)
-+static int yaffs_UnlinkObject(yaffs_Object *obj)
- {
--      if (obj && obj->unlinkAllowed) {
-+      if (obj && obj->unlinkAllowed)
-               return yaffs_UnlinkWorker(obj);
--      }
-       return YAFFS_FAIL;
- }
--int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
-+int yaffs_Unlink(yaffs_Object *dir, const YCHAR *name)
- {
-       yaffs_Object *obj;
-@@ -5272,8 +5309,8 @@ int yaffs_Unlink(yaffs_Object * dir, con
- /*----------------------- Initialisation Scanning ---------------------- */
--static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
--                                     int backwardScanning)
-+static void yaffs_HandleShadowedObject(yaffs_Device *dev, int objId,
-+                              int backwardScanning)
- {
-       yaffs_Object *obj;
-@@ -5286,9 +5323,8 @@ static void yaffs_HandleShadowedObject(y
-               /* Handle YAFFS2 case (backward scanning)
-                * If the shadowed object exists then ignore.
-                */
--              if (yaffs_FindObjectByNumber(dev, objId)) {
-+              if (yaffs_FindObjectByNumber(dev, objId))
-                       return;
--              }
-       }
-       /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
-@@ -5297,6 +5333,8 @@ static void yaffs_HandleShadowedObject(y
-       obj =
-           yaffs_FindOrCreateObjectByNumber(dev, objId,
-                                            YAFFS_OBJECT_TYPE_FILE);
-+      if (!obj)
-+              return;
-       yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
-       obj->variant.fileVariant.shrinkSize = 0;
-       obj->valid = 1;         /* So that we don't read any other info for this file */
-@@ -5325,44 +5363,77 @@ static void yaffs_HardlinkFixup(yaffs_De
-               if (in) {
-                       /* Add the hardlink pointers */
-                       hl->variant.hardLinkVariant.equivalentObject = in;
--                      list_add(&hl->hardLinks, &in->hardLinks);
-+                      ylist_add(&hl->hardLinks, &in->hardLinks);
-               } else {
-                       /* Todo Need to report/handle this better.
-                        * Got a problem... hardlink to a non-existant object
-                        */
-                       hl->variant.hardLinkVariant.equivalentObject = NULL;
--                      INIT_LIST_HEAD(&hl->hardLinks);
-+                      YINIT_LIST_HEAD(&hl->hardLinks);
-               }
--
-       }
-+}
-+
-+
-+
-+
-+static int ybicmp(const void *a, const void *b)
-+{
-+      register int aseq = ((yaffs_BlockIndex *)a)->seq;
-+      register int bseq = ((yaffs_BlockIndex *)b)->seq;
-+      register int ablock = ((yaffs_BlockIndex *)a)->block;
-+      register int bblock = ((yaffs_BlockIndex *)b)->block;
-+      if (aseq == bseq)
-+              return ablock - bblock;
-+      else
-+              return aseq - bseq;
- }
-+struct yaffs_ShadowFixerStruct {
-+      int objectId;
-+      int shadowedId;
-+      struct yaffs_ShadowFixerStruct *next;
-+};
-+
-+static void yaffs_StripDeletedObjects(yaffs_Device *dev)
-+{
-+      /*
-+      *  Sort out state of unlinked and deleted objects after scanning.
-+      */
-+      struct ylist_head *i;
-+      struct ylist_head *n;
-+      yaffs_Object *l;
-+      /* Soft delete all the unlinked files */
-+      ylist_for_each_safe(i, n,
-+              &dev->unlinkedDir->variant.directoryVariant.children) {
-+              if (i) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      yaffs_DeleteObject(l);
-+              }
-+      }
--static int ybicmp(const void *a, const void *b){
--    register int aseq = ((yaffs_BlockIndex *)a)->seq;
--    register int bseq = ((yaffs_BlockIndex *)b)->seq;
--    register int ablock = ((yaffs_BlockIndex *)a)->block;
--    register int bblock = ((yaffs_BlockIndex *)b)->block;
--    if( aseq == bseq )
--        return ablock - bblock;
--    else
--        return aseq - bseq;
-+      ylist_for_each_safe(i, n,
-+              &dev->deletedDir->variant.directoryVariant.children) {
-+              if (i) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      yaffs_DeleteObject(l);
-+              }
-+      }
- }
--static int yaffs_Scan(yaffs_Device * dev)
-+static int yaffs_Scan(yaffs_Device *dev)
- {
-       yaffs_ExtendedTags tags;
-       int blk;
-       int blockIterator;
-       int startIterator;
-       int endIterator;
--      int nBlocksToScan = 0;
-       int result;
-       int chunk;
-@@ -5371,26 +5442,19 @@ static int yaffs_Scan(yaffs_Device * dev
-       yaffs_BlockState state;
-       yaffs_Object *hardList = NULL;
-       yaffs_BlockInfo *bi;
--      int sequenceNumber;
-+      __u32 sequenceNumber;
-       yaffs_ObjectHeader *oh;
-       yaffs_Object *in;
-       yaffs_Object *parent;
--      int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-       int alloc_failed = 0;
-+      struct yaffs_ShadowFixerStruct *shadowFixerList = NULL;
-+
-       __u8 *chunkData;
--      yaffs_BlockIndex *blockIndex = NULL;
--      if (dev->isYaffs2) {
--              T(YAFFS_TRACE_SCAN,
--                (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
--              return YAFFS_FAIL;
--      }
--
--      //TODO  Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
-       T(YAFFS_TRACE_SCAN,
-         (TSTR("yaffs_Scan starts  intstartblk %d intendblk %d..." TENDSTR),
-@@ -5400,12 +5464,6 @@ static int yaffs_Scan(yaffs_Device * dev
-       dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
--      if (dev->isYaffs2) {
--              blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
--              if(!blockIndex)
--                      return YAFFS_FAIL;
--      }
--
-       /* Scan all the blocks to determine their state */
-       for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
-               bi = yaffs_GetBlockInfo(dev, blk);
-@@ -5418,6 +5476,9 @@ static int yaffs_Scan(yaffs_Device * dev
-               bi->blockState = state;
-               bi->sequenceNumber = sequenceNumber;
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_BAD_BLOCK)
-+                      bi->blockState = state = YAFFS_BLOCK_STATE_DEAD;
-+
-               T(YAFFS_TRACE_SCAN_DEBUG,
-                 (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
-                  state, sequenceNumber));
-@@ -5430,70 +5491,21 @@ static int yaffs_Scan(yaffs_Device * dev
-                         (TSTR("Block empty " TENDSTR)));
-                       dev->nErasedBlocks++;
-                       dev->nFreeChunks += dev->nChunksPerBlock;
--              } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
--
--                      /* Determine the highest sequence number */
--                      if (dev->isYaffs2 &&
--                          sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
--                          sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
--
--                              blockIndex[nBlocksToScan].seq = sequenceNumber;
--                              blockIndex[nBlocksToScan].block = blk;
--
--                              nBlocksToScan++;
--
--                              if (sequenceNumber >= dev->sequenceNumber) {
--                                      dev->sequenceNumber = sequenceNumber;
--                              }
--                      } else if (dev->isYaffs2) {
--                              /* TODO: Nasty sequence number! */
--                              T(YAFFS_TRACE_SCAN,
--                                (TSTR
--                                 ("Block scanning block %d has bad sequence number %d"
--                                  TENDSTR), blk, sequenceNumber));
--
--                      }
-               }
-       }
--      /* Sort the blocks
--       * Dungy old bubble sort for now...
--       */
--      if (dev->isYaffs2) {
--              yaffs_BlockIndex temp;
--              int i;
--              int j;
--
--              for (i = 0; i < nBlocksToScan; i++)
--                      for (j = i + 1; j < nBlocksToScan; j++)
--                              if (blockIndex[i].seq > blockIndex[j].seq) {
--                                      temp = blockIndex[j];
--                                      blockIndex[j] = blockIndex[i];
--                                      blockIndex[i] = temp;
--                              }
--      }
--
--      /* Now scan the blocks looking at the data. */
--      if (dev->isYaffs2) {
--              startIterator = 0;
--              endIterator = nBlocksToScan - 1;
--              T(YAFFS_TRACE_SCAN_DEBUG,
--                (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
--      } else {
--              startIterator = dev->internalStartBlock;
--              endIterator = dev->internalEndBlock;
--      }
-+      startIterator = dev->internalStartBlock;
-+      endIterator = dev->internalEndBlock;
-       /* For each block.... */
-       for (blockIterator = startIterator; !alloc_failed && blockIterator <= endIterator;
-            blockIterator++) {
--              if (dev->isYaffs2) {
--                      /* get the block to scan in the correct order */
--                      blk = blockIndex[blockIterator].block;
--              } else {
--                      blk = blockIterator;
--              }
-+              YYIELD();
-+
-+              YYIELD();
-+
-+              blk = blockIterator;
-               bi = yaffs_GetBlockInfo(dev, blk);
-               state = bi->blockState;
-@@ -5511,7 +5523,7 @@ static int yaffs_Scan(yaffs_Device * dev
-                       /* Let's have a good look at this chunk... */
--                      if (!dev->isYaffs2 && tags.chunkDeleted) {
-+                      if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED || tags.chunkDeleted) {
-                               /* YAFFS1 only...
-                                * A deleted chunk
-                                */
-@@ -5540,18 +5552,6 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       dev->allocationBlockFinder = blk;
-                                       /* Set it to here to encourage the allocator to go forth from here. */
--                                      /* Yaffs2 sanity check:
--                                       * This should be the one with the highest sequence number
--                                       */
--                                      if (dev->isYaffs2
--                                          && (dev->sequenceNumber !=
--                                              bi->sequenceNumber)) {
--                                              T(YAFFS_TRACE_ALWAYS,
--                                                (TSTR
--                                                 ("yaffs: Allocation block %d was not highest sequence id:"
--                                                  " block seq = %d, dev seq = %d"
--                                                  TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
--                                      }
-                               }
-                               dev->nFreeChunks += (dev->nChunksPerBlock - c);
-@@ -5570,11 +5570,11 @@ static int yaffs_Scan(yaffs_Device * dev
-                                * the same chunkId).
-                                */
--                              if(!in)
-+                              if (!in)
-                                       alloc_failed = 1;
--                              if(in){
--                                      if(!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,1))
-+                              if (in) {
-+                                      if (!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk, 1))
-                                               alloc_failed = 1;
-                               }
-@@ -5617,7 +5617,7 @@ static int yaffs_Scan(yaffs_Device * dev
-                                        * deleted, and worse still it has changed type. Delete the old object.
-                                        */
--                                      yaffs_DestroyObject(in);
-+                                      yaffs_DeleteObject(in);
-                                       in = 0;
-                               }
-@@ -5627,14 +5627,20 @@ static int yaffs_Scan(yaffs_Device * dev
-                                                                     objectId,
-                                                                     oh->type);
--                              if(!in)
-+                              if (!in)
-                                       alloc_failed = 1;
-                               if (in && oh->shadowsObject > 0) {
--                                      yaffs_HandleShadowedObject(dev,
--                                                                 oh->
--                                                                 shadowsObject,
--                                                                 0);
-+
-+                                      struct yaffs_ShadowFixerStruct *fixer;
-+                                      fixer = YMALLOC(sizeof(struct yaffs_ShadowFixerStruct));
-+                                      if (fixer) {
-+                                              fixer->next = shadowFixerList;
-+                                              shadowFixerList = fixer;
-+                                              fixer->objectId = tags.objectId;
-+                                              fixer->shadowedId = oh->shadowsObject;
-+                                      }
-+
-                               }
-                               if (in && in->valid) {
-@@ -5643,12 +5649,10 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       unsigned existingSerial = in->serial;
-                                       unsigned newSerial = tags.serialNumber;
--                                      if (dev->isYaffs2 ||
--                                          ((existingSerial + 1) & 3) ==
--                                          newSerial) {
-+                                      if (((existingSerial + 1) & 3) == newSerial) {
-                                               /* Use new one - destroy the exisiting one */
-                                               yaffs_DeleteChunk(dev,
--                                                                in->chunkId,
-+                                                                in->hdrChunk,
-                                                                 1, __LINE__);
-                                               in->valid = 0;
-                                       } else {
-@@ -5681,7 +5685,8 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       in->yst_ctime = oh->yst_ctime;
-                                       in->yst_rdev = oh->yst_rdev;
- #endif
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-+                                      in->serial = tags.serialNumber;
-                               } else if (in && !in->valid) {
-                                       /* we need to load this info */
-@@ -5705,7 +5710,8 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       in->yst_ctime = oh->yst_ctime;
-                                       in->yst_rdev = oh->yst_rdev;
- #endif
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-+                                      in->serial = tags.serialNumber;
-                                       yaffs_SetObjectName(in, oh->name);
-                                       in->dirty = 0;
-@@ -5718,25 +5724,25 @@ static int yaffs_Scan(yaffs_Device * dev
-                                           yaffs_FindOrCreateObjectByNumber
-                                           (dev, oh->parentObjectId,
-                                            YAFFS_OBJECT_TYPE_DIRECTORY);
--                                      if (parent->variantType ==
-+                                      if (!parent)
-+                                              alloc_failed = 1;
-+                                      if (parent && parent->variantType ==
-                                           YAFFS_OBJECT_TYPE_UNKNOWN) {
-                                               /* Set up as a directory */
-                                               parent->variantType =
--                                                  YAFFS_OBJECT_TYPE_DIRECTORY;
--                                              INIT_LIST_HEAD(&parent->variant.
--                                                             directoryVariant.
--                                                             children);
--                                      } else if (parent->variantType !=
--                                                 YAFFS_OBJECT_TYPE_DIRECTORY)
--                                      {
-+                                                      YAFFS_OBJECT_TYPE_DIRECTORY;
-+                                              YINIT_LIST_HEAD(&parent->variant.
-+                                                              directoryVariant.
-+                                                              children);
-+                                      } else if (!parent || parent->variantType !=
-+                                                 YAFFS_OBJECT_TYPE_DIRECTORY) {
-                                               /* Hoosterman, another problem....
-                                                * We're trying to use a non-directory as a directory
-                                                */
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR
--                                                 ("yaffs tragedy: attempting to use non-directory as"
--                                                  " a directory in scan. Put in lost+found."
-+                                                 ("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
-                                                   TENDSTR)));
-                                               parent = dev->lostNFoundDir;
-                                       }
-@@ -5760,15 +5766,6 @@ static int yaffs_Scan(yaffs_Device * dev
-                                               /* Todo got a problem */
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_FILE:
--                                              if (dev->isYaffs2
--                                                  && oh->isShrink) {
--                                                      /* Prune back the shrunken chunks */
--                                                      yaffs_PruneResizedChunks
--                                                          (in, oh->fileSize);
--                                                      /* Mark the block as having a shrinkHeader */
--                                                      bi->hasShrinkHeader = 1;
--                                              }
--
-                                               if (dev->useHeaderFileSize)
-                                                       in->variant.fileVariant.
-@@ -5778,11 +5775,11 @@ static int yaffs_Scan(yaffs_Device * dev
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_HARDLINK:
-                                               in->variant.hardLinkVariant.
--                                                  equivalentObjectId =
--                                                  oh->equivalentObjectId;
-+                                                      equivalentObjectId =
-+                                                      oh->equivalentObjectId;
-                                               in->hardLinks.next =
--                                                  (struct list_head *)
--                                                  hardList;
-+                                                      (struct ylist_head *)
-+                                                      hardList;
-                                               hardList = in;
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -5794,15 +5791,17 @@ static int yaffs_Scan(yaffs_Device * dev
-                                       case YAFFS_OBJECT_TYPE_SYMLINK:
-                                               in->variant.symLinkVariant.alias =
-                                                   yaffs_CloneString(oh->alias);
--                                              if(!in->variant.symLinkVariant.alias)
-+                                              if (!in->variant.symLinkVariant.alias)
-                                                       alloc_failed = 1;
-                                               break;
-                                       }
-+/*
-                                       if (parent == dev->deletedDir) {
-                                               yaffs_DestroyObject(in);
-                                               bi->hasShrinkHeader = 1;
-                                       }
-+*/
-                               }
-                       }
-               }
-@@ -5823,10 +5822,6 @@ static int yaffs_Scan(yaffs_Device * dev
-       }
--      if (blockIndex) {
--              YFREE(blockIndex);
--      }
--
-       /* Ok, we've done all the scanning.
-        * Fix up the hard link chains.
-@@ -5834,32 +5829,36 @@ static int yaffs_Scan(yaffs_Device * dev
-        * hardlinks.
-        */
--      yaffs_HardlinkFixup(dev,hardList);
-+      yaffs_HardlinkFixup(dev, hardList);
--      /* Handle the unlinked files. Since they were left in an unlinked state we should
--       * just delete them.
--       */
-+      /* Fix up any shadowed objects */
-       {
--              struct list_head *i;
--              struct list_head *n;
-+              struct yaffs_ShadowFixerStruct *fixer;
-+              yaffs_Object *obj;
--              yaffs_Object *l;
--              /* Soft delete all the unlinked files */
--              list_for_each_safe(i, n,
--                                 &dev->unlinkedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
--                      }
-+              while (shadowFixerList) {
-+                      fixer = shadowFixerList;
-+                      shadowFixerList = fixer->next;
-+                      /* Complete the rename transaction by deleting the shadowed object
-+                       * then setting the object header to unshadowed.
-+                       */
-+                      obj = yaffs_FindObjectByNumber(dev, fixer->shadowedId);
-+                      if (obj)
-+                              yaffs_DeleteObject(obj);
-+
-+                      obj = yaffs_FindObjectByNumber(dev, fixer->objectId);
-+
-+                      if (obj)
-+                              yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
-+
-+                      YFREE(fixer);
-               }
-       }
-       yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
--      if(alloc_failed){
-+      if (alloc_failed)
-               return YAFFS_FAIL;
--      }
-       T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
-@@ -5871,25 +5870,27 @@ static void yaffs_CheckObjectDetailsLoad
- {
-       __u8 *chunkData;
-       yaffs_ObjectHeader *oh;
--      yaffs_Device *dev = in->myDev;
-+      yaffs_Device *dev;
-       yaffs_ExtendedTags tags;
-       int result;
-       int alloc_failed = 0;
--      if(!in)
-+      if (!in)
-               return;
-+      dev = in->myDev;
-+
- #if 0
--      T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
-+      T(YAFFS_TRACE_SCAN, (TSTR("details for object %d %s loaded" TENDSTR),
-               in->objectId,
-               in->lazyLoaded ? "not yet" : "already"));
- #endif
--      if(in->lazyLoaded){
-+      if (in->lazyLoaded && in->hdrChunk > 0) {
-               in->lazyLoaded = 0;
-               chunkData = yaffs_GetTempBuffer(dev, __LINE__);
--              result = yaffs_ReadChunkWithTagsFromNAND(dev,in->chunkId,chunkData,&tags);
-+              result = yaffs_ReadChunkWithTagsFromNAND(dev, in->hdrChunk, chunkData, &tags);
-               oh = (yaffs_ObjectHeader *) chunkData;
-               in->yst_mode = oh->yst_mode;
-@@ -5911,18 +5912,18 @@ static void yaffs_CheckObjectDetailsLoad
- #endif
-               yaffs_SetObjectName(in, oh->name);
--              if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
--                       in->variant.symLinkVariant.alias =
-+              if (in->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+                      in->variant.symLinkVariant.alias =
-                                                   yaffs_CloneString(oh->alias);
--                      if(!in->variant.symLinkVariant.alias)
-+                      if (!in->variant.symLinkVariant.alias)
-                               alloc_failed = 1; /* Not returned to caller */
-               }
--              yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
-+              yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-       }
- }
--static int yaffs_ScanBackwards(yaffs_Device * dev)
-+static int yaffs_ScanBackwards(yaffs_Device *dev)
- {
-       yaffs_ExtendedTags tags;
-       int blk;
-@@ -5938,7 +5939,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       yaffs_BlockState state;
-       yaffs_Object *hardList = NULL;
-       yaffs_BlockInfo *bi;
--      int sequenceNumber;
-+      __u32 sequenceNumber;
-       yaffs_ObjectHeader *oh;
-       yaffs_Object *in;
-       yaffs_Object *parent;
-@@ -5972,12 +5973,12 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
--      if(!blockIndex) {
-+      if (!blockIndex) {
-               blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
-               altBlockIndex = 1;
-       }
--      if(!blockIndex) {
-+      if (!blockIndex) {
-               T(YAFFS_TRACE_SCAN,
-                 (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
-               return YAFFS_FAIL;
-@@ -5999,15 +6000,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-               bi->blockState = state;
-               bi->sequenceNumber = sequenceNumber;
--              if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
-                       bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
-+              if (bi->sequenceNumber == YAFFS_SEQUENCE_BAD_BLOCK)
-+                      bi->blockState = state = YAFFS_BLOCK_STATE_DEAD;
-               T(YAFFS_TRACE_SCAN_DEBUG,
-                 (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
-                  state, sequenceNumber));
--              if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
-+              if (state == YAFFS_BLOCK_STATE_CHECKPOINT) {
-                       dev->blocksInCheckpoint++;
-               } else if (state == YAFFS_BLOCK_STATE_DEAD) {
-@@ -6021,8 +6024,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-               } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-                       /* Determine the highest sequence number */
--                      if (dev->isYaffs2 &&
--                          sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
-+                      if (sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
-                           sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-                               blockIndex[nBlocksToScan].seq = sequenceNumber;
-@@ -6030,10 +6032,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               nBlocksToScan++;
--                              if (sequenceNumber >= dev->sequenceNumber) {
-+                              if (sequenceNumber >= dev->sequenceNumber)
-                                       dev->sequenceNumber = sequenceNumber;
--                              }
--                      } else if (dev->isYaffs2) {
-+                      } else {
-                               /* TODO: Nasty sequence number! */
-                               T(YAFFS_TRACE_SCAN,
-                                 (TSTR
-@@ -6053,11 +6054,13 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       /* Sort the blocks */
- #ifndef CONFIG_YAFFS_USE_OWN_SORT
--      yaffs_qsort(blockIndex, nBlocksToScan,
--              sizeof(yaffs_BlockIndex), ybicmp);
-+      {
-+              /* Use qsort now. */
-+              yaffs_qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
-+      }
- #else
-       {
--              /* Dungy old bubble sort... */
-+              /* Dungy old bubble sort... */
-               yaffs_BlockIndex temp;
-               int i;
-@@ -6075,7 +6078,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       YYIELD();
--      T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-+      T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-       /* Now scan the blocks looking at the data. */
-       startIterator = 0;
-@@ -6085,10 +6088,10 @@ static int yaffs_ScanBackwards(yaffs_Dev
-       /* For each block.... backwards */
-       for (blockIterator = endIterator; !alloc_failed && blockIterator >= startIterator;
--           blockIterator--) {
--              /* Cooperative multitasking! This loop can run for so
-+                      blockIterator--) {
-+              /* Cooperative multitasking! This loop can run for so
-                  long that watchdog timers expire. */
--              YYIELD();
-+              YYIELD();
-               /* get the block to scan in the correct order */
-               blk = blockIndex[blockIterator].block;
-@@ -6127,10 +6130,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                * this is the one being allocated from
-                                */
--                              if(foundChunksInBlock)
--                              {
-+                              if (foundChunksInBlock) {
-                                       /* This is a chunk that was skipped due to failing the erased check */
--
-                               } else if (c == 0) {
-                                       /* We're looking at the first chunk in the block so the block is unused */
-                                       state = YAFFS_BLOCK_STATE_EMPTY;
-@@ -6138,7 +6139,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               } else {
-                                       if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
-                                           state == YAFFS_BLOCK_STATE_ALLOCATING) {
--                                              if(dev->sequenceNumber == bi->sequenceNumber) {
-+                                              if (dev->sequenceNumber == bi->sequenceNumber) {
-                                                       /* this is the block being allocated from */
-                                                       T(YAFFS_TRACE_SCAN,
-@@ -6150,27 +6151,31 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                       dev->allocationBlock = blk;
-                                                       dev->allocationPage = c;
-                                                       dev->allocationBlockFinder = blk;
--                                              }
--                                              else {
-+                                              } else {
-                                                       /* This is a partially written block that is not
-                                                        * the current allocation block. This block must have
-                                                        * had a write failure, so set up for retirement.
-                                                        */
--                                                       bi->needsRetiring = 1;
-+                                                       /* bi->needsRetiring = 1; ??? TODO */
-                                                        bi->gcPrioritise = 1;
-                                                        T(YAFFS_TRACE_ALWAYS,
--                                                       (TSTR("Partially written block %d being set for retirement" TENDSTR),
-+                                                       (TSTR("Partially written block %d detected" TENDSTR),
-                                                        blk));
-                                               }
--
-                                       }
--
-                               }
-                               dev->nFreeChunks++;
-+                      } else if (tags.eccResult == YAFFS_ECC_RESULT_UNFIXED) {
-+                              T(YAFFS_TRACE_SCAN,
-+                                (TSTR(" Unfixed ECC in chunk(%d:%d), chunk ignored"TENDSTR),
-+                                blk, c));
-+
-+                                dev->nFreeChunks++;
-+
-                       } else if (tags.chunkId > 0) {
-                               /* chunkId > 0 so it is a data chunk... */
-                               unsigned int endpos;
-@@ -6187,7 +6192,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                                     tags.
-                                                                     objectId,
-                                                                     YAFFS_OBJECT_TYPE_FILE);
--                              if(!in){
-+                              if (!in) {
-                                       /* Out of memory */
-                                       alloc_failed = 1;
-                               }
-@@ -6197,8 +6202,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                   && chunkBase <
-                                   in->variant.fileVariant.shrinkSize) {
-                                       /* This has not been invalidated by a resize */
--                                      if(!yaffs_PutChunkIntoFile(in, tags.chunkId,
--                                                             chunk, -1)){
-+                                      if (!yaffs_PutChunkIntoFile(in, tags.chunkId,
-+                                                             chunk, -1)) {
-                                               alloc_failed = 1;
-                                       }
-@@ -6221,7 +6226,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                   scannedFileSize;
-                                       }
--                              } else if(in) {
-+                              } else if (in) {
-                                       /* This chunk has been invalidated by a resize, so delete */
-                                       yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
-@@ -6242,6 +6247,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       in = yaffs_FindOrCreateObjectByNumber
-                                           (dev, tags.objectId,
-                                            tags.extraObjectType);
-+                                      if (!in)
-+                                              alloc_failed = 1;
-                               }
-                               if (!in ||
-@@ -6251,8 +6258,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                   tags.extraShadows ||
-                                   (!in->valid &&
-                                   (tags.objectId == YAFFS_OBJECTID_ROOT ||
--                                   tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
--                                  ) {
-+                                   tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))) {
-                                       /* If we don't have  valid info then we need to read the chunk
-                                        * TODO In future we can probably defer reading the chunk and
-@@ -6266,8 +6272,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       oh = (yaffs_ObjectHeader *) chunkData;
--                                      if (!in)
-+                                      if (dev->inbandTags) {
-+                                              /* Fix up the header if they got corrupted by inband tags */
-+                                              oh->shadowsObject = oh->inbandShadowsObject;
-+                                              oh->isShrink = oh->inbandIsShrink;
-+                                      }
-+
-+                                      if (!in) {
-                                               in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
-+                                              if (!in)
-+                                                      alloc_failed = 1;
-+                                      }
-                               }
-@@ -6275,10 +6290,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       /* TODO Hoosterman we have a problem! */
-                                       T(YAFFS_TRACE_ERROR,
-                                         (TSTR
--                                         ("yaffs tragedy: Could not make object for object  %d  "
--                                          "at chunk %d during scan"
-+                                         ("yaffs tragedy: Could not make object for object  %d at chunk %d during scan"
-                                           TENDSTR), tags.objectId, chunk));
--
-+                                      continue;
-                               }
-                               if (in->valid) {
-@@ -6289,10 +6303,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
-                                            ((oh &&
--                                             oh-> type == YAFFS_OBJECT_TYPE_FILE)||
-+                                             oh->type == YAFFS_OBJECT_TYPE_FILE) ||
-                                             (tags.extraHeaderInfoAvailable  &&
--                                             tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
--                                          ) {
-+                                             tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))) {
-                                               __u32 thisSize =
-                                                   (oh) ? oh->fileSize : tags.
-                                                   extraFileLength;
-@@ -6300,7 +6313,9 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                   (oh) ? oh->
-                                                   parentObjectId : tags.
-                                                   extraParentObjectId;
--                                              unsigned isShrink =
-+
-+
-+                                              isShrink =
-                                                   (oh) ? oh->isShrink : tags.
-                                                   extraIsShrinkHeader;
-@@ -6323,9 +6338,8 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                                           thisSize;
-                                               }
--                                              if (isShrink) {
-+                                              if (isShrink)
-                                                       bi->hasShrinkHeader = 1;
--                                              }
-                                       }
-                                       /* Use existing - destroy this one. */
-@@ -6333,6 +6347,17 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                               }
-+                              if (!in->valid && in->variantType !=
-+                                  (oh ? oh->type : tags.extraObjectType))
-+                                      T(YAFFS_TRACE_ERROR, (
-+                                              TSTR("yaffs tragedy: Bad object type, "
-+                                          TCONT("%d != %d, for object %d at chunk ")
-+                                          TCONT("%d during scan")
-+                                              TENDSTR), oh ?
-+                                          oh->type : tags.extraObjectType,
-+                                          in->variantType, tags.objectId,
-+                                          chunk));
-+
-                               if (!in->valid &&
-                                   (tags.objectId == YAFFS_OBJECTID_ROOT ||
-                                    tags.objectId ==
-@@ -6340,7 +6365,7 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       /* We only load some info, don't fiddle with directory structure */
-                                       in->valid = 1;
--                                      if(oh) {
-+                                      if (oh) {
-                                               in->variantType = oh->type;
-                                               in->yst_mode = oh->yst_mode;
-@@ -6365,15 +6390,15 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               in->lazyLoaded = 1;
-                                       }
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
-                               } else if (!in->valid) {
-                                       /* we need to load this info */
-                                       in->valid = 1;
--                                      in->chunkId = chunk;
-+                                      in->hdrChunk = chunk;
--                                      if(oh) {
-+                                      if (oh) {
-                                               in->variantType = oh->type;
-                                               in->yst_mode = oh->yst_mode;
-@@ -6403,20 +6428,19 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               yaffs_SetObjectName(in, oh->name);
-                                               parent =
-                                                   yaffs_FindOrCreateObjectByNumber
--                                                      (dev, oh->parentObjectId,
--                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-+                                                      (dev, oh->parentObjectId,
-+                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-                                                fileSize = oh->fileSize;
--                                               isShrink = oh->isShrink;
-+                                               isShrink = oh->isShrink;
-                                                equivalentObjectId = oh->equivalentObjectId;
--                                      }
--                                      else {
-+                                      } else {
-                                               in->variantType = tags.extraObjectType;
-                                               parent =
-                                                   yaffs_FindOrCreateObjectByNumber
--                                                      (dev, tags.extraParentObjectId,
--                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-+                                                      (dev, tags.extraParentObjectId,
-+                                                       YAFFS_OBJECT_TYPE_DIRECTORY);
-                                                fileSize = tags.extraFileLength;
-                                                isShrink = tags.extraIsShrinkHeader;
-                                                equivalentObjectId = tags.extraEquivalentObjectId;
-@@ -6425,29 +6449,30 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                       }
-                                       in->dirty = 0;
-+                                      if (!parent)
-+                                              alloc_failed = 1;
-+
-                                       /* directory stuff...
-                                        * hook up to parent
-                                        */
--                                      if (parent->variantType ==
-+                                      if (parent && parent->variantType ==
-                                           YAFFS_OBJECT_TYPE_UNKNOWN) {
-                                               /* Set up as a directory */
-                                               parent->variantType =
--                                                  YAFFS_OBJECT_TYPE_DIRECTORY;
--                                              INIT_LIST_HEAD(&parent->variant.
--                                                             directoryVariant.
--                                                             children);
--                                      } else if (parent->variantType !=
--                                                 YAFFS_OBJECT_TYPE_DIRECTORY)
--                                      {
-+                                                      YAFFS_OBJECT_TYPE_DIRECTORY;
-+                                              YINIT_LIST_HEAD(&parent->variant.
-+                                                      directoryVariant.
-+                                                      children);
-+                                      } else if (!parent || parent->variantType !=
-+                                                 YAFFS_OBJECT_TYPE_DIRECTORY) {
-                                               /* Hoosterman, another problem....
-                                                * We're trying to use a non-directory as a directory
-                                                */
-                                               T(YAFFS_TRACE_ERROR,
-                                                 (TSTR
--                                                 ("yaffs tragedy: attempting to use non-directory as"
--                                                  " a directory in scan. Put in lost+found."
-+                                                 ("yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
-                                                   TENDSTR)));
-                                               parent = dev->lostNFoundDir;
-                                       }
-@@ -6494,12 +6519,12 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_HARDLINK:
--                                              if(!itsUnlinked) {
--                                                in->variant.hardLinkVariant.equivalentObjectId =
--                                                  equivalentObjectId;
--                                                in->hardLinks.next =
--                                                  (struct list_head *) hardList;
--                                                hardList = in;
-+                                              if (!itsUnlinked) {
-+                                                      in->variant.hardLinkVariant.equivalentObjectId =
-+                                                              equivalentObjectId;
-+                                                      in->hardLinks.next =
-+                                                              (struct ylist_head *) hardList;
-+                                                      hardList = in;
-                                               }
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_DIRECTORY:
-@@ -6509,12 +6534,11 @@ static int yaffs_ScanBackwards(yaffs_Dev
-                                               /* Do nothing */
-                                               break;
-                                       case YAFFS_OBJECT_TYPE_SYMLINK:
--                                              if(oh){
--                                                 in->variant.symLinkVariant.alias =
--                                                  yaffs_CloneString(oh->
--                                                                    alias);
--                                                 if(!in->variant.symLinkVariant.alias)
--                                                      alloc_failed = 1;
-+                                              if (oh) {
-+                                                      in->variant.symLinkVariant.alias =
-+                                                              yaffs_CloneString(oh->alias);
-+                                                      if (!in->variant.symLinkVariant.alias)
-+                                                              alloc_failed = 1;
-                                               }
-                                               break;
-                                       }
-@@ -6551,75 +6575,129 @@ static int yaffs_ScanBackwards(yaffs_Dev
-        * We should now have scanned all the objects, now it's time to add these
-        * hardlinks.
-        */
--      yaffs_HardlinkFixup(dev,hardList);
-+      yaffs_HardlinkFixup(dev, hardList);
--      /*
--      *  Sort out state of unlinked and deleted objects.
--      */
--      {
--              struct list_head *i;
--              struct list_head *n;
-+      yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
--              yaffs_Object *l;
-+      if (alloc_failed)
-+              return YAFFS_FAIL;
--              /* Soft delete all the unlinked files */
--              list_for_each_safe(i, n,
--                                 &dev->unlinkedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
--                      }
--              }
-+      T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
--              /* Soft delete all the deletedDir files */
--              list_for_each_safe(i, n,
--                                 &dev->deletedDir->variant.directoryVariant.
--                                 children) {
--                      if (i) {
--                              l = list_entry(i, yaffs_Object, siblings);
--                              yaffs_DestroyObject(l);
-+      return YAFFS_OK;
-+}
--                      }
-+/*------------------------------  Directory Functions ----------------------------- */
-+
-+static void yaffs_VerifyObjectInDirectory(yaffs_Object *obj)
-+{
-+      struct ylist_head *lh;
-+      yaffs_Object *listObj;
-+
-+      int count = 0;
-+
-+      if (!obj) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("No object to verify" TENDSTR)));
-+              YBUG();
-+              return;
-+      }
-+
-+      if (yaffs_SkipVerification(obj->myDev))
-+              return;
-+
-+      if (!obj->parent) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Object does not have parent" TENDSTR)));
-+              YBUG();
-+              return;
-+      }
-+
-+      if (obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Parent is not directory" TENDSTR)));
-+              YBUG();
-+      }
-+
-+      /* Iterate through the objects in each hash entry */
-+
-+      ylist_for_each(lh, &obj->parent->variant.directoryVariant.children) {
-+              if (lh) {
-+                      listObj = ylist_entry(lh, yaffs_Object, siblings);
-+                      yaffs_VerifyObject(listObj);
-+                      if (obj == listObj)
-+                              count++;
-               }
-+       }
-+
-+      if (count != 1) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Object in directory %d times" TENDSTR), count));
-+              YBUG();
-       }
-+}
--      yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-+static void yaffs_VerifyDirectory(yaffs_Object *directory)
-+{
-+      struct ylist_head *lh;
-+      yaffs_Object *listObj;
--      if(alloc_failed){
--              return YAFFS_FAIL;
-+      if (!directory) {
-+              YBUG();
-+              return;
-       }
--      T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
-+      if (yaffs_SkipFullVerification(directory->myDev))
-+              return;
--      return YAFFS_OK;
-+      if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-+              T(YAFFS_TRACE_ALWAYS, (TSTR("Directory has wrong type: %d" TENDSTR), directory->variantType));
-+              YBUG();
-+      }
-+
-+      /* Iterate through the objects in each hash entry */
-+
-+      ylist_for_each(lh, &directory->variant.directoryVariant.children) {
-+              if (lh) {
-+                      listObj = ylist_entry(lh, yaffs_Object, siblings);
-+                      if (listObj->parent != directory) {
-+                              T(YAFFS_TRACE_ALWAYS, (TSTR("Object in directory list has wrong parent %p" TENDSTR), listObj->parent));
-+                              YBUG();
-+                      }
-+                      yaffs_VerifyObjectInDirectory(listObj);
-+              }
-+      }
- }
--/*------------------------------  Directory Functions ----------------------------- */
--static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
-+static void yaffs_RemoveObjectFromDirectory(yaffs_Object *obj)
- {
-       yaffs_Device *dev = obj->myDev;
-+      yaffs_Object *parent;
-+
-+      yaffs_VerifyObjectInDirectory(obj);
-+      parent = obj->parent;
-+
-+      yaffs_VerifyDirectory(parent);
--      if(dev && dev->removeObjectCallback)
-+      if (dev && dev->removeObjectCallback)
-               dev->removeObjectCallback(obj);
--      list_del_init(&obj->siblings);
-+
-+      ylist_del_init(&obj->siblings);
-       obj->parent = NULL;
-+
-+      yaffs_VerifyDirectory(parent);
- }
--static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
--                                     yaffs_Object * obj)
-+static void yaffs_AddObjectToDirectory(yaffs_Object *directory,
-+                                      yaffs_Object *obj)
- {
--
-       if (!directory) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
-                  ("tragedy: Trying to add an object to a null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return;
-       }
-       if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6631,37 +6709,42 @@ static void yaffs_AddObjectToDirectory(y
-       if (obj->siblings.prev == NULL) {
-               /* Not initialised */
--              INIT_LIST_HEAD(&obj->siblings);
--
--      } else if (!list_empty(&obj->siblings)) {
--              /* If it is holed up somewhere else, un hook it */
--              yaffs_RemoveObjectFromDirectory(obj);
-+              YBUG();
-       }
-+
-+
-+      yaffs_VerifyDirectory(directory);
-+
-+      yaffs_RemoveObjectFromDirectory(obj);
-+
-+
-       /* Now add it */
--      list_add(&obj->siblings, &directory->variant.directoryVariant.children);
-+      ylist_add(&obj->siblings, &directory->variant.directoryVariant.children);
-       obj->parent = directory;
-       if (directory == obj->myDev->unlinkedDir
--          || directory == obj->myDev->deletedDir) {
-+                      || directory == obj->myDev->deletedDir) {
-               obj->unlinked = 1;
-               obj->myDev->nUnlinkedFiles++;
-               obj->renameAllowed = 0;
-       }
-+
-+      yaffs_VerifyDirectory(directory);
-+      yaffs_VerifyObjectInDirectory(obj);
- }
--yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
--                                   const YCHAR * name)
-+yaffs_Object *yaffs_FindObjectByName(yaffs_Object *directory,
-+                                   const YCHAR *name)
- {
-       int sum;
--      struct list_head *i;
-+      struct ylist_head *i;
-       YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
-       yaffs_Object *l;
--      if (!name) {
-+      if (!name)
-               return NULL;
--      }
-       if (!directory) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6669,6 +6752,7 @@ yaffs_Object *yaffs_FindObjectByName(yaf
-                  ("tragedy: yaffs_FindObjectByName: null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return NULL;
-       }
-       if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-@@ -6679,28 +6763,27 @@ yaffs_Object *yaffs_FindObjectByName(yaf
-       sum = yaffs_CalcNameSum(name);
--      list_for_each(i, &directory->variant.directoryVariant.children) {
-+      ylist_for_each(i, &directory->variant.directoryVariant.children) {
-               if (i) {
--                      l = list_entry(i, yaffs_Object, siblings);
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+
-+                      if (l->parent != directory)
-+                              YBUG();
-                       yaffs_CheckObjectDetailsLoaded(l);
-                       /* Special case for lost-n-found */
-                       if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
--                              if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
-+                              if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0)
-                                       return l;
--                              }
--                      } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
--                      {
--                              /* LostnFound cunk called Objxxx
-+                      } else if (yaffs_SumCompare(l->sum, sum) || l->hdrChunk <= 0) {
-+                              /* LostnFound chunk called Objxxx
-                                * Do a real check
-                                */
-                               yaffs_GetObjectName(l, buffer,
-                                                   YAFFS_MAX_NAME_LENGTH);
--                              if (yaffs_strncmp(name, buffer,YAFFS_MAX_NAME_LENGTH) == 0) {
-+                              if (yaffs_strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH) == 0)
-                                       return l;
--                              }
--
-                       }
-               }
-       }
-@@ -6710,10 +6793,10 @@ yaffs_Object *yaffs_FindObjectByName(yaf
- #if 0
--int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
--                                 int (*fn) (yaffs_Object *))
-+int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,
-+                                      int (*fn) (yaffs_Object *))
- {
--      struct list_head *i;
-+      struct ylist_head *i;
-       yaffs_Object *l;
-       if (!theDir) {
-@@ -6722,20 +6805,21 @@ int yaffs_ApplyToDirectoryChildren(yaffs
-                  ("tragedy: yaffs_FindObjectByName: null pointer directory"
-                   TENDSTR)));
-               YBUG();
-+              return YAFFS_FAIL;
-       }
-       if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
-                  ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
-               YBUG();
-+              return YAFFS_FAIL;
-       }
--      list_for_each(i, &theDir->variant.directoryVariant.children) {
-+      ylist_for_each(i, &theDir->variant.directoryVariant.children) {
-               if (i) {
--                      l = list_entry(i, yaffs_Object, siblings);
--                      if (l && !fn(l)) {
-+                      l = ylist_entry(i, yaffs_Object, siblings);
-+                      if (l && !fn(l))
-                               return YAFFS_FAIL;
--                      }
-               }
-       }
-@@ -6748,7 +6832,7 @@ int yaffs_ApplyToDirectoryChildren(yaffs
-  * actual object.
-  */
--yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
-+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object *obj)
- {
-       if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
-               /* We want the object id of the equivalent object, not this one */
-@@ -6756,10 +6840,9 @@ yaffs_Object *yaffs_GetEquivalentObject(
-               yaffs_CheckObjectDetailsLoaded(obj);
-       }
-       return obj;
--
- }
--int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
-+int yaffs_GetObjectName(yaffs_Object *obj, YCHAR *name, int buffSize)
- {
-       memset(name, 0, buffSize * sizeof(YCHAR));
-@@ -6767,18 +6850,26 @@ int yaffs_GetObjectName(yaffs_Object * o
-       if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
-               yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
--      } else if (obj->chunkId <= 0) {
-+      } else if (obj->hdrChunk <= 0) {
-               YCHAR locName[20];
-+              YCHAR numString[20];
-+              YCHAR *x = &numString[19];
-+              unsigned v = obj->objectId;
-+              numString[19] = 0;
-+              while (v > 0) {
-+                      x--;
-+                      *x = '0' + (v % 10);
-+                      v /= 10;
-+              }
-               /* make up a name */
--              yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
--                            obj->objectId);
-+              yaffs_strcpy(locName, YAFFS_LOSTNFOUND_PREFIX);
-+              yaffs_strcat(locName, x);
-               yaffs_strncpy(name, locName, buffSize - 1);
-       }
- #ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
--      else if (obj->shortName[0]) {
-+      else if (obj->shortName[0])
-               yaffs_strcpy(name, obj->shortName);
--      }
- #endif
-       else {
-               int result;
-@@ -6788,9 +6879,9 @@ int yaffs_GetObjectName(yaffs_Object * o
-               memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
--              if (obj->chunkId >= 0) {
-+              if (obj->hdrChunk > 0) {
-                       result = yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
--                                                      obj->chunkId, buffer,
-+                                                      obj->hdrChunk, buffer,
-                                                       NULL);
-               }
-               yaffs_strncpy(name, oh->name, buffSize - 1);
-@@ -6801,46 +6892,43 @@ int yaffs_GetObjectName(yaffs_Object * o
-       return yaffs_strlen(name);
- }
--int yaffs_GetObjectFileLength(yaffs_Object * obj)
-+int yaffs_GetObjectFileLength(yaffs_Object *obj)
- {
--
-       /* Dereference any hard linking */
-       obj = yaffs_GetEquivalentObject(obj);
--      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_FILE)
-               return obj->variant.fileVariant.fileSize;
--      }
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
-               return yaffs_strlen(obj->variant.symLinkVariant.alias);
--      } else {
-+      else {
-               /* Only a directory should drop through to here */
-               return obj->myDev->nDataBytesPerChunk;
-       }
- }
--int yaffs_GetObjectLinkCount(yaffs_Object * obj)
-+int yaffs_GetObjectLinkCount(yaffs_Object *obj)
- {
-       int count = 0;
--      struct list_head *i;
-+      struct ylist_head *i;
--      if (!obj->unlinked) {
--              count++;        /* the object itself */
--      }
--      list_for_each(i, &obj->hardLinks) {
--              count++;        /* add the hard links; */
--      }
--      return count;
-+      if (!obj->unlinked)
-+              count++;                /* the object itself */
-+
-+      ylist_for_each(i, &obj->hardLinks)
-+              count++;                /* add the hard links; */
-+      return count;
- }
--int yaffs_GetObjectInode(yaffs_Object * obj)
-+int yaffs_GetObjectInode(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-       return obj->objectId;
- }
--unsigned yaffs_GetObjectType(yaffs_Object * obj)
-+unsigned yaffs_GetObjectType(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
-@@ -6872,19 +6960,18 @@ unsigned yaffs_GetObjectType(yaffs_Objec
-       }
- }
--YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
-+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object *obj)
- {
-       obj = yaffs_GetEquivalentObject(obj);
--      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
-+      if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
-               return yaffs_CloneString(obj->variant.symLinkVariant.alias);
--      } else {
-+      else
-               return yaffs_CloneString(_Y(""));
--      }
- }
- #ifndef CONFIG_YAFFS_WINCE
--int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
-+int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr)
- {
-       unsigned int valid = attr->ia_valid;
-@@ -6910,7 +6997,7 @@ int yaffs_SetAttributes(yaffs_Object * o
-       return YAFFS_OK;
- }
--int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
-+int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr)
- {
-       unsigned int valid = 0;
-@@ -6934,13 +7021,12 @@ int yaffs_GetAttributes(yaffs_Object * o
-       attr->ia_valid = valid;
-       return YAFFS_OK;
--
- }
- #endif
- #if 0
--int yaffs_DumpObject(yaffs_Object * obj)
-+int yaffs_DumpObject(yaffs_Object *obj)
- {
-       YCHAR name[257];
-@@ -6951,7 +7037,7 @@ int yaffs_DumpObject(yaffs_Object * obj)
-          ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
-           " chunk %d type %d size %d\n"
-           TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
--         obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
-+         obj->dirty, obj->valid, obj->serial, obj->sum, obj->hdrChunk,
-          yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
-       return YAFFS_OK;
-@@ -6960,7 +7046,7 @@ int yaffs_DumpObject(yaffs_Object * obj)
- /*---------------------------- Initialisation code -------------------------------------- */
--static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
-+static int yaffs_CheckDevFunctions(const yaffs_Device *dev)
- {
-       /* Common functions, gotta have */
-@@ -7011,7 +7097,7 @@ static int yaffs_CreateInitialDirectorie
-           yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
-                                     YAFFS_LOSTNFOUND_MODE | S_IFDIR);
--      if(dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir){
-+      if (dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir) {
-               yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
-               return YAFFS_OK;
-       }
-@@ -7019,7 +7105,7 @@ static int yaffs_CreateInitialDirectorie
-       return YAFFS_FAIL;
- }
--int yaffs_GutsInitialise(yaffs_Device * dev)
-+int yaffs_GutsInitialise(yaffs_Device *dev)
- {
-       int init_failed = 0;
-       unsigned x;
-@@ -7040,6 +7126,8 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->chunkOffset = 0;
-       dev->nFreeChunks = 0;
-+      dev->gcBlock = -1;
-+
-       if (dev->startBlock == 0) {
-               dev->internalStartBlock = dev->startBlock + 1;
-               dev->internalEndBlock = dev->endBlock + 1;
-@@ -7049,18 +7137,18 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       /* Check geometry parameters. */
--      if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
--          (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
-+      if ((!dev->inbandTags && dev->isYaffs2 && dev->totalBytesPerChunk < 1024) ||
-+          (!dev->isYaffs2 && dev->totalBytesPerChunk < 512) ||
-+          (dev->inbandTags && !dev->isYaffs2) ||
-            dev->nChunksPerBlock < 2 ||
-            dev->nReservedBlocks < 2 ||
-            dev->internalStartBlock <= 0 ||
-            dev->internalEndBlock <= 0 ||
--           dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2)      // otherwise it is too small
--          ) {
-+           dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2)) {   /* otherwise it is too small */
-               T(YAFFS_TRACE_ALWAYS,
-                 (TSTR
--                 ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
--                  TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
-+                 ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s, inbandTags %d "
-+                  TENDSTR), dev->totalBytesPerChunk, dev->isYaffs2 ? "2" : "", dev->inbandTags));
-               return YAFFS_FAIL;
-       }
-@@ -7070,6 +7158,12 @@ int yaffs_GutsInitialise(yaffs_Device * 
-               return YAFFS_FAIL;
-       }
-+      /* Sort out space for inband tags, if required */
-+      if (dev->inbandTags)
-+              dev->nDataBytesPerChunk = dev->totalBytesPerChunk - sizeof(yaffs_PackedTags2TagsPart);
-+      else
-+              dev->nDataBytesPerChunk = dev->totalBytesPerChunk;
-+
-       /* Got the right mix of functions? */
-       if (!yaffs_CheckDevFunctions(dev)) {
-               /* Function missing */
-@@ -7097,31 +7191,18 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->isMounted = 1;
--
--
-       /* OK now calculate a few things for the device */
-       /*
-        *  Calculate all the chunk size manipulation numbers:
-        */
--       /* Start off assuming it is a power of 2 */
--       dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
--       dev->chunkMask = (1<<dev->chunkShift) - 1;
--
--       if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
--              /* Yes it is a power of 2, disable crumbs */
--              dev->crumbMask = 0;
--              dev->crumbShift = 0;
--              dev->crumbsPerChunk = 0;
--       } else {
--              /* Not a power of 2, use crumbs instead */
--              dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
--              dev->crumbMask = (1<<dev->crumbShift)-1;
--              dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
--              dev->chunkShift = 0;
--              dev->chunkMask = 0;
--      }
--
-+      x = dev->nDataBytesPerChunk;
-+      /* We always use dev->chunkShift and dev->chunkDiv */
-+      dev->chunkShift = Shifts(x);
-+      x >>= dev->chunkShift;
-+      dev->chunkDiv = x;
-+      /* We only use chunk mask if chunkDiv is 1 */
-+      dev->chunkMask = (1<<dev->chunkShift) - 1;
-       /*
-        * Calculate chunkGroupBits.
-@@ -7133,16 +7214,15 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       bits = ShiftsGE(x);
-       /* Set up tnode width if wide tnodes are enabled. */
--      if(!dev->wideTnodesDisabled){
-+      if (!dev->wideTnodesDisabled) {
-               /* bits must be even so that we end up with 32-bit words */
--              if(bits & 1)
-+              if (bits & 1)
-                       bits++;
--              if(bits < 16)
-+              if (bits < 16)
-                       dev->tnodeWidth = 16;
-               else
-                       dev->tnodeWidth = bits;
--      }
--      else
-+      } else
-               dev->tnodeWidth = 16;
-       dev->tnodeMask = (1<<dev->tnodeWidth)-1;
-@@ -7193,7 +7273,7 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
-       /* Initialise temporary buffers and caches. */
--      if(!yaffs_InitialiseTempBuffers(dev))
-+      if (!yaffs_InitialiseTempBuffers(dev))
-               init_failed = 1;
-       dev->srCache = NULL;
-@@ -7203,25 +7283,26 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       if (!init_failed &&
-           dev->nShortOpCaches > 0) {
-               int i;
--              __u8 *buf;
-+              void *buf;
-               int srCacheBytes = dev->nShortOpCaches * sizeof(yaffs_ChunkCache);
--              if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
-+              if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES)
-                       dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
--              }
--              buf = dev->srCache =  YMALLOC(srCacheBytes);
-+              dev->srCache =  YMALLOC(srCacheBytes);
--              if(dev->srCache)
--                      memset(dev->srCache,0,srCacheBytes);
-+              buf = (__u8 *) dev->srCache;
-+
-+              if (dev->srCache)
-+                      memset(dev->srCache, 0, srCacheBytes);
-               for (i = 0; i < dev->nShortOpCaches && buf; i++) {
-                       dev->srCache[i].object = NULL;
-                       dev->srCache[i].lastUse = 0;
-                       dev->srCache[i].dirty = 0;
--                      dev->srCache[i].data = buf = YMALLOC_DMA(dev->nDataBytesPerChunk);
-+                      dev->srCache[i].data = buf = YMALLOC_DMA(dev->totalBytesPerChunk);
-               }
--              if(!buf)
-+              if (!buf)
-                       init_failed = 1;
-               dev->srLastUse = 0;
-@@ -7229,29 +7310,30 @@ int yaffs_GutsInitialise(yaffs_Device * 
-       dev->cacheHits = 0;
--      if(!init_failed){
-+      if (!init_failed) {
-               dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
--              if(!dev->gcCleanupList)
-+              if (!dev->gcCleanupList)
-                       init_failed = 1;
-       }
--      if (dev->isYaffs2) {
-+      if (dev->isYaffs2)
-               dev->useHeaderFileSize = 1;
--      }
--      if(!init_failed && !yaffs_InitialiseBlocks(dev))
-+
-+      if (!init_failed && !yaffs_InitialiseBlocks(dev))
-               init_failed = 1;
-       yaffs_InitialiseTnodes(dev);
-       yaffs_InitialiseObjects(dev);
--      if(!init_failed && !yaffs_CreateInitialDirectories(dev))
-+      if (!init_failed && !yaffs_CreateInitialDirectories(dev))
-               init_failed = 1;
--      if(!init_failed){
-+      if (!init_failed) {
-               /* Now scan the flash. */
-               if (dev->isYaffs2) {
--                      if(yaffs_CheckpointRestore(dev)) {
-+                      if (yaffs_CheckpointRestore(dev)) {
-+                              yaffs_CheckObjectDetailsLoaded(dev->rootDir);
-                               T(YAFFS_TRACE_ALWAYS,
-                                 (TSTR("yaffs: restored from checkpoint" TENDSTR)));
-                       } else {
-@@ -7273,24 +7355,25 @@ int yaffs_GutsInitialise(yaffs_Device * 
-                               dev->nBackgroundDeletions = 0;
-                               dev->oldestDirtySequence = 0;
--                              if(!init_failed && !yaffs_InitialiseBlocks(dev))
-+                              if (!init_failed && !yaffs_InitialiseBlocks(dev))
-                                       init_failed = 1;
-                               yaffs_InitialiseTnodes(dev);
-                               yaffs_InitialiseObjects(dev);
--                              if(!init_failed && !yaffs_CreateInitialDirectories(dev))
-+                              if (!init_failed && !yaffs_CreateInitialDirectories(dev))
-                                       init_failed = 1;
--                              if(!init_failed && !yaffs_ScanBackwards(dev))
-+                              if (!init_failed && !yaffs_ScanBackwards(dev))
-                                       init_failed = 1;
-                       }
--              }else
--                      if(!yaffs_Scan(dev))
-+              } else if (!yaffs_Scan(dev))
-                               init_failed = 1;
-+
-+              yaffs_StripDeletedObjects(dev);
-       }
--      if(init_failed){
-+      if (init_failed) {
-               /* Clean up the mess */
-               T(YAFFS_TRACE_TRACING,
-                 (TSTR("yaffs: yaffs_GutsInitialise() aborted.\n" TENDSTR)));
-@@ -7318,7 +7401,7 @@ int yaffs_GutsInitialise(yaffs_Device * 
- }
--void yaffs_Deinitialise(yaffs_Device * dev)
-+void yaffs_Deinitialise(yaffs_Device *dev)
- {
-       if (dev->isMounted) {
-               int i;
-@@ -7330,7 +7413,7 @@ void yaffs_Deinitialise(yaffs_Device * d
-                   dev->srCache) {
-                       for (i = 0; i < dev->nShortOpCaches; i++) {
--                              if(dev->srCache[i].data)
-+                              if (dev->srCache[i].data)
-                                       YFREE(dev->srCache[i].data);
-                               dev->srCache[i].data = NULL;
-                       }
-@@ -7341,16 +7424,17 @@ void yaffs_Deinitialise(yaffs_Device * d
-               YFREE(dev->gcCleanupList);
--              for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
-+              for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
-                       YFREE(dev->tempBuffer[i].buffer);
--              }
-               dev->isMounted = 0;
--      }
-+              if (dev->deinitialiseNAND)
-+                      dev->deinitialiseNAND(dev);
-+      }
- }
--static int yaffs_CountFreeChunks(yaffs_Device * dev)
-+static int yaffs_CountFreeChunks(yaffs_Device *dev)
- {
-       int nFree;
-       int b;
-@@ -7358,7 +7442,7 @@ static int yaffs_CountFreeChunks(yaffs_D
-       yaffs_BlockInfo *blk;
-       for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
--           b++) {
-+                      b++) {
-               blk = yaffs_GetBlockInfo(dev, b);
-               switch (blk->blockState) {
-@@ -7373,19 +7457,19 @@ static int yaffs_CountFreeChunks(yaffs_D
-               default:
-                       break;
-               }
--
-       }
-       return nFree;
- }
--int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
-+int yaffs_GetNumberOfFreeChunks(yaffs_Device *dev)
- {
-       /* This is what we report to the outside world */
-       int nFree;
-       int nDirtyCacheChunks;
-       int blocksForCheckpoint;
-+      int i;
- #if 1
-       nFree = dev->nFreeChunks;
-@@ -7397,12 +7481,9 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
-       /* Now count the number of dirty chunks in the cache and subtract those */
--      {
--              int i;
--              for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
--                      if (dev->srCache[i].dirty)
--                              nDirtyCacheChunks++;
--              }
-+      for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
-+              if (dev->srCache[i].dirty)
-+                      nDirtyCacheChunks++;
-       }
-       nFree -= nDirtyCacheChunks;
-@@ -7410,8 +7491,8 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
-       nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
-       /* Now we figure out how much to reserve for the checkpoint and report that... */
--      blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
--      if(blocksForCheckpoint < 0)
-+      blocksForCheckpoint = yaffs_CalcCheckpointBlocksRequired(dev) - dev->blocksInCheckpoint;
-+      if (blocksForCheckpoint < 0)
-               blocksForCheckpoint = 0;
-       nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
-@@ -7425,12 +7506,12 @@ int yaffs_GetNumberOfFreeChunks(yaffs_De
- static int yaffs_freeVerificationFailures;
--static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
-+static void yaffs_VerifyFreeChunks(yaffs_Device *dev)
- {
-       int counted;
-       int difference;
--      if(yaffs_SkipVerification(dev))
-+      if (yaffs_SkipVerification(dev))
-               return;
-       counted = yaffs_CountFreeChunks(dev);
-@@ -7447,23 +7528,25 @@ static void yaffs_VerifyFreeChunks(yaffs
- /*---------------------------------------- YAFFS test code ----------------------*/
--#define yaffs_CheckStruct(structure,syze, name) \
--           if(sizeof(structure) != syze) \
--             { \
--               T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
--               name,syze,sizeof(structure))); \
--               return YAFFS_FAIL; \
--              }
-+#define yaffs_CheckStruct(structure, syze, name) \
-+      do { \
-+              if (sizeof(structure) != syze) { \
-+                      T(YAFFS_TRACE_ALWAYS, (TSTR("%s should be %d but is %d\n" TENDSTR),\
-+                              name, syze, sizeof(structure))); \
-+                      return YAFFS_FAIL; \
-+              } \
-+      } while (0)
- static int yaffs_CheckStructures(void)
- {
--/*      yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
--/*      yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
--/*      yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
-+/*      yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags"); */
-+/*      yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion"); */
-+/*      yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare"); */
- #ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
--      yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
-+      yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode");
- #endif
--          yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
--
--          return YAFFS_OK;
-+#ifndef CONFIG_YAFFS_WINCE
-+      yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader");
-+#endif
-+      return YAFFS_OK;
- }
---- a/fs/yaffs2/yaffs_guts.h
-+++ b/fs/yaffs2/yaffs_guts.h
-@@ -90,7 +90,7 @@
- #define YAFFS_MAX_SHORT_OP_CACHES     20
--#define YAFFS_N_TEMP_BUFFERS          4
-+#define YAFFS_N_TEMP_BUFFERS          6
- /* We limit the number attempts at sucessfully saving a chunk of data.
-  * Small-page devices have 32 pages per block; large-page devices have 64.
-@@ -108,6 +108,9 @@
- #define YAFFS_LOWEST_SEQUENCE_NUMBER  0x00001000
- #define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xEFFFFF00
-+/* Special sequence number for bad block that failed to be marked bad */
-+#define YAFFS_SEQUENCE_BAD_BLOCK      0xFFFF0000
-+
- /* ChunkCache is used for short read/write operations.*/
- typedef struct {
-       struct yaffs_ObjectStruct *object;
-@@ -134,11 +137,10 @@ typedef struct {
- typedef struct {
-       unsigned chunkId:20;
-       unsigned serialNumber:2;
--      unsigned byteCount:10;
-+      unsigned byteCountLSB:10;
-       unsigned objectId:18;
-       unsigned ecc:12;
--      unsigned unusedStuff:2;
--
-+      unsigned byteCountMSB:2;
- } yaffs_Tags;
- typedef union {
-@@ -277,13 +279,13 @@ typedef struct {
-       int softDeletions:10;   /* number of soft deleted pages */
-       int pagesInUse:10;      /* number of pages in use */
--      yaffs_BlockState blockState:4;  /* One of the above block states */
-+      unsigned blockState:4;  /* One of the above block states. NB use unsigned because enum is sometimes an int */
-       __u32 needsRetiring:1;  /* Data has failed on this block, need to get valid data off */
--                              /* and retire the block. */
--      __u32 skipErasedCheck: 1; /* If this is set we can skip the erased check on this block */
--      __u32 gcPrioritise: 1;  /* An ECC check or blank check has failed on this block.
-+                              /* and retire the block. */
-+      __u32 skipErasedCheck:1; /* If this is set we can skip the erased check on this block */
-+      __u32 gcPrioritise:1;   /* An ECC check or blank check has failed on this block.
-                                  It should be prioritised for GC */
--        __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
-+      __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
- #ifdef CONFIG_YAFFS_YAFFS2
-       __u32 hasShrinkHeader:1; /* This block has at least one shrink object header */
-@@ -300,11 +302,11 @@ typedef struct {
-       /* Apply to everything  */
-       int parentObjectId;
--      __u16 sum__NoLongerUsed;        /* checksum of name. No longer used */
-+      __u16 sum__NoLongerUsed;        /* checksum of name. No longer used */
-       YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
--      /* Thes following apply to directories, files, symlinks - not hard links */
--      __u32 yst_mode;         /* protection */
-+      /* The following apply to directories, files, symlinks - not hard links */
-+      __u32 yst_mode;         /* protection */
- #ifdef CONFIG_YAFFS_WINCE
-       __u32 notForWinCE[5];
-@@ -331,11 +333,14 @@ typedef struct {
-       __u32 win_ctime[2];
-       __u32 win_atime[2];
-       __u32 win_mtime[2];
--      __u32 roomToGrow[4];
- #else
--      __u32 roomToGrow[10];
-+      __u32 roomToGrow[6];
-+
- #endif
-+      __u32 inbandShadowsObject;
-+      __u32 inbandIsShrink;
-+      __u32 reservedSpace[2];
-       int shadowsObject;      /* This object header shadows the specified object if > 0 */
-       /* isShrink applies to object headers written when we shrink the file (ie resize) */
-@@ -381,7 +386,7 @@ typedef struct {
- } yaffs_FileStructure;
- typedef struct {
--      struct list_head children;      /* list of child links */
-+      struct ylist_head children;     /* list of child links */
- } yaffs_DirectoryStructure;
- typedef struct {
-@@ -418,23 +423,24 @@ struct yaffs_ObjectStruct {
-                                * still in the inode cache. Free of object is defered.
-                                * until the inode is released.
-                                */
-+      __u8 beingCreated:1;    /* This object is still being created so skip some checks. */
-       __u8 serial;            /* serial number of chunk in NAND. Cached here */
-       __u16 sum;              /* sum of the name to speed searching */
--      struct yaffs_DeviceStruct *myDev;       /* The device I'm on */
-+      struct yaffs_DeviceStruct *myDev;       /* The device I'm on */
--      struct list_head hashLink;      /* list of objects in this hash bucket */
-+      struct ylist_head hashLink;     /* list of objects in this hash bucket */
--      struct list_head hardLinks;     /* all the equivalent hard linked objects */
-+      struct ylist_head hardLinks;    /* all the equivalent hard linked objects */
-       /* directory structure stuff */
-       /* also used for linking up the free list */
-       struct yaffs_ObjectStruct *parent;
--      struct list_head siblings;
-+      struct ylist_head siblings;
-       /* Where's my object header in NAND? */
--      int chunkId;
-+      int hdrChunk;
-       int nDataChunks;        /* Number of data chunks attached to the file. */
-@@ -485,7 +491,7 @@ struct yaffs_ObjectList_struct {
- typedef struct yaffs_ObjectList_struct yaffs_ObjectList;
- typedef struct {
--      struct list_head list;
-+      struct ylist_head list;
-       int count;
- } yaffs_ObjectBucket;
-@@ -495,11 +501,10 @@ typedef struct {
-  */
- typedef struct {
--        int structType;
-+      int structType;
-       __u32 objectId;
-       __u32 parentId;
--      int chunkId;
--
-+      int hdrChunk;
-       yaffs_ObjectType variantType:3;
-       __u8 deleted:1;
-       __u8 softDeleted:1;
-@@ -511,8 +516,7 @@ typedef struct {
-       int nDataChunks;
-       __u32 fileSizeOrEquivalentObjectId;
--
--}yaffs_CheckpointObject;
-+} yaffs_CheckpointObject;
- /*--------------------- Temporary buffers ----------------
-  *
-@@ -528,13 +532,13 @@ typedef struct {
- /*----------------- Device ---------------------------------*/
- struct yaffs_DeviceStruct {
--      struct list_head devList;
-+      struct ylist_head devList;
-       const char *name;
-       /* Entry parameters set up way early. Yaffs sets up the rest.*/
-       int nDataBytesPerChunk; /* Should be a power of 2 >= 512 */
-       int nChunksPerBlock;    /* does not need to be a power of 2 */
--      int nBytesPerSpare;     /* spare area size */
-+      int spareBytesPerChunk; /* spare area size */
-       int startBlock;         /* Start block we're allowed to use */
-       int endBlock;           /* End block we're allowed to use */
-       int nReservedBlocks;    /* We want this tuneable so that we can reduce */
-@@ -544,9 +548,7 @@ struct yaffs_DeviceStruct {
-       /* Stuff used by the shared space checkpointing mechanism */
-       /* If this value is zero, then this mechanism is disabled */
--      int nCheckpointReservedBlocks; /* Blocks to reserve for checkpoint data */
--
--
-+/*    int nCheckpointReservedBlocks; */ /* Blocks to reserve for checkpoint data */
-       int nShortOpCaches;     /* If <= 0, then short op caching is disabled, else
-@@ -560,30 +562,31 @@ struct yaffs_DeviceStruct {
-       void *genericDevice;    /* Pointer to device context
-                                * On an mtd this holds the mtd pointer.
-                                */
--        void *superBlock;
-+      void *superBlock;
-       /* NAND access functions (Must be set before calling YAFFS)*/
--      int (*writeChunkToNAND) (struct yaffs_DeviceStruct * dev,
--                               int chunkInNAND, const __u8 * data,
--                               const yaffs_Spare * spare);
--      int (*readChunkFromNAND) (struct yaffs_DeviceStruct * dev,
--                                int chunkInNAND, __u8 * data,
--                                yaffs_Spare * spare);
--      int (*eraseBlockInNAND) (struct yaffs_DeviceStruct * dev,
--                               int blockInNAND);
--      int (*initialiseNAND) (struct yaffs_DeviceStruct * dev);
-+      int (*writeChunkToNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int chunkInNAND, const __u8 *data,
-+                                      const yaffs_Spare *spare);
-+      int (*readChunkFromNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int chunkInNAND, __u8 *data,
-+                                      yaffs_Spare *spare);
-+      int (*eraseBlockInNAND) (struct yaffs_DeviceStruct *dev,
-+                                      int blockInNAND);
-+      int (*initialiseNAND) (struct yaffs_DeviceStruct *dev);
-+      int (*deinitialiseNAND) (struct yaffs_DeviceStruct *dev);
- #ifdef CONFIG_YAFFS_YAFFS2
--      int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct * dev,
--                                       int chunkInNAND, const __u8 * data,
--                                       const yaffs_ExtendedTags * tags);
--      int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct * dev,
--                                        int chunkInNAND, __u8 * data,
--                                        yaffs_ExtendedTags * tags);
--      int (*markNANDBlockBad) (struct yaffs_DeviceStruct * dev, int blockNo);
--      int (*queryNANDBlock) (struct yaffs_DeviceStruct * dev, int blockNo,
--                             yaffs_BlockState * state, int *sequenceNumber);
-+      int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct *dev,
-+                                       int chunkInNAND, const __u8 *data,
-+                                       const yaffs_ExtendedTags *tags);
-+      int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct *dev,
-+                                        int chunkInNAND, __u8 *data,
-+                                        yaffs_ExtendedTags *tags);
-+      int (*markNANDBlockBad) (struct yaffs_DeviceStruct *dev, int blockNo);
-+      int (*queryNANDBlock) (struct yaffs_DeviceStruct *dev, int blockNo,
-+                             yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
-       int isYaffs2;
-@@ -595,10 +598,12 @@ struct yaffs_DeviceStruct {
-       void (*removeObjectCallback)(struct yaffs_ObjectStruct *obj);
-       /* Callback to mark the superblock dirsty */
--      void (*markSuperBlockDirty)(void * superblock);
-+      void (*markSuperBlockDirty)(void *superblock);
-       int wideTnodesDisabled; /* Set to disable wide tnodes */
-+      YCHAR *pathDividers;    /* String of legal path dividers */
-+
-       /* End of stuff that must be set before initialisation. */
-@@ -615,16 +620,14 @@ struct yaffs_DeviceStruct {
-       __u32 tnodeWidth;
-       __u32 tnodeMask;
--      /* Stuff to support various file offses to chunk/offset translations */
--      /* "Crumbs" for nDataBytesPerChunk not being a power of 2 */
--      __u32 crumbMask;
--      __u32 crumbShift;
--      __u32 crumbsPerChunk;
--
--      /* Straight shifting for nDataBytesPerChunk being a power of 2 */
--      __u32 chunkShift;
--      __u32 chunkMask;
--
-+      /* Stuff for figuring out file offset to chunk conversions */
-+      __u32 chunkShift; /* Shift value */
-+      __u32 chunkDiv;   /* Divisor after shifting: 1 for power-of-2 sizes */
-+      __u32 chunkMask;  /* Mask to use for power-of-2 case */
-+
-+      /* Stuff to handle inband tags */
-+      int inbandTags;
-+      __u32 totalBytesPerChunk;
- #ifdef __KERNEL__
-@@ -633,7 +636,7 @@ struct yaffs_DeviceStruct {
-       __u8 *spareBuffer;      /* For mtdif2 use. Don't know the size of the buffer
-                                * at compile time so we have to allocate it.
-                                */
--      void (*putSuperFunc) (struct super_block * sb);
-+      void (*putSuperFunc) (struct super_block *sb);
- #endif
-       int isMounted;
-@@ -663,6 +666,8 @@ struct yaffs_DeviceStruct {
-       __u32 checkpointSum;
-       __u32 checkpointXor;
-+      int nCheckpointBlocksRequired; /* Number of blocks needed to store current checkpoint set */
-+
-       /* Block Info */
-       yaffs_BlockInfo *blockInfo;
-       __u8 *chunkBits;        /* bitmap of chunks in use */
-@@ -684,11 +689,15 @@ struct yaffs_DeviceStruct {
-       yaffs_TnodeList *allocatedTnodeList;
-       int isDoingGC;
-+      int gcBlock;
-+      int gcChunk;
-       int nObjectsCreated;
-       yaffs_Object *freeObjects;
-       int nFreeObjects;
-+      int nHardLinks;
-+
-       yaffs_ObjectList *allocatedObjectList;
-       yaffs_ObjectBucket objectBucket[YAFFS_NOBJECT_BUCKETS];
-@@ -745,8 +754,10 @@ struct yaffs_DeviceStruct {
-       int nBackgroundDeletions;       /* Count of background deletions. */
-+      /* Temporary buffer management */
-       yaffs_TempBuffer tempBuffer[YAFFS_N_TEMP_BUFFERS];
-       int maxTemp;
-+      int tempInUse;
-       int unmanagedTempAllocations;
-       int unmanagedTempDeallocations;
-@@ -758,9 +769,9 @@ struct yaffs_DeviceStruct {
- typedef struct yaffs_DeviceStruct yaffs_Device;
--/* The static layout of bllock usage etc is stored in the super block header */
-+/* The static layout of block usage etc is stored in the super block header */
- typedef struct {
--        int StructType;
-+      int StructType;
-       int version;
-       int checkpointStartBlock;
-       int checkpointEndBlock;
-@@ -773,7 +784,7 @@ typedef struct {
-  * must be preserved over unmount/mount cycles.
-  */
- typedef struct {
--        int structType;
-+      int structType;
-       int nErasedBlocks;
-       int allocationBlock;    /* Current block being allocated off */
-       __u32 allocationPage;
-@@ -791,57 +802,45 @@ typedef struct {
- typedef struct {
--    int structType;
--    __u32 magic;
--    __u32 version;
--    __u32 head;
-+      int structType;
-+      __u32 magic;
-+      __u32 version;
-+      __u32 head;
- } yaffs_CheckpointValidity;
--/* Function to manipulate block info */
--static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
--{
--      if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
--              T(YAFFS_TRACE_ERROR,
--                (TSTR
--                 ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
--                 blk));
--              YBUG();
--      }
--      return &dev->blockInfo[blk - dev->internalStartBlock];
--}
- /*----------------------- YAFFS Functions -----------------------*/
--int yaffs_GutsInitialise(yaffs_Device * dev);
--void yaffs_Deinitialise(yaffs_Device * dev);
-+int yaffs_GutsInitialise(yaffs_Device *dev);
-+void yaffs_Deinitialise(yaffs_Device *dev);
--int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev);
-+int yaffs_GetNumberOfFreeChunks(yaffs_Device *dev);
--int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
--                     yaffs_Object * newDir, const YCHAR * newName);
-+int yaffs_RenameObject(yaffs_Object *oldDir, const YCHAR *oldName,
-+                     yaffs_Object *newDir, const YCHAR *newName);
--int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name);
--int yaffs_DeleteFile(yaffs_Object * obj);
-+int yaffs_Unlink(yaffs_Object *dir, const YCHAR *name);
-+int yaffs_DeleteObject(yaffs_Object *obj);
--int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize);
--int yaffs_GetObjectFileLength(yaffs_Object * obj);
--int yaffs_GetObjectInode(yaffs_Object * obj);
--unsigned yaffs_GetObjectType(yaffs_Object * obj);
--int yaffs_GetObjectLinkCount(yaffs_Object * obj);
-+int yaffs_GetObjectName(yaffs_Object *obj, YCHAR *name, int buffSize);
-+int yaffs_GetObjectFileLength(yaffs_Object *obj);
-+int yaffs_GetObjectInode(yaffs_Object *obj);
-+unsigned yaffs_GetObjectType(yaffs_Object *obj);
-+int yaffs_GetObjectLinkCount(yaffs_Object *obj);
--int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr);
--int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr);
-+int yaffs_SetAttributes(yaffs_Object *obj, struct iattr *attr);
-+int yaffs_GetAttributes(yaffs_Object *obj, struct iattr *attr);
- /* File operations */
--int yaffs_ReadDataFromFile(yaffs_Object * obj, __u8 * buffer, loff_t offset,
--                         int nBytes);
--int yaffs_WriteDataToFile(yaffs_Object * obj, const __u8 * buffer, loff_t offset,
--                        int nBytes, int writeThrough);
--int yaffs_ResizeFile(yaffs_Object * obj, loff_t newSize);
--
--yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
--                            __u32 mode, __u32 uid, __u32 gid);
--int yaffs_FlushFile(yaffs_Object * obj, int updateTime);
-+int yaffs_ReadDataFromFile(yaffs_Object *obj, __u8 *buffer, loff_t offset,
-+                              int nBytes);
-+int yaffs_WriteDataToFile(yaffs_Object *obj, const __u8 *buffer, loff_t offset,
-+                              int nBytes, int writeThrough);
-+int yaffs_ResizeFile(yaffs_Object *obj, loff_t newSize);
-+
-+yaffs_Object *yaffs_MknodFile(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid);
-+int yaffs_FlushFile(yaffs_Object *obj, int updateTime);
- /* Flushing and checkpointing */
- void yaffs_FlushEntireDeviceCache(yaffs_Device *dev);
-@@ -850,33 +849,33 @@ int yaffs_CheckpointSave(yaffs_Device *d
- int yaffs_CheckpointRestore(yaffs_Device *dev);
- /* Directory operations */
--yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
--                                 __u32 mode, __u32 uid, __u32 gid);
--yaffs_Object *yaffs_FindObjectByName(yaffs_Object * theDir, const YCHAR * name);
--int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
-+yaffs_Object *yaffs_MknodDirectory(yaffs_Object *parent, const YCHAR *name,
-+                              __u32 mode, __u32 uid, __u32 gid);
-+yaffs_Object *yaffs_FindObjectByName(yaffs_Object *theDir, const YCHAR *name);
-+int yaffs_ApplyToDirectoryChildren(yaffs_Object *theDir,
-                                  int (*fn) (yaffs_Object *));
--yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number);
-+yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device *dev, __u32 number);
- /* Link operations */
--yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
--                       yaffs_Object * equivalentObject);
-+yaffs_Object *yaffs_Link(yaffs_Object *parent, const YCHAR *name,
-+                       yaffs_Object *equivalentObject);
--yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj);
-+yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object *obj);
- /* Symlink operations */
--yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
-+yaffs_Object *yaffs_MknodSymLink(yaffs_Object *parent, const YCHAR *name,
-                                __u32 mode, __u32 uid, __u32 gid,
--                               const YCHAR * alias);
--YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj);
-+                               const YCHAR *alias);
-+YCHAR *yaffs_GetSymlinkAlias(yaffs_Object *obj);
- /* Special inodes (fifos, sockets and devices) */
--yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
-+yaffs_Object *yaffs_MknodSpecial(yaffs_Object *parent, const YCHAR *name,
-                                __u32 mode, __u32 uid, __u32 gid, __u32 rdev);
- /* Special directories */
--yaffs_Object *yaffs_Root(yaffs_Device * dev);
--yaffs_Object *yaffs_LostNFound(yaffs_Device * dev);
-+yaffs_Object *yaffs_Root(yaffs_Device *dev);
-+yaffs_Object *yaffs_LostNFound(yaffs_Device *dev);
- #ifdef CONFIG_YAFFS_WINCE
- /* CONFIG_YAFFS_WINCE special stuff */
-@@ -885,18 +884,21 @@ void yfsd_WinFileTimeNow(__u32 target[2]
- #ifdef __KERNEL__
--void yaffs_HandleDeferedFree(yaffs_Object * obj);
-+void yaffs_HandleDeferedFree(yaffs_Object *obj);
- #endif
- /* Debug dump  */
--int yaffs_DumpObject(yaffs_Object * obj);
-+int yaffs_DumpObject(yaffs_Object *obj);
--void yaffs_GutsTest(yaffs_Device * dev);
-+void yaffs_GutsTest(yaffs_Device *dev);
- /* A few useful functions */
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
--void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn);
--int yaffs_CheckFF(__u8 * buffer, int nBytes);
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags);
-+void yaffs_DeleteChunk(yaffs_Device *dev, int chunkId, int markNAND, int lyn);
-+int yaffs_CheckFF(__u8 *buffer, int nBytes);
- void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi);
-+__u8 *yaffs_GetTempBuffer(yaffs_Device *dev, int lineNo);
-+void yaffs_ReleaseTempBuffer(yaffs_Device *dev, __u8 *buffer, int lineNo);
-+
- #endif
---- a/fs/yaffs2/yaffs_mtdif1.c
-+++ b/fs/yaffs2/yaffs_mtdif1.c
-@@ -26,7 +26,7 @@
- #include "yportenv.h"
- #include "yaffs_guts.h"
- #include "yaffs_packedtags1.h"
--#include "yaffs_tagscompat.h" // for yaffs_CalcTagsECC
-+#include "yaffs_tagscompat.h" /* for yaffs_CalcTagsECC */
- #include "linux/kernel.h"
- #include "linux/version.h"
-@@ -34,9 +34,9 @@
- #include "linux/mtd/mtd.h"
- /* Don't compile this module if we don't have MTD's mtd_oob_ops interface */
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
--const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.3 2007/05/15 20:16:11 ian Exp $";
-+const char *yaffs_mtdif1_c_version = "$Id: yaffs_mtdif1.c,v 1.10 2009-03-09 07:41:10 charles Exp $";
- #ifndef CONFIG_YAFFS_9BYTE_TAGS
- # define YTAG1_SIZE 8
-@@ -89,9 +89,9 @@ static struct nand_ecclayout nand_oob_16
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
- int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device *dev,
--      int chunkInNAND, const __u8 * data, const yaffs_ExtendedTags * etags)
-+      int chunkInNAND, const __u8 *data, const yaffs_ExtendedTags *etags)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkBytes = dev->nDataBytesPerChunk;
-       loff_t addr = ((loff_t)chunkInNAND) * chunkBytes;
-       struct mtd_oob_ops ops;
-@@ -146,7 +146,7 @@ int nandmtd1_WriteChunkWithTagsToNAND(ya
- /* Return with empty ExtendedTags but add eccResult.
-  */
--static int rettags(yaffs_ExtendedTags * etags, int eccResult, int retval)
-+static int rettags(yaffs_ExtendedTags *etags, int eccResult, int retval)
- {
-       if (etags) {
-               memset(etags, 0, sizeof(*etags));
-@@ -169,9 +169,9 @@ static int rettags(yaffs_ExtendedTags * 
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
- int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device *dev,
--      int chunkInNAND, __u8 * data, yaffs_ExtendedTags * etags)
-+      int chunkInNAND, __u8 *data, yaffs_ExtendedTags *etags)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkBytes = dev->nDataBytesPerChunk;
-       loff_t addr = ((loff_t)chunkInNAND) * chunkBytes;
-       int eccres = YAFFS_ECC_RESULT_NO_ERROR;
-@@ -189,7 +189,7 @@ int nandmtd1_ReadChunkWithTagsFromNAND(y
-       ops.datbuf = data;
-       ops.oobbuf = (__u8 *)&pt1;
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,20))
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 20))
-       /* In MTD 2.6.18 to 2.6.19 nand_base.c:nand_do_read_oob() has a bug;
-        * help it out with ops.len = ops.ooblen when ops.datbuf == NULL.
-        */
-@@ -284,11 +284,11 @@ int nandmtd1_ReadChunkWithTagsFromNAND(y
-  */
- int nandmtd1_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int blocksize = dev->nChunksPerBlock * dev->nDataBytesPerChunk;
-       int retval;
--      yaffs_trace(YAFFS_TRACE_BAD_BLOCKS, "marking block %d bad", blockNo);
-+      yaffs_trace(YAFFS_TRACE_BAD_BLOCKS, "marking block %d bad\n", blockNo);
-       retval = mtd->block_markbad(mtd, (loff_t)blocksize * blockNo);
-       return (retval) ? YAFFS_FAIL : YAFFS_OK;
-@@ -298,7 +298,7 @@ int nandmtd1_MarkNANDBlockBad(struct yaf
-  *
-  * Returns YAFFS_OK or YAFFS_FAIL.
-  */
--static int nandmtd1_TestPrerequists(struct mtd_info * mtd)
-+static int nandmtd1_TestPrerequists(struct mtd_info *mtd)
- {
-       /* 2.6.18 has mtd->ecclayout->oobavail */
-       /* 2.6.21 has mtd->ecclayout->oobavail and mtd->oobavail */
-@@ -323,10 +323,11 @@ static int nandmtd1_TestPrerequists(stru
-  * Always returns YAFFS_OK.
-  */
- int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--      yaffs_BlockState * pState, int *pSequenceNumber)
-+      yaffs_BlockState *pState, __u32 *pSequenceNumber)
- {
--      struct mtd_info * mtd = dev->genericDevice;
-+      struct mtd_info *mtd = dev->genericDevice;
-       int chunkNo = blockNo * dev->nChunksPerBlock;
-+      loff_t addr = (loff_t)chunkNo * dev->nDataBytesPerChunk;
-       yaffs_ExtendedTags etags;
-       int state = YAFFS_BLOCK_STATE_DEAD;
-       int seqnum = 0;
-@@ -335,21 +336,22 @@ int nandmtd1_QueryNANDBlock(struct yaffs
-       /* We don't yet have a good place to test for MTD config prerequists.
-        * Do it here as we are called during the initial scan.
-        */
--      if (nandmtd1_TestPrerequists(mtd) != YAFFS_OK) {
-+      if (nandmtd1_TestPrerequists(mtd) != YAFFS_OK)
-               return YAFFS_FAIL;
--      }
-       retval = nandmtd1_ReadChunkWithTagsFromNAND(dev, chunkNo, NULL, &etags);
-+      etags.blockBad = (mtd->block_isbad)(mtd, addr);
-       if (etags.blockBad) {
-               yaffs_trace(YAFFS_TRACE_BAD_BLOCKS,
--                      "block %d is marked bad", blockNo);
-+                      "block %d is marked bad\n", blockNo);
-               state = YAFFS_BLOCK_STATE_DEAD;
--      }
--      else if (etags.chunkUsed) {
-+      } else if (etags.eccResult != YAFFS_ECC_RESULT_NO_ERROR) {
-+              /* bad tags, need to look more closely */
-+              state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
-+      } else if (etags.chunkUsed) {
-               state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
-               seqnum = etags.sequenceNumber;
--      }
--      else {
-+      } else {
-               state = YAFFS_BLOCK_STATE_EMPTY;
-       }
-@@ -360,4 +362,4 @@ int nandmtd1_QueryNANDBlock(struct yaffs
-       return YAFFS_OK;
- }
--#endif /*KERNEL_VERSION*/
-+#endif /*MTD_VERSION*/
---- a/fs/yaffs2/yaffs_mtdif1.h
-+++ b/fs/yaffs2/yaffs_mtdif1.h
-@@ -14,15 +14,15 @@
- #ifndef __YAFFS_MTDIF1_H__
- #define __YAFFS_MTDIF1_H__
--int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--      const __u8 * data, const yaffs_ExtendedTags * tags);
-+int nandmtd1_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+      const __u8 *data, const yaffs_ExtendedTags *tags);
--int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--      __u8 * data, yaffs_ExtendedTags * tags);
-+int nandmtd1_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+      __u8 *data, yaffs_ExtendedTags *tags);
- int nandmtd1_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandmtd1_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--      yaffs_BlockState * state, int *sequenceNumber);
-+      yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
---- a/fs/yaffs2/yaffs_mtdif2.c
-+++ b/fs/yaffs2/yaffs_mtdif2.c
-@@ -14,7 +14,7 @@
- /* mtd interface for YAFFS2 */
- const char *yaffs_mtdif2_c_version =
--    "$Id: yaffs_mtdif2.c,v 1.17 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_mtdif2.c,v 1.23 2009-03-06 17:20:53 wookey Exp $";
- #include "yportenv.h"
-@@ -27,19 +27,23 @@ const char *yaffs_mtdif2_c_version =
- #include "yaffs_packedtags2.h"
--int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--                                    const __u8 * data,
--                                    const yaffs_ExtendedTags * tags)
-+/* NB For use with inband tags....
-+ * We assume that the data buffer is of size totalBytersPerChunk so that we can also
-+ * use it to load the tags.
-+ */
-+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+                                    const __u8 *data,
-+                                    const yaffs_ExtendedTags *tags)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #else
-       size_t dummy;
- #endif
-       int retval = 0;
--      loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+      loff_t addr;
-       yaffs_PackedTags2 pt;
-@@ -48,46 +52,40 @@ int nandmtd2_WriteChunkWithTagsToNAND(ya
-          ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
-           TENDSTR), chunkInNAND, data, tags));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--      if (tags)
--              yaffs_PackTags2(&pt, tags);
--      else
--              BUG(); /* both tags and data should always be present */
--      if (data) {
--              ops.mode = MTD_OOB_AUTO;
--              ops.ooblen = sizeof(pt);
--              ops.len = dev->nDataBytesPerChunk;
--              ops.ooboffs = 0;
--              ops.datbuf = (__u8 *)data;
--              ops.oobbuf = (void *)&pt;
--              retval = mtd->write_oob(mtd, addr, &ops);
-+      addr  = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;
-+
-+      /* For yaffs2 writing there must be both data and tags.
-+       * If we're using inband tags, then the tags are stuffed into
-+       * the end of the data buffer.
-+       */
-+      if (!data || !tags)
-+              BUG();
-+      else if (dev->inbandTags) {
-+              yaffs_PackedTags2TagsPart *pt2tp;
-+              pt2tp = (yaffs_PackedTags2TagsPart *)(data + dev->nDataBytesPerChunk);
-+              yaffs_PackTags2TagsPart(pt2tp, tags);
-       } else
--              BUG(); /* both tags and data should always be present */
--#else
--      if (tags) {
-               yaffs_PackTags2(&pt, tags);
--      }
--      if (data && tags) {
--              if (dev->useNANDECC)
--                      retval =
--                          mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                         &dummy, data, (__u8 *) & pt, NULL);
--              else
--                      retval =
--                          mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                         &dummy, data, (__u8 *) & pt, NULL);
--      } else {
--              if (data)
--                      retval =
--                          mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
--                                     data);
--              if (tags)
--                      retval =
--                          mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
--                                         (__u8 *) & pt);
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+      ops.mode = MTD_OOB_AUTO;
-+      ops.ooblen = (dev->inbandTags) ? 0 : sizeof(pt);
-+      ops.len = dev->totalBytesPerChunk;
-+      ops.ooboffs = 0;
-+      ops.datbuf = (__u8 *)data;
-+      ops.oobbuf = (dev->inbandTags) ? NULL : (void *)&pt;
-+      retval = mtd->write_oob(mtd, addr, &ops);
-+#else
-+      if (!dev->inbandTags) {
-+              retval =
-+                  mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+                                 &dummy, data, (__u8 *) &pt, NULL);
-+      } else {
-+              retval =
-+                  mtd->write(mtd, addr, dev->totalBytesPerChunk, &dummy,
-+                             data);
-       }
- #endif
-@@ -97,17 +95,18 @@ int nandmtd2_WriteChunkWithTagsToNAND(ya
-               return YAFFS_FAIL;
- }
--int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                     __u8 * data, yaffs_ExtendedTags * tags)
-+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                     __u8 *data, yaffs_ExtendedTags *tags)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-+      int localData = 0;
--      loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-+      loff_t addr = ((loff_t) chunkInNAND) * dev->totalBytesPerChunk;
-       yaffs_PackedTags2 pt;
-@@ -116,9 +115,20 @@ int nandmtd2_ReadChunkWithTagsFromNAND(y
-          ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
-           TENDSTR), chunkInNAND, data, tags));
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
--      if (data && !tags)
--              retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
-+      if (dev->inbandTags) {
-+
-+              if (!data) {
-+                      localData = 1;
-+                      data = yaffs_GetTempBuffer(dev, __LINE__);
-+              }
-+
-+
-+      }
-+
-+
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 17))
-+      if (dev->inbandTags || (data && !tags))
-+              retval = mtd->read(mtd, addr, dev->totalBytesPerChunk,
-                               &dummy, data);
-       else if (tags) {
-               ops.mode = MTD_OOB_AUTO;
-@@ -130,38 +140,42 @@ int nandmtd2_ReadChunkWithTagsFromNAND(y
-               retval = mtd->read_oob(mtd, addr, &ops);
-       }
- #else
--      if (data && tags) {
--              if (dev->useNANDECC) {
--                      retval =
--                          mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
--                                        &dummy, data, dev->spareBuffer,
--                                        NULL);
--              } else {
--                      retval =
--                          mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-+      if (!dev->inbandTags && data && tags) {
-+
-+              retval = mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
-                                         &dummy, data, dev->spareBuffer,
-                                         NULL);
--              }
-       } else {
-               if (data)
-                       retval =
-                           mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
-                                     data);
--              if (tags)
-+              if (!dev->inbandTags && tags)
-                       retval =
-                           mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
-                                         dev->spareBuffer);
-       }
- #endif
--      memcpy(&pt, dev->spareBuffer, sizeof(pt));
--      if (tags)
--              yaffs_UnpackTags2(tags, &pt);
-+      if (dev->inbandTags) {
-+              if (tags) {
-+                      yaffs_PackedTags2TagsPart *pt2tp;
-+                      pt2tp = (yaffs_PackedTags2TagsPart *)&data[dev->nDataBytesPerChunk];
-+                      yaffs_UnpackTags2TagsPart(tags, pt2tp);
-+              }
-+      } else {
-+              if (tags) {
-+                      memcpy(&pt, dev->spareBuffer, sizeof(pt));
-+                      yaffs_UnpackTags2(tags, &pt);
-+              }
-+      }
--      if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
--              tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-+      if (localData)
-+              yaffs_ReleaseTempBuffer(dev, data, __LINE__);
-+      if (tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
-+              tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
-       if (retval == 0)
-               return YAFFS_OK;
-       else
-@@ -178,7 +192,7 @@ int nandmtd2_MarkNANDBlockBad(struct yaf
-       retval =
-           mtd->block_markbad(mtd,
-                              blockNo * dev->nChunksPerBlock *
--                             dev->nDataBytesPerChunk);
-+                             dev->totalBytesPerChunk);
-       if (retval == 0)
-               return YAFFS_OK;
-@@ -188,7 +202,7 @@ int nandmtd2_MarkNANDBlockBad(struct yaf
- }
- int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                          yaffs_BlockState * state, int *sequenceNumber)
-+                          yaffs_BlockState *state, __u32 *sequenceNumber)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-       int retval;
-@@ -198,7 +212,7 @@ int nandmtd2_QueryNANDBlock(struct yaffs
-       retval =
-           mtd->block_isbad(mtd,
-                            blockNo * dev->nChunksPerBlock *
--                           dev->nDataBytesPerChunk);
-+                           dev->totalBytesPerChunk);
-       if (retval) {
-               T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
---- a/fs/yaffs2/yaffs_mtdif2.h
-+++ b/fs/yaffs2/yaffs_mtdif2.h
-@@ -17,13 +17,13 @@
- #define __YAFFS_MTDIF2_H__
- #include "yaffs_guts.h"
--int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
--                                    const __u8 * data,
--                                    const yaffs_ExtendedTags * tags);
--int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                     __u8 * data, yaffs_ExtendedTags * tags);
-+int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device *dev, int chunkInNAND,
-+                              const __u8 *data,
-+                              const yaffs_ExtendedTags *tags);
-+int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                              __u8 *data, yaffs_ExtendedTags *tags);
- int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                          yaffs_BlockState * state, int *sequenceNumber);
-+                      yaffs_BlockState *state, __u32 *sequenceNumber);
- #endif
---- a/fs/yaffs2/yaffs_mtdif.c
-+++ b/fs/yaffs2/yaffs_mtdif.c
-@@ -12,7 +12,7 @@
-  */
- const char *yaffs_mtdif_c_version =
--    "$Id: yaffs_mtdif.c,v 1.19 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_mtdif.c,v 1.22 2009-03-06 17:20:51 wookey Exp $";
- #include "yportenv.h"
-@@ -24,7 +24,7 @@ const char *yaffs_mtdif_c_version =
- #include "linux/time.h"
- #include "linux/mtd/nand.h"
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 18))
- static struct nand_oobinfo yaffs_oobinfo = {
-       .useecc = 1,
-       .eccbytes = 6,
-@@ -36,7 +36,7 @@ static struct nand_oobinfo yaffs_noeccin
- };
- #endif
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
- static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
- {
-       oob[0] = spare->tagByte0;
-@@ -45,8 +45,8 @@ static inline void translate_spare2oob(c
-       oob[3] = spare->tagByte3;
-       oob[4] = spare->tagByte4;
-       oob[5] = spare->tagByte5 & 0x3f;
--      oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
--      oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
-+      oob[5] |= spare->blockStatus == 'Y' ? 0 : 0x80;
-+      oob[5] |= spare->pageStatus == 0 ? 0 : 0x40;
-       oob[6] = spare->tagByte6;
-       oob[7] = spare->tagByte7;
- }
-@@ -71,18 +71,18 @@ static inline void translate_oob2spare(y
- }
- #endif
--int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
--                           const __u8 * data, const yaffs_Spare * spare)
-+int nandmtd_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,
-+                           const __u8 *data, const yaffs_Spare *spare)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       __u8 spareAsBytes[8]; /* OOB */
-       if (data && !spare)
-@@ -135,18 +135,18 @@ int nandmtd_WriteChunkToNAND(yaffs_Devic
-               return YAFFS_FAIL;
- }
--int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
--                            yaffs_Spare * spare)
-+int nandmtd_ReadChunkFromNAND(yaffs_Device *dev, int chunkInNAND, __u8 *data,
-+                            yaffs_Spare *spare)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       struct mtd_oob_ops ops;
- #endif
-       size_t dummy;
-       int retval = 0;
-       loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-+#if (MTD_VERSION_CODE > MTD_VERSION(2, 6, 17))
-       __u8 spareAsBytes[8]; /* OOB */
-       if (data && !spare)
-@@ -205,7 +205,7 @@ int nandmtd_ReadChunkFromNAND(yaffs_Devi
-               return YAFFS_FAIL;
- }
--int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
-+int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber)
- {
-       struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-       __u32 addr =
-@@ -234,7 +234,7 @@ int nandmtd_EraseBlockInNAND(yaffs_Devic
-               return YAFFS_FAIL;
- }
--int nandmtd_InitialiseNAND(yaffs_Device * dev)
-+int nandmtd_InitialiseNAND(yaffs_Device *dev)
- {
-       return YAFFS_OK;
- }
---- a/fs/yaffs2/yaffs_mtdif.h
-+++ b/fs/yaffs2/yaffs_mtdif.h
-@@ -18,10 +18,15 @@
- #include "yaffs_guts.h"
--int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
--                           const __u8 * data, const yaffs_Spare * spare);
--int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
--                            yaffs_Spare * spare);
--int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
--int nandmtd_InitialiseNAND(yaffs_Device * dev);
-+#if (MTD_VERSION_CODE < MTD_VERSION(2, 6, 18))
-+extern struct nand_oobinfo yaffs_oobinfo;
-+extern struct nand_oobinfo yaffs_noeccinfo;
-+#endif
-+
-+int nandmtd_WriteChunkToNAND(yaffs_Device *dev, int chunkInNAND,
-+                      const __u8 *data, const yaffs_Spare *spare);
-+int nandmtd_ReadChunkFromNAND(yaffs_Device *dev, int chunkInNAND, __u8 *data,
-+                      yaffs_Spare *spare);
-+int nandmtd_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-+int nandmtd_InitialiseNAND(yaffs_Device *dev);
- #endif
---- a/fs/yaffs2/yaffs_nand.c
-+++ b/fs/yaffs2/yaffs_nand.c
-@@ -12,16 +12,17 @@
-  */
- const char *yaffs_nand_c_version =
--    "$Id: yaffs_nand.c,v 1.7 2007-02-14 01:09:06 wookey Exp $";
-+      "$Id: yaffs_nand.c,v 1.10 2009-03-06 17:20:54 wookey Exp $";
- #include "yaffs_nand.h"
- #include "yaffs_tagscompat.h"
- #include "yaffs_tagsvalidity.h"
-+#include "yaffs_getblockinfo.h"
--int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                         __u8 * buffer,
--                                         yaffs_ExtendedTags * tags)
-+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                         __u8 *buffer,
-+                                         yaffs_ExtendedTags *tags)
- {
-       int result;
-       yaffs_ExtendedTags localTags;
-@@ -29,7 +30,7 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff
-       int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
-       /* If there are no tags provided, use local tags to get prioritised gc working */
--      if(!tags)
-+      if (!tags)
-               tags = &localTags;
-       if (dev->readChunkWithTagsFromNAND)
-@@ -40,20 +41,20 @@ int yaffs_ReadChunkWithTagsFromNAND(yaff
-                                                                       realignedChunkInNAND,
-                                                                       buffer,
-                                                                       tags);
--      if(tags &&
--         tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
-+      if (tags &&
-+         tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR) {
-               yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
--                yaffs_HandleChunkError(dev,bi);
-+              yaffs_HandleChunkError(dev, bi);
-       }
-       return result;
- }
--int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
-+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev,
-                                                  int chunkInNAND,
--                                                 const __u8 * buffer,
--                                                 yaffs_ExtendedTags * tags)
-+                                                 const __u8 *buffer,
-+                                                 yaffs_ExtendedTags *tags)
- {
-       chunkInNAND -= dev->chunkOffset;
-@@ -84,7 +85,7 @@ int yaffs_WriteChunkWithTagsToNAND(yaffs
-                                                                      tags);
- }
--int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
-+int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo)
- {
-       blockNo -= dev->blockOffset;
-@@ -95,10 +96,10 @@ int yaffs_MarkBlockBad(yaffs_Device * de
-               return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
- }
--int yaffs_QueryInitialBlockState(yaffs_Device * dev,
-+int yaffs_QueryInitialBlockState(yaffs_Device *dev,
-                                                int blockNo,
--                                               yaffs_BlockState * state,
--                                               unsigned *sequenceNumber)
-+                                               yaffs_BlockState *state,
-+                                               __u32 *sequenceNumber)
- {
-       blockNo -= dev->blockOffset;
---- a/fs/yaffs2/yaffs_nandemul2k.h
-+++ b/fs/yaffs2/yaffs_nandemul2k.h
-@@ -21,14 +21,14 @@
- #include "yaffs_guts.h"
- int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
--                                      int chunkInNAND, const __u8 * data,
--                                      yaffs_ExtendedTags * tags);
-+                                      int chunkInNAND, const __u8 *data,
-+                                      const yaffs_ExtendedTags *tags);
- int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
--                                       int chunkInNAND, __u8 * data,
--                                       yaffs_ExtendedTags * tags);
-+                                       int chunkInNAND, __u8 *data,
-+                                       yaffs_ExtendedTags *tags);
- int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
- int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
--                            yaffs_BlockState * state, int *sequenceNumber);
-+                            yaffs_BlockState *state, __u32 *sequenceNumber);
- int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-                               int blockInNAND);
- int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
---- a/fs/yaffs2/yaffs_nand.h
-+++ b/fs/yaffs2/yaffs_nand.h
-@@ -19,21 +19,21 @@
--int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
--                                         __u8 * buffer,
--                                         yaffs_ExtendedTags * tags);
--
--int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                 int chunkInNAND,
--                                                 const __u8 * buffer,
--                                                 yaffs_ExtendedTags * tags);
--
--int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo);
--
--int yaffs_QueryInitialBlockState(yaffs_Device * dev,
--                                               int blockNo,
--                                               yaffs_BlockState * state,
--                                               unsigned *sequenceNumber);
-+int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device *dev, int chunkInNAND,
-+                                      __u8 *buffer,
-+                                      yaffs_ExtendedTags *tags);
-+
-+int yaffs_WriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *buffer,
-+                                              yaffs_ExtendedTags *tags);
-+
-+int yaffs_MarkBlockBad(yaffs_Device *dev, int blockNo);
-+
-+int yaffs_QueryInitialBlockState(yaffs_Device *dev,
-+                                              int blockNo,
-+                                              yaffs_BlockState *state,
-+                                              unsigned *sequenceNumber);
- int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
-                                 int blockInNAND);
---- a/fs/yaffs2/yaffs_packedtags1.c
-+++ b/fs/yaffs2/yaffs_packedtags1.c
-@@ -14,7 +14,7 @@
- #include "yaffs_packedtags1.h"
- #include "yportenv.h"
--void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t)
-+void yaffs_PackTags1(yaffs_PackedTags1 *pt, const yaffs_ExtendedTags *t)
- {
-       pt->chunkId = t->chunkId;
-       pt->serialNumber = t->serialNumber;
-@@ -27,7 +27,7 @@ void yaffs_PackTags1(yaffs_PackedTags1 *
- }
--void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt)
-+void yaffs_UnpackTags1(yaffs_ExtendedTags *t, const yaffs_PackedTags1 *pt)
- {
-       static const __u8 allFF[] =
-           { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-@@ -35,9 +35,8 @@ void yaffs_UnpackTags1(yaffs_ExtendedTag
-       if (memcmp(allFF, pt, sizeof(yaffs_PackedTags1))) {
-               t->blockBad = 0;
--              if (pt->shouldBeFF != 0xFFFFFFFF) {
-+              if (pt->shouldBeFF != 0xFFFFFFFF)
-                       t->blockBad = 1;
--              }
-               t->chunkUsed = 1;
-               t->objectId = pt->objectId;
-               t->chunkId = pt->chunkId;
-@@ -47,6 +46,5 @@ void yaffs_UnpackTags1(yaffs_ExtendedTag
-               t->serialNumber = pt->serialNumber;
-       } else {
-               memset(t, 0, sizeof(yaffs_ExtendedTags));
--
-       }
- }
---- a/fs/yaffs2/yaffs_packedtags1.h
-+++ b/fs/yaffs2/yaffs_packedtags1.h
-@@ -32,6 +32,6 @@ typedef struct {
- } yaffs_PackedTags1;
--void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t);
--void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt);
-+void yaffs_PackTags1(yaffs_PackedTags1 *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags1(yaffs_ExtendedTags *t, const yaffs_PackedTags1 *pt);
- #endif
---- a/fs/yaffs2/yaffs_packedtags2.c
-+++ b/fs/yaffs2/yaffs_packedtags2.c
-@@ -37,60 +37,68 @@
- #define EXTRA_OBJECT_TYPE_SHIFT (28)
- #define EXTRA_OBJECT_TYPE_MASK  ((0x0F) << EXTRA_OBJECT_TYPE_SHIFT)
--static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt)
-+
-+static void yaffs_DumpPackedTags2TagsPart(const yaffs_PackedTags2TagsPart *ptt)
- {
-       T(YAFFS_TRACE_MTD,
-         (TSTR("packed tags obj %d chunk %d byte %d seq %d" TENDSTR),
--         pt->t.objectId, pt->t.chunkId, pt->t.byteCount,
--         pt->t.sequenceNumber));
-+         ptt->objectId, ptt->chunkId, ptt->byteCount,
-+         ptt->sequenceNumber));
-+}
-+static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 *pt)
-+{
-+      yaffs_DumpPackedTags2TagsPart(&pt->t);
- }
--static void yaffs_DumpTags2(const yaffs_ExtendedTags * t)
-+static void yaffs_DumpTags2(const yaffs_ExtendedTags *t)
- {
-       T(YAFFS_TRACE_MTD,
-         (TSTR
--         ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte "
--          "%d del %d ser %d seq %d"
-+         ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte %d del %d ser %d seq %d"
-           TENDSTR), t->eccResult, t->blockBad, t->chunkUsed, t->objectId,
-          t->chunkId, t->byteCount, t->chunkDeleted, t->serialNumber,
-          t->sequenceNumber));
- }
--void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t)
-+void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart *ptt,
-+              const yaffs_ExtendedTags *t)
- {
--      pt->t.chunkId = t->chunkId;
--      pt->t.sequenceNumber = t->sequenceNumber;
--      pt->t.byteCount = t->byteCount;
--      pt->t.objectId = t->objectId;
-+      ptt->chunkId = t->chunkId;
-+      ptt->sequenceNumber = t->sequenceNumber;
-+      ptt->byteCount = t->byteCount;
-+      ptt->objectId = t->objectId;
-       if (t->chunkId == 0 && t->extraHeaderInfoAvailable) {
-               /* Store the extra header info instead */
-               /* We save the parent object in the chunkId */
--              pt->t.chunkId = EXTRA_HEADER_INFO_FLAG
-+              ptt->chunkId = EXTRA_HEADER_INFO_FLAG
-                       | t->extraParentObjectId;
--              if (t->extraIsShrinkHeader) {
--                      pt->t.chunkId |= EXTRA_SHRINK_FLAG;
--              }
--              if (t->extraShadows) {
--                      pt->t.chunkId |= EXTRA_SHADOWS_FLAG;
--              }
-+              if (t->extraIsShrinkHeader)
-+                      ptt->chunkId |= EXTRA_SHRINK_FLAG;
-+              if (t->extraShadows)
-+                      ptt->chunkId |= EXTRA_SHADOWS_FLAG;
--              pt->t.objectId &= ~EXTRA_OBJECT_TYPE_MASK;
--              pt->t.objectId |=
-+              ptt->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
-+              ptt->objectId |=
-                   (t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT);
--              if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
--                      pt->t.byteCount = t->extraEquivalentObjectId;
--              } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) {
--                      pt->t.byteCount = t->extraFileLength;
--              } else {
--                      pt->t.byteCount = 0;
--              }
-+              if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
-+                      ptt->byteCount = t->extraEquivalentObjectId;
-+              else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE)
-+                      ptt->byteCount = t->extraFileLength;
-+              else
-+                      ptt->byteCount = 0;
-       }
--      yaffs_DumpPackedTags2(pt);
-+      yaffs_DumpPackedTags2TagsPart(ptt);
-       yaffs_DumpTags2(t);
-+}
-+
-+
-+void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t)
-+{
-+      yaffs_PackTags2TagsPart(&pt->t, t);
- #ifndef YAFFS_IGNORE_TAGS_ECC
-       {
-@@ -101,82 +109,98 @@ void yaffs_PackTags2(yaffs_PackedTags2 *
- #endif
- }
--void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt)
-+
-+void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags *t,
-+              yaffs_PackedTags2TagsPart *ptt)
- {
-       memset(t, 0, sizeof(yaffs_ExtendedTags));
-       yaffs_InitialiseTags(t);
--      if (pt->t.sequenceNumber != 0xFFFFFFFF) {
--              /* Page is in use */
--#ifdef YAFFS_IGNORE_TAGS_ECC
--              {
--                      t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
--              }
--#else
--              {
--                      yaffs_ECCOther ecc;
--                      int result;
--                      yaffs_ECCCalculateOther((unsigned char *)&pt->t,
--                                              sizeof
--                                              (yaffs_PackedTags2TagsPart),
--                                              &ecc);
--                      result =
--                          yaffs_ECCCorrectOther((unsigned char *)&pt->t,
--                                                sizeof
--                                                (yaffs_PackedTags2TagsPart),
--                                                &pt->ecc, &ecc);
--                      switch(result){
--                              case 0:
--                                      t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
--                                      break;
--                              case 1:
--                                      t->eccResult = YAFFS_ECC_RESULT_FIXED;
--                                      break;
--                              case -1:
--                                      t->eccResult = YAFFS_ECC_RESULT_UNFIXED;
--                                      break;
--                              default:
--                                      t->eccResult = YAFFS_ECC_RESULT_UNKNOWN;
--                      }
--              }
--#endif
-+      if (ptt->sequenceNumber != 0xFFFFFFFF) {
-               t->blockBad = 0;
-               t->chunkUsed = 1;
--              t->objectId = pt->t.objectId;
--              t->chunkId = pt->t.chunkId;
--              t->byteCount = pt->t.byteCount;
-+              t->objectId = ptt->objectId;
-+              t->chunkId = ptt->chunkId;
-+              t->byteCount = ptt->byteCount;
-               t->chunkDeleted = 0;
-               t->serialNumber = 0;
--              t->sequenceNumber = pt->t.sequenceNumber;
-+              t->sequenceNumber = ptt->sequenceNumber;
-               /* Do extra header info stuff */
--              if (pt->t.chunkId & EXTRA_HEADER_INFO_FLAG) {
-+              if (ptt->chunkId & EXTRA_HEADER_INFO_FLAG) {
-                       t->chunkId = 0;
-                       t->byteCount = 0;
-                       t->extraHeaderInfoAvailable = 1;
-                       t->extraParentObjectId =
--                          pt->t.chunkId & (~(ALL_EXTRA_FLAGS));
-+                          ptt->chunkId & (~(ALL_EXTRA_FLAGS));
-                       t->extraIsShrinkHeader =
--                          (pt->t.chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
-+                          (ptt->chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
-                       t->extraShadows =
--                          (pt->t.chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
-+                          (ptt->chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
-                       t->extraObjectType =
--                          pt->t.objectId >> EXTRA_OBJECT_TYPE_SHIFT;
-+                          ptt->objectId >> EXTRA_OBJECT_TYPE_SHIFT;
-                       t->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
--                      if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
--                              t->extraEquivalentObjectId = pt->t.byteCount;
--                      } else {
--                              t->extraFileLength = pt->t.byteCount;
-+                      if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK)
-+                              t->extraEquivalentObjectId = ptt->byteCount;
-+                      else
-+                              t->extraFileLength = ptt->byteCount;
-+              }
-+      }
-+
-+      yaffs_DumpPackedTags2TagsPart(ptt);
-+      yaffs_DumpTags2(t);
-+
-+}
-+
-+
-+void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt)
-+{
-+
-+      yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_NO_ERROR;
-+
-+      if (pt->t.sequenceNumber != 0xFFFFFFFF) {
-+              /* Page is in use */
-+#ifndef YAFFS_IGNORE_TAGS_ECC
-+              {
-+                      yaffs_ECCOther ecc;
-+                      int result;
-+                      yaffs_ECCCalculateOther((unsigned char *)&pt->t,
-+                                              sizeof
-+                                              (yaffs_PackedTags2TagsPart),
-+                                              &ecc);
-+                      result =
-+                          yaffs_ECCCorrectOther((unsigned char *)&pt->t,
-+                                                sizeof
-+                                                (yaffs_PackedTags2TagsPart),
-+                                                &pt->ecc, &ecc);
-+                      switch (result) {
-+                      case 0:
-+                              eccResult = YAFFS_ECC_RESULT_NO_ERROR;
-+                              break;
-+                      case 1:
-+                              eccResult = YAFFS_ECC_RESULT_FIXED;
-+                              break;
-+                      case -1:
-+                              eccResult = YAFFS_ECC_RESULT_UNFIXED;
-+                              break;
-+                      default:
-+                              eccResult = YAFFS_ECC_RESULT_UNKNOWN;
-                       }
-               }
-+#endif
-       }
-+      yaffs_UnpackTags2TagsPart(t, &pt->t);
-+
-+      t->eccResult = eccResult;
-+
-       yaffs_DumpPackedTags2(pt);
-       yaffs_DumpTags2(t);
- }
-+
---- a/fs/yaffs2/yaffs_packedtags2.h
-+++ b/fs/yaffs2/yaffs_packedtags2.h
-@@ -33,6 +33,11 @@ typedef struct {
-       yaffs_ECCOther ecc;
- } yaffs_PackedTags2;
--void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t);
--void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt);
-+/* Full packed tags with ECC, used for oob tags */
-+void yaffs_PackTags2(yaffs_PackedTags2 *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags2(yaffs_ExtendedTags *t, yaffs_PackedTags2 *pt);
-+
-+/* Only the tags part (no ECC for use with inband tags */
-+void yaffs_PackTags2TagsPart(yaffs_PackedTags2TagsPart *pt, const yaffs_ExtendedTags *t);
-+void yaffs_UnpackTags2TagsPart(yaffs_ExtendedTags *t, yaffs_PackedTags2TagsPart *pt);
- #endif
---- a/fs/yaffs2/yaffs_qsort.c
-+++ b/fs/yaffs2/yaffs_qsort.c
-@@ -28,12 +28,12 @@
-  */
- #include "yportenv.h"
--//#include <linux/string.h>
-+/* #include <linux/string.h> */
- /*
-  * Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
-  */
--#define swapcode(TYPE, parmi, parmj, n) {             \
-+#define swapcode(TYPE, parmi, parmj, n) do {          \
-       long i = (n) / sizeof (TYPE);                   \
-       register TYPE *pi = (TYPE *) (parmi);           \
-       register TYPE *pj = (TYPE *) (parmj);           \
-@@ -41,28 +41,29 @@
-               register TYPE   t = *pi;                \
-               *pi++ = *pj;                            \
-               *pj++ = t;                              \
--        } while (--i > 0);                            \
--}
-+      } while (--i > 0);                              \
-+} while (0)
- #define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
--      es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
-+      es % sizeof(long) ? 2 : es == sizeof(long) ? 0 : 1;
- static __inline void
- swapfunc(char *a, char *b, int n, int swaptype)
- {
-       if (swaptype <= 1)
--              swapcode(long, a, b, n)
-+              swapcode(long, a, b, n);
-       else
--              swapcode(char, a, b, n)
-+              swapcode(char, a, b, n);
- }
--#define swap(a, b)                                    \
-+#define yswap(a, b) do {                                      \
-       if (swaptype == 0) {                            \
-               long t = *(long *)(a);                  \
-               *(long *)(a) = *(long *)(b);            \
-               *(long *)(b) = t;                       \
-       } else                                          \
--              swapfunc(a, b, es, swaptype)
-+              swapfunc(a, b, es, swaptype);           \
-+} while (0)
- #define vecswap(a, b, n)      if ((n) > 0) swapfunc(a, b, n, swaptype)
-@@ -70,12 +71,12 @@ static __inline char *
- med3(char *a, char *b, char *c, int (*cmp)(const void *, const void *))
- {
-       return cmp(a, b) < 0 ?
--             (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
--              :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
-+              (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a))
-+              : (cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c));
- }
- #ifndef min
--#define min(a,b) (((a) < (b)) ? (a) : (b))
-+#define min(a, b) (((a) < (b)) ? (a) : (b))
- #endif
- void
-@@ -92,7 +93,7 @@ loop:        SWAPINIT(a, es);
-               for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
-                            pl -= es)
--                              swap(pl, pl - es);
-+                              yswap(pl, pl - es);
-               return;
-       }
-       pm = (char *)a + (n / 2) * es;
-@@ -107,7 +108,7 @@ loop:      SWAPINIT(a, es);
-               }
-               pm = med3(pl, pm, pn, cmp);
-       }
--      swap(a, pm);
-+      yswap(a, pm);
-       pa = pb = (char *)a + es;
-       pc = pd = (char *)a + (n - 1) * es;
-@@ -115,7 +116,7 @@ loop:      SWAPINIT(a, es);
-               while (pb <= pc && (r = cmp(pb, a)) <= 0) {
-                       if (r == 0) {
-                               swap_cnt = 1;
--                              swap(pa, pb);
-+                              yswap(pa, pb);
-                               pa += es;
-                       }
-                       pb += es;
-@@ -123,14 +124,14 @@ loop:    SWAPINIT(a, es);
-               while (pb <= pc && (r = cmp(pc, a)) >= 0) {
-                       if (r == 0) {
-                               swap_cnt = 1;
--                              swap(pc, pd);
-+                              yswap(pc, pd);
-                               pd -= es;
-                       }
-                       pc -= es;
-               }
-               if (pb > pc)
-                       break;
--              swap(pb, pc);
-+              yswap(pb, pc);
-               swap_cnt = 1;
-               pb += es;
-               pc -= es;
-@@ -139,7 +140,7 @@ loop:      SWAPINIT(a, es);
-               for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
-                       for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
-                            pl -= es)
--                              swap(pl, pl - es);
-+                              yswap(pl, pl - es);
-               return;
-       }
-@@ -148,9 +149,11 @@ loop:     SWAPINIT(a, es);
-       vecswap(a, pb - r, r);
-       r = min((long)(pd - pc), (long)(pn - pd - es));
-       vecswap(pb, pn - r, r);
--      if ((r = pb - pa) > es)
-+      r = pb - pa;
-+      if (r > es)
-               yaffs_qsort(a, r / es, es, cmp);
--      if ((r = pd - pc) > es) {
-+      r = pd - pc;
-+      if (r > es) {
-               /* Iterate rather than recurse to save stack space */
-               a = pn - r;
-               n = r / es;
---- a/fs/yaffs2/yaffs_qsort.h
-+++ b/fs/yaffs2/yaffs_qsort.h
-@@ -17,7 +17,7 @@
- #ifndef __YAFFS_QSORT_H__
- #define __YAFFS_QSORT_H__
--extern void yaffs_qsort (void *const base, size_t total_elems, size_t size,
--                   int (*cmp)(const void *, const void *));
-+extern void yaffs_qsort(void *const base, size_t total_elems, size_t size,
-+                      int (*cmp)(const void *, const void *));
- #endif
---- a/fs/yaffs2/yaffs_tagscompat.c
-+++ b/fs/yaffs2/yaffs_tagscompat.c
-@@ -14,16 +14,17 @@
- #include "yaffs_guts.h"
- #include "yaffs_tagscompat.h"
- #include "yaffs_ecc.h"
-+#include "yaffs_getblockinfo.h"
--static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND);
-+static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND);
- #ifdef NOTYET
--static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND);
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_Spare * spare);
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_Spare * spare);
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND);
-+static void yaffs_CheckWrittenBlock(yaffs_Device *dev, int chunkInNAND);
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                                   const __u8 *data,
-+                                   const yaffs_Spare *spare);
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                                  const yaffs_Spare *spare);
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND);
- #endif
- static const char yaffs_countBitsTable[256] = {
-@@ -54,13 +55,13 @@ int yaffs_CountBits(__u8 x)
- /********** Tags ECC calculations  *********/
--void yaffs_CalcECC(const __u8 * data, yaffs_Spare * spare)
-+void yaffs_CalcECC(const __u8 *data, yaffs_Spare *spare)
- {
-       yaffs_ECCCalculate(data, spare->ecc1);
-       yaffs_ECCCalculate(&data[256], spare->ecc2);
- }
--void yaffs_CalcTagsECC(yaffs_Tags * tags)
-+void yaffs_CalcTagsECC(yaffs_Tags *tags)
- {
-       /* Calculate an ecc */
-@@ -74,9 +75,8 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags
-       for (i = 0; i < 8; i++) {
-               for (j = 1; j & 0xff; j <<= 1) {
-                       bit++;
--                      if (b[i] & j) {
-+                      if (b[i] & j)
-                               ecc ^= bit;
--                      }
-               }
-       }
-@@ -84,7 +84,7 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags
- }
--int yaffs_CheckECCOnTags(yaffs_Tags * tags)
-+int yaffs_CheckECCOnTags(yaffs_Tags *tags)
- {
-       unsigned ecc = tags->ecc;
-@@ -115,8 +115,8 @@ int yaffs_CheckECCOnTags(yaffs_Tags * ta
- /********** Tags **********/
--static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,
--                                  yaffs_Tags * tagsPtr)
-+static void yaffs_LoadTagsIntoSpare(yaffs_Spare *sparePtr,
-+                              yaffs_Tags *tagsPtr)
- {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-@@ -132,8 +132,8 @@ static void yaffs_LoadTagsIntoSpare(yaff
-       sparePtr->tagByte7 = tu->asBytes[7];
- }
--static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
--                                 yaffs_Tags * tagsPtr)
-+static void yaffs_GetTagsFromSpare(yaffs_Device *dev, yaffs_Spare *sparePtr,
-+                              yaffs_Tags *tagsPtr)
- {
-       yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-       int result;
-@@ -148,21 +148,20 @@ static void yaffs_GetTagsFromSpare(yaffs
-       tu->asBytes[7] = sparePtr->tagByte7;
-       result = yaffs_CheckECCOnTags(tagsPtr);
--      if (result > 0) {
-+      if (result > 0)
-               dev->tagsEccFixed++;
--      } else if (result < 0) {
-+      else if (result < 0)
-               dev->tagsEccUnfixed++;
--      }
- }
--static void yaffs_SpareInitialise(yaffs_Spare * spare)
-+static void yaffs_SpareInitialise(yaffs_Spare *spare)
- {
-       memset(spare, 0xFF, sizeof(yaffs_Spare));
- }
- static int yaffs_WriteChunkToNAND(struct yaffs_DeviceStruct *dev,
--                                int chunkInNAND, const __u8 * data,
--                                yaffs_Spare * spare)
-+                              int chunkInNAND, const __u8 *data,
-+                              yaffs_Spare *spare)
- {
-       if (chunkInNAND < dev->startBlock * dev->nChunksPerBlock) {
-               T(YAFFS_TRACE_ERROR,
-@@ -177,9 +176,9 @@ static int yaffs_WriteChunkToNAND(struct
- static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev,
-                                  int chunkInNAND,
--                                 __u8 * data,
--                                 yaffs_Spare * spare,
--                                 yaffs_ECCResult * eccResult,
-+                                 __u8 *data,
-+                                 yaffs_Spare *spare,
-+                                 yaffs_ECCResult *eccResult,
-                                  int doErrorCorrection)
- {
-       int retVal;
-@@ -252,9 +251,11 @@ static int yaffs_ReadChunkFromNAND(struc
-               /* Must allocate enough memory for spare+2*sizeof(int) */
-               /* for ecc results from device. */
-               struct yaffs_NANDSpare nspare;
--              retVal =
--                  dev->readChunkFromNAND(dev, chunkInNAND, data,
--                                         (yaffs_Spare *) & nspare);
-+
-+              memset(&nspare, 0, sizeof(nspare));
-+
-+              retVal = dev->readChunkFromNAND(dev, chunkInNAND, data,
-+                                      (yaffs_Spare *) &nspare);
-               memcpy(spare, &nspare, sizeof(yaffs_Spare));
-               if (data && doErrorCorrection) {
-                       if (nspare.eccres1 > 0) {
-@@ -302,8 +303,7 @@ static int yaffs_ReadChunkFromNAND(struc
- static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
-                                 int chunkInNAND)
- {
--
--      static int init = 0;
-+      static int init;
-       static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK];
-       static __u8 data[YAFFS_BYTES_PER_CHUNK];
-       /* Might as well always allocate the larger size for */
-@@ -331,12 +331,12 @@ static int yaffs_CheckChunkErased(struct
-  * Functions for robustisizing
-  */
--static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_HandleReadDataError(yaffs_Device *dev, int chunkInNAND)
- {
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-       /* Mark the block for retirement */
--      yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
-+      yaffs_GetBlockInfo(dev, blockInNAND + dev->blockOffset)->needsRetiring = 1;
-       T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
-         (TSTR("**>>Block %d marked for retirement" TENDSTR), blockInNAND));
-@@ -348,22 +348,22 @@ static void yaffs_HandleReadDataError(ya
- }
- #ifdef NOTYET
--static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_CheckWrittenBlock(yaffs_Device *dev, int chunkInNAND)
- {
- }
--static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
--                                   const __u8 * data,
--                                   const yaffs_Spare * spare)
-+static void yaffs_HandleWriteChunkOk(yaffs_Device *dev, int chunkInNAND,
-+                                   const __u8 *data,
-+                                   const yaffs_Spare *spare)
- {
- }
--static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
--                                  const yaffs_Spare * spare)
-+static void yaffs_HandleUpdateChunk(yaffs_Device *dev, int chunkInNAND,
-+                                  const yaffs_Spare *spare)
- {
- }
--static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND)
-+static void yaffs_HandleWriteChunkError(yaffs_Device *dev, int chunkInNAND)
- {
-       int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-@@ -373,8 +373,8 @@ static void yaffs_HandleWriteChunkError(
-       yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
- }
--static int yaffs_VerifyCompare(const __u8 * d0, const __u8 * d1,
--                             const yaffs_Spare * s0, const yaffs_Spare * s1)
-+static int yaffs_VerifyCompare(const __u8 *d0, const __u8 *d1,
-+                             const yaffs_Spare *s0, const yaffs_Spare *s1)
- {
-       if (memcmp(d0, d1, YAFFS_BYTES_PER_CHUNK) != 0 ||
-@@ -398,28 +398,35 @@ static int yaffs_VerifyCompare(const __u
- }
- #endif                                /* NOTYET */
--int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                  int chunkInNAND,
--                                                  const __u8 * data,
--                                                  const yaffs_ExtendedTags *
--                                                  eTags)
-+int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *data,
-+                                              const yaffs_ExtendedTags *eTags)
- {
-       yaffs_Spare spare;
-       yaffs_Tags tags;
-       yaffs_SpareInitialise(&spare);
--      if (eTags->chunkDeleted) {
-+      if (eTags->chunkDeleted)
-               spare.pageStatus = 0;
--      } else {
-+      else {
-               tags.objectId = eTags->objectId;
-               tags.chunkId = eTags->chunkId;
--              tags.byteCount = eTags->byteCount;
-+
-+              tags.byteCountLSB = eTags->byteCount & 0x3ff;
-+
-+              if (dev->nDataBytesPerChunk >= 1024)
-+                      tags.byteCountMSB = (eTags->byteCount >> 10) & 3;
-+              else
-+                      tags.byteCountMSB = 3;
-+
-+
-               tags.serialNumber = eTags->serialNumber;
--              if (!dev->useNANDECC && data) {
-+              if (!dev->useNANDECC && data)
-                       yaffs_CalcECC(data, &spare);
--              }
-+
-               yaffs_LoadTagsIntoSpare(&spare, &tags);
-       }
-@@ -427,15 +434,15 @@ int yaffs_TagsCompatabilityWriteChunkWit
-       return yaffs_WriteChunkToNAND(dev, chunkInNAND, data, &spare);
- }
--int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
-+int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device *dev,
-                                                    int chunkInNAND,
--                                                   __u8 * data,
--                                                   yaffs_ExtendedTags * eTags)
-+                                                   __u8 *data,
-+                                                   yaffs_ExtendedTags *eTags)
- {
-       yaffs_Spare spare;
-       yaffs_Tags tags;
--      yaffs_ECCResult eccResult;
-+      yaffs_ECCResult eccResult = YAFFS_ECC_RESULT_UNKNOWN;
-       static yaffs_Spare spareFF;
-       static int init;
-@@ -466,7 +473,11 @@ int yaffs_TagsCompatabilityReadChunkWith
-                               eTags->objectId = tags.objectId;
-                               eTags->chunkId = tags.chunkId;
--                              eTags->byteCount = tags.byteCount;
-+                              eTags->byteCount = tags.byteCountLSB;
-+
-+                              if (dev->nDataBytesPerChunk >= 1024)
-+                                      eTags->byteCount |= (((unsigned) tags.byteCountMSB) << 10);
-+
-                               eTags->serialNumber = tags.serialNumber;
-                       }
-               }
-@@ -497,9 +508,9 @@ int yaffs_TagsCompatabilityMarkNANDBlock
- }
- int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
--                                        int blockNo, yaffs_BlockState *
--                                        state,
--                                        int *sequenceNumber)
-+                                        int blockNo,
-+                                        yaffs_BlockState *state,
-+                                        __u32 *sequenceNumber)
- {
-       yaffs_Spare spare0, spare1;
---- a/fs/yaffs2/yaffs_tagscompat.h
-+++ b/fs/yaffs2/yaffs_tagscompat.h
-@@ -17,24 +17,23 @@
- #define __YAFFS_TAGSCOMPAT_H__
- #include "yaffs_guts.h"
--int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
--                                                  int chunkInNAND,
--                                                  const __u8 * data,
--                                                  const yaffs_ExtendedTags *
--                                                  tags);
--int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
--                                                   int chunkInNAND,
--                                                   __u8 * data,
--                                                   yaffs_ExtendedTags *
--                                                   tags);
-+int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              const __u8 *data,
-+                                              const yaffs_ExtendedTags *tags);
-+int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device *dev,
-+                                              int chunkInNAND,
-+                                              __u8 *data,
-+                                              yaffs_ExtendedTags *tags);
- int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
-                                           int blockNo);
- int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
--                                        int blockNo, yaffs_BlockState *
--                                        state, int *sequenceNumber);
-+                                        int blockNo,
-+                                        yaffs_BlockState *state,
-+                                        __u32 *sequenceNumber);
--void yaffs_CalcTagsECC(yaffs_Tags * tags);
--int yaffs_CheckECCOnTags(yaffs_Tags * tags);
-+void yaffs_CalcTagsECC(yaffs_Tags *tags);
-+int yaffs_CheckECCOnTags(yaffs_Tags *tags);
- int yaffs_CountBits(__u8 byte);
- #endif
---- a/fs/yaffs2/yaffs_tagsvalidity.c
-+++ b/fs/yaffs2/yaffs_tagsvalidity.c
-@@ -13,14 +13,14 @@
- #include "yaffs_tagsvalidity.h"
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags)
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags)
- {
-       memset(tags, 0, sizeof(yaffs_ExtendedTags));
-       tags->validMarker0 = 0xAAAAAAAA;
-       tags->validMarker1 = 0x55555555;
- }
--int yaffs_ValidateTags(yaffs_ExtendedTags * tags)
-+int yaffs_ValidateTags(yaffs_ExtendedTags *tags)
- {
-       return (tags->validMarker0 == 0xAAAAAAAA &&
-               tags->validMarker1 == 0x55555555);
---- a/fs/yaffs2/yaffs_tagsvalidity.h
-+++ b/fs/yaffs2/yaffs_tagsvalidity.h
-@@ -19,6 +19,6 @@
- #include "yaffs_guts.h"
--void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
--int yaffs_ValidateTags(yaffs_ExtendedTags * tags);
-+void yaffs_InitialiseTags(yaffs_ExtendedTags *tags);
-+int yaffs_ValidateTags(yaffs_ExtendedTags *tags);
- #endif
---- a/fs/yaffs2/yportenv.h
-+++ b/fs/yaffs2/yportenv.h
-@@ -17,17 +17,28 @@
- #ifndef __YPORTENV_H__
- #define __YPORTENV_H__
-+/*
-+ * Define the MTD version in terms of Linux Kernel versions
-+ * This allows yaffs to be used independantly of the kernel
-+ * as well as with it.
-+ */
-+
-+#define MTD_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
-+
- #if defined CONFIG_YAFFS_WINCE
- #include "ywinceenv.h"
--#elif  defined __KERNEL__
-+#elif defined __KERNEL__
- #include "moduleconfig.h"
- /* Linux kernel */
-+
- #include <linux/version.h>
--#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-+#define MTD_VERSION_CODE LINUX_VERSION_CODE
-+
-+#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 19))
- #include <linux/config.h>
- #endif
- #include <linux/kernel.h>
-@@ -40,12 +51,13 @@
- #define YCHAR char
- #define YUCHAR unsigned char
- #define _Y(x)     x
--#define yaffs_strcpy(a,b)    strcpy(a,b)
--#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
--#define yaffs_strncmp(a,b,c) strncmp(a,b,c)
--#define yaffs_strlen(s)            strlen(s)
--#define yaffs_sprintf      sprintf
--#define yaffs_toupper(a)     toupper(a)
-+#define yaffs_strcat(a, b)     strcat(a, b)
-+#define yaffs_strcpy(a, b)     strcpy(a, b)
-+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
-+#define yaffs_strncmp(a, b, c) strncmp(a, b, c)
-+#define yaffs_strlen(s)              strlen(s)
-+#define yaffs_sprintf        sprintf
-+#define yaffs_toupper(a)       toupper(a)
- #define Y_INLINE inline
-@@ -53,19 +65,19 @@
- #define YAFFS_LOSTNFOUND_PREFIX               "obj"
- /* #define YPRINTF(x) printk x */
--#define YMALLOC(x) kmalloc(x,GFP_KERNEL)
-+#define YMALLOC(x) kmalloc(x, GFP_NOFS)
- #define YFREE(x)   kfree(x)
- #define YMALLOC_ALT(x) vmalloc(x)
- #define YFREE_ALT(x)   vfree(x)
- #define YMALLOC_DMA(x) YMALLOC(x)
--// KR - added for use in scan so processes aren't blocked indefinitely.
-+/* KR - added for use in scan so processes aren't blocked indefinitely. */
- #define YYIELD() schedule()
- #define YAFFS_ROOT_MODE                       0666
- #define YAFFS_LOSTNFOUND_MODE         0666
--#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-+#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 5, 0))
- #define Y_CURRENT_TIME CURRENT_TIME.tv_sec
- #define Y_TIME_CONVERT(x) (x).tv_sec
- #else
-@@ -73,11 +85,12 @@
- #define Y_TIME_CONVERT(x) (x)
- #endif
--#define yaffs_SumCompare(x,y) ((x) == (y))
--#define yaffs_strcmp(a,b) strcmp(a,b)
-+#define yaffs_SumCompare(x, y) ((x) == (y))
-+#define yaffs_strcmp(a, b) strcmp(a, b)
- #define TENDSTR "\n"
- #define TSTR(x) KERN_WARNING x
-+#define TCONT(x) x
- #define TOUT(p) printk p
- #define yaffs_trace(mask, fmt, args...) \
-@@ -90,6 +103,8 @@
- #elif defined CONFIG_YAFFS_DIRECT
-+#define MTD_VERSION_CODE MTD_VERSION(2, 6, 22)
-+
- /* Direct interface */
- #include "ydirectenv.h"
-@@ -111,11 +126,12 @@
- #define YCHAR char
- #define YUCHAR unsigned char
- #define _Y(x)     x
--#define yaffs_strcpy(a,b)    strcpy(a,b)
--#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
--#define yaffs_strlen(s)            strlen(s)
--#define yaffs_sprintf      sprintf
--#define yaffs_toupper(a)     toupper(a)
-+#define yaffs_strcat(a, b)     strcat(a, b)
-+#define yaffs_strcpy(a, b)     strcpy(a, b)
-+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
-+#define yaffs_strlen(s)              strlen(s)
-+#define yaffs_sprintf        sprintf
-+#define yaffs_toupper(a)       toupper(a)
- #define Y_INLINE inline
-@@ -133,8 +149,8 @@
- #define YAFFS_ROOT_MODE                               0666
- #define YAFFS_LOSTNFOUND_MODE         0666
--#define yaffs_SumCompare(x,y) ((x) == (y))
--#define yaffs_strcmp(a,b) strcmp(a,b)
-+#define yaffs_SumCompare(x, y) ((x) == (y))
-+#define yaffs_strcmp(a, b) strcmp(a, b)
- #else
- /* Should have specified a configuration type */
-@@ -178,10 +194,10 @@ extern unsigned int yaffs_wr_attempts;
- #define YAFFS_TRACE_ALWAYS            0xF0000000
--#define T(mask,p) do{ if((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p);} while(0)
-+#define T(mask, p) do { if ((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p); } while (0)
--#ifndef CONFIG_YAFFS_WINCE
--#define YBUG() T(YAFFS_TRACE_BUG,(TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR),__LINE__))
-+#ifndef YBUG
-+#define YBUG() do {T(YAFFS_TRACE_BUG, (TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR), __LINE__)); } while (0)
- #endif
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.34/600-phy_extension.patch b/target/linux/generic-2.6/patches-2.6.34/600-phy_extension.patch
deleted file mode 100644 (file)
index 966a812..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
---- a/drivers/net/phy/phy.c
-+++ b/drivers/net/phy/phy.c
-@@ -299,6 +299,50 @@ int phy_ethtool_gset(struct phy_device *
- }
- EXPORT_SYMBOL(phy_ethtool_gset);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr)
-+{
-+      u32 cmd;
-+      int tmp;
-+      struct ethtool_cmd ecmd = { ETHTOOL_GSET };
-+      struct ethtool_value edata = { ETHTOOL_GLINK };
-+
-+      if (get_user(cmd, (u32 *) useraddr))
-+              return -EFAULT;
-+
-+      switch (cmd) {
-+      case ETHTOOL_GSET:
-+              phy_ethtool_gset(phydev, &ecmd);
-+              if (copy_to_user(useraddr, &ecmd, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return 0;
-+
-+      case ETHTOOL_SSET:
-+              if (copy_from_user(&ecmd, useraddr, sizeof(ecmd)))
-+                      return -EFAULT;
-+              return phy_ethtool_sset(phydev, &ecmd);
-+
-+      case ETHTOOL_NWAY_RST:
-+              /* if autoneg is off, it's an error */
-+              tmp = phy_read(phydev, MII_BMCR);
-+              if (tmp & BMCR_ANENABLE) {
-+                      tmp |= (BMCR_ANRESTART);
-+                      phy_write(phydev, MII_BMCR, tmp);
-+                      return 0;
-+              }
-+              return -EINVAL;
-+
-+      case ETHTOOL_GLINK:
-+              edata.data = (phy_read(phydev,
-+                              MII_BMSR) & BMSR_LSTATUS) ? 1 : 0;
-+              if (copy_to_user(useraddr, &edata, sizeof(edata)))
-+                      return -EFAULT;
-+              return 0;
-+      }
-+
-+      return -EOPNOTSUPP;
-+}
-+EXPORT_SYMBOL(phy_ethtool_ioctl);
-+
- /**
-  * phy_mii_ioctl - generic PHY MII ioctl interface
-  * @phydev: the phy_device struct
-@@ -352,7 +396,7 @@ int phy_mii_ioctl(struct phy_device *phy
-               }
-               phy_write(phydev, mii_data->reg_num, val);
--              
-+
-               if (mii_data->reg_num == MII_BMCR &&
-                   val & BMCR_RESET &&
-                   phydev->drv->config_init) {
-@@ -466,7 +510,7 @@ static void phy_force_reduction(struct p
-       int idx;
-       idx = phy_find_setting(phydev->speed, phydev->duplex);
--      
-+
-       idx++;
-       idx = phy_find_valid(idx, phydev->supported);
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -491,6 +491,7 @@ void phy_start_machine(struct phy_device
- void phy_stop_machine(struct phy_device *phydev);
- int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
- int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
-+int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr);
- int phy_mii_ioctl(struct phy_device *phydev,
-               struct mii_ioctl_data *mii_data, int cmd);
- int phy_start_interrupts(struct phy_device *phydev);
diff --git a/target/linux/generic-2.6/patches-2.6.34/620-phy_adm6996.patch b/target/linux/generic-2.6/patches-2.6.34/620-phy_adm6996.patch
deleted file mode 100644 (file)
index b3e469a..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -88,6 +88,11 @@ config LSI_ET1011C_PHY
-       ---help---
-         Supports the LSI ET1011C PHY.
-+config ADM6996_PHY
-+      tristate "Driver for ADM6996 switches"
-+      ---help---
-+        Currently supports the ADM6996F switch
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -13,6 +13,7 @@ obj-$(CONFIG_VITESSE_PHY)    += vitesse.o
- obj-$(CONFIG_BROADCOM_PHY)    += broadcom.o
- obj-$(CONFIG_BCM63XX_PHY)     += bcm63xx.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
-+obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/630-phy_packets.patch b/target/linux/generic-2.6/patches-2.6.34/630-phy_packets.patch
deleted file mode 100644 (file)
index 9c0f24a..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
---- a/drivers/net/phy/phy_device.c
-+++ b/drivers/net/phy/phy_device.c
-@@ -146,6 +146,18 @@ int phy_scan_fixups(struct phy_device *p
- }
- EXPORT_SYMBOL(phy_scan_fixups);
-+static int generic_receive_skb(struct sk_buff *skb)
-+{
-+      skb->protocol = eth_type_trans(skb, skb->dev);
-+      return netif_receive_skb(skb);
-+}
-+
-+static int generic_rx(struct sk_buff *skb)
-+{
-+      skb->protocol = eth_type_trans(skb, skb->dev);
-+      return netif_rx(skb);
-+}
-+
- struct phy_device* phy_device_create(struct mii_bus *bus, int addr, int phy_id)
- {
-       struct phy_device *dev;
-@@ -175,6 +187,8 @@ struct phy_device* phy_device_create(str
-       dev_set_name(&dev->dev, PHY_ID_FMT, bus->id, addr);
-       dev->state = PHY_DOWN;
-+      dev->netif_receive_skb = &generic_receive_skb;
-+      dev->netif_rx = &generic_rx;
-       mutex_init(&dev->lock);
-       INIT_DELAYED_WORK(&dev->state_queue, phy_state_machine);
---- a/include/linux/phy.h
-+++ b/include/linux/phy.h
-@@ -325,6 +325,20 @@ struct phy_device {
-       void (*adjust_link)(struct net_device *dev);
-       void (*adjust_state)(struct net_device *dev);
-+
-+      /*
-+       * By default these point to the original functions
-+       * with the same name. adding them to the phy_device
-+       * allows the phy driver to override them for packet
-+       * mangling if the ethernet driver supports it
-+       * This is required to support some really horrible
-+       * switches such as the Marvell 88E6060
-+       */
-+      int (*netif_receive_skb)(struct sk_buff *skb);
-+      int (*netif_rx)(struct sk_buff *skb);
-+
-+      /* alignment offset for packets */
-+      int pkt_align;
- };
- #define to_phy_device(d) container_of(d, struct phy_device, dev)
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -844,6 +844,7 @@ struct net_device {
-       void                    *ax25_ptr;      /* AX.25 specific data */
-       struct wireless_dev     *ieee80211_ptr; /* IEEE 802.11 specific data,
-                                                  assign before registering */
-+      void                    *phy_ptr; /* PHY device specific data */
- /*
-  * Cache line mostly used on receive path (including eth_type_trans())
diff --git a/target/linux/generic-2.6/patches-2.6.34/650-swconfig.patch b/target/linux/generic-2.6/patches-2.6.34/650-swconfig.patch
deleted file mode 100644 (file)
index 6825037..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -13,6 +13,12 @@ menuconfig PHYLIB
- if PHYLIB
-+config SWCONFIG
-+      tristate "Switch configuration API"
-+      ---help---
-+        Switch configuration API using netlink. This allows
-+        you to configure the VLAN features of certain switches.
-+
- comment "MII PHY device drivers"
- config MARVELL_PHY
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -3,6 +3,7 @@
- libphy-objs                   := phy.o phy_device.o mdio_bus.o
- obj-$(CONFIG_PHYLIB)          += libphy.o
-+obj-$(CONFIG_SWCONFIG)                += swconfig.o
- obj-$(CONFIG_MARVELL_PHY)     += marvell.o
- obj-$(CONFIG_DAVICOM_PHY)     += davicom.o
- obj-$(CONFIG_CICADA_PHY)      += cicada.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/651-swconfig-2.6.32-fix.patch b/target/linux/generic-2.6/patches-2.6.34/651-swconfig-2.6.32-fix.patch
deleted file mode 100644 (file)
index bc8f8fc..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
---- a/drivers/net/phy/swconfig.c
-+++ b/drivers/net/phy/swconfig.c
-@@ -335,7 +335,7 @@ swconfig_send_multipart(struct swconfig_
-                       if (cb->close(cb, arg) < 0)
-                               goto error;
-               }
--              err = genlmsg_unicast(cb->msg, info->snd_pid);
-+              err = genlmsg_reply(cb->msg, info);
-               cb->msg = NULL;
-               if (err < 0)
-                       goto error;
-@@ -419,7 +419,7 @@ swconfig_list_attrs(struct sk_buff *skb,
-       if (!cb.msg)
-               return 0;
--      return genlmsg_unicast(cb.msg, info->snd_pid);
-+      return genlmsg_reply(cb.msg, info);
- error:
-       if (cb.msg)
-@@ -728,7 +728,7 @@ swconfig_get_attr(struct sk_buff *skb, s
-               goto nla_put_failure;
-       swconfig_put_dev(dev);
--      return genlmsg_unicast(msg, info->snd_pid);
-+      return genlmsg_reply(msg, info);
- nla_put_failure:
-       if (msg)
diff --git a/target/linux/generic-2.6/patches-2.6.34/660-phy_mvswitch.patch b/target/linux/generic-2.6/patches-2.6.34/660-phy_mvswitch.patch
deleted file mode 100644 (file)
index 36551fd..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -99,6 +99,9 @@ config ADM6996_PHY
-       ---help---
-         Currently supports the ADM6996F switch
-+config MVSWITCH_PHY
-+      tristate "Driver for Marvell 88E6060 switches"
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -15,6 +15,7 @@ obj-$(CONFIG_BROADCOM_PHY)   += broadcom.o
- obj-$(CONFIG_BCM63XX_PHY)     += bcm63xx.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
- obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
-+obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/670-phy_ip175c.patch b/target/linux/generic-2.6/patches-2.6.34/670-phy_ip175c.patch
deleted file mode 100644 (file)
index 862868c..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -102,6 +102,10 @@ config ADM6996_PHY
- config MVSWITCH_PHY
-       tristate "Driver for Marvell 88E6060 switches"
-+config IP175C_PHY
-+      tristate "Driver for IC+ IP175C/IP178C switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -16,6 +16,7 @@ obj-$(CONFIG_BCM63XX_PHY)    += bcm63xx.o
- obj-$(CONFIG_ICPLUS_PHY)      += icplus.o
- obj-$(CONFIG_ADM6996_PHY)     += adm6996.o
- obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
-+obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/680-phy_ar8216.patch b/target/linux/generic-2.6/patches-2.6.34/680-phy_ar8216.patch
deleted file mode 100644 (file)
index 00372aa..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -106,6 +106,10 @@ config IP175C_PHY
-       tristate "Driver for IC+ IP175C/IP178C switches"
-       select SWCONFIG
-+config AR8216_PHY
-+      tristate "Driver for Atheros AR8216 switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -18,6 +18,7 @@ obj-$(CONFIG_ADM6996_PHY)    += adm6996.o
- obj-$(CONFIG_MVSWITCH_PHY)    += mvswitch.o
- obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
-+obj-$(CONFIG_AR8216_PHY)      += ar8216.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/690-phy_rtl8306.patch b/target/linux/generic-2.6/patches-2.6.34/690-phy_rtl8306.patch
deleted file mode 100644 (file)
index a4793cb..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -110,6 +110,10 @@ config AR8216_PHY
-       tristate "Driver for Atheros AR8216 switches"
-       select SWCONFIG
-+config RTL8306_PHY
-+      tristate "Driver for Realtek RTL8306S switches"
-+      select SWCONFIG
-+
- config FIXED_PHY
-       bool "Driver for MDIO Bus/PHY emulation with fixed speed/link PHYs"
-       depends on PHYLIB=y
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_MVSWITCH_PHY)   += mvswitch.o
- obj-$(CONFIG_IP175C_PHY)      += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_AR8216_PHY)      += ar8216.o
-+obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/691-phy_rtl8366.patch b/target/linux/generic-2.6/patches-2.6.34/691-phy_rtl8366.patch
deleted file mode 100644 (file)
index 0963bd8..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
---- a/drivers/net/phy/Kconfig
-+++ b/drivers/net/phy/Kconfig
-@@ -152,4 +152,29 @@ config MDIO_OCTEON
-         If in doubt, say Y.
-+config RTL8366_SMI
-+      tristate "Driver for the RTL8366 SMI interface"
-+      depends on GENERIC_GPIO
-+      ---help---
-+        This module implements the SMI interface protocol which is used
-+        by some RTL8366 ethernet switch devices via the generic GPIO API.
-+
-+if RTL8366_SMI
-+
-+config RTL8366S_PHY
-+      tristate "Driver for the Realtek RTL8366S switch"
-+      select SWCONFIG
-+
-+config RTL8366RB_PHY
-+      tristate "Driver for the Realtek RTL8366RB switch"
-+      select SWCONFIG
-+
-+config RTL8366S_PHY_DEBUG_FS
-+      bool "RTL8366 switch driver DEBUG_FS support"
-+      depends on RTL8366S_PHY || RTL8366RB_PHY
-+      depends on DEBUG_FS
-+      default n
-+
-+endif # RTL8366_SMI
-+
- endif # PHYLIB
---- a/drivers/net/phy/Makefile
-+++ b/drivers/net/phy/Makefile
-@@ -20,6 +20,9 @@ obj-$(CONFIG_IP175C_PHY)     += ip175c.o
- obj-$(CONFIG_REALTEK_PHY)     += realtek.o
- obj-$(CONFIG_AR8216_PHY)      += ar8216.o
- obj-$(CONFIG_RTL8306_PHY)     += rtl8306.o
-+obj-$(CONFIG_RTL8366_SMI)     += rtl8366_smi.o
-+obj-$(CONFIG_RTL8366S_PHY)    += rtl8366s.o
-+obj-$(CONFIG_RTL8366RB_PHY)   += rtl8366rb.o
- obj-$(CONFIG_LSI_ET1011C_PHY) += et1011c.o
- obj-$(CONFIG_FIXED_PHY)               += fixed.o
- obj-$(CONFIG_MDIO_BITBANG)    += mdio-bitbang.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/700-rtc7301.patch b/target/linux/generic-2.6/patches-2.6.34/700-rtc7301.patch
deleted file mode 100644 (file)
index dae807f..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
---- a/drivers/rtc/Kconfig
-+++ b/drivers/rtc/Kconfig
-@@ -608,6 +608,15 @@ config RTC_DRV_NUC900
-         If you say yes here you get support for the RTC subsystem of the
-         NUC910/NUC920 used in embedded systems.
-+config RTC_DRV_RTC7301
-+      tristate "Epson RTC-7301 SF/DG"
-+      help
-+        If you say Y here you will get support for the
-+        Epson RTC-7301 SF/DG RTC chips.
-+
-+        This driver can also be built as a module. If so, the module
-+        will be called rtc-7301.
-+
- comment "on-CPU RTC drivers"
- config RTC_DRV_OMAP
---- a/drivers/rtc/Makefile
-+++ b/drivers/rtc/Makefile
-@@ -72,6 +72,7 @@ obj-$(CONFIG_RTC_DRV_RP5C01) += rtc-rp5c
- obj-$(CONFIG_RTC_DRV_RS5C313) += rtc-rs5c313.o
- obj-$(CONFIG_RTC_DRV_RS5C348) += rtc-rs5c348.o
- obj-$(CONFIG_RTC_DRV_RS5C372) += rtc-rs5c372.o
-+obj-$(CONFIG_RTC_DRV_RTC7301) += rtc-rtc7301.o
- obj-$(CONFIG_RTC_DRV_RX8025)  += rtc-rx8025.o
- obj-$(CONFIG_RTC_DRV_RX8581)  += rtc-rx8581.o
- obj-$(CONFIG_RTC_DRV_S35390A) += rtc-s35390a.o
---- /dev/null
-+++ b/drivers/rtc/rtc-rtc7301.c
-@@ -0,0 +1,219 @@
-+/*
-+ * Driver for Epson RTC-7301SF/DG
-+ *
-+ * Copyright (C) 2009 Jose Vasconcellos
-+ *
-+ * 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/rtc.h>
-+#include <linux/platform_device.h>
-+#include <linux/io.h>
-+#include <linux/delay.h>
-+#include <linux/bcd.h>
-+
-+#define RTC_NAME "rtc7301"
-+#define RTC_VERSION "0.1"
-+
-+/* Epson RTC-7301 register addresses */
-+#define RTC7301_SEC           0x00
-+#define RTC7301_SEC10         0x01
-+#define RTC7301_MIN           0x02
-+#define RTC7301_MIN10         0x03
-+#define RTC7301_HOUR          0x04
-+#define RTC7301_HOUR10                0x05
-+#define RTC7301_WEEKDAY               0x06
-+#define RTC7301_DAY           0x07
-+#define RTC7301_DAY10         0x08
-+#define RTC7301_MON           0x09
-+#define RTC7301_MON10         0x0A
-+#define RTC7301_YEAR          0x0B
-+#define RTC7301_YEAR10                0x0C
-+#define RTC7301_YEAR100               0x0D
-+#define RTC7301_YEAR1000      0x0E
-+#define RTC7301_CTRLREG               0x0F
-+
-+static uint8_t __iomem *rtc7301_base;
-+
-+#define read_reg(offset) (readb(rtc7301_base + offset) & 0xf)
-+#define write_reg(offset, data) writeb(data, rtc7301_base + (offset))
-+
-+#define rtc7301_isbusy() (read_reg(RTC7301_CTRLREG) & 1)
-+
-+static void rtc7301_init_settings(void)
-+{
-+      int i;
-+
-+      write_reg(RTC7301_CTRLREG, 2);
-+      write_reg(RTC7301_YEAR1000, 2);
-+      udelay(122);
-+
-+      /* bank 1 */
-+      write_reg(RTC7301_CTRLREG, 6);
-+      for (i=0; i<15; i++)
-+              write_reg(i, 0);
-+
-+      /* bank 2 */
-+      write_reg(RTC7301_CTRLREG, 14);
-+      for (i=0; i<15; i++)
-+              write_reg(i, 0);
-+      write_reg(RTC7301_CTRLREG, 0);
-+}
-+
-+static int rtc7301_get_datetime(struct device *dev, struct rtc_time *dt)
-+{
-+      int cnt;
-+      uint8_t buf[16];
-+
-+      cnt = 0;
-+      while (rtc7301_isbusy()) {
-+              udelay(244);
-+              if (cnt++ > 100) {
-+                      dev_err(dev, "%s: timeout error %x\n", __func__, rtc7301_base[RTC7301_CTRLREG]);
-+                      return -EIO;
-+              }
-+      }
-+
-+      for (cnt=0; cnt<16; cnt++)
-+              buf[cnt] = read_reg(cnt);
-+
-+      if (buf[RTC7301_SEC10] & 8) {
-+              dev_err(dev, "%s: RTC not set\n", __func__);
-+              return -EINVAL;
-+      }
-+
-+      memset(dt, 0, sizeof(*dt));
-+
-+      dt->tm_sec =  buf[RTC7301_SEC] + buf[RTC7301_SEC10]*10;
-+      dt->tm_min =  buf[RTC7301_MIN] + buf[RTC7301_MIN10]*10;
-+      dt->tm_hour = buf[RTC7301_HOUR] + buf[RTC7301_HOUR10]*10;
-+
-+      dt->tm_mday = buf[RTC7301_DAY] + buf[RTC7301_DAY10]*10;
-+      dt->tm_mon =  buf[RTC7301_MON] + buf[RTC7301_MON10]*10 - 1;
-+      dt->tm_year = buf[RTC7301_YEAR] + buf[RTC7301_YEAR10]*10 +
-+                    buf[RTC7301_YEAR100]*100 +
-+                    ((buf[RTC7301_YEAR1000] & 3)*1000) - 1900;
-+
-+      /* the rtc device may contain illegal values on power up
-+       * according to the data sheet. make sure they are valid.
-+       */
-+
-+      return rtc_valid_tm(dt);
-+}
-+
-+static int rtc7301_set_datetime(struct device *dev, struct rtc_time *dt)
-+{
-+      int data;
-+
-+      data = dt->tm_year + 1900;
-+      if (data >= 2100 || data < 1900)
-+              return -EINVAL;
-+
-+      write_reg(RTC7301_CTRLREG, 2);
-+              udelay(122);
-+
-+      data = bin2bcd(dt->tm_sec);
-+      write_reg(RTC7301_SEC, data);
-+      write_reg(RTC7301_SEC10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_min);
-+      write_reg(RTC7301_MIN, data );
-+      write_reg(RTC7301_MIN10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_hour);
-+      write_reg(RTC7301_HOUR, data);
-+      write_reg(RTC7301_HOUR10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_mday);
-+      write_reg(RTC7301_DAY, data);
-+      write_reg(RTC7301_DAY10, (data>> 4));
-+
-+      data = bin2bcd(dt->tm_mon + 1);
-+      write_reg(RTC7301_MON, data);
-+      write_reg(RTC7301_MON10, (data >> 4));
-+
-+      data = bin2bcd(dt->tm_year % 100);
-+      write_reg(RTC7301_YEAR, data);
-+      write_reg(RTC7301_YEAR10, (data >> 4));
-+      data = bin2bcd((1900 + dt->tm_year) / 100);
-+      write_reg(RTC7301_YEAR100, data);
-+
-+      data = bin2bcd(dt->tm_wday);
-+      write_reg(RTC7301_WEEKDAY, data);
-+
-+      write_reg(RTC7301_CTRLREG, 0);
-+
-+      return 0;
-+}
-+
-+static const struct rtc_class_ops rtc7301_rtc_ops = {
-+      .read_time      = rtc7301_get_datetime,
-+      .set_time       = rtc7301_set_datetime,
-+};
-+
-+static int __devinit rtc7301_probe(struct platform_device *pdev)
-+{
-+      struct rtc_device *rtc;
-+      struct resource *res;
-+
-+      res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-+      if (!res)
-+              return -ENOENT;
-+
-+      rtc7301_base = ioremap_nocache(res->start, 0x1000 /*res->end - res->start + 1*/);
-+      if (!rtc7301_base)
-+              return -EINVAL;
-+
-+      rtc = rtc_device_register(RTC_NAME, &pdev->dev,
-+                              &rtc7301_rtc_ops, THIS_MODULE);
-+      if (IS_ERR(rtc)) {
-+              iounmap(rtc7301_base);
-+              return PTR_ERR(rtc);
-+      }
-+
-+      platform_set_drvdata(pdev, rtc);
-+
-+      rtc7301_init_settings();
-+      return 0;
-+}
-+
-+static int __devexit rtc7301_remove(struct platform_device *pdev)
-+{
-+      struct rtc_device *rtc = platform_get_drvdata(pdev);
-+
-+      if (rtc)
-+              rtc_device_unregister(rtc);
-+      if (rtc7301_base)
-+              iounmap(rtc7301_base);
-+      return 0;
-+}
-+
-+static struct platform_driver rtc7301_driver = {
-+      .driver = {
-+              .name   = RTC_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe  = rtc7301_probe,
-+      .remove = __devexit_p(rtc7301_remove),
-+};
-+
-+static __init int rtc7301_init(void)
-+{
-+      return platform_driver_register(&rtc7301_driver);
-+}
-+module_init(rtc7301_init);
-+
-+static __exit void rtc7301_exit(void)
-+{
-+      platform_driver_unregister(&rtc7301_driver);
-+}
-+module_exit(rtc7301_exit);
-+
-+MODULE_DESCRIPTION("Epson 7301 RTC driver");
-+MODULE_AUTHOR("Jose Vasconcellos <jvasco@verizon.net>");
-+MODULE_LICENSE("GPL");
-+MODULE_ALIAS("platform:" RTC_NAME);
-+MODULE_VERSION(RTC_VERSION);
diff --git a/target/linux/generic-2.6/patches-2.6.34/750-glamo-headers.patch b/target/linux/generic-2.6/patches-2.6.34/750-glamo-headers.patch
deleted file mode 100644 (file)
index 419d98a..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/include/linux/fb.h
-+++ b/include/linux/fb.h
-@@ -124,6 +124,7 @@ struct dentry;
- #define FB_ACCEL_TRIDENT_BLADE3D 52   /* Trident Blade3D              */
- #define FB_ACCEL_TRIDENT_BLADEXP 53   /* Trident BladeXP              */
- #define FB_ACCEL_CIRRUS_ALPINE   53   /* Cirrus Logic 543x/544x/5480  */
-+#define FB_ACCEL_GLAMO                50      /* SMedia Glamo                 */
- #define FB_ACCEL_NEOMAGIC_NM2070 90   /* NeoMagic NM2070              */
- #define FB_ACCEL_NEOMAGIC_NM2090 91   /* NeoMagic NM2090              */
- #define FB_ACCEL_NEOMAGIC_NM2093 92   /* NeoMagic NM2093              */
---- a/include/linux/Kbuild
-+++ b/include/linux/Kbuild
-@@ -76,6 +76,8 @@ header-y += genetlink.h
- header-y += gen_stats.h
- header-y += gfs2_ondisk.h
- header-y += gigaset_dev.h
-+header-y += glamofb.h
-+header-y += glamo-engine.h
- header-y += hysdn_if.h
- header-y += i2o-dev.h
- header-y += i8k.h
diff --git a/target/linux/generic-2.6/patches-2.6.34/801-usb_serial_endpoint_size.patch b/target/linux/generic-2.6/patches-2.6.34/801-usb_serial_endpoint_size.patch
deleted file mode 100644 (file)
index e6d0645..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/drivers/usb/serial/usb-serial.c
-+++ b/drivers/usb/serial/usb-serial.c
-@@ -61,6 +61,7 @@ static struct usb_driver usb_serial_driv
-    drivers depend on it.
- */
-+static ushort maxSize = 0;
- static int debug;
- /* initially all NULL */
- static struct usb_serial *serial_table[SERIAL_TTY_MINORS];
-@@ -914,7 +915,7 @@ int usb_serial_probe(struct usb_interfac
-                       dev_err(&interface->dev, "No free urbs available\n");
-                       goto probe_error;
-               }
--              buffer_size = le16_to_cpu(endpoint->wMaxPacketSize);
-+              buffer_size = (endpoint->wMaxPacketSize > maxSize) ? endpoint->wMaxPacketSize : maxSize;
-               port->bulk_in_size = buffer_size;
-               port->bulk_in_endpointAddress = endpoint->bEndpointAddress;
-               port->bulk_in_buffer = kmalloc(buffer_size, GFP_KERNEL);
-@@ -1356,3 +1357,5 @@ MODULE_LICENSE("GPL");
- module_param(debug, bool, S_IRUGO | S_IWUSR);
- MODULE_PARM_DESC(debug, "Debug enabled or not");
-+module_param(maxSize, ushort,0);
-+MODULE_PARM_DESC(maxSize,"User specified USB endpoint size");
diff --git a/target/linux/generic-2.6/patches-2.6.34/840-unable_to_open_console.patch b/target/linux/generic-2.6/patches-2.6.34/840-unable_to_open_console.patch
deleted file mode 100644 (file)
index 8d90396..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -807,7 +807,7 @@ static noinline int init_post(void)
-       numa_default_policy();
-       if (sys_open((const char __user *) "/dev/console", O_RDWR, 0) < 0)
--              printk(KERN_WARNING "Warning: unable to open an initial console.\n");
-+              printk(KERN_WARNING "Please be patient, while OpenWrt loads ...\n");
-       (void) sys_dup(0);
-       (void) sys_dup(0);
diff --git a/target/linux/generic-2.6/patches-2.6.34/902-darwin_scripts_include.patch b/target/linux/generic-2.6/patches-2.6.34/902-darwin_scripts_include.patch
deleted file mode 100644 (file)
index be31abe..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/scripts/genksyms/parse.c_shipped
-+++ b/scripts/genksyms/parse.c_shipped
-@@ -160,7 +160,9 @@
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/genksyms/parse.y
-+++ b/scripts/genksyms/parse.y
-@@ -24,7 +24,9 @@
- %{
- #include <assert.h>
-+#ifndef __APPLE__
- #include <malloc.h>
-+#endif
- #include "genksyms.h"
- static int is_typedef;
---- a/scripts/kallsyms.c
-+++ b/scripts/kallsyms.c
-@@ -22,6 +22,35 @@
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
-+#ifdef __APPLE__
-+/* Darwin has no memmem implementation, this one is ripped of the uClibc-0.9.28 source */
-+void *memmem (const void *haystack, size_t haystack_len,
-+                          const void *needle,  size_t needle_len)
-+{
-+  const char *begin;
-+  const char *const last_possible
-+    = (const char *) haystack + haystack_len - needle_len;
-+
-+  if (needle_len == 0)
-+    /* The first occurrence of the empty string is deemed to occur at
-+       the beginning of the string.  */
-+    return (void *) haystack;
-+
-+  /* Sanity check, otherwise the loop might search through the whole
-+     memory.  */
-+  if (__builtin_expect (haystack_len < needle_len, 0))
-+    return NULL;
-+
-+  for (begin = (const char *) haystack; begin <= last_possible; ++begin)
-+    if (begin[0] == ((const char *) needle)[0] &&
-+        !memcmp ((const void *) &begin[1],
-+                 (const void *) ((const char *) needle + 1),
-+                 needle_len - 1))
-+      return (void *) begin;
-+
-+  return NULL;
-+}
-+#endif
- #ifndef ARRAY_SIZE
- #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof(arr[0]))
---- a/scripts/kconfig/Makefile
-+++ b/scripts/kconfig/Makefile
-@@ -130,6 +130,9 @@ check-lxdialog  := $(srctree)/$(src)/lxd
- # we really need to do so. (Do not call gcc as part of make mrproper)
- HOST_EXTRACFLAGS = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ccflags)
- HOST_LOADLIBES   = $(shell $(CONFIG_SHELL) $(check-lxdialog) -ldflags $(HOSTCC))
-+ifeq ($(shell uname -s),Darwin)
-+HOST_LOADLIBES  += -lncurses
-+endif
- HOST_EXTRACFLAGS += -DLOCALE
---- a/scripts/mod/mk_elfconfig.c
-+++ b/scripts/mod/mk_elfconfig.c
-@@ -1,7 +1,11 @@
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
-+#ifndef __APPLE__
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- int
- main(int argc, char **argv)
---- a/scripts/mod/modpost.h
-+++ b/scripts/mod/modpost.h
-@@ -7,7 +7,11 @@
- #include <sys/mman.h>
- #include <fcntl.h>
- #include <unistd.h>
-+#if !(defined(__APPLE__) || defined(__CYGWIN__))
- #include <elf.h>
-+#else
-+#include "../../../../../tools/sstrip/include/elf.h"
-+#endif
- #include "elfconfig.h"
diff --git a/target/linux/generic-2.6/patches-2.6.34/903-hostap_txpower.patch b/target/linux/generic-2.6/patches-2.6.34/903-hostap_txpower.patch
deleted file mode 100644 (file)
index 7552ceb..0000000
+++ /dev/null
@@ -1,154 +0,0 @@
---- a/drivers/net/wireless/hostap/hostap_ap.c
-+++ b/drivers/net/wireless/hostap/hostap_ap.c
-@@ -2335,13 +2335,13 @@ int prism2_ap_get_sta_qual(local_info_t 
-               addr[count].sa_family = ARPHRD_ETHER;
-               memcpy(addr[count].sa_data, sta->addr, ETH_ALEN);
-               if (sta->last_rx_silence == 0)
--                      qual[count].qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                        qual[count].qual = (sta->last_rx_signal - 156) == 0 ?
-+                                0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      qual[count].qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              qual[count].level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              qual[count].noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        qual[count].qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                qual[count].level = sta->last_rx_signal;
-+                qual[count].noise = sta->last_rx_silence;
-               qual[count].updated = sta->last_rx_updated;
-               sta->last_rx_updated = IW_QUAL_DBM;
-@@ -2407,13 +2407,13 @@ int prism2_ap_translate_scan(struct net_
-               memset(&iwe, 0, sizeof(iwe));
-               iwe.cmd = IWEVQUAL;
-               if (sta->last_rx_silence == 0)
--                      iwe.u.qual.qual = sta->last_rx_signal < 27 ?
--                              0 : (sta->last_rx_signal - 27) * 92 / 127;
-+                      iwe.u.qual.qual = (sta->last_rx_signal -156) == 0 ?
-+                              0 : (sta->last_rx_signal - 156) * 92 / 64;
-               else
--                      iwe.u.qual.qual = sta->last_rx_signal -
--                              sta->last_rx_silence - 35;
--              iwe.u.qual.level = HFA384X_LEVEL_TO_dBm(sta->last_rx_signal);
--              iwe.u.qual.noise = HFA384X_LEVEL_TO_dBm(sta->last_rx_silence);
-+                        iwe.u.qual.qual = (sta->last_rx_signal -
-+                                sta->last_rx_silence) * 92 / 64;
-+                iwe.u.qual.level = sta->last_rx_signal;
-+                iwe.u.qual.noise = sta->last_rx_silence;
-               iwe.u.qual.updated = sta->last_rx_updated;
-               iwe.len = IW_EV_QUAL_LEN;
-               current_ev = iwe_stream_add_event(info, current_ev, end_buf,
---- a/drivers/net/wireless/hostap/hostap_config.h
-+++ b/drivers/net/wireless/hostap/hostap_config.h
-@@ -45,4 +45,9 @@
-  */
- /* #define PRISM2_NO_STATION_MODES */
-+/* Enable TX power Setting functions
-+ * (min att = -128 , max att =  127)
-+ */
-+#define RAW_TXPOWER_SETTING
-+
- #endif /* HOSTAP_CONFIG_H */
---- a/drivers/net/wireless/hostap/hostap.h
-+++ b/drivers/net/wireless/hostap/hostap.h
-@@ -90,6 +90,7 @@ extern const struct iw_handler_def hosta
- extern const struct ethtool_ops prism2_ethtool_ops;
- int hostap_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
-+int hostap_restore_power(struct net_device *dev);
- #endif /* HOSTAP_H */
---- a/drivers/net/wireless/hostap/hostap_hw.c
-+++ b/drivers/net/wireless/hostap/hostap_hw.c
-@@ -932,6 +932,7 @@ static int hfa384x_set_rid(struct net_de
-                       prism2_hw_reset(dev);
-       }
-+      hostap_restore_power(dev);
-       return res;
- }
---- a/drivers/net/wireless/hostap/hostap_info.c
-+++ b/drivers/net/wireless/hostap/hostap_info.c
-@@ -432,6 +432,11 @@ static void handle_info_queue_linkstatus
-       }
-       /* Get BSSID if we have a valid AP address */
-+
-+      if ( val == HFA384X_LINKSTATUS_CONNECTED ||
-+           val == HFA384X_LINKSTATUS_DISCONNECTED )
-+                      hostap_restore_power(local->dev);
-+
-       if (connected) {
-               netif_carrier_on(local->dev);
-               netif_carrier_on(local->ddev);
---- a/drivers/net/wireless/hostap/hostap_ioctl.c
-+++ b/drivers/net/wireless/hostap/hostap_ioctl.c
-@@ -1476,23 +1476,20 @@ static int prism2_txpower_hfa386x_to_dBm
-               val = 255;
-       tmp = val;
--      tmp >>= 2;
--      return -12 - tmp;
-+      return tmp;
- }
- static u16 prism2_txpower_dBm_to_hfa386x(int val)
- {
-       signed char tmp;
--      if (val > 20)
--              return 128;
--      else if (val < -43)
-+      if (val > 127)
-               return 127;
-+      else if (val < -128)
-+              return 128;
-       tmp = val;
--      tmp = -12 - tmp;
--      tmp <<= 2;
-       return (unsigned char) tmp;
- }
-@@ -4056,3 +4053,35 @@ int hostap_ioctl(struct net_device *dev,
-       return ret;
- }
-+
-+/* BUG FIX: Restore power setting value when lost due to F/W bug */
-+
-+int hostap_restore_power(struct net_device *dev)
-+{
-+        struct hostap_interface *iface = netdev_priv(dev);
-+       local_info_t *local = iface->local;
-+
-+       u16 val;
-+       int ret = 0;
-+
-+       if (local->txpower_type == PRISM2_TXPOWER_OFF) {
-+                       val = 0xff; /* use all standby and sleep modes */
-+                       ret = local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                                              HFA386X_CR_A_D_TEST_MODES2,
-+                                              &val, NULL);
-+       }
-+
-+#ifdef RAW_TXPOWER_SETTING
-+       if (local->txpower_type == PRISM2_TXPOWER_FIXED) {
-+               val = HFA384X_TEST_CFG_BIT_ALC;
-+               local->func->cmd(dev, HFA384X_CMDCODE_TEST |
-+                                (HFA384X_TEST_CFG_BITS << 8), 0, &val, NULL);
-+               val = prism2_txpower_dBm_to_hfa386x(local->txpower);
-+               ret = (local->func->cmd(dev, HFA384X_CMDCODE_WRITEMIF,
-+                            HFA386X_CR_MANUAL_TX_POWER, &val, NULL));
-+       }
-+#endif /* RAW_TXPOWER_SETTING */
-+       return (ret ? -EOPNOTSUPP : 0);
-+}
-+
-+EXPORT_SYMBOL(hostap_restore_power);
diff --git a/target/linux/generic-2.6/patches-2.6.34/903-stddef_include.patch b/target/linux/generic-2.6/patches-2.6.34/903-stddef_include.patch
deleted file mode 100644 (file)
index 7fe248d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
---- a/include/linux/stddef.h
-+++ b/include/linux/stddef.h
-@@ -16,6 +16,7 @@ enum {
-       false   = 0,
-       true    = 1
- };
-+#endif /* __KERNEL__ */
- #undef offsetof
- #ifdef __compiler_offsetof
-@@ -23,6 +24,5 @@ enum {
- #else
- #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
- #endif
--#endif /* __KERNEL__ */
- #endif
diff --git a/target/linux/generic-2.6/patches-2.6.34/905-i386_build.patch b/target/linux/generic-2.6/patches-2.6.34/905-i386_build.patch
deleted file mode 100644 (file)
index c701fda..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
---- a/arch/x86/boot/tools/build.c
-+++ b/arch/x86/boot/tools/build.c
-@@ -29,7 +29,6 @@
- #include <stdarg.h>
- #include <sys/types.h>
- #include <sys/stat.h>
--#include <sys/sysmacros.h>
- #include <unistd.h>
- #include <fcntl.h>
- #include <sys/mman.h>
diff --git a/target/linux/generic-2.6/patches-2.6.34/920-01-hotpluggable-spi-gpio.patch b/target/linux/generic-2.6/patches-2.6.34/920-01-hotpluggable-spi-gpio.patch
deleted file mode 100644 (file)
index b10bc9a..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-Fix spi-gpio for hotplug.
-
---mb
-
-
-
---- a/drivers/spi/spi_gpio.c
-+++ b/drivers/spi/spi_gpio.c
-@@ -218,7 +218,7 @@ static void spi_gpio_cleanup(struct spi_
-       spi_bitbang_cleanup(spi);
- }
--static int __init spi_gpio_alloc(unsigned pin, const char *label, bool is_in)
-+static int __devinit spi_gpio_alloc(unsigned pin, const char *label, bool is_in)
- {
-       int value;
-@@ -232,7 +232,7 @@ static int __init spi_gpio_alloc(unsigne
-       return value;
- }
--static int __init
-+static int __devinit
- spi_gpio_request(struct spi_gpio_platform_data *pdata, const char *label)
- {
-       int value;
-@@ -261,7 +261,7 @@ done:
-       return value;
- }
--static int __init spi_gpio_probe(struct platform_device *pdev)
-+static int __devinit spi_gpio_probe(struct platform_device *pdev)
- {
-       int                             status;
-       struct spi_master               *master;
-@@ -317,7 +317,7 @@ gpio_free:
-       return status;
- }
--static int __exit spi_gpio_remove(struct platform_device *pdev)
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
- {
-       struct spi_gpio                 *spi_gpio;
-       struct spi_gpio_platform_data   *pdata;
-@@ -344,12 +344,13 @@ MODULE_ALIAS("platform:" DRIVER_NAME);
- static struct platform_driver spi_gpio_driver = {
-       .driver.name    = DRIVER_NAME,
-       .driver.owner   = THIS_MODULE,
--      .remove         = __exit_p(spi_gpio_remove),
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
- };
- static int __init spi_gpio_init(void)
- {
--      return platform_driver_probe(&spi_gpio_driver, spi_gpio_probe);
-+      return platform_driver_register(&spi_gpio_driver);
- }
- module_init(spi_gpio_init);
diff --git a/target/linux/generic-2.6/patches-2.6.34/920-04-spi-gpio-implement-spi-delay.patch b/target/linux/generic-2.6/patches-2.6.34/920-04-spi-gpio-implement-spi-delay.patch
deleted file mode 100644 (file)
index 1903288..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-Implement the SPI-GPIO delay function for busses that need speed limitation.
-
---mb
-
-
-
---- a/drivers/spi/spi_gpio.c
-+++ b/drivers/spi/spi_gpio.c
-@@ -21,6 +21,7 @@
- #include <linux/init.h>
- #include <linux/platform_device.h>
- #include <linux/gpio.h>
-+#include <linux/delay.h>
- #include <linux/spi/spi.h>
- #include <linux/spi/spi_bitbang.h>
-@@ -69,6 +70,7 @@ struct spi_gpio {
-  *            #define SPI_MOSI_GPIO   120
-  *            #define SPI_SCK_GPIO    121
-  *            #define SPI_N_CHIPSEL   4
-+ *            #undef NEED_SPIDELAY
-  *            #include "spi_gpio.c"
-  */
-@@ -76,6 +78,7 @@ struct spi_gpio {
- #define DRIVER_NAME   "spi_gpio"
- #define GENERIC_BITBANG       /* vs tight inlines */
-+#define NEED_SPIDELAY 1
- /* all functions referencing these symbols must define pdata */
- #define SPI_MISO_GPIO ((pdata)->miso)
-@@ -120,12 +123,20 @@ static inline int getmiso(const struct s
- #undef pdata
- /*
-- * NOTE:  this clocks "as fast as we can".  It "should" be a function of the
-- * requested device clock.  Software overhead means we usually have trouble
-- * reaching even one Mbit/sec (except when we can inline bitops), so for now
-- * we'll just assume we never need additional per-bit slowdowns.
-+ * NOTE:  to clock "as fast as we can", set spi_device.max_speed_hz
-+ * and spi_transfer.speed_hz to 0.
-+ * Otherwise this is a function of the requested device clock.
-+ * Software overhead means we usually have trouble
-+ * reaching even one Mbit/sec (except when we can inline bitops). So on small
-+ * embedded devices with fast SPI slaves you usually don't need a delay.
-  */
--#define spidelay(nsecs)       do {} while (0)
-+static inline void spidelay(unsigned nsecs)
-+{
-+#ifdef NEED_SPIDELAY
-+      if (unlikely(nsecs))
-+              ndelay(nsecs);
-+#endif /* NEED_SPIDELAY */
-+}
- #define       EXPAND_BITBANG_TXRX
- #include <linux/spi/spi_bitbang.h>
diff --git a/target/linux/generic-2.6/patches-2.6.34/921-gpio_spi_driver.patch b/target/linux/generic-2.6/patches-2.6.34/921-gpio_spi_driver.patch
deleted file mode 100644 (file)
index c37bb22..0000000
+++ /dev/null
@@ -1,366 +0,0 @@
-THIS CODE IS DEPRECATED.
-
-Please use the new mainline SPI-GPIO driver, as of 2.6.29.
-
---mb
-
-
-
---- /dev/null
-+++ b/include/linux/spi/spi_gpio_old.h
-@@ -0,0 +1,73 @@
-+/*
-+ * spi_gpio interface to platform code
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * 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.
-+ */
-+#ifndef _LINUX_SPI_SPI_GPIO
-+#define _LINUX_SPI_SPI_GPIO
-+
-+#include <linux/types.h>
-+#include <linux/spi/spi.h>
-+
-+
-+/**
-+ * struct spi_gpio_platform_data - Data definitions for a SPI-GPIO device.
-+ *
-+ * This structure holds information about a GPIO-based SPI device.
-+ *
-+ * @pin_clk: The GPIO pin number of the CLOCK pin.
-+ *
-+ * @pin_miso: The GPIO pin number of the MISO pin.
-+ *
-+ * @pin_mosi: The GPIO pin number of the MOSI pin.
-+ *
-+ * @pin_cs: The GPIO pin number of the CHIPSELECT pin.
-+ *
-+ * @cs_activelow: If true, the chip is selected when the CS line is low.
-+ *
-+ * @no_spi_delay: If true, no delay is done in the lowlevel bitbanging.
-+ *                Note that doing no delay is not standards compliant,
-+ *                but it might be needed to speed up transfers on some
-+ *                slow embedded machines.
-+ *
-+ * @boardinfo_setup: This callback is called after the
-+ *                   SPI master device was registered, but before the
-+ *                   device is registered.
-+ * @boardinfo_setup_data: Data argument passed to boardinfo_setup().
-+ */
-+struct spi_gpio_platform_data {
-+      unsigned int pin_clk;
-+      unsigned int pin_miso;
-+      unsigned int pin_mosi;
-+      unsigned int pin_cs;
-+      bool cs_activelow;
-+      bool no_spi_delay;
-+      int (*boardinfo_setup)(struct spi_board_info *bi,
-+                             struct spi_master *master,
-+                             void *data);
-+      void *boardinfo_setup_data;
-+};
-+
-+/**
-+ * SPI_GPIO_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a spi-gpio device.
-+ */
-+#define SPI_GPIO_PLATDEV_NAME "spi-gpio"
-+
-+/**
-+ * spi_gpio_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int spi_gpio_next_id(void);
-+
-+#endif /* _LINUX_SPI_SPI_GPIO */
---- /dev/null
-+++ b/drivers/spi/spi_gpio_old.c
-@@ -0,0 +1,251 @@
-+/*
-+ * Bitbanging SPI bus driver using GPIO API
-+ *
-+ * Copyright (c) 2008 Piotr Skamruk
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * based on spi_s3c2410_gpio.c
-+ *   Copyright (c) 2006 Ben Dooks
-+ *   Copyright (c) 2006 Simtec Electronics
-+ * and on i2c-gpio.c
-+ *   Copyright (C) 2007 Atmel Corporation
-+ *
-+ * 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/init.h>
-+#include <linux/delay.h>
-+#include <linux/spinlock.h>
-+#include <linux/workqueue.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/spi_bitbang.h>
-+#include <linux/spi/spi_gpio_old.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+struct spi_gpio {
-+      struct spi_bitbang bitbang;
-+      struct spi_gpio_platform_data *info;
-+      struct platform_device *pdev;
-+      struct spi_board_info bi;
-+};
-+
-+
-+static inline struct spi_gpio *spidev_to_sg(struct spi_device *dev)
-+{
-+      return dev->controller_data;
-+}
-+
-+static inline void setsck(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_clk, val ? 1 : 0);
-+}
-+
-+static inline void setmosi(struct spi_device *dev, int val)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      gpio_set_value(sp->info->pin_mosi, val ? 1 : 0);
-+}
-+
-+static inline u32 getmiso(struct spi_device *dev)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+      return gpio_get_value(sp->info->pin_miso) ? 1 : 0;
-+}
-+
-+static inline void do_spidelay(struct spi_device *dev, unsigned nsecs)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (!sp->info->no_spi_delay)
-+              ndelay(nsecs);
-+}
-+
-+#define spidelay(nsecs) do {                                  \
-+      /* Steal the spi_device pointer from our caller.        \
-+       * The bitbang-API should probably get fixed here... */ \
-+      do_spidelay(spi, nsecs);                                \
-+  } while (0)
-+
-+#define EXPAND_BITBANG_TXRX
-+#include <linux/spi/spi_bitbang.h>
-+
-+static u32 spi_gpio_txrx_mode0(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode1(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 0, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode2(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha0(spi, nsecs, 1, word, bits);
-+}
-+
-+static u32 spi_gpio_txrx_mode3(struct spi_device *spi,
-+                             unsigned nsecs, u32 word, u8 bits)
-+{
-+      return bitbang_txrx_be_cpha1(spi, nsecs, 1, word, bits);
-+}
-+
-+static void spi_gpio_chipselect(struct spi_device *dev, int on)
-+{
-+      struct spi_gpio *sp = spidev_to_sg(dev);
-+
-+      if (sp->info->cs_activelow)
-+              on = !on;
-+      gpio_set_value(sp->info->pin_cs, on ? 1 : 0);
-+}
-+
-+static int spi_gpio_probe(struct platform_device *pdev)
-+{
-+      struct spi_master *master;
-+      struct spi_gpio_platform_data *pdata;
-+      struct spi_gpio *sp;
-+      struct spi_device *spidev;
-+      int err;
-+
-+      pdata = pdev->dev.platform_data;
-+      if (!pdata)
-+              return -ENXIO;
-+
-+      err = -ENOMEM;
-+      master = spi_alloc_master(&pdev->dev, sizeof(struct spi_gpio));
-+      if (!master)
-+              goto err_alloc_master;
-+
-+      sp = spi_master_get_devdata(master);
-+      platform_set_drvdata(pdev, sp);
-+      sp->info = pdata;
-+
-+      err = gpio_request(pdata->pin_clk, "spi_clock");
-+      if (err)
-+              goto err_request_clk;
-+      err = gpio_request(pdata->pin_mosi, "spi_mosi");
-+      if (err)
-+              goto err_request_mosi;
-+      err = gpio_request(pdata->pin_miso, "spi_miso");
-+      if (err)
-+              goto err_request_miso;
-+      err = gpio_request(pdata->pin_cs, "spi_cs");
-+      if (err)
-+              goto err_request_cs;
-+
-+      sp->bitbang.master = spi_master_get(master);
-+      sp->bitbang.master->bus_num = -1;
-+      sp->bitbang.master->num_chipselect = 1;
-+      sp->bitbang.chipselect = spi_gpio_chipselect;
-+      sp->bitbang.txrx_word[SPI_MODE_0] = spi_gpio_txrx_mode0;
-+      sp->bitbang.txrx_word[SPI_MODE_1] = spi_gpio_txrx_mode1;
-+      sp->bitbang.txrx_word[SPI_MODE_2] = spi_gpio_txrx_mode2;
-+      sp->bitbang.txrx_word[SPI_MODE_3] = spi_gpio_txrx_mode3;
-+
-+      gpio_direction_output(pdata->pin_clk, 0);
-+      gpio_direction_output(pdata->pin_mosi, 0);
-+      gpio_direction_output(pdata->pin_cs,
-+                            pdata->cs_activelow ? 1 : 0);
-+      gpio_direction_input(pdata->pin_miso);
-+
-+      err = spi_bitbang_start(&sp->bitbang);
-+      if (err)
-+              goto err_no_bitbang;
-+      err = pdata->boardinfo_setup(&sp->bi, master,
-+                                   pdata->boardinfo_setup_data);
-+      if (err)
-+              goto err_bi_setup;
-+      sp->bi.controller_data = sp;
-+      spidev = spi_new_device(master, &sp->bi);
-+      if (!spidev)
-+              goto err_new_dev;
-+
-+      return 0;
-+
-+err_new_dev:
-+err_bi_setup:
-+      spi_bitbang_stop(&sp->bitbang);
-+err_no_bitbang:
-+      spi_master_put(sp->bitbang.master);
-+      gpio_free(pdata->pin_cs);
-+err_request_cs:
-+      gpio_free(pdata->pin_miso);
-+err_request_miso:
-+      gpio_free(pdata->pin_mosi);
-+err_request_mosi:
-+      gpio_free(pdata->pin_clk);
-+err_request_clk:
-+      kfree(master);
-+
-+err_alloc_master:
-+      return err;
-+}
-+
-+static int __devexit spi_gpio_remove(struct platform_device *pdev)
-+{
-+      struct spi_gpio *sp;
-+      struct spi_gpio_platform_data *pdata;
-+
-+      pdata = pdev->dev.platform_data;
-+      sp = platform_get_drvdata(pdev);
-+
-+      gpio_free(pdata->pin_clk);
-+      gpio_free(pdata->pin_mosi);
-+      gpio_free(pdata->pin_miso);
-+      gpio_free(pdata->pin_cs);
-+      spi_bitbang_stop(&sp->bitbang);
-+      spi_master_put(sp->bitbang.master);
-+
-+      return 0;
-+}
-+
-+static struct platform_driver spi_gpio_driver = {
-+      .driver         = {
-+              .name   = SPI_GPIO_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+      .probe          = spi_gpio_probe,
-+      .remove         = __devexit_p(spi_gpio_remove),
-+};
-+
-+int spi_gpio_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(spi_gpio_next_id);
-+
-+static int __init spi_gpio_init(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&spi_gpio_driver);
-+      if (err)
-+              printk(KERN_ERR "spi-gpio: register failed: %d\n", err);
-+
-+      return err;
-+}
-+module_init(spi_gpio_init);
-+
-+static void __exit spi_gpio_exit(void)
-+{
-+      platform_driver_unregister(&spi_gpio_driver);
-+}
-+module_exit(spi_gpio_exit);
-+
-+MODULE_AUTHOR("Piot Skamruk <piotr.skamruk at gmail.com>");
-+MODULE_AUTHOR("Michael Buesch");
-+MODULE_DESCRIPTION("Platform independent GPIO bitbanging SPI driver");
-+MODULE_LICENSE("GPL v2");
---- a/drivers/spi/Kconfig
-+++ b/drivers/spi/Kconfig
-@@ -116,6 +116,15 @@ config SPI_GPIO
-         GPIO operations, you should be able to leverage that for better
-         speed with a custom version of this driver; see the source code.
-+config SPI_GPIO_OLD
-+      tristate "Old GPIO API based bitbanging SPI controller (DEPRECATED)"
-+      depends on SPI_MASTER && GENERIC_GPIO
-+      select SPI_BITBANG
-+      help
-+        This code is deprecated. Please use the new mainline SPI-GPIO driver.
-+
-+        If unsure, say N.
-+
- config SPI_IMX
-       tristate "Freescale i.MX SPI controllers"
-       depends on ARCH_MXC
---- a/drivers/spi/Makefile
-+++ b/drivers/spi/Makefile
-@@ -19,6 +19,7 @@ obj-$(CONFIG_SPI_BUTTERFLY)          += spi_butt
- obj-$(CONFIG_SPI_DESIGNWARE)          += dw_spi.o
- obj-$(CONFIG_SPI_DW_PCI)              += dw_spi_pci.o
- obj-$(CONFIG_SPI_GPIO)                        += spi_gpio.o
-+obj-$(CONFIG_SPI_GPIO_OLD)            += spi_gpio_old.o
- obj-$(CONFIG_SPI_IMX)                 += spi_imx.o
- obj-$(CONFIG_SPI_LM70_LLP)            += spi_lm70llp.o
- obj-$(CONFIG_SPI_PXA2XX)              += pxa2xx_spi.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/922-gpiommc.patch b/target/linux/generic-2.6/patches-2.6.34/922-gpiommc.patch
deleted file mode 100644 (file)
index cb39a70..0000000
+++ /dev/null
@@ -1,843 +0,0 @@
---- /dev/null
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -0,0 +1,608 @@
-+/*
-+ * Driver an MMC/SD card on a bitbanging GPIO SPI bus.
-+ * This module hooks up the mmc_spi and spi_gpio modules and also
-+ * provides a configfs interface.
-+ *
-+ * Copyright 2008 Michael Buesch <mb@bu3sch.de>
-+ *
-+ * Licensed under the GNU/GPL. See COPYING for details.
-+ */
-+
-+#include <linux/mmc/gpiommc.h>
-+#include <linux/platform_device.h>
-+#include <linux/list.h>
-+#include <linux/mutex.h>
-+#include <linux/spi/spi_gpio_old.h>
-+#include <linux/configfs.h>
-+#include <linux/gpio.h>
-+#include <asm/atomic.h>
-+
-+
-+#define PFX                           "gpio-mmc: "
-+
-+
-+struct gpiommc_device {
-+      struct platform_device *pdev;
-+      struct platform_device *spi_pdev;
-+      struct spi_board_info boardinfo;
-+};
-+
-+
-+MODULE_DESCRIPTION("GPIO based MMC driver");
-+MODULE_AUTHOR("Michael Buesch");
-+MODULE_LICENSE("GPL");
-+
-+
-+static int gpiommc_boardinfo_setup(struct spi_board_info *bi,
-+                                 struct spi_master *master,
-+                                 void *data)
-+{
-+      struct gpiommc_device *d = data;
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      /* Bind the SPI master to the MMC-SPI host driver. */
-+      strlcpy(bi->modalias, "mmc_spi", sizeof(bi->modalias));
-+
-+      bi->max_speed_hz = pdata->max_bus_speed;
-+      bi->bus_num = master->bus_num;
-+      bi->mode = pdata->mode;
-+
-+      return 0;
-+}
-+
-+static int gpiommc_probe(struct platform_device *pdev)
-+{
-+      struct gpiommc_platform_data *mmc_pdata = pdev->dev.platform_data;
-+      struct spi_gpio_platform_data spi_pdata;
-+      struct gpiommc_device *d;
-+      int err;
-+
-+      err = -ENXIO;
-+      if (!mmc_pdata)
-+              goto error;
-+
-+#ifdef CONFIG_MMC_SPI_MODULE
-+      err = request_module("mmc_spi");
-+      if (err) {
-+              printk(KERN_WARNING PFX
-+                     "Failed to request mmc_spi module.\n");
-+      }
-+#endif /* CONFIG_MMC_SPI_MODULE */
-+
-+      /* Allocate the GPIO-MMC device */
-+      err = -ENOMEM;
-+      d = kzalloc(sizeof(*d), GFP_KERNEL);
-+      if (!d)
-+              goto error;
-+      d->pdev = pdev;
-+
-+      /* Create the SPI-GPIO device */
-+      d->spi_pdev = platform_device_alloc(SPI_GPIO_PLATDEV_NAME,
-+                                          spi_gpio_next_id());
-+      if (!d->spi_pdev)
-+              goto err_free_d;
-+
-+      memset(&spi_pdata, 0, sizeof(spi_pdata));
-+      spi_pdata.pin_clk = mmc_pdata->pins.gpio_clk;
-+      spi_pdata.pin_miso = mmc_pdata->pins.gpio_do;
-+      spi_pdata.pin_mosi = mmc_pdata->pins.gpio_di;
-+      spi_pdata.pin_cs = mmc_pdata->pins.gpio_cs;
-+      spi_pdata.cs_activelow = mmc_pdata->pins.cs_activelow;
-+      spi_pdata.no_spi_delay = mmc_pdata->no_spi_delay;
-+      spi_pdata.boardinfo_setup = gpiommc_boardinfo_setup;
-+      spi_pdata.boardinfo_setup_data = d;
-+
-+      err = platform_device_add_data(d->spi_pdev, &spi_pdata,
-+                                     sizeof(spi_pdata));
-+      if (err)
-+              goto err_free_pdev;
-+      err = platform_device_add(d->spi_pdev);
-+      if (err)
-+              goto err_free_pdata;
-+      platform_set_drvdata(pdev, d);
-+
-+      printk(KERN_INFO PFX "MMC-Card \"%s\" "
-+             "attached to GPIO pins di=%u, do=%u, clk=%u, cs=%u\n",
-+             mmc_pdata->name, mmc_pdata->pins.gpio_di,
-+             mmc_pdata->pins.gpio_do,
-+             mmc_pdata->pins.gpio_clk,
-+             mmc_pdata->pins.gpio_cs);
-+
-+      return 0;
-+
-+err_free_pdata:
-+      kfree(d->spi_pdev->dev.platform_data);
-+      d->spi_pdev->dev.platform_data = NULL;
-+err_free_pdev:
-+      platform_device_put(d->spi_pdev);
-+err_free_d:
-+      kfree(d);
-+error:
-+      return err;
-+}
-+
-+static int gpiommc_remove(struct platform_device *pdev)
-+{
-+      struct gpiommc_device *d = platform_get_drvdata(pdev);
-+      struct gpiommc_platform_data *pdata = d->pdev->dev.platform_data;
-+
-+      platform_device_unregister(d->spi_pdev);
-+      printk(KERN_INFO PFX "GPIO based MMC-Card \"%s\" removed\n",
-+             pdata->name);
-+      platform_device_put(d->spi_pdev);
-+
-+      return 0;
-+}
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+
-+/* A device that was created through configfs */
-+struct gpiommc_configfs_device {
-+      struct config_item item;
-+      /* The platform device, after registration. */
-+      struct platform_device *pdev;
-+      /* The configuration */
-+      struct gpiommc_platform_data pdata;
-+};
-+
-+#define GPIO_INVALID  -1
-+
-+static inline bool gpiommc_is_registered(struct gpiommc_configfs_device *dev)
-+{
-+      return (dev->pdev != NULL);
-+}
-+
-+static inline struct gpiommc_configfs_device *ci_to_gpiommc(struct config_item *item)
-+{
-+      return item ? container_of(item, struct gpiommc_configfs_device, item) : NULL;
-+}
-+
-+static struct configfs_attribute gpiommc_attr_DI = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_in",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_DO = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_data_out",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CLK = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_clock",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_CS_activelow = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "gpio_chipselect_activelow",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spimode = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_mode",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_spidelay = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "spi_delay",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_max_bus_speed = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "max_bus_speed",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute gpiommc_attr_register = {
-+      .ca_owner = THIS_MODULE,
-+      .ca_name = "register",
-+      .ca_mode = S_IRUGO | S_IWUSR,
-+};
-+
-+static struct configfs_attribute *gpiommc_config_attrs[] = {
-+      &gpiommc_attr_DI,
-+      &gpiommc_attr_DO,
-+      &gpiommc_attr_CLK,
-+      &gpiommc_attr_CS,
-+      &gpiommc_attr_CS_activelow,
-+      &gpiommc_attr_spimode,
-+      &gpiommc_attr_spidelay,
-+      &gpiommc_attr_max_bus_speed,
-+      &gpiommc_attr_register,
-+      NULL,
-+};
-+
-+static ssize_t gpiommc_config_attr_show(struct config_item *item,
-+                                      struct configfs_attribute *attr,
-+                                      char *page)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      ssize_t count = 0;
-+      unsigned int gpio;
-+      int err = 0;
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              gpio = dev->pdata.pins.gpio_di;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              gpio = dev->pdata.pins.gpio_do;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              gpio = dev->pdata.pins.gpio_clk;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              gpio = dev->pdata.pins.gpio_cs;
-+              if (gpio == GPIO_INVALID)
-+                      count = snprintf(page, PAGE_SIZE, "not configured\n");
-+              else
-+                      count = snprintf(page, PAGE_SIZE, "%u\n", gpio);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.pins.cs_activelow);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.mode);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               !dev->pdata.no_spi_delay);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               dev->pdata.max_bus_speed);
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_register) {
-+              count = snprintf(page, PAGE_SIZE, "%u\n",
-+                               gpiommc_is_registered(dev));
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static int gpiommc_do_register(struct gpiommc_configfs_device *dev,
-+                             const char *name)
-+{
-+      int err;
-+
-+      if (gpiommc_is_registered(dev))
-+              return 0;
-+
-+      if (!gpio_is_valid(dev->pdata.pins.gpio_di) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_do) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_clk) ||
-+          !gpio_is_valid(dev->pdata.pins.gpio_cs)) {
-+              printk(KERN_ERR PFX
-+                     "configfs: Invalid GPIO pin number(s)\n");
-+              return -EINVAL;
-+      }
-+
-+      strlcpy(dev->pdata.name, name,
-+              sizeof(dev->pdata.name));
-+
-+      dev->pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME,
-+                                        gpiommc_next_id());
-+      if (!dev->pdev)
-+              return -ENOMEM;
-+      err = platform_device_add_data(dev->pdev, &dev->pdata,
-+                                     sizeof(dev->pdata));
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+      err = platform_device_add(dev->pdev);
-+      if (err) {
-+              platform_device_put(dev->pdev);
-+              return err;
-+      }
-+
-+      return 0;
-+}
-+
-+static void gpiommc_do_unregister(struct gpiommc_configfs_device *dev)
-+{
-+      if (!gpiommc_is_registered(dev))
-+              return;
-+
-+      platform_device_unregister(dev->pdev);
-+      dev->pdev = NULL;
-+}
-+
-+static ssize_t gpiommc_config_attr_store(struct config_item *item,
-+                                       struct configfs_attribute *attr,
-+                                       const char *page, size_t count)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+      int err = -EINVAL;
-+      unsigned long data;
-+
-+      if (attr == &gpiommc_attr_register) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data == 1)
-+                      err = gpiommc_do_register(dev, item->ci_name);
-+              if (data == 0) {
-+                      gpiommc_do_unregister(dev);
-+                      err = 0;
-+              }
-+              goto out;
-+      }
-+
-+      if (gpiommc_is_registered(dev)) {
-+              /* The rest of the config parameters can only be set
-+               * as long as the device is not registered, yet. */
-+              err = -EBUSY;
-+              goto out;
-+      }
-+
-+      if (attr == &gpiommc_attr_DI) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_di = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_DO) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_do = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CLK) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_clk = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (!gpio_is_valid(data))
-+                      goto out;
-+              dev->pdata.pins.gpio_cs = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_CS_activelow) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.pins.cs_activelow = data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spimode) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              switch (data) {
-+              case 0:
-+                      dev->pdata.mode = SPI_MODE_0;
-+                      break;
-+              case 1:
-+                      dev->pdata.mode = SPI_MODE_1;
-+                      break;
-+              case 2:
-+                      dev->pdata.mode = SPI_MODE_2;
-+                      break;
-+              case 3:
-+                      dev->pdata.mode = SPI_MODE_3;
-+                      break;
-+              default:
-+                      goto out;
-+              }
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_spidelay) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data != 0 && data != 1)
-+                      goto out;
-+              dev->pdata.no_spi_delay = !data;
-+              err = 0;
-+              goto out;
-+      }
-+      if (attr == &gpiommc_attr_max_bus_speed) {
-+              err = strict_strtoul(page, 10, &data);
-+              if (err)
-+                      goto out;
-+              err = -EINVAL;
-+              if (data > UINT_MAX)
-+                      goto out;
-+              dev->pdata.max_bus_speed = data;
-+              err = 0;
-+              goto out;
-+      }
-+      WARN_ON(1);
-+      err = -ENOSYS;
-+out:
-+      return err ? err : count;
-+}
-+
-+static void gpiommc_config_item_release(struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      kfree(dev);
-+}
-+
-+static struct configfs_item_operations gpiommc_config_item_ops = {
-+      .release                = gpiommc_config_item_release,
-+      .show_attribute         = gpiommc_config_attr_show,
-+      .store_attribute        = gpiommc_config_attr_store,
-+};
-+
-+static struct config_item_type gpiommc_dev_ci_type = {
-+      .ct_item_ops    = &gpiommc_config_item_ops,
-+      .ct_attrs       = gpiommc_config_attrs,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct config_item *gpiommc_make_item(struct config_group *group,
-+                                           const char *name)
-+{
-+      struct gpiommc_configfs_device *dev;
-+
-+      if (strlen(name) > GPIOMMC_MAX_NAMELEN) {
-+              printk(KERN_ERR PFX "configfs: device name too long\n");
-+              return NULL;
-+      }
-+
-+      dev = kzalloc(sizeof(*dev), GFP_KERNEL);
-+      if (!dev)
-+              return NULL;
-+
-+      config_item_init_type_name(&dev->item, name,
-+                                 &gpiommc_dev_ci_type);
-+
-+      /* Assign default configuration */
-+      dev->pdata.pins.gpio_di = GPIO_INVALID;
-+      dev->pdata.pins.gpio_do = GPIO_INVALID;
-+      dev->pdata.pins.gpio_clk = GPIO_INVALID;
-+      dev->pdata.pins.gpio_cs = GPIO_INVALID;
-+      dev->pdata.pins.cs_activelow = 1;
-+      dev->pdata.mode = SPI_MODE_0;
-+      dev->pdata.no_spi_delay = 0;
-+      dev->pdata.max_bus_speed = 5000000; /* 5 MHz */
-+
-+      return &(dev->item);
-+}
-+
-+static void gpiommc_drop_item(struct config_group *group,
-+                            struct config_item *item)
-+{
-+      struct gpiommc_configfs_device *dev = ci_to_gpiommc(item);
-+
-+      gpiommc_do_unregister(dev);
-+      kfree(dev);
-+}
-+
-+static struct configfs_group_operations gpiommc_ct_group_ops = {
-+      .make_item      = gpiommc_make_item,
-+      .drop_item      = gpiommc_drop_item,
-+};
-+
-+static struct config_item_type gpiommc_ci_type = {
-+      .ct_group_ops   = &gpiommc_ct_group_ops,
-+      .ct_owner       = THIS_MODULE,
-+};
-+
-+static struct configfs_subsystem gpiommc_subsys = {
-+      .su_group = {
-+              .cg_item = {
-+                      .ci_namebuf = GPIOMMC_PLATDEV_NAME,
-+                      .ci_type = &gpiommc_ci_type,
-+              },
-+      },
-+      .su_mutex = __MUTEX_INITIALIZER(gpiommc_subsys.su_mutex),
-+};
-+
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+static struct platform_driver gpiommc_plat_driver = {
-+      .probe  = gpiommc_probe,
-+      .remove = gpiommc_remove,
-+      .driver = {
-+              .name   = GPIOMMC_PLATDEV_NAME,
-+              .owner  = THIS_MODULE,
-+      },
-+};
-+
-+int gpiommc_next_id(void)
-+{
-+      static atomic_t counter = ATOMIC_INIT(-1);
-+
-+      return atomic_inc_return(&counter);
-+}
-+EXPORT_SYMBOL(gpiommc_next_id);
-+
-+static int __init gpiommc_modinit(void)
-+{
-+      int err;
-+
-+      err = platform_driver_register(&gpiommc_plat_driver);
-+      if (err)
-+              return err;
-+
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      config_group_init(&gpiommc_subsys.su_group);
-+      err = configfs_register_subsystem(&gpiommc_subsys);
-+      if (err) {
-+              platform_driver_unregister(&gpiommc_plat_driver);
-+              return err;
-+      }
-+#endif /* CONFIG_GPIOMMC_CONFIGFS */
-+
-+      return 0;
-+}
-+module_init(gpiommc_modinit);
-+
-+static void __exit gpiommc_modexit(void)
-+{
-+#ifdef CONFIG_GPIOMMC_CONFIGFS
-+      configfs_unregister_subsystem(&gpiommc_subsys);
-+#endif
-+      platform_driver_unregister(&gpiommc_plat_driver);
-+}
-+module_exit(gpiommc_modexit);
---- a/drivers/mmc/host/Kconfig
-+++ b/drivers/mmc/host/Kconfig
-@@ -373,6 +373,31 @@ config MMC_TMIO
-         This provides support for the SD/MMC cell found in TC6393XB,
-         T7L66XB and also HTC ASIC3
-+config GPIOMMC
-+      tristate "MMC/SD over GPIO-based SPI"
-+      depends on MMC && MMC_SPI && SPI_GPIO_OLD
-+      help
-+        This driver hooks up the mmc_spi and spi_gpio modules so that
-+        MMC/SD cards can be used on a GPIO based bus by bitbanging
-+        the SPI protocol in software.
-+
-+        This driver provides a configfs interface to dynamically create
-+        and destroy GPIO-based MMC/SD card devices. It also provides
-+        a platform device interface API.
-+        See Documentation/gpiommc.txt for details.
-+
-+        The module will be called gpiommc.
-+
-+        If unsure, say N.
-+
-+config GPIOMMC_CONFIGFS
-+      bool
-+      depends on GPIOMMC && CONFIGFS_FS
-+      default y
-+      help
-+        This option automatically enables configfs support for gpiommc
-+        if configfs is available.
-+
- config MMC_CB710
-       tristate "ENE CB710 MMC/SD Interface support"
-       depends on PCI
---- a/drivers/mmc/host/Makefile
-+++ b/drivers/mmc/host/Makefile
-@@ -34,6 +34,7 @@ obj-$(CONFIG_MMC_SDRICOH_CS) += sdricoh_
- obj-$(CONFIG_MMC_TMIO)                += tmio_mmc.o
- obj-$(CONFIG_MMC_CB710)       += cb710-mmc.o
- obj-$(CONFIG_MMC_VIA_SDMMC)   += via-sdmmc.o
-+obj-$(CONFIG_GPIOMMC)         += gpiommc.o
- obj-$(CONFIG_SDH_BFIN)                += bfin_sdh.o
- obj-$(CONFIG_MMC_SDHCI_OF)    += sdhci-of.o
---- /dev/null
-+++ b/include/linux/mmc/gpiommc.h
-@@ -0,0 +1,71 @@
-+/*
-+ * Device driver for MMC/SD cards driven over a GPIO bus.
-+ *
-+ * Copyright (c) 2008 Michael Buesch
-+ *
-+ * Licensed under the GNU/GPL version 2.
-+ */
-+#ifndef LINUX_GPIOMMC_H_
-+#define LINUX_GPIOMMC_H_
-+
-+#include <linux/types.h>
-+
-+
-+#define GPIOMMC_MAX_NAMELEN           15
-+#define GPIOMMC_MAX_NAMELEN_STR               __stringify(GPIOMMC_MAX_NAMELEN)
-+
-+/**
-+ * struct gpiommc_pins - Hardware pin assignments
-+ *
-+ * @gpio_di: The GPIO number of the DATA IN pin
-+ * @gpio_do: The GPIO number of the DATA OUT pin
-+ * @gpio_clk: The GPIO number of the CLOCK pin
-+ * @gpio_cs: The GPIO number of the CHIPSELECT pin
-+ * @cs_activelow: If true, the chip is considered selected if @gpio_cs is low.
-+ */
-+struct gpiommc_pins {
-+      unsigned int gpio_di;
-+      unsigned int gpio_do;
-+      unsigned int gpio_clk;
-+      unsigned int gpio_cs;
-+      bool cs_activelow;
-+};
-+
-+/**
-+ * struct gpiommc_platform_data - Platform data for a MMC-over-SPI-GPIO device.
-+ *
-+ * @name: The unique name string of the device.
-+ * @pins: The hardware pin assignments.
-+ * @mode: The hardware mode. This is either SPI_MODE_0,
-+ *        SPI_MODE_1, SPI_MODE_2 or SPI_MODE_3. See the SPI documentation.
-+ * @no_spi_delay: Do not use delays in the lowlevel SPI bitbanging code.
-+ *                This is not standards compliant, but may be required for some
-+ *                embedded machines to gain reasonable speed.
-+ * @max_bus_speed: The maximum speed of the SPI bus, in Hertz.
-+ */
-+struct gpiommc_platform_data {
-+      char name[GPIOMMC_MAX_NAMELEN + 1];
-+      struct gpiommc_pins pins;
-+      u8 mode;
-+      bool no_spi_delay;
-+      unsigned int max_bus_speed;
-+};
-+
-+/**
-+ * GPIOMMC_PLATDEV_NAME - The platform device name string.
-+ *
-+ * The name string that has to be used for platform_device_alloc
-+ * when allocating a gpiommc device.
-+ */
-+#define GPIOMMC_PLATDEV_NAME  "gpiommc"
-+
-+/**
-+ * gpiommc_next_id - Get another platform device ID number.
-+ *
-+ * This returns the next platform device ID number that has to be used
-+ * for platform_device_alloc. The ID is opaque and should not be used for
-+ * anything else.
-+ */
-+int gpiommc_next_id(void);
-+
-+#endif /* LINUX_GPIOMMC_H_ */
---- /dev/null
-+++ b/Documentation/gpiommc.txt
-@@ -0,0 +1,97 @@
-+GPIOMMC - Driver for an MMC/SD card on a bitbanging GPIO SPI bus
-+================================================================
-+
-+The gpiommc module hooks up the mmc_spi and spi_gpio modules for running an
-+MMC or SD card on GPIO pins.
-+
-+Two interfaces for registering a new MMC/SD card device are provided:
-+A static platform-device based mechanism and a dynamic configfs based interface.
-+
-+
-+Registering devices via platform-device
-+=======================================
-+
-+The platform-device interface is used for registering MMC/SD devices that are
-+part of the hardware platform. This is most useful only for embedded machines
-+with MMC/SD devices statically connected to the platform GPIO bus.
-+
-+The data structures are declared in <linux/mmc/gpiommc.h>.
-+
-+To register a new device, define an instance of struct gpiommc_platform_data.
-+This structure holds any information about how the device is hooked up to the
-+GPIO pins and what hardware modes the device supports. See the docbook-style
-+documentation in the header file for more information on the struct fields.
-+
-+Then allocate a new instance of a platform device by doing:
-+
-+      pdev = platform_device_alloc(GPIOMMC_PLATDEV_NAME, gpiommc_next_id());
-+
-+This will allocate the platform device data structures and hook it up to the
-+gpiommc driver.
-+Then add the gpiommc_platform_data to the platform device.
-+
-+      err = platform_device_add_data(pdev, pdata, sizeof(struct gpiommc_platform_data));
-+
-+You may free the local instance of struct gpiommc_platform_data now. (So the
-+struct may be allocated on the stack, too).
-+Now simply register the platform device.
-+
-+      err = platform_device_add(pdev);
-+
-+Done. The gpiommc probe routine will be invoked now and you should see a kernel
-+log message for the added device.
-+
-+
-+Registering devices via configfs
-+================================
-+
-+MMC/SD cards connected via GPIO often are a pretty dynamic thing, as for example
-+selfmade hacks for soldering an MMC/SD card to standard GPIO pins on embedded
-+hardware are a common situation.
-+So we provide a dynamic interface to conveniently handle adding and removing
-+devices from userspace, without the need to recompile the kernel.
-+
-+The "gpiommc" subdirectory at the configfs mountpoint is used for handling
-+the dynamic configuration.
-+
-+To create a new device, it must first be allocated with mkdir.
-+The following command will allocate a device named "my_mmc":
-+      mkdir /config/gpiommc/my_mmc
-+
-+There are several configuration files available in the new
-+/config/gpiommc/my_mmc/ directory:
-+
-+gpio_data_in                  = The SPI data-IN GPIO pin number.
-+gpio_data_out                 = The SPI data-OUT GPIO pin number.
-+gpio_clock                    = The SPI Clock GPIO pin number.
-+gpio_chipselect                       = The SPI Chipselect GPIO pin number.
-+gpio_chipselect_activelow     = Boolean. If 0, Chipselect is active-HIGH.
-+                                If 1, Chipselect is active-LOW.
-+spi_mode                      = The SPI data mode. Can be 0-3.
-+spi_delay                     = Enable all delays in the lowlevel bitbanging.
-+max_bus_speed                 = The maximum SPI bus speed. In Hertz.
-+
-+register                      = Not a configuration parameter.
-+                                Used to register the configured card
-+                                with the kernel.
-+
-+The device must first get configured and then registered by writing "1" to
-+the "register" file.
-+The configuration parameters "gpio_data_in", "gpio_data_out", "gpio_clock"
-+and "gpio_chipselect" are essential and _must_ be configured before writing
-+"1" to the "register" file. The registration will fail, otherwise.
-+
-+The default values for the other parameters are:
-+gpio_chipselect_activelow     = 1             (CS active-LOW)
-+spi_mode                      = 0             (SPI_MODE_0)
-+spi_delay                     = 1             (enabled)
-+max_bus_speed                 = 5000000       (5 Mhz)
-+
-+Configuration values can not be changed after registration. To unregister
-+the device, write a "0" to the "register" file. The configuration can be
-+changed again after unregistering.
-+
-+To completely remove the device, simply rmdir the directory
-+(/config/gpiommc/my_mmc in this example).
-+There's no need to first unregister the device before removing it. That will
-+be done automatically.
---- a/MAINTAINERS
-+++ b/MAINTAINERS
-@@ -2443,6 +2443,11 @@ T:      git git://git.kernel.org/pub/scm/linu
- S:    Maintained
- F:    drivers/media/video/gspca/
-+GPIOMMC DRIVER
-+P:    Michael Buesch
-+M:    mb@bu3sch.de
-+S:    Maintained
-+
- HARDWARE MONITORING
- L:    lm-sensors@lm-sensors.org
- W:    http://www.lm-sensors.org/
diff --git a/target/linux/generic-2.6/patches-2.6.34/923-gpiommc-configfs-locking.patch b/target/linux/generic-2.6/patches-2.6.34/923-gpiommc-configfs-locking.patch
deleted file mode 100644 (file)
index 2e4e820..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-The gpiommc configfs context structure needs locking, as configfs
-does not lock access between files.
-
---- a/drivers/mmc/host/gpiommc.c
-+++ b/drivers/mmc/host/gpiommc.c
-@@ -143,6 +143,8 @@ struct gpiommc_configfs_device {
-       struct platform_device *pdev;
-       /* The configuration */
-       struct gpiommc_platform_data pdata;
-+      /* Mutex to protect this structure */
-+      struct mutex mutex;
- };
- #define GPIO_INVALID  -1
-@@ -233,6 +235,8 @@ static ssize_t gpiommc_config_attr_show(
-       unsigned int gpio;
-       int err = 0;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_DI) {
-               gpio = dev->pdata.pins.gpio_di;
-               if (gpio == GPIO_INVALID)
-@@ -293,6 +297,8 @@ static ssize_t gpiommc_config_attr_show(
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -352,6 +358,8 @@ static ssize_t gpiommc_config_attr_store
-       int err = -EINVAL;
-       unsigned long data;
-+      mutex_lock(&dev->mutex);
-+
-       if (attr == &gpiommc_attr_register) {
-               err = strict_strtoul(page, 10, &data);
-               if (err)
-@@ -477,6 +485,8 @@ static ssize_t gpiommc_config_attr_store
-       WARN_ON(1);
-       err = -ENOSYS;
- out:
-+      mutex_unlock(&dev->mutex);
-+
-       return err ? err : count;
- }
-@@ -513,6 +523,7 @@ static struct config_item *gpiommc_make_
-       if (!dev)
-               return NULL;
-+      mutex_init(&dev->mutex);
-       config_item_init_type_name(&dev->item, name,
-                                  &gpiommc_dev_ci_type);
diff --git a/target/linux/generic-2.6/patches-2.6.34/924-cs5535_gpio.patch b/target/linux/generic-2.6/patches-2.6.34/924-cs5535_gpio.patch
deleted file mode 100644 (file)
index 4cb3031..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
---- a/drivers/char/cs5535_gpio.c
-+++ b/drivers/char/cs5535_gpio.c
-@@ -15,6 +15,7 @@
- #include <linux/kernel.h>
- #include <linux/init.h>
- #include <linux/cdev.h>
-+#include <linux/device.h>
- #include <linux/ioport.h>
- #include <linux/pci.h>
-@@ -48,6 +49,7 @@ static struct pci_device_id divil_pci[] 
- MODULE_DEVICE_TABLE(pci, divil_pci);
- static struct cdev cs5535_gpio_cdev;
-+static struct class *cs5535_gpio_class;
- /* reserve 32 entries even though some aren't usable */
- #define CS5535_GPIO_COUNT     32
-@@ -66,9 +68,14 @@ static struct gpio_regmap rm[] =
-       { 0x30, 0x00, '1', '0' },       /* GPIOx_READ_BACK / GPIOx_OUT_VAL */
-       { 0x20, 0x20, 'I', 'i' },       /* GPIOx_IN_EN */
-       { 0x04, 0x04, 'O', 'o' },       /* GPIOx_OUT_EN */
-+      { 0x10, 0x10, 'A', 'a' },       /* GPIOx_OUT_AUX1_SEL */
-+      { 0x14, 0x14, 'B', 'b' },       /* GPIOx_OUT_AUX2_SEL */
-       { 0x08, 0x08, 't', 'T' },       /* GPIOx_OUT_OD_EN */
-       { 0x18, 0x18, 'P', 'p' },       /* GPIOx_OUT_PU_EN */
-       { 0x1c, 0x1c, 'D', 'd' },       /* GPIOx_OUT_PD_EN */
-+      { 0x24, 0x24, 'N', 'n' },       /* GPIOx_IN_INV_EN */
-+      { 0x0c, 0x0c, 'X', 'x' },       /* GPIOx_OUT_INV_EN */
-+      { 0x00, 0x00, 'H', 'L' },       /* GPIOx_OUT_VAL */
- };
-@@ -176,7 +183,7 @@ static int __init cs5535_gpio_init(void)
- {
-       dev_t   dev_id;
-       u32     low, hi;
--      int     retval;
-+      int     retval, i;
-       if (pci_dev_present(divil_pci) == 0) {
-               printk(KERN_WARNING NAME ": DIVIL not found\n");
-@@ -231,23 +238,54 @@ static int __init cs5535_gpio_init(void)
-               major = MAJOR(dev_id);
-       }
--      if (retval) {
--              release_region(gpio_base, CS5535_GPIO_SIZE);
--              return -1;
--      }
-+      if (retval)
-+              goto error;
-       printk(KERN_DEBUG NAME ": base=%#x mask=%#lx major=%d\n",
-              gpio_base, mask, major);
-       cdev_init(&cs5535_gpio_cdev, &cs5535_gpio_fops);
--      cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
-+      retval = cdev_add(&cs5535_gpio_cdev, dev_id, CS5535_GPIO_COUNT);
-+      if (retval) {
-+              kobject_put(&cs5535_gpio_cdev.kobj);
-+              goto error_region;
-+      }
-+
-+      cs5535_gpio_class = class_create(THIS_MODULE, "cs5535_gpio");
-+      if (IS_ERR(cs5535_gpio_class)) {
-+              printk(KERN_ERR "Error creating cs5535_gpio class\n");
-+              cdev_del(&cs5535_gpio_cdev);
-+              retval = PTR_ERR(cs5535_gpio_class);
-+              goto error_region;
-+      }
-+
-+      for (i = 0; i < CS5535_GPIO_COUNT; i++) {
-+              if (mask & (1<<i)) {
-+                      device_create(cs5535_gpio_class, NULL, MKDEV(major, i), NULL, "cs5535_gpio%d", i);
-+              }
-+      }
-       return 0;
-+
-+error_region:
-+      unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
-+error:
-+      release_region(gpio_base, CS5535_GPIO_SIZE);
-+      return retval;
- }
- static void __exit cs5535_gpio_cleanup(void)
- {
-       dev_t dev_id = MKDEV(major, 0);
-+      int i;
-+
-+      for (i = 0; i < CS5535_GPIO_COUNT; i++) {
-+              if (mask & (1<<i)) {
-+                      device_destroy(cs5535_gpio_class, MKDEV(major, i));
-+              }
-+      }
-+
-+      class_destroy(cs5535_gpio_class);
-       cdev_del(&cs5535_gpio_cdev);
-       unregister_chrdev_region(dev_id, CS5535_GPIO_COUNT);
diff --git a/target/linux/generic-2.6/patches-2.6.34/925-modify-i2c-gpio-initcall-level.patch b/target/linux/generic-2.6/patches-2.6.34/925-modify-i2c-gpio-initcall-level.patch
deleted file mode 100644 (file)
index 1708e33..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/i2c/busses/i2c-gpio.c
-+++ b/drivers/i2c/busses/i2c-gpio.c
-@@ -210,7 +210,7 @@ static int __init i2c_gpio_init(void)
-       return ret;
- }
--module_init(i2c_gpio_init);
-+subsys_initcall(i2c_gpio_init);
- static void __exit i2c_gpio_exit(void)
- {
diff --git a/target/linux/generic-2.6/patches-2.6.34/940-wireless_mesh_header.patch b/target/linux/generic-2.6/patches-2.6.34/940-wireless_mesh_header.patch
deleted file mode 100644 (file)
index 845b6c8..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/include/linux/netdevice.h
-+++ b/include/linux/netdevice.h
-@@ -138,7 +138,7 @@
-  */
- #if defined(CONFIG_WLAN) || defined(CONFIG_AX25) || defined(CONFIG_AX25_MODULE)
--# if defined(CONFIG_MAC80211_MESH)
-+# if 1 || defined(CONFIG_MAC80211_MESH)
- #  define LL_MAX_HEADER 128
- # else
- #  define LL_MAX_HEADER 96
diff --git a/target/linux/generic-2.6/patches-2.6.34/951-revert_gcc4_4_fixes.patch b/target/linux/generic-2.6/patches-2.6.34/951-revert_gcc4_4_fixes.patch
deleted file mode 100644 (file)
index d2c76a8..0000000
+++ /dev/null
@@ -1,524 +0,0 @@
---- a/arch/powerpc/boot/crtsavres.S
-+++ /dev/null
-@@ -1,233 +0,0 @@
--/*
-- * Special support for eabi and SVR4
-- *
-- *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
-- *   Copyright 2008 Freescale Semiconductor, Inc.
-- *   Written By Michael Meissner
-- *
-- * Based on gcc/config/rs6000/crtsavres.asm from gcc
-- *
-- * 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, or (at your option) any
-- * later version.
-- *
-- * In addition to the permissions in the GNU General Public License, the
-- * Free Software Foundation gives you unlimited permission to link the
-- * compiled version of this file with other programs, and to distribute
-- * those programs without any restriction coming from the use of this
-- * file.  (The General Public License restrictions do apply in other
-- * respects; for example, they cover modification of the file, and
-- * distribution when not linked into another program.)
-- *
-- * This file 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; see the file COPYING.  If not, write to
-- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-- * Boston, MA 02110-1301, USA.
-- *
-- *    As a special exception, if you link this library with files
-- *    compiled with GCC to produce an executable, this does not cause
-- *    the resulting executable to be covered by the GNU General Public License.
-- *    This exception does not however invalidate any other reasons why
-- *    the executable file might be covered by the GNU General Public License.
-- */
--
--      .file   "crtsavres.S"
--      .section ".text"
--
--/* On PowerPC64 Linux, these functions are provided by the linker.  */
--#ifndef __powerpc64__
--
--#define _GLOBAL(name) \
--      .type name,@function; \
--      .globl name; \
--name:
--
--/* Routines for saving integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer save area.  */
--
--_GLOBAL(_savegpr_14)
--_GLOBAL(_save32gpr_14)
--      stw     14,-72(11)      /* save gp registers */
--_GLOBAL(_savegpr_15)
--_GLOBAL(_save32gpr_15)
--      stw     15,-68(11)
--_GLOBAL(_savegpr_16)
--_GLOBAL(_save32gpr_16)
--      stw     16,-64(11)
--_GLOBAL(_savegpr_17)
--_GLOBAL(_save32gpr_17)
--      stw     17,-60(11)
--_GLOBAL(_savegpr_18)
--_GLOBAL(_save32gpr_18)
--      stw     18,-56(11)
--_GLOBAL(_savegpr_19)
--_GLOBAL(_save32gpr_19)
--      stw     19,-52(11)
--_GLOBAL(_savegpr_20)
--_GLOBAL(_save32gpr_20)
--      stw     20,-48(11)
--_GLOBAL(_savegpr_21)
--_GLOBAL(_save32gpr_21)
--      stw     21,-44(11)
--_GLOBAL(_savegpr_22)
--_GLOBAL(_save32gpr_22)
--      stw     22,-40(11)
--_GLOBAL(_savegpr_23)
--_GLOBAL(_save32gpr_23)
--      stw     23,-36(11)
--_GLOBAL(_savegpr_24)
--_GLOBAL(_save32gpr_24)
--      stw     24,-32(11)
--_GLOBAL(_savegpr_25)
--_GLOBAL(_save32gpr_25)
--      stw     25,-28(11)
--_GLOBAL(_savegpr_26)
--_GLOBAL(_save32gpr_26)
--      stw     26,-24(11)
--_GLOBAL(_savegpr_27)
--_GLOBAL(_save32gpr_27)
--      stw     27,-20(11)
--_GLOBAL(_savegpr_28)
--_GLOBAL(_save32gpr_28)
--      stw     28,-16(11)
--_GLOBAL(_savegpr_29)
--_GLOBAL(_save32gpr_29)
--      stw     29,-12(11)
--_GLOBAL(_savegpr_30)
--_GLOBAL(_save32gpr_30)
--      stw     30,-8(11)
--_GLOBAL(_savegpr_31)
--_GLOBAL(_save32gpr_31)
--      stw     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14)
--_GLOBAL(_rest32gpr_14)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15)
--_GLOBAL(_rest32gpr_15)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16)
--_GLOBAL(_rest32gpr_16)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17)
--_GLOBAL(_rest32gpr_17)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18)
--_GLOBAL(_rest32gpr_18)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19)
--_GLOBAL(_rest32gpr_19)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20)
--_GLOBAL(_rest32gpr_20)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21)
--_GLOBAL(_rest32gpr_21)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22)
--_GLOBAL(_rest32gpr_22)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23)
--_GLOBAL(_rest32gpr_23)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24)
--_GLOBAL(_rest32gpr_24)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25)
--_GLOBAL(_rest32gpr_25)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26)
--_GLOBAL(_rest32gpr_26)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27)
--_GLOBAL(_rest32gpr_27)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28)
--_GLOBAL(_rest32gpr_28)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29)
--_GLOBAL(_rest32gpr_29)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30)
--_GLOBAL(_rest32gpr_30)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31)
--_GLOBAL(_rest32gpr_31)
--      lwz     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14_x)
--_GLOBAL(_rest32gpr_14_x)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15_x)
--_GLOBAL(_rest32gpr_15_x)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16_x)
--_GLOBAL(_rest32gpr_16_x)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17_x)
--_GLOBAL(_rest32gpr_17_x)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18_x)
--_GLOBAL(_rest32gpr_18_x)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19_x)
--_GLOBAL(_rest32gpr_19_x)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20_x)
--_GLOBAL(_rest32gpr_20_x)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21_x)
--_GLOBAL(_rest32gpr_21_x)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22_x)
--_GLOBAL(_rest32gpr_22_x)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23_x)
--_GLOBAL(_rest32gpr_23_x)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24_x)
--_GLOBAL(_rest32gpr_24_x)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25_x)
--_GLOBAL(_rest32gpr_25_x)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26_x)
--_GLOBAL(_rest32gpr_26_x)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27_x)
--_GLOBAL(_rest32gpr_27_x)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28_x)
--_GLOBAL(_rest32gpr_28_x)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29_x)
--_GLOBAL(_rest32gpr_29_x)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30_x)
--_GLOBAL(_rest32gpr_30_x)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31_x)
--_GLOBAL(_rest32gpr_31_x)
--      lwz     0,4(11)
--      lwz     31,-4(11)
--      mtlr    0
--      mr      1,11
--      blr
--#endif
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -60,7 +60,7 @@ libfdtheader := fdt.h libfdt.h libfdt_in
- $(addprefix $(obj)/,$(libfdt) libfdt-wrapper.o simpleboot.o): \
-       $(addprefix $(obj)/,$(libfdtheader))
--src-wlib := string.S crt0.S crtsavres.S stdio.c main.c \
-+src-wlib := string.S crt0.S stdio.c main.c \
-               $(libfdt) libfdt-wrapper.c \
-               ns16550.c serial.c simple_alloc.c div64.S util.S \
-               gunzip_util.c elf_util.c $(zlib) devtree.c oflib.c ofconsole.c \
---- a/arch/powerpc/kernel/prom_init_check.sh
-+++ b/arch/powerpc/kernel/prom_init_check.sh
-@@ -48,20 +48,6 @@ do
-               fi
-       done
--      # ignore register save/restore funcitons
--      if [ "${UNDEF:0:9}" = "_restgpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:11}" = "_rest32gpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:9}" = "_savegpr_" ]; then
--              OK=1
--      fi
--      if [ "${UNDEF:0:11}" = "_save32gpr_" ]; then
--              OK=1
--      fi
--
-       if [ $OK -eq 0 ]; then
-               ERROR=1
-               echo "Error: External symbol '$UNDEF' referenced" \
---- a/arch/powerpc/lib/crtsavres.S
-+++ /dev/null
-@@ -1,229 +0,0 @@
--/*
-- * Special support for eabi and SVR4
-- *
-- *   Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc.
-- *   Copyright 2008 Freescale Semiconductor, Inc.
-- *   Written By Michael Meissner
-- *
-- * Based on gcc/config/rs6000/crtsavres.asm from gcc
-- *
-- * 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, or (at your option) any
-- * later version.
-- *
-- * In addition to the permissions in the GNU General Public License, the
-- * Free Software Foundation gives you unlimited permission to link the
-- * compiled version of this file with other programs, and to distribute
-- * those programs without any restriction coming from the use of this
-- * file.  (The General Public License restrictions do apply in other
-- * respects; for example, they cover modification of the file, and
-- * distribution when not linked into another program.)
-- *
-- * This file 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; see the file COPYING.  If not, write to
-- * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
-- * Boston, MA 02110-1301, USA.
-- *
-- *    As a special exception, if you link this library with files
-- *    compiled with GCC to produce an executable, this does not cause
-- *    the resulting executable to be covered by the GNU General Public License.
-- *    This exception does not however invalidate any other reasons why
-- *    the executable file might be covered by the GNU General Public License.
-- */
--
--#include <asm/ppc_asm.h>
--
--      .file   "crtsavres.S"
--      .section ".text"
--
--#ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
--
--/* Routines for saving integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer save area.  */
--
--_GLOBAL(_savegpr_14)
--_GLOBAL(_save32gpr_14)
--      stw     14,-72(11)      /* save gp registers */
--_GLOBAL(_savegpr_15)
--_GLOBAL(_save32gpr_15)
--      stw     15,-68(11)
--_GLOBAL(_savegpr_16)
--_GLOBAL(_save32gpr_16)
--      stw     16,-64(11)
--_GLOBAL(_savegpr_17)
--_GLOBAL(_save32gpr_17)
--      stw     17,-60(11)
--_GLOBAL(_savegpr_18)
--_GLOBAL(_save32gpr_18)
--      stw     18,-56(11)
--_GLOBAL(_savegpr_19)
--_GLOBAL(_save32gpr_19)
--      stw     19,-52(11)
--_GLOBAL(_savegpr_20)
--_GLOBAL(_save32gpr_20)
--      stw     20,-48(11)
--_GLOBAL(_savegpr_21)
--_GLOBAL(_save32gpr_21)
--      stw     21,-44(11)
--_GLOBAL(_savegpr_22)
--_GLOBAL(_save32gpr_22)
--      stw     22,-40(11)
--_GLOBAL(_savegpr_23)
--_GLOBAL(_save32gpr_23)
--      stw     23,-36(11)
--_GLOBAL(_savegpr_24)
--_GLOBAL(_save32gpr_24)
--      stw     24,-32(11)
--_GLOBAL(_savegpr_25)
--_GLOBAL(_save32gpr_25)
--      stw     25,-28(11)
--_GLOBAL(_savegpr_26)
--_GLOBAL(_save32gpr_26)
--      stw     26,-24(11)
--_GLOBAL(_savegpr_27)
--_GLOBAL(_save32gpr_27)
--      stw     27,-20(11)
--_GLOBAL(_savegpr_28)
--_GLOBAL(_save32gpr_28)
--      stw     28,-16(11)
--_GLOBAL(_savegpr_29)
--_GLOBAL(_save32gpr_29)
--      stw     29,-12(11)
--_GLOBAL(_savegpr_30)
--_GLOBAL(_save32gpr_30)
--      stw     30,-8(11)
--_GLOBAL(_savegpr_31)
--_GLOBAL(_save32gpr_31)
--      stw     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14)
--_GLOBAL(_rest32gpr_14)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15)
--_GLOBAL(_rest32gpr_15)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16)
--_GLOBAL(_rest32gpr_16)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17)
--_GLOBAL(_rest32gpr_17)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18)
--_GLOBAL(_rest32gpr_18)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19)
--_GLOBAL(_rest32gpr_19)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20)
--_GLOBAL(_rest32gpr_20)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21)
--_GLOBAL(_rest32gpr_21)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22)
--_GLOBAL(_rest32gpr_22)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23)
--_GLOBAL(_rest32gpr_23)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24)
--_GLOBAL(_rest32gpr_24)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25)
--_GLOBAL(_rest32gpr_25)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26)
--_GLOBAL(_rest32gpr_26)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27)
--_GLOBAL(_rest32gpr_27)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28)
--_GLOBAL(_rest32gpr_28)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29)
--_GLOBAL(_rest32gpr_29)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30)
--_GLOBAL(_rest32gpr_30)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31)
--_GLOBAL(_rest32gpr_31)
--      lwz     31,-4(11)
--      blr
--
--/* Routines for restoring integer registers, called by the compiler.  */
--/* Called with r11 pointing to the stack header word of the caller of the */
--/* function, just beyond the end of the integer restore area.  */
--
--_GLOBAL(_restgpr_14_x)
--_GLOBAL(_rest32gpr_14_x)
--      lwz     14,-72(11)      /* restore gp registers */
--_GLOBAL(_restgpr_15_x)
--_GLOBAL(_rest32gpr_15_x)
--      lwz     15,-68(11)
--_GLOBAL(_restgpr_16_x)
--_GLOBAL(_rest32gpr_16_x)
--      lwz     16,-64(11)
--_GLOBAL(_restgpr_17_x)
--_GLOBAL(_rest32gpr_17_x)
--      lwz     17,-60(11)
--_GLOBAL(_restgpr_18_x)
--_GLOBAL(_rest32gpr_18_x)
--      lwz     18,-56(11)
--_GLOBAL(_restgpr_19_x)
--_GLOBAL(_rest32gpr_19_x)
--      lwz     19,-52(11)
--_GLOBAL(_restgpr_20_x)
--_GLOBAL(_rest32gpr_20_x)
--      lwz     20,-48(11)
--_GLOBAL(_restgpr_21_x)
--_GLOBAL(_rest32gpr_21_x)
--      lwz     21,-44(11)
--_GLOBAL(_restgpr_22_x)
--_GLOBAL(_rest32gpr_22_x)
--      lwz     22,-40(11)
--_GLOBAL(_restgpr_23_x)
--_GLOBAL(_rest32gpr_23_x)
--      lwz     23,-36(11)
--_GLOBAL(_restgpr_24_x)
--_GLOBAL(_rest32gpr_24_x)
--      lwz     24,-32(11)
--_GLOBAL(_restgpr_25_x)
--_GLOBAL(_rest32gpr_25_x)
--      lwz     25,-28(11)
--_GLOBAL(_restgpr_26_x)
--_GLOBAL(_rest32gpr_26_x)
--      lwz     26,-24(11)
--_GLOBAL(_restgpr_27_x)
--_GLOBAL(_rest32gpr_27_x)
--      lwz     27,-20(11)
--_GLOBAL(_restgpr_28_x)
--_GLOBAL(_rest32gpr_28_x)
--      lwz     28,-16(11)
--_GLOBAL(_restgpr_29_x)
--_GLOBAL(_rest32gpr_29_x)
--      lwz     29,-12(11)
--_GLOBAL(_restgpr_30_x)
--_GLOBAL(_rest32gpr_30_x)
--      lwz     30,-8(11)
--_GLOBAL(_restgpr_31_x)
--_GLOBAL(_rest32gpr_31_x)
--      lwz     0,4(11)
--      lwz     31,-4(11)
--      mtlr    0
--      mr      1,11
--      blr
--#endif
---- a/arch/powerpc/lib/Makefile
-+++ b/arch/powerpc/lib/Makefile
-@@ -13,7 +13,7 @@ CFLAGS_REMOVE_feature-fixups.o = -pg
- obj-y                 := string.o alloc.o \
-                          checksum_$(CONFIG_WORD_SIZE).o
--obj-$(CONFIG_PPC32)   += div64.o copy_32.o crtsavres.o
-+obj-$(CONFIG_PPC32)   += div64.o copy_32.o
- obj-$(CONFIG_HAS_IOMEM)       += devres.o
- obj-$(CONFIG_PPC64)   += copypage_64.o copyuser_64.o \
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -92,8 +92,6 @@ endif
- else
-       KBUILD_CFLAGS += $(call cc-option,-mtune=power4)
- endif
--else
--LDFLAGS_MODULE        += arch/powerpc/lib/crtsavres.o
- endif
- ifeq ($(CONFIG_TUNE_CELL),y)
diff --git a/target/linux/generic-2.6/patches-2.6.34/970-ocf_kbuild_integration.patch b/target/linux/generic-2.6/patches-2.6.34/970-ocf_kbuild_integration.patch
deleted file mode 100644 (file)
index 0c40bdc..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -823,6 +823,8 @@ config CRYPTO_ANSI_CPRNG
-         ANSI X9.31 A.2.4. Not this option must be enabled if CRYPTO_FIPS 
-         is selected
-+source "crypto/ocf/Kconfig"
-+
- source "drivers/crypto/Kconfig"
- endif # if CRYPTO
---- a/crypto/Makefile
-+++ b/crypto/Makefile
-@@ -86,6 +86,11 @@ obj-$(CONFIG_CRYPTO_TEST) += tcrypt.o
- obj-$(CONFIG_CRYPTO_GHASH) += ghash-generic.o
- #
-+# OCF
-+#
-+obj-$(CONFIG_OCF_OCF) += ocf/
-+
-+#
- # generic algorithms and the async_tx api
- #
- obj-$(CONFIG_XOR_BLOCKS) += xor.o
diff --git a/target/linux/generic-2.6/patches-2.6.34/971-ocf_20080917.patch b/target/linux/generic-2.6/patches-2.6.34/971-ocf_20080917.patch
deleted file mode 100644 (file)
index 669be1a..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
---- a/drivers/char/random.c
-+++ b/drivers/char/random.c
-@@ -129,6 +129,9 @@
-  *                                unsigned int value);
-  *    void add_interrupt_randomness(int irq);
-  *
-+ *      void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+ *      int random_input_wait(void);
-+ *
-  * add_input_randomness() uses the input layer interrupt timing, as well as
-  * the event type information from the hardware.
-  *
-@@ -140,6 +143,13 @@
-  * a better measure, since the timing of the disk interrupts are more
-  * unpredictable.
-  *
-+ * random_input_words() just provides a raw block of entropy to the input
-+ * pool, such as from a hardware entropy generator.
-+ *
-+ * random_input_wait() suspends the caller until such time as the
-+ * entropy pool falls below the write threshold, and returns a count of how
-+ * much entropy (in bits) is needed to sustain the pool.
-+ *
-  * All of these routines try to estimate how many bits of randomness a
-  * particular randomness source.  They do this by keeping track of the
-  * first and second order deltas of the event timings.
-@@ -714,6 +724,61 @@ void add_disk_randomness(struct gendisk 
- }
- #endif
-+/*
-+ * random_input_words - add bulk entropy to pool
-+ *
-+ * @buf: buffer to add
-+ * @wordcount: number of __u32 words to add
-+ * @ent_count: total amount of entropy (in bits) to credit
-+ *
-+ * this provides bulk input of entropy to the input pool
-+ *
-+ */
-+void random_input_words(__u32 *buf, size_t wordcount, int ent_count)
-+{
-+      mix_pool_bytes(&input_pool, buf, wordcount*4);
-+
-+      credit_entropy_bits(&input_pool, ent_count);
-+
-+      DEBUG_ENT("crediting %d bits => %d\n",
-+                ent_count, input_pool.entropy_count);
-+      /*
-+       * Wake up waiting processes if we have enough
-+       * entropy.
-+       */
-+      if (input_pool.entropy_count >= random_read_wakeup_thresh)
-+              wake_up_interruptible(&random_read_wait);
-+}
-+EXPORT_SYMBOL(random_input_words);
-+
-+/*
-+ * random_input_wait - wait until random needs entropy
-+ *
-+ * this function sleeps until the /dev/random subsystem actually
-+ * needs more entropy, and then return the amount of entropy
-+ * that it would be nice to have added to the system.
-+ */
-+int random_input_wait(void)
-+{
-+      int count;
-+
-+      wait_event_interruptible(random_write_wait, 
-+                       input_pool.entropy_count < random_write_wakeup_thresh);
-+
-+      count = random_write_wakeup_thresh - input_pool.entropy_count;
-+
-+        /* likely we got woken up due to a signal */
-+      if (count <= 0) count = random_read_wakeup_thresh; 
-+
-+      DEBUG_ENT("requesting %d bits from input_wait()er %d<%d\n",
-+                count,
-+                input_pool.entropy_count, random_write_wakeup_thresh);
-+
-+      return count;
-+}
-+EXPORT_SYMBOL(random_input_wait);
-+
-+
- #define EXTRACT_SIZE 10
- /*********************************************************************
---- a/fs/fcntl.c
-+++ b/fs/fcntl.c
-@@ -141,6 +141,7 @@ SYSCALL_DEFINE1(dup, unsigned int, filde
-       }
-       return ret;
- }
-+EXPORT_SYMBOL(sys_dup);
- #define SETFL_MASK (O_APPEND | O_NONBLOCK | O_NDELAY | O_DIRECT | O_NOATIME)
---- a/include/linux/miscdevice.h
-+++ b/include/linux/miscdevice.h
-@@ -12,6 +12,7 @@
- #define APOLLO_MOUSE_MINOR    7
- #define PC110PAD_MINOR                9
- /*#define ADB_MOUSE_MINOR     10      FIXME OBSOLETE */
-+#define CRYPTODEV_MINOR               70      /* /dev/crypto */
- #define WATCHDOG_MINOR                130     /* Watchdog timer     */
- #define TEMP_MINOR            131     /* Temperature Sensor */
- #define RTC_MINOR             135
---- a/include/linux/random.h
-+++ b/include/linux/random.h
-@@ -34,6 +34,30 @@
- /* Clear the entropy pool and associated counters.  (Superuser only.) */
- #define RNDCLEARPOOL  _IO( 'R', 0x06 )
-+#ifdef CONFIG_FIPS_RNG
-+
-+/* Size of seed value - equal to AES blocksize */
-+#define AES_BLOCK_SIZE_BYTES  16
-+#define SEED_SIZE_BYTES                       AES_BLOCK_SIZE_BYTES
-+/* Size of AES key */
-+#define KEY_SIZE_BYTES                16
-+
-+/* ioctl() structure used by FIPS 140-2 Tests */
-+struct rand_fips_test {
-+      unsigned char key[KEY_SIZE_BYTES];                      /* Input */
-+      unsigned char datetime[SEED_SIZE_BYTES];        /* Input */
-+      unsigned char seed[SEED_SIZE_BYTES];            /* Input */
-+      unsigned char result[SEED_SIZE_BYTES];          /* Output */
-+};
-+
-+/* FIPS 140-2 RNG Variable Seed Test. (Superuser only.) */
-+#define RNDFIPSVST    _IOWR('R', 0x10, struct rand_fips_test)
-+
-+/* FIPS 140-2 RNG Monte Carlo Test. (Superuser only.) */
-+#define RNDFIPSMCT    _IOWR('R', 0x11, struct rand_fips_test)
-+
-+#endif /* #ifdef CONFIG_FIPS_RNG */
-+
- struct rand_pool_info {
-       int     entropy_count;
-       int     buf_size;
-@@ -50,6 +74,10 @@ extern void add_input_randomness(unsigne
-                                unsigned int value);
- extern void add_interrupt_randomness(int irq);
-+extern void random_input_words(__u32 *buf, size_t wordcount, int ent_count);
-+extern int random_input_wait(void);
-+#define HAS_RANDOM_INPUT_WAIT 1
-+
- extern void get_random_bytes(void *buf, int nbytes);
- void generate_random_uuid(unsigned char uuid_out[16]);
diff --git a/target/linux/generic-2.6/patches-2.6.34/972-ocf_compile_fix.patch b/target/linux/generic-2.6/patches-2.6.34/972-ocf_compile_fix.patch
deleted file mode 100644 (file)
index a3fa226..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/crypto/ocf/cryptosoft.c
-+++ b/crypto/ocf/cryptosoft.c
-@@ -47,7 +47,7 @@
- #include <linux/mm.h>
- #include <linux/skbuff.h>
- #include <linux/random.h>
--#include <asm/scatterlist.h>
-+#include <linux/scatterlist.h>
- #include <cryptodev.h>
- #include <uio.h>
diff --git a/target/linux/generic-2.6/patches-2.6.34/973-ocf_2.6.27_fix.patch b/target/linux/generic-2.6/patches-2.6.34/973-ocf_2.6.27_fix.patch
deleted file mode 100644 (file)
index ecb9bef..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
---- a/crypto/ocf/random.c
-+++ b/crypto/ocf/random.c
-@@ -49,6 +49,7 @@
- #include <linux/unistd.h>
- #include <linux/poll.h>
- #include <linux/random.h>
-+#include <linux/kthread.h>
- #include <cryptodev.h>
- #ifdef CONFIG_OCF_FIPS
-@@ -81,7 +82,7 @@ struct random_op {
- static int random_proc(void *arg);
--static pid_t          randomproc = (pid_t) -1;
-+static struct task_struct *random_task;
- static spinlock_t     random_lock;
- /*
-@@ -141,13 +142,18 @@ crypto_rregister(
-       spin_lock_irqsave(&random_lock, flags);
-       list_add_tail(&rops->random_list, &random_ops);
-       if (!started) {
--              randomproc = kernel_thread(random_proc, NULL, CLONE_FS|CLONE_FILES);
--              if (randomproc < 0) {
--                      ret = randomproc;
-+              struct task_struct *t;
-+
-+              t = kthread_create(random_proc, NULL, "ocf-random");
-+              if (IS_ERR(t)) {
-+                      ret = PTR_ERR(t);
-                       printk("crypto: crypto_rregister cannot start random thread; "
-                                       "error %d", ret);
--              } else
-+              } else {
-+                      random_task = t;
-+                      wake_up_process(t);
-                       started = 1;
-+              }
-       }
-       spin_unlock_irqrestore(&random_lock, flags);
-@@ -172,7 +178,7 @@ crypto_runregister_all(u_int32_t driveri
-       spin_lock_irqsave(&random_lock, flags);
-       if (list_empty(&random_ops) && started)
--              kill_proc(randomproc, SIGKILL, 1);
-+              send_sig(SIGKILL, random_task, 1);
-       spin_unlock_irqrestore(&random_lock, flags);
-       return(0);
- }
-@@ -308,7 +314,7 @@ random_proc(void *arg)
- bad_alloc:
-       spin_lock_irq(&random_lock);
--      randomproc = (pid_t) -1;
-+      random_task = NULL;
-       started = 0;
-       spin_unlock_irq(&random_lock);
---- a/crypto/ocf/crypto.c
-+++ b/crypto/ocf/crypto.c
-@@ -74,6 +74,7 @@ __FBSDID("$FreeBSD: src/sys/opencrypto/c
- #include <linux/sched.h>
- #include <linux/spinlock.h>
- #include <linux/version.h>
-+#include <linux/kthread.h>
- #include <cryptodev.h>
- /*
-@@ -255,10 +256,10 @@ module_param(crypto_devallowsoft, int, 0
- MODULE_PARM_DESC(crypto_devallowsoft,
-          "Enable/disable use of software crypto support");
--static pid_t  cryptoproc = (pid_t) -1;
-+static struct task_struct *crypto_task;
- static struct completion cryptoproc_exited;
- static DECLARE_WAIT_QUEUE_HEAD(cryptoproc_wait);
--static pid_t  cryptoretproc = (pid_t) -1;
-+static struct task_struct *cryptoret_task;
- static struct completion cryptoretproc_exited;
- static DECLARE_WAIT_QUEUE_HEAD(cryptoretproc_wait);
-@@ -1401,7 +1402,7 @@ crypto_proc(void *arg)
-                       wait_event_interruptible(cryptoproc_wait,
-                                       !(list_empty(&crp_q) || crypto_all_qblocked) ||
-                                       !(list_empty(&crp_kq) || crypto_all_kqblocked) ||
--                                      cryptoproc == (pid_t) -1);
-+                                      crypto_task == NULL);
-                       crp_sleep = 0;
-                       if (signal_pending (current)) {
- #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
-@@ -1414,7 +1415,7 @@ crypto_proc(void *arg)
-                       }
-                       CRYPTO_Q_LOCK();
-                       dprintk("%s - awake\n", __FUNCTION__);
--                      if (cryptoproc == (pid_t) -1)
-+                      if (crypto_task == NULL)
-                               break;
-                       cryptostats.cs_intrs++;
-               }
-@@ -1470,7 +1471,7 @@ crypto_ret_proc(void *arg)
-                       dprintk("%s - sleeping\n", __FUNCTION__);
-                       CRYPTO_RETQ_UNLOCK();
-                       wait_event_interruptible(cryptoretproc_wait,
--                                      cryptoretproc == (pid_t) -1 ||
-+                                      cryptoret_task == NULL ||
-                                       !list_empty(&crp_ret_q) ||
-                                       !list_empty(&crp_ret_kq));
-                       if (signal_pending (current)) {
-@@ -1484,7 +1485,7 @@ crypto_ret_proc(void *arg)
-                       }
-                       CRYPTO_RETQ_LOCK();
-                       dprintk("%s - awake\n", __FUNCTION__);
--                      if (cryptoretproc == (pid_t) -1) {
-+                      if (cryptoret_task == NULL) {
-                               dprintk("%s - EXITING!\n", __FUNCTION__);
-                               break;
-                       }
-@@ -1597,6 +1598,7 @@ DB_SHOW_COMMAND(kcrypto, db_show_kcrypto
- static int
- crypto_init(void)
- {
-+      struct task_struct *t;
-       int error;
-       dprintk("%s(0x%x)\n", __FUNCTION__, (int) crypto_init);
-@@ -1643,23 +1645,27 @@ crypto_init(void)
-       init_completion(&cryptoproc_exited);
-       init_completion(&cryptoretproc_exited);
--      cryptoproc = 0; /* to avoid race condition where proc runs first */
--      cryptoproc = kernel_thread(crypto_proc, NULL, CLONE_FS|CLONE_FILES);
--      if (cryptoproc < 0) {
--              error = cryptoproc;
-+      crypto_task = NULL; /* to avoid race condition where proc runs first */
-+      t = kthread_create(crypto_proc, NULL, "ocf-crypto");
-+      if (IS_ERR(t)) {
-+              error = PTR_ERR(t);
-               printk("crypto: crypto_init cannot start crypto thread; error %d",
-                       error);
-               goto bad;
-       }
-+      wake_up_process(t);
-+      crypto_task = t;
--      cryptoretproc = 0; /* to avoid race condition where proc runs first */
--      cryptoretproc = kernel_thread(crypto_ret_proc, NULL, CLONE_FS|CLONE_FILES);
--      if (cryptoretproc < 0) {
--              error = cryptoretproc;
-+      cryptoret_task = NULL; /* to avoid race condition where proc runs first */
-+      t = kthread_create(crypto_ret_proc, NULL, "ocf-cryptoret");
-+      if (IS_ERR(t)) {
-+              error = PTR_ERR(t);
-               printk("crypto: crypto_init cannot start cryptoret thread; error %d",
-                               error);
-               goto bad;
-       }
-+      wake_up_process(t);
-+      cryptoret_task = t;
-       return 0;
- bad:
-@@ -1671,7 +1677,7 @@ bad:
- static void
- crypto_exit(void)
- {
--      pid_t p;
-+      struct task_struct *t;
-       unsigned long d_flags;
-       dprintk("%s()\n", __FUNCTION__);
-@@ -1681,18 +1687,18 @@ crypto_exit(void)
-        */
-       CRYPTO_DRIVER_LOCK();
--      p = cryptoproc;
--      cryptoproc = (pid_t) -1;
--      kill_proc(p, SIGTERM, 1);
-+      t = crypto_task;
-+      crypto_task = NULL;
-+      send_sig(SIGTERM, t, 1);
-       wake_up_interruptible(&cryptoproc_wait);
-       CRYPTO_DRIVER_UNLOCK();
-       wait_for_completion(&cryptoproc_exited);
-       CRYPTO_DRIVER_LOCK();
--      p = cryptoretproc;
--      cryptoretproc = (pid_t) -1;
--      kill_proc(p, SIGTERM, 1);
-+      t = cryptoret_task;
-+      cryptoret_task = NULL;
-+      send_sig(SIGTERM, t, 1);
-       wake_up_interruptible(&cryptoretproc_wait);
-       CRYPTO_DRIVER_UNLOCK();
diff --git a/target/linux/generic-2.6/patches-2.6.34/974-ssb_b43_default_on.patch b/target/linux/generic-2.6/patches-2.6.34/974-ssb_b43_default_on.patch
deleted file mode 100644 (file)
index 98dde2a..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/drivers/ssb/Kconfig
-+++ b/drivers/ssb/Kconfig
-@@ -49,7 +49,7 @@ config SSB_PCIHOST
- config SSB_B43_PCI_BRIDGE
-       bool
-       depends on SSB_PCIHOST
--      default n
-+      default y
- config SSB_PCMCIAHOST_POSSIBLE
-       bool
diff --git a/target/linux/generic-2.6/patches-2.6.34/977-textsearch_kconfig_hacks.patch b/target/linux/generic-2.6/patches-2.6.34/977-textsearch_kconfig_hacks.patch
deleted file mode 100644 (file)
index 94d6b91..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -152,16 +152,16 @@ config REED_SOLOMON_DEC16
- # Textsearch support is select'ed if needed
- #
- config TEXTSEARCH
--      boolean
-+      boolean "Textsearch support"
- config TEXTSEARCH_KMP
--      tristate
-+      tristate "Textsearch KMP"
- config TEXTSEARCH_BM
--      tristate
-+      tristate "Textsearch BM"
- config TEXTSEARCH_FSM
--      tristate
-+      tristate "Textsearch FSM"
- config HAS_IOMEM
-       boolean
diff --git a/target/linux/generic-2.6/patches-2.6.34/978-lib80211_kconfig_hacks.patch b/target/linux/generic-2.6/patches-2.6.34/978-lib80211_kconfig_hacks.patch
deleted file mode 100644 (file)
index 05bb838..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
---- a/net/wireless/Kconfig
-+++ b/net/wireless/Kconfig
-@@ -141,13 +141,13 @@ config LIB80211
-         you want this built into your kernel.
- config LIB80211_CRYPT_WEP
--      tristate
-+      tristate "LIB80211_CRYPT_WEP"
- config LIB80211_CRYPT_CCMP
--      tristate
-+      tristate "LIB80211_CRYPT_CCMP"
- config LIB80211_CRYPT_TKIP
--      tristate
-+      tristate "LIB80211_CRYPT_TKIP"
- config LIB80211_DEBUG
-       bool "lib80211 debugging messages"
diff --git a/target/linux/generic-2.6/patches-2.6.34/979-crypto_add_kconfig_prompts.patch b/target/linux/generic-2.6/patches-2.6.34/979-crypto_add_kconfig_prompts.patch
deleted file mode 100644 (file)
index b40b2ce..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
---- a/crypto/Kconfig
-+++ b/crypto/Kconfig
-@@ -32,7 +32,7 @@ config CRYPTO_FIPS
-         option is selected
- config CRYPTO_ALGAPI
--      tristate
-+      tristate "ALGAPI"
-       select CRYPTO_ALGAPI2
-       help
-         This option provides the API for cryptographic algorithms.
-@@ -41,7 +41,7 @@ config CRYPTO_ALGAPI2
-       tristate
- config CRYPTO_AEAD
--      tristate
-+      tristate "AEAD"
-       select CRYPTO_AEAD2
-       select CRYPTO_ALGAPI
-@@ -50,7 +50,7 @@ config CRYPTO_AEAD2
-       select CRYPTO_ALGAPI2
- config CRYPTO_BLKCIPHER
--      tristate
-+      tristate "BLKCIPHER"
-       select CRYPTO_BLKCIPHER2
-       select CRYPTO_ALGAPI
-@@ -61,7 +61,7 @@ config CRYPTO_BLKCIPHER2
-       select CRYPTO_WORKQUEUE
- config CRYPTO_HASH
--      tristate
-+      tristate "HASH"
-       select CRYPTO_HASH2
-       select CRYPTO_ALGAPI
-@@ -70,7 +70,7 @@ config CRYPTO_HASH2
-       select CRYPTO_ALGAPI2
- config CRYPTO_RNG
--      tristate
-+      tristate "RNG"
-       select CRYPTO_RNG2
-       select CRYPTO_ALGAPI
diff --git a/target/linux/generic-2.6/patches-2.6.34/980-vm_exports.patch b/target/linux/generic-2.6/patches-2.6.34/980-vm_exports.patch
deleted file mode 100644 (file)
index 39b2215..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
---- a/mm/shmem.c
-+++ b/mm/shmem.c
-@@ -29,6 +29,7 @@
- #include <linux/mm.h>
- #include <linux/module.h>
- #include <linux/swap.h>
-+#include <linux/ima.h>
- static struct vfsmount *shm_mnt;
-@@ -2620,6 +2621,16 @@ int shmem_lock(struct file *file, int lo
- /* common code */
-+void shmem_set_file(struct vm_area_struct *vma, struct file *file)
-+{
-+      ima_counts_get(file);
-+      if (vma->vm_file)
-+              fput(vma->vm_file);
-+      vma->vm_file = file;
-+      vma->vm_ops = &shmem_vm_ops;
-+}
-+EXPORT_SYMBOL_GPL(shmem_set_file);
-+
- /**
-  * shmem_file_setup - get an unlinked file living in tmpfs
-  * @name: name for dentry (to be seen in /proc/<pid>/maps
-@@ -2697,9 +2708,6 @@ int shmem_zero_setup(struct vm_area_stru
-       if (IS_ERR(file))
-               return PTR_ERR(file);
--      if (vma->vm_file)
--              fput(vma->vm_file);
--      vma->vm_file = file;
--      vma->vm_ops = &shmem_vm_ops;
-+      shmem_set_file(vma, file);
-       return 0;
- }
---- a/fs/file.c
-+++ b/fs/file.c
-@@ -271,6 +271,7 @@ int expand_files(struct files_struct *fi
-       /* All good, so we try */
-       return expand_fdtable(files, nr);
- }
-+EXPORT_SYMBOL_GPL(expand_files);
- static int count_open_files(struct fdtable *fdt)
- {
---- a/kernel/exit.c
-+++ b/kernel/exit.c
-@@ -508,6 +508,7 @@ struct files_struct *get_files_struct(st
-       return files;
- }
-+EXPORT_SYMBOL_GPL(get_files_struct);
- void put_files_struct(struct files_struct *files)
- {
-@@ -527,6 +528,7 @@ void put_files_struct(struct files_struc
-               free_fdtable(fdt);
-       }
- }
-+EXPORT_SYMBOL_GPL(put_files_struct);
- void reset_files_struct(struct files_struct *files)
- {
---- a/kernel/fork.c
-+++ b/kernel/fork.c
-@@ -169,6 +169,7 @@ void __put_task_struct(struct task_struc
-       if (!profile_handoff_task(tsk))
-               free_task(tsk);
- }
-+EXPORT_SYMBOL_GPL(__put_task_struct);
- /*
-  * macro override instead of weak attribute alias, to workaround
---- a/kernel/sched.c
-+++ b/kernel/sched.c
-@@ -6149,6 +6149,7 @@ int can_nice(const struct task_struct *p
-       return (nice_rlim <= p->signal->rlim[RLIMIT_NICE].rlim_cur ||
-               capable(CAP_SYS_NICE));
- }
-+EXPORT_SYMBOL_GPL(can_nice);
- #ifdef __ARCH_WANT_SYS_NICE
---- a/mm/memory.c
-+++ b/mm/memory.c
-@@ -1115,6 +1115,7 @@ unsigned long zap_page_range(struct vm_a
-               tlb_finish_mmu(tlb, address, end);
-       return end;
- }
-+EXPORT_SYMBOL_GPL(zap_page_range);
- /**
-  * zap_vma_ptes - remove ptes mapping the vma
-@@ -2501,6 +2502,7 @@ int vmtruncate_range(struct inode *inode
-       return 0;
- }
-+EXPORT_SYMBOL_GPL(vmtruncate_range);
- /*
-  * We enter with non-exclusive mmap_sem (to exclude vma changes,
---- a/mm/vmalloc.c
-+++ b/mm/vmalloc.c
-@@ -1173,6 +1173,7 @@ void unmap_kernel_range(unsigned long ad
-       vunmap_page_range(addr, end);
-       flush_tlb_kernel_range(addr, end);
- }
-+EXPORT_SYMBOL_GPL(unmap_kernel_range);
- int map_vm_area(struct vm_struct *area, pgprot_t prot, struct page ***pages)
- {
-@@ -1288,6 +1289,7 @@ struct vm_struct *get_vm_area(unsigned l
-       return __get_vm_area_node(size, 1, flags, VMALLOC_START, VMALLOC_END,
-                               -1, GFP_KERNEL, __builtin_return_address(0));
- }
-+EXPORT_SYMBOL_GPL(get_vm_area);
- struct vm_struct *get_vm_area_caller(unsigned long size, unsigned long flags,
-                               void *caller)
---- a/include/linux/mm.h
-+++ b/include/linux/mm.h
-@@ -725,6 +725,7 @@ extern void show_free_areas(void);
- int shmem_lock(struct file *file, int lock, struct user_struct *user);
- struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
-+void shmem_set_file(struct vm_area_struct *vma, struct file *file);
- int shmem_zero_setup(struct vm_area_struct *);
- #ifndef CONFIG_MMU
---- a/kernel/signal.c
-+++ b/kernel/signal.c
-@@ -1104,6 +1104,7 @@ struct sighand_struct *lock_task_sighand
-       return sighand;
- }
-+EXPORT_SYMBOL(lock_task_sighand);
- /*
-  * send signal info to all the members of a group
diff --git a/target/linux/generic-2.6/patches-2.6.34/981-wireless_ext_kconfig_hack.patch b/target/linux/generic-2.6/patches-2.6.34/981-wireless_ext_kconfig_hack.patch
deleted file mode 100644 (file)
index daac589..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
---- a/net/wireless/Kconfig
-+++ b/net/wireless/Kconfig
-@@ -1,5 +1,5 @@
- config WIRELESS_EXT
--      bool
-+      bool "Wireless extensions"
- config WEXT_CORE
-       def_bool y
-@@ -11,10 +11,10 @@ config WEXT_PROC
-       depends on WEXT_CORE
- config WEXT_SPY
--      bool
-+      bool "WEXT_SPY"
- config WEXT_PRIV
--      bool
-+      bool "WEXT_PRIV"
- config CFG80211
-       tristate "cfg80211 - wireless configuration API"
diff --git a/target/linux/generic-2.6/patches-2.6.34/985-cris-headers.patch b/target/linux/generic-2.6/patches-2.6.34/985-cris-headers.patch
deleted file mode 100644 (file)
index 73ede93..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
---- a/arch/cris/include/arch-v10/arch/Kbuild
-+++ b/arch/cris/include/arch-v10/arch/Kbuild
-@@ -1,3 +1,5 @@
-+header-y += elf.h
-+header-y += ptrace.h
- header-y += user.h
- header-y += svinto.h
- header-y += sv_addr_ag.h
---- a/arch/cris/include/asm/Kbuild
-+++ b/arch/cris/include/asm/Kbuild
-@@ -1,11 +1,14 @@
- include include/asm-generic/Kbuild.asm
--header-y += arch-v10/
--header-y += arch-v32/
-+header-y += ../arch-v10/arch/
-+header-y += ../arch-v32/arch/
-+header-y += elf.h
- header-y += ethernet.h
-+header-y += page.h
- header-y += rtc.h
- header-y += sync_serial.h
-+header-y += user.h
- unifdef-y += etraxgpio.h
- unifdef-y += rs485.h
diff --git a/target/linux/generic-2.6/patches-2.6.34/991-ppc4xx_optimization.patch b/target/linux/generic-2.6/patches-2.6.34/991-ppc4xx_optimization.patch
deleted file mode 100644 (file)
index 0efb777..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-Upstream doesn't optimize the kernel and bootwrappers for ppc44x because
-they still want to support gcc 3.3 -- well, we don't.
-
---- a/arch/powerpc/Makefile
-+++ b/arch/powerpc/Makefile
-@@ -123,7 +123,8 @@ ifeq ($(CONFIG_FUNCTION_TRACER),y)
- KBUILD_CFLAGS         += -mno-sched-epilog
- endif
--cpu-as-$(CONFIG_4xx)          += -Wa,-m405
-+cpu-as-$(CONFIG_40x)          += -Wa,-m405
-+cpu-as-$(CONFIG_44x)          += -Wa,-m440
- cpu-as-$(CONFIG_6xx)          += -Wa,-maltivec
- cpu-as-$(CONFIG_POWER4)               += -Wa,-maltivec
- cpu-as-$(CONFIG_E500)         += -Wa,-me500
---- a/arch/powerpc/boot/Makefile
-+++ b/arch/powerpc/boot/Makefile
-@@ -38,10 +38,10 @@ BOOTCFLAGS += -I$(obj) -I$(srctree)/$(ob
- DTS_FLAGS     ?= -p 1024
- $(obj)/4xx.o: BOOTCFLAGS += -mcpu=405
--$(obj)/ebony.o: BOOTCFLAGS += -mcpu=405
-+$(obj)/ebony.o: BOOTCFLAGS += -mcpu=440
- $(obj)/cuboot-hotfoot.o: BOOTCFLAGS += -mcpu=405
--$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=405
--$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=405
-+$(obj)/cuboot-taishan.o: BOOTCFLAGS += -mcpu=440
-+$(obj)/cuboot-katmai.o: BOOTCFLAGS += -mcpu=440
- $(obj)/cuboot-acadia.o: BOOTCFLAGS += -mcpu=405
- $(obj)/treeboot-walnut.o: BOOTCFLAGS += -mcpu=405
- $(obj)/virtex405-head.o: BOOTAFLAGS += -mcpu=405
diff --git a/target/linux/generic-2.6/patches-2.6.34/997-lzo_decompressor_fix.patch b/target/linux/generic-2.6/patches-2.6.34/997-lzo_decompressor_fix.patch
deleted file mode 100644 (file)
index 4509865..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/usr/Kconfig
-+++ b/usr/Kconfig
-@@ -75,7 +75,7 @@ config RD_LZMA
- config RD_LZO
-       bool "Support initial ramdisks compressed using LZO" if EMBEDDED
-       default !EMBEDDED
--      depends on BLK_DEV_INITRD
-+      depends on BLK_DEV_INITRD && HAVE_KERNEL_LZO
-       select DECOMPRESS_LZO
-       help
-         Support loading of a LZO encoded initial ramdisk or cpio buffer
diff --git a/target/linux/generic-2.6/patches-2.6.34/998-openwrt_lzma_options.patch b/target/linux/generic-2.6/patches-2.6.34/998-openwrt_lzma_options.patch
deleted file mode 100644 (file)
index 0ac880c..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
---- a/scripts/Makefile.lib
-+++ b/scripts/Makefile.lib
-@@ -238,7 +238,7 @@ cmd_bzip2 = (cat $(filter-out FORCE,$^) 
- quiet_cmd_lzma = LZMA    $@
- cmd_lzma = (cat $(filter-out FORCE,$^) | \
--      lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-+      lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
-       (rm -f $@ ; false)
- quiet_cmd_lzo = LZO    $@
---- a/scripts/gen_initramfs_list.sh
-+++ b/scripts/gen_initramfs_list.sh
-@@ -225,7 +225,7 @@ cpio_list=
- output="/dev/stdout"
- output_file=""
- is_cpio_compressed=
--compr="gzip -9 -f"
-+compr="gzip -9 -f -"
- arg="$1"
- case "$arg" in
-@@ -239,9 +239,9 @@ case "$arg" in
-               output_file="$1"
-               cpio_list="$(mktemp ${TMPDIR:-/tmp}/cpiolist.XXXXXX)"
-               output=${cpio_list}
--              echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f"
--              echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f"
--              echo "$output_file" | grep -q "\.lzma$" && compr="lzma -9 -f"
-+              echo "$output_file" | grep -q "\.gz$" && compr="gzip -9 -f -"
-+              echo "$output_file" | grep -q "\.bz2$" && compr="bzip2 -9 -f -"
-+              echo "$output_file" | grep -q "\.lzma$" && compr="lzma e -d20 -lc1 -lp2 -pb2 -eos -si -so"
-               echo "$output_file" | grep -q "\.cpio$" && compr="cat"
-               shift
-               ;;
-@@ -292,7 +292,7 @@ if [ ! -z ${output_file} ]; then
-       if [ "${is_cpio_compressed}" = "compressed" ]; then
-               cat ${cpio_tfile} > ${output_file}
-       else
--              (cat ${cpio_tfile} | ${compr}  - > ${output_file}) \
-+              (cat ${cpio_tfile} | ${compr} > ${output_file}) \
-               || (rm -f ${output_file} ; false)
-       fi
-       [ -z ${cpio_file} ] && rm ${cpio_tfile}
---- a/lib/decompress.c
-+++ b/lib/decompress.c
-@@ -36,6 +36,7 @@ static const struct compress_format {
-       { {037, 0236}, "gzip", gunzip },
-       { {0x42, 0x5a}, "bzip2", bunzip2 },
-       { {0x5d, 0x00}, "lzma", unlzma },
-+      { {0x6d, 0x00}, "lzma-openwrt", unlzma },
-       { {0x89, 0x4c}, "lzo", unlzo },
-       { {0, 0}, NULL, NULL }
- };
diff --git a/target/linux/generic-2.6/patches-2.6.34/999-use_preinit_as_init.patch b/target/linux/generic-2.6/patches-2.6.34/999-use_preinit_as_init.patch
deleted file mode 100644 (file)
index c1f8ef0..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
---- a/init/main.c
-+++ b/init/main.c
-@@ -831,10 +831,7 @@ static noinline int init_post(void)
-               printk(KERN_WARNING "Failed to execute %s.  Attempting "
-                                       "defaults...\n", execute_command);
-       }
--      run_init_process("/sbin/init");
--      run_init_process("/etc/init");
--      run_init_process("/bin/init");
--      run_init_process("/bin/sh");
-+      run_init_process("/etc/preinit");
-       panic("No init found.  Try passing init= option to kernel.");
- }
diff --git a/target/linux/rb532/config-2.6.33 b/target/linux/rb532/config-2.6.33
deleted file mode 100644 (file)
index 731912a..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ATA=y
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-CONFIG_BLK_DEV_SD=y
-CONFIG_BOOT_RAW=y
-CONFIG_BRIDGE=m
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-# CONFIG_CPU_BIG_ENDIAN is not set
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPS32_R1=y
-# CONFIG_CPU_MIPS32_R2 is not set
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR1=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-# CONFIG_DEBUG_FS is not set
-CONFIG_DECOMPRESS_LZMA=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-CONFIG_EXT2_FS=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIOLIB=y
-CONFIG_GPIO_SYSFS=y
-# CONFIG_HAMRADIO is not set
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_HW_HAS_PCI=y
-CONFIG_HW_RANDOM=y
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_IRQ_CPU=y
-CONFIG_KEXEC=y
-CONFIG_KORINA=y
-# CONFIG_LEDS_GPIO is not set
-CONFIG_LEDS_MIKROTIK_RB532=y
-CONFIG_LLC=m
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-CONFIG_MIKROTIK_RB532=y
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=4
-# CONFIG_MIPS_MACHINE is not set
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MTD_BLOCK2MTD=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_INTELEXT is not set
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_PLATFORM=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_ROOTFS_ROOT_DEV is not set
-# CONFIG_MTD_ROOTFS_SPLIT is not set
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_NF_CONNTRACK=y
-CONFIG_NF_CT_ACCT=y
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PATA_RB532=y
-CONFIG_PCI=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCSPKR_PLATFORM=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POWERTV is not set
-CONFIG_RC32434_WDT=y
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-CONFIG_SCSI=y
-# CONFIG_SCSI_LOWLEVEL is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_PROC_FS is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-CONFIG_STP=m
-# CONFIG_SWAP is not set
-CONFIG_SWAP_IO_SPACE=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
-# CONFIG_TC35815 is not set
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_VIA_RHINE=y
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VLAN_8021Q=m
-CONFIG_YAFFS_9BYTE_TAGS=y
-# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
-CONFIG_YAFFS_AUTO_YAFFS2=y
-# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
-# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
-CONFIG_YAFFS_FS=y
-CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
-CONFIG_YAFFS_YAFFS1=y
-CONFIG_YAFFS_YAFFS2=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/rb532/config-2.6.34 b/target/linux/rb532/config-2.6.34
deleted file mode 100644 (file)
index c3b498c..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-CONFIG_32BIT=y
-# CONFIG_64BIT is not set
-# CONFIG_ALCHEMY_GPIO_INDIRECT is not set
-# CONFIG_AR7 is not set
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-# CONFIG_ARCH_PHYS_ADDR_T_64BIT is not set
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-CONFIG_ARCH_REQUIRE_GPIOLIB=y
-# CONFIG_ARCH_SUPPORTS_MSI is not set
-CONFIG_ARCH_SUPPORTS_OPROFILE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-CONFIG_ATA=y
-# CONFIG_BCM47XX is not set
-# CONFIG_BCM63XX is not set
-CONFIG_BITREVERSE=y
-CONFIG_BLK_DEV_SD=y
-CONFIG_BOOT_RAW=y
-CONFIG_BRIDGE=m
-CONFIG_BRIDGE_IGMP_SNOOPING=y
-# CONFIG_BSD_PROCESS_ACCT is not set
-# CONFIG_CAVIUM_OCTEON_REFERENCE_BOARD is not set
-# CONFIG_CAVIUM_OCTEON_SIMULATOR is not set
-CONFIG_CC_OPTIMIZE_FOR_SIZE=y
-CONFIG_CEVT_R4K=y
-CONFIG_CEVT_R4K_LIB=y
-CONFIG_CMDLINE_BOOL=y
-# CONFIG_CMDLINE_OVERRIDE is not set
-# CONFIG_CPU_BIG_ENDIAN is not set
-# CONFIG_CPU_CAVIUM_OCTEON is not set
-CONFIG_CPU_HAS_PREFETCH=y
-CONFIG_CPU_HAS_SYNC=y
-CONFIG_CPU_LITTLE_ENDIAN=y
-# CONFIG_CPU_LOONGSON2E is not set
-# CONFIG_CPU_LOONGSON2F is not set
-CONFIG_CPU_MIPS32=y
-CONFIG_CPU_MIPS32_R1=y
-# CONFIG_CPU_MIPS32_R2 is not set
-# CONFIG_CPU_MIPS64_R1 is not set
-# CONFIG_CPU_MIPS64_R2 is not set
-CONFIG_CPU_MIPSR1=y
-# CONFIG_CPU_NEVADA is not set
-# CONFIG_CPU_R10000 is not set
-# CONFIG_CPU_R3000 is not set
-# CONFIG_CPU_R4300 is not set
-# CONFIG_CPU_R4X00 is not set
-# CONFIG_CPU_R5000 is not set
-# CONFIG_CPU_R5432 is not set
-# CONFIG_CPU_R5500 is not set
-# CONFIG_CPU_R6000 is not set
-# CONFIG_CPU_R8000 is not set
-# CONFIG_CPU_RM7000 is not set
-# CONFIG_CPU_RM9000 is not set
-# CONFIG_CPU_SB1 is not set
-CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
-CONFIG_CPU_SUPPORTS_HIGHMEM=y
-# CONFIG_CPU_TX39XX is not set
-# CONFIG_CPU_TX49XX is not set
-# CONFIG_CPU_VR41XX is not set
-# CONFIG_CRYSTALHD is not set
-CONFIG_CSRC_R4K=y
-CONFIG_CSRC_R4K_LIB=y
-# CONFIG_DEBUG_FS is not set
-CONFIG_DECOMPRESS_LZMA=y
-# CONFIG_DEFAULT_SECURITY_SELINUX is not set
-# CONFIG_DEFAULT_SECURITY_SMACK is not set
-# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
-CONFIG_DEVPORT=y
-# CONFIG_DM9000 is not set
-CONFIG_DMA_NEED_PCI_MAP_STATE=y
-CONFIG_DMA_NONCOHERENT=y
-# CONFIG_DT3155 is not set
-# CONFIG_ENABLE_WARN_DEPRECATED is not set
-CONFIG_EXT2_FS=y
-# CONFIG_FSNOTIFY is not set
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_GENERIC_FIND_LAST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_GENERIC_GPIO=y
-CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
-CONFIG_GPIOLIB=y
-# CONFIG_GPIO_IT8761E is not set
-# CONFIG_GPIO_SCH is not set
-CONFIG_GPIO_SYSFS=y
-# CONFIG_HAMRADIO is not set
-CONFIG_HARDWARE_WATCHPOINTS=y
-CONFIG_HAS_DMA=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAVE_ARCH_KGDB=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_HAVE_IDE=y
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_HIGH_RES_TIMERS is not set
-CONFIG_HW_HAS_PCI=y
-CONFIG_HW_RANDOM=y
-CONFIG_HZ=250
-# CONFIG_HZ_100 is not set
-CONFIG_HZ_250=y
-CONFIG_IKCONFIG=y
-CONFIG_IKCONFIG_PROC=y
-CONFIG_IMAGE_CMDLINE_HACK=y
-CONFIG_INITRAMFS_SOURCE=""
-# CONFIG_INLINE_READ_LOCK is not set
-# CONFIG_INLINE_READ_LOCK_BH is not set
-# CONFIG_INLINE_READ_LOCK_IRQ is not set
-# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_READ_TRYLOCK is not set
-CONFIG_INLINE_READ_UNLOCK=y
-# CONFIG_INLINE_READ_UNLOCK_BH is not set
-CONFIG_INLINE_READ_UNLOCK_IRQ=y
-# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_SPIN_LOCK is not set
-# CONFIG_INLINE_SPIN_LOCK_BH is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
-# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_SPIN_TRYLOCK is not set
-# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK=y
-# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
-CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
-# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
-# CONFIG_INLINE_WRITE_LOCK is not set
-# CONFIG_INLINE_WRITE_LOCK_BH is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
-# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
-# CONFIG_INLINE_WRITE_TRYLOCK is not set
-CONFIG_INLINE_WRITE_UNLOCK=y
-# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
-CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
-# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
-CONFIG_IRQ_CPU=y
-CONFIG_KEXEC=y
-CONFIG_KORINA=y
-# CONFIG_KSZ884X_PCI is not set
-# CONFIG_LEDS_GPIO is not set
-CONFIG_LEDS_MIKROTIK_RB532=y
-CONFIG_LLC=m
-# CONFIG_LOGFS is not set
-CONFIG_LOONGSON_UART_BASE=y
-# CONFIG_LPC_SCH is not set
-# CONFIG_MACH_ALCHEMY is not set
-# CONFIG_MACH_DECSTATION is not set
-# CONFIG_MACH_JAZZ is not set
-# CONFIG_MACH_LOONGSON is not set
-# CONFIG_MACH_TX39XX is not set
-# CONFIG_MACH_TX49XX is not set
-# CONFIG_MACH_VR41XX is not set
-# CONFIG_MAX63XX_WATCHDOG is not set
-# CONFIG_MFD_TIMBERDALE is not set
-CONFIG_MIKROTIK_RB532=y
-CONFIG_MIPS=y
-# CONFIG_MIPS_COBALT is not set
-CONFIG_MIPS_L1_CACHE_SHIFT=4
-# CONFIG_MIPS_MACHINE is not set
-# CONFIG_MIPS_MALTA is not set
-CONFIG_MIPS_MT_DISABLED=y
-# CONFIG_MIPS_MT_SMP is not set
-# CONFIG_MIPS_MT_SMTC is not set
-# CONFIG_MIPS_SIM is not set
-CONFIG_MTD_BLOCK2MTD=y
-CONFIG_MTD_CFI_ADV_OPTIONS=y
-# CONFIG_MTD_CFI_AMDSTD is not set
-CONFIG_MTD_CFI_GEOMETRY=y
-# CONFIG_MTD_CFI_INTELEXT is not set
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_NAND=y
-CONFIG_MTD_NAND_PLATFORM=y
-CONFIG_MTD_NAND_VERIFY_WRITE=y
-CONFIG_MTD_PHYSMAP=y
-# CONFIG_MTD_ROOTFS_ROOT_DEV is not set
-# CONFIG_MTD_ROOTFS_SPLIT is not set
-# CONFIG_MUTEX_SPIN_ON_OWNER is not set
-CONFIG_NF_CONNTRACK=y
-CONFIG_NF_CT_ACCT=y
-# CONFIG_NO_IOPORT is not set
-# CONFIG_NXP_STB220 is not set
-# CONFIG_NXP_STB225 is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_PATA_RB532=y
-CONFIG_PCI_DISABLE_COMMON_QUIRKS=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCSPKR_PLATFORM=y
-# CONFIG_PMC_MSP is not set
-# CONFIG_PMC_YOSEMITE is not set
-# CONFIG_PNX8550_JBS is not set
-# CONFIG_PNX8550_STB810 is not set
-# CONFIG_POWERTV is not set
-CONFIG_RC32434_WDT=y
-CONFIG_SCHED_OMIT_FRAME_POINTER=y
-CONFIG_SCSI=y
-# CONFIG_SCSI_LOWLEVEL is not set
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_PROC_FS is not set
-# CONFIG_SERIAL_8250_EXTENDED is not set
-# CONFIG_SERIAL_TIMBERDALE is not set
-# CONFIG_SGI_IP22 is not set
-# CONFIG_SGI_IP27 is not set
-# CONFIG_SGI_IP28 is not set
-# CONFIG_SGI_IP32 is not set
-# CONFIG_SIBYTE_BIGSUR is not set
-# CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_CRHINE is not set
-# CONFIG_SIBYTE_CRHONE is not set
-# CONFIG_SIBYTE_LITTLESUR is not set
-# CONFIG_SIBYTE_RHONE is not set
-# CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_SWARM is not set
-# CONFIG_SLAB is not set
-CONFIG_SLUB=y
-CONFIG_STP=m
-# CONFIG_SWAP is not set
-CONFIG_SWAP_IO_SPACE=y
-CONFIG_SYS_HAS_CPU_MIPS32_R1=y
-CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
-CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
-CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
-# CONFIG_TC35815 is not set
-CONFIG_TRAD_SIGNALS=y
-# CONFIG_TREE_PREEMPT_RCU is not set
-CONFIG_VIA_RHINE=y
-CONFIG_VIA_RHINE_MMIO=y
-CONFIG_VLAN_8021Q=m
-CONFIG_YAFFS_9BYTE_TAGS=y
-# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
-CONFIG_YAFFS_AUTO_YAFFS2=y
-# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
-# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
-CONFIG_YAFFS_FS=y
-CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
-CONFIG_YAFFS_YAFFS1=y
-CONFIG_YAFFS_YAFFS2=y
-CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/rb532/patches-2.6.33/001-cmdline_hack.patch b/target/linux/rb532/patches-2.6.33/001-cmdline_hack.patch
deleted file mode 100644 (file)
index 82a324c..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/arch/mips/rb532/prom.c
-+++ b/arch/mips/rb532/prom.c
-@@ -67,6 +67,7 @@ static inline unsigned long tag2ul(char 
-       return simple_strtoul(num, 0, 10);
- }
-+extern char __image_cmdline[];
- void __init prom_setup_cmdline(void)
- {
-       static char cmd_line[CL_SIZE] __initdata;
-@@ -109,6 +110,9 @@ void __init prom_setup_cmdline(void)
-       }
-       *(cp++) = ' ';
-+      strcpy(cp,(__image_cmdline));
-+      cp += strlen(__image_cmdline);
-+
-       i = strlen(arcs_cmdline);
-       if (i > 0) {
-               *(cp++) = ' ';
diff --git a/target/linux/rb532/patches-2.6.33/002-rb532_nand_fixup.patch b/target/linux/rb532/patches-2.6.33/002-rb532_nand_fixup.patch
deleted file mode 100644 (file)
index 0ba9fef..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/arch/mips/rb532/devices.c
-+++ b/arch/mips/rb532/devices.c
-@@ -139,6 +139,19 @@ static struct platform_device cf_slot0 =
- };
- /* Resources and device for NAND */
-+
-+/*
-+ * We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader
-+ * will not be able to find the kernel that we load.  So set the oobinfo
-+ * when creating the partitions
-+ */
-+static struct nand_ecclayout rb532_nand_ecclayout = {
-+      .eccbytes       = 6,
-+      .eccpos         = { 8, 9, 10, 13, 14, 15 },
-+      .oobavail       = 9,
-+      .oobfree        = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
-+};
-+
- static int rb532_dev_ready(struct mtd_info *mtd)
- {
-       return gpio_get_value(GPIO_RDY);
-@@ -280,6 +293,16 @@ static void __init parse_mac_addr(char *
- /* NAND definitions */
- #define NAND_CHIP_DELAY       25
-+static int rb532_nand_fixup(struct mtd_info *mtd)
-+{
-+      struct nand_chip *chip = mtd->priv;
-+
-+      if (mtd->writesize == 512)
-+              chip->ecc.layout = &rb532_nand_ecclayout;
-+
-+      return 0;
-+}
-+
- static void __init rb532_nand_setup(void)
- {
-       switch (mips_machtype) {
-@@ -299,6 +322,8 @@ static void __init rb532_nand_setup(void
-       rb532_nand_data.chip.partitions = rb532_partition_info;
-       rb532_nand_data.chip.chip_delay = NAND_CHIP_DELAY;
-       rb532_nand_data.chip.options = NAND_NO_AUTOINCR;
-+      
-+      rb532_nand_data.chip.chip_fixup = &rb532_nand_fixup;
- }
diff --git a/target/linux/rb532/patches-2.6.34/001-cmdline_hack.patch b/target/linux/rb532/patches-2.6.34/001-cmdline_hack.patch
deleted file mode 100644 (file)
index 82a324c..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
---- a/arch/mips/rb532/prom.c
-+++ b/arch/mips/rb532/prom.c
-@@ -67,6 +67,7 @@ static inline unsigned long tag2ul(char 
-       return simple_strtoul(num, 0, 10);
- }
-+extern char __image_cmdline[];
- void __init prom_setup_cmdline(void)
- {
-       static char cmd_line[CL_SIZE] __initdata;
-@@ -109,6 +110,9 @@ void __init prom_setup_cmdline(void)
-       }
-       *(cp++) = ' ';
-+      strcpy(cp,(__image_cmdline));
-+      cp += strlen(__image_cmdline);
-+
-       i = strlen(arcs_cmdline);
-       if (i > 0) {
-               *(cp++) = ' ';
diff --git a/target/linux/rb532/patches-2.6.34/002-rb532_nand_fixup.patch b/target/linux/rb532/patches-2.6.34/002-rb532_nand_fixup.patch
deleted file mode 100644 (file)
index 0ba9fef..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
---- a/arch/mips/rb532/devices.c
-+++ b/arch/mips/rb532/devices.c
-@@ -139,6 +139,19 @@ static struct platform_device cf_slot0 =
- };
- /* Resources and device for NAND */
-+
-+/*
-+ * We need to use the OLD Yaffs-1 OOB layout, otherwise the RB bootloader
-+ * will not be able to find the kernel that we load.  So set the oobinfo
-+ * when creating the partitions
-+ */
-+static struct nand_ecclayout rb532_nand_ecclayout = {
-+      .eccbytes       = 6,
-+      .eccpos         = { 8, 9, 10, 13, 14, 15 },
-+      .oobavail       = 9,
-+      .oobfree        = { { 0, 4 }, { 6, 2 }, { 11, 2 }, { 4, 1 } }
-+};
-+
- static int rb532_dev_ready(struct mtd_info *mtd)
- {
-       return gpio_get_value(GPIO_RDY);
-@@ -280,6 +293,16 @@ static void __init parse_mac_addr(char *
- /* NAND definitions */
- #define NAND_CHIP_DELAY       25
-+static int rb532_nand_fixup(struct mtd_info *mtd)
-+{
-+      struct nand_chip *chip = mtd->priv;
-+
-+      if (mtd->writesize == 512)
-+              chip->ecc.layout = &rb532_nand_ecclayout;
-+
-+      return 0;
-+}
-+
- static void __init rb532_nand_setup(void)
- {
-       switch (mips_machtype) {
-@@ -299,6 +322,8 @@ static void __init rb532_nand_setup(void
-       rb532_nand_data.chip.partitions = rb532_partition_info;
-       rb532_nand_data.chip.chip_delay = NAND_CHIP_DELAY;
-       rb532_nand_data.chip.options = NAND_NO_AUTOINCR;
-+      
-+      rb532_nand_data.chip.chip_fixup = &rb532_nand_fixup;
- }
diff --git a/target/linux/uml/patches-2.6.33/001-gcc4_unit_at_a_time_i386_fix.patch b/target/linux/uml/patches-2.6.33/001-gcc4_unit_at_a_time_i386_fix.patch
deleted file mode 100644 (file)
index 442c0ec..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/um/Makefile-i386
-+++ b/arch/um/Makefile-i386
-@@ -35,7 +35,7 @@ cflags-y += -ffreestanding
- # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
- # a lot more stack due to the lack of sharing of stacklots.  Also, gcc
- # 4.3.0 needs -funit-at-a-time for extern inline functions.
--KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
-+KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0403 ] ; then \
-                       echo $(call cc-option,-fno-unit-at-a-time); \
-                       else echo $(call cc-option,-funit-at-a-time); fi ;)
diff --git a/target/linux/uml/patches-2.6.33/002-gcc4_unfortify_source.patch b/target/linux/uml/patches-2.6.33/002-gcc4_unfortify_source.patch
deleted file mode 100644 (file)
index 2be33d0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/arch/um/Makefile-i386
-+++ b/arch/um/Makefile-i386
-@@ -39,4 +39,8 @@ KBUILD_CFLAGS += $(shell if [ $(call cc-
-                       echo $(call cc-option,-fno-unit-at-a-time); \
-                       else echo $(call cc-option,-funit-at-a-time); fi ;)
-+# disable compile-time buffer checks, enabled by default on Ubuntu 8.10 
-+# and later
-+KBUILD_CFLAGS += $(call cc-option,-U_FORTIFY_SOURCE)
-+
- KBUILD_CFLAGS += $(cflags-y)
---- a/arch/um/Makefile-x86_64
-+++ b/arch/um/Makefile-x86_64
-@@ -24,3 +24,7 @@ LINK-y += -m64
- # Do unit-at-a-time unconditionally on x86_64, following the host
- KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
-+
-+# disable compile-time buffer checks, enabled by default on Ubuntu 8.10 
-+# and later
-+KBUILD_CFLAGS += $(call cc-option,-U_FORTIFY_SOURCE)
diff --git a/target/linux/uml/patches-2.6.33/003-fix_text_section.patch b/target/linux/uml/patches-2.6.33/003-fix_text_section.patch
deleted file mode 100644 (file)
index f973cfd..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-um: remove PAGE_SIZE alignment in linker script causing kernel segfault.
-
-The linker script cleanup that I did in commit 
-5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 accidentally introduced an 
-ALIGN(PAGE_SIZE) when converting to use INIT_TEXT_SECTION; Richard 
-Weinberger reported that this causes the kernel to segfault with 
-CONFIG_STATIC_LINK=y.
-
-I'm not certain why this extra alignment is a problem, but it seems likely 
-it is because previously
-
-__init_begin = _stext = _text = _sinittext 
-
-and with the extra ALIGN(PAGE_SIZE), _sinittext becomes different from the 
-rest.  So there is likely a bug here where something is assuming that 
-_sinittext is the same as one of those other symbols.  But reverting the 
-accidental change fixes the regression, so it seems worth committing that 
-now.
-
-Signed-off-by: Tim Abbott <tabbott@ksplice.com>
-Reported-by: richard -rw- weinberger <richard.weinberger@gmail.com>
-Cc: Jeff Dike <jdike@addtoit.com>
-Cc: user-mode-linux-devel@lists.sourceforge.net
----
- arch/um/kernel/uml.lds.S |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
-index e7a6cca..664f942 100644
---- a/arch/um/kernel/uml.lds.S
-+++ b/arch/um/kernel/uml.lds.S
-@@ -22,7 +22,7 @@ SECTIONS
-   _text = .;
-   _stext = .;
-   __init_begin = .;
--  INIT_TEXT_SECTION(PAGE_SIZE)
-+  INIT_TEXT_SECTION(0)
-   . = ALIGN(PAGE_SIZE);
-   .text      :
diff --git a/target/linux/uml/patches-2.6.33/901-lib_zlib_deflate_visible.patch b/target/linux/uml/patches-2.6.33/901-lib_zlib_deflate_visible.patch
deleted file mode 100644 (file)
index b71a673..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-make ZLIB_DEFLATE visible, so that we can choose whether we want it built-in
-or as a module
-
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -92,7 +92,7 @@ config ZLIB_INFLATE
-       tristate
- config ZLIB_DEFLATE
--      tristate
-+      tristate "Zlib compression"
- config LZO_COMPRESS
-       tristate
diff --git a/target/linux/uml/patches-2.6.34/001-gcc4_unit_at_a_time_i386_fix.patch b/target/linux/uml/patches-2.6.34/001-gcc4_unit_at_a_time_i386_fix.patch
deleted file mode 100644 (file)
index 442c0ec..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/um/Makefile-i386
-+++ b/arch/um/Makefile-i386
-@@ -35,7 +35,7 @@ cflags-y += -ffreestanding
- # Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
- # a lot more stack due to the lack of sharing of stacklots.  Also, gcc
- # 4.3.0 needs -funit-at-a-time for extern inline functions.
--KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0400 ] ; then \
-+KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0403 ] ; then \
-                       echo $(call cc-option,-fno-unit-at-a-time); \
-                       else echo $(call cc-option,-funit-at-a-time); fi ;)
diff --git a/target/linux/uml/patches-2.6.34/002-gcc4_unfortify_source.patch b/target/linux/uml/patches-2.6.34/002-gcc4_unfortify_source.patch
deleted file mode 100644 (file)
index 2be33d0..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
---- a/arch/um/Makefile-i386
-+++ b/arch/um/Makefile-i386
-@@ -39,4 +39,8 @@ KBUILD_CFLAGS += $(shell if [ $(call cc-
-                       echo $(call cc-option,-fno-unit-at-a-time); \
-                       else echo $(call cc-option,-funit-at-a-time); fi ;)
-+# disable compile-time buffer checks, enabled by default on Ubuntu 8.10 
-+# and later
-+KBUILD_CFLAGS += $(call cc-option,-U_FORTIFY_SOURCE)
-+
- KBUILD_CFLAGS += $(cflags-y)
---- a/arch/um/Makefile-x86_64
-+++ b/arch/um/Makefile-x86_64
-@@ -24,3 +24,7 @@ LINK-y += -m64
- # Do unit-at-a-time unconditionally on x86_64, following the host
- KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)
-+
-+# disable compile-time buffer checks, enabled by default on Ubuntu 8.10 
-+# and later
-+KBUILD_CFLAGS += $(call cc-option,-U_FORTIFY_SOURCE)
diff --git a/target/linux/uml/patches-2.6.34/003-fix_text_section.patch b/target/linux/uml/patches-2.6.34/003-fix_text_section.patch
deleted file mode 100644 (file)
index f973cfd..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-um: remove PAGE_SIZE alignment in linker script causing kernel segfault.
-
-The linker script cleanup that I did in commit 
-5d150a97f9391f5bcd7ba0d59d7a11c3de3cea80 accidentally introduced an 
-ALIGN(PAGE_SIZE) when converting to use INIT_TEXT_SECTION; Richard 
-Weinberger reported that this causes the kernel to segfault with 
-CONFIG_STATIC_LINK=y.
-
-I'm not certain why this extra alignment is a problem, but it seems likely 
-it is because previously
-
-__init_begin = _stext = _text = _sinittext 
-
-and with the extra ALIGN(PAGE_SIZE), _sinittext becomes different from the 
-rest.  So there is likely a bug here where something is assuming that 
-_sinittext is the same as one of those other symbols.  But reverting the 
-accidental change fixes the regression, so it seems worth committing that 
-now.
-
-Signed-off-by: Tim Abbott <tabbott@ksplice.com>
-Reported-by: richard -rw- weinberger <richard.weinberger@gmail.com>
-Cc: Jeff Dike <jdike@addtoit.com>
-Cc: user-mode-linux-devel@lists.sourceforge.net
----
- arch/um/kernel/uml.lds.S |    2 +-
- 1 files changed, 1 insertions(+), 1 deletions(-)
-
-diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S
-index e7a6cca..664f942 100644
---- a/arch/um/kernel/uml.lds.S
-+++ b/arch/um/kernel/uml.lds.S
-@@ -22,7 +22,7 @@ SECTIONS
-   _text = .;
-   _stext = .;
-   __init_begin = .;
--  INIT_TEXT_SECTION(PAGE_SIZE)
-+  INIT_TEXT_SECTION(0)
-   . = ALIGN(PAGE_SIZE);
-   .text      :
diff --git a/target/linux/uml/patches-2.6.34/901-lib_zlib_deflate_visible.patch b/target/linux/uml/patches-2.6.34/901-lib_zlib_deflate_visible.patch
deleted file mode 100644 (file)
index b71a673..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-make ZLIB_DEFLATE visible, so that we can choose whether we want it built-in
-or as a module
-
---- a/lib/Kconfig
-+++ b/lib/Kconfig
-@@ -92,7 +92,7 @@ config ZLIB_INFLATE
-       tristate
- config ZLIB_DEFLATE
--      tristate
-+      tristate "Zlib compression"
- config LZO_COMPRESS
-       tristate